@local-logic/sdks-app 1.24.42 → 1.24.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{Attribution-ClwsOk3e.js → Attribution-D012fWNs.js} +2 -2
- package/dist/assets/{Attribution-ClwsOk3e.js.map → Attribution-D012fWNs.js.map} +1 -1
- package/dist/assets/{Attribution-legacy-CtNhDTV1.js → Attribution-legacy-DSXG-3Q0.js} +2 -2
- package/dist/assets/{Attribution-legacy-CtNhDTV1.js.map → Attribution-legacy-DSXG-3Q0.js.map} +1 -1
- package/dist/assets/Cluster-BHQcO6iC-_jL_0N39.js +2 -0
- package/dist/assets/{Cluster-BHQcO6iC-BLUKMpub.js.map → Cluster-BHQcO6iC-_jL_0N39.js.map} +1 -1
- package/dist/assets/{Cluster-BHQcO6iC-legacy-CP0b8zks.js → Cluster-BHQcO6iC-legacy-3UMx26D5.js} +2 -2
- package/dist/assets/{Cluster-BHQcO6iC-legacy-CP0b8zks.js.map → Cluster-BHQcO6iC-legacy-3UMx26D5.js.map} +1 -1
- package/dist/assets/{Google-DScXSvYv-6gBja-_g.js → Google-BFAJ84CT-Dh97X1sB.js} +2 -2
- package/dist/assets/{Google-DScXSvYv-6gBja-_g.js.map → Google-BFAJ84CT-Dh97X1sB.js.map} +1 -1
- package/dist/assets/{Google-DScXSvYv-legacy-Bud-7LK1.js → Google-BFAJ84CT-legacy-D0OGURqq.js} +2 -2
- package/dist/assets/{Google-DScXSvYv-legacy-Bud-7LK1.js.map → Google-BFAJ84CT-legacy-D0OGURqq.js.map} +1 -1
- package/dist/assets/{Google-qvGtRAuh-D3JlAgXq.js → Google-BS41ufih-Cc3f5UsV.js} +2 -2
- package/dist/assets/{Google-qvGtRAuh-D3JlAgXq.js.map → Google-BS41ufih-Cc3f5UsV.js.map} +1 -1
- package/dist/assets/{Google-qvGtRAuh-legacy-CMkNx5pn.js → Google-BS41ufih-legacy-BnojXQoy.js} +2 -2
- package/dist/assets/{Google-qvGtRAuh-legacy-CMkNx5pn.js.map → Google-BS41ufih-legacy-BnojXQoy.js.map} +1 -1
- package/dist/assets/Google-CH7a2yx--CBaNUH_8.js +2 -0
- package/dist/assets/{Google-CH7a2yx--B615NdD8.js.map → Google-CH7a2yx--CBaNUH_8.js.map} +1 -1
- package/dist/assets/{Google-CH7a2yx--legacy-BUUPS1d_.js → Google-CH7a2yx--legacy-C_ip84Oz.js} +2 -2
- package/dist/assets/{Google-CH7a2yx--legacy-BUUPS1d_.js.map → Google-CH7a2yx--legacy-C_ip84Oz.js.map} +1 -1
- package/dist/assets/Google-CXGCn-oJ-i9rxhVJh.js +2 -0
- package/dist/assets/{Google-CXGCn-oJ-AkqBPqrT.js.map → Google-CXGCn-oJ-i9rxhVJh.js.map} +1 -1
- package/dist/assets/{Google-CXGCn-oJ-legacy-wLFeZbs8.js → Google-CXGCn-oJ-legacy-OuENT3oi.js} +2 -2
- package/dist/assets/{Google-CXGCn-oJ-legacy-wLFeZbs8.js.map → Google-CXGCn-oJ-legacy-OuENT3oi.js.map} +1 -1
- package/dist/assets/Google-DbOLrYJn-bogicaOo.js +2 -0
- package/dist/assets/Google-DbOLrYJn-bogicaOo.js.map +1 -0
- package/dist/assets/Google-DbOLrYJn-legacy-B95opCm9.js +2 -0
- package/dist/assets/Google-DbOLrYJn-legacy-B95opCm9.js.map +1 -0
- package/dist/assets/{GridGraph-CA6dQSnE.js → GridGraph-_rWMkwNI.js} +2 -2
- package/dist/assets/{GridGraph-CA6dQSnE.js.map → GridGraph-_rWMkwNI.js.map} +1 -1
- package/dist/assets/{GridGraph-legacy-C-SnA-yN.js → GridGraph-legacy-CsgF_9Vx.js} +2 -2
- package/dist/assets/{GridGraph-legacy-C-SnA-yN.js.map → GridGraph-legacy-CsgF_9Vx.js.map} +1 -1
- package/dist/assets/{HouseLine.es-MMviG6cm.js → HouseLine.es-UbY1cmCw.js} +2 -2
- package/dist/assets/{HouseLine.es-MMviG6cm.js.map → HouseLine.es-UbY1cmCw.js.map} +1 -1
- package/dist/assets/{HouseLine.es-legacy-Cif7XvRo.js → HouseLine.es-legacy-rIusAPcN.js} +2 -2
- package/dist/assets/{HouseLine.es-legacy-Cif7XvRo.js.map → HouseLine.es-legacy-rIusAPcN.js.map} +1 -1
- package/dist/assets/{IconBase.es-sTzPkmtv.js → IconBase.es-C5evOQSf.js} +1 -1
- package/dist/assets/{IconBase.es-sTzPkmtv.js.map → IconBase.es-C5evOQSf.js.map} +1 -1
- package/dist/assets/{IconBase.es-legacy-CLUwC2Iu.js → IconBase.es-legacy-jtD2YQt-.js} +1 -1
- package/dist/assets/{IconBase.es-legacy-CLUwC2Iu.js.map → IconBase.es-legacy-jtD2YQt-.js.map} +1 -1
- package/dist/assets/{LeadCapture-DYBfiSUq.js → LeadCapture-IqeCbA_u.js} +2 -2
- package/dist/assets/{LeadCapture-DYBfiSUq.js.map → LeadCapture-IqeCbA_u.js.map} +1 -1
- package/dist/assets/{LeadCapture-legacy-B2kUL7l2.js → LeadCapture-legacy-D_miey0j.js} +2 -2
- package/dist/assets/{LeadCapture-legacy-B2kUL7l2.js.map → LeadCapture-legacy-D_miey0j.js.map} +1 -1
- package/dist/assets/{LocalContent-CdwC5dim.js → LocalContent-DL6Y67Ne.js} +2 -2
- package/dist/assets/{LocalContent-CdwC5dim.js.map → LocalContent-DL6Y67Ne.js.map} +1 -1
- package/dist/assets/{LocalContent-legacy-is3KMNbp.js → LocalContent-legacy-BBB-ST51.js} +2 -2
- package/dist/assets/{LocalContent-legacy-is3KMNbp.js.map → LocalContent-legacy-BBB-ST51.js.map} +1 -1
- package/dist/assets/{LocalDemographics-CfkSaIaw.js → LocalDemographics-DcirUh9h.js} +2 -2
- package/dist/assets/{LocalDemographics-CfkSaIaw.js.map → LocalDemographics-DcirUh9h.js.map} +1 -1
- package/dist/assets/{LocalDemographics-legacy-jYYfhemY.js → LocalDemographics-legacy-rmGYdILu.js} +2 -2
- package/dist/assets/{LocalDemographics-legacy-jYYfhemY.js.map → LocalDemographics-legacy-rmGYdILu.js.map} +1 -1
- package/dist/assets/{Mapbox-B7oionsm-CxTuYnPt.js → Mapbox-CpLnA607-CKDrFvU5.js} +2 -2
- package/dist/assets/{Mapbox-B7oionsm-CxTuYnPt.js.map → Mapbox-CpLnA607-CKDrFvU5.js.map} +1 -1
- package/dist/assets/{Mapbox-B7oionsm-legacy-BRIsIA0a.js → Mapbox-CpLnA607-legacy-Bx1JnBMX.js} +2 -2
- package/dist/assets/{Mapbox-B7oionsm-legacy-BRIsIA0a.js.map → Mapbox-CpLnA607-legacy-Bx1JnBMX.js.map} +1 -1
- package/dist/assets/{Mapbox-DDJ1gHRb-BBMjbLph.js → Mapbox-DDJ1gHRb-BrLhMxW4.js} +2 -2
- package/dist/assets/{Mapbox-DDJ1gHRb-BBMjbLph.js.map → Mapbox-DDJ1gHRb-BrLhMxW4.js.map} +1 -1
- package/dist/assets/{Mapbox-DDJ1gHRb-legacy-OengExoB.js → Mapbox-DDJ1gHRb-legacy-DtASaFMy.js} +2 -2
- package/dist/assets/{Mapbox-DDJ1gHRb-legacy-OengExoB.js.map → Mapbox-DDJ1gHRb-legacy-DtASaFMy.js.map} +1 -1
- package/dist/assets/Mapbox-DiD9etYJ-BMtTiGO7.js +2 -0
- package/dist/assets/Mapbox-DiD9etYJ-BMtTiGO7.js.map +1 -0
- package/dist/assets/Mapbox-DiD9etYJ-legacy-WIywO1-w.js +2 -0
- package/dist/assets/Mapbox-DiD9etYJ-legacy-WIywO1-w.js.map +1 -0
- package/dist/assets/{Mapbox-DtZmt1D_-Bx6ckAkh.js → Mapbox-DtZmt1D_-Dq1UD7au.js} +2 -2
- package/dist/assets/{Mapbox-DtZmt1D_-Bx6ckAkh.js.map → Mapbox-DtZmt1D_-Dq1UD7au.js.map} +1 -1
- package/dist/assets/{Mapbox-DtZmt1D_-legacy-CjIWGIob.js → Mapbox-DtZmt1D_-legacy-CXP5-C49.js} +2 -2
- package/dist/assets/{Mapbox-DtZmt1D_-legacy-CjIWGIob.js.map → Mapbox-DtZmt1D_-legacy-CXP5-C49.js.map} +1 -1
- package/dist/assets/{Mapbox-vp91lH9I-CFYg9mW4.js → Mapbox-u11C3LWs-DuakH8Ji.js} +2 -2
- package/dist/assets/{Mapbox-vp91lH9I-CFYg9mW4.js.map → Mapbox-u11C3LWs-DuakH8Ji.js.map} +1 -1
- package/dist/assets/{Mapbox-vp91lH9I-legacy-GApHnB0z.js → Mapbox-u11C3LWs-legacy-ChrUMjPl.js} +2 -2
- package/dist/assets/{Mapbox-vp91lH9I-legacy-GApHnB0z.js.map → Mapbox-u11C3LWs-legacy-ChrUMjPl.js.map} +1 -1
- package/dist/assets/Maptiler-C0oTROMk-Dz6Vkl6m.js +2 -0
- package/dist/assets/Maptiler-C0oTROMk-Dz6Vkl6m.js.map +1 -0
- package/dist/assets/Maptiler-C0oTROMk-legacy-B6L6FzM1.js +2 -0
- package/dist/assets/Maptiler-C0oTROMk-legacy-B6L6FzM1.js.map +1 -0
- package/dist/assets/{Maptiler-DJScKW8p-_Xood8h4.js → Maptiler-DJScKW8p-6YGAe8cE.js} +2 -2
- package/dist/assets/{Maptiler-DJScKW8p-_Xood8h4.js.map → Maptiler-DJScKW8p-6YGAe8cE.js.map} +1 -1
- package/dist/assets/{Maptiler-DJScKW8p-legacy-BLJl42xt.js → Maptiler-DJScKW8p-legacy-DEW3rPcZ.js} +2 -2
- package/dist/assets/{Maptiler-DJScKW8p-legacy-BLJl42xt.js.map → Maptiler-DJScKW8p-legacy-DEW3rPcZ.js.map} +1 -1
- package/dist/assets/{Maptiler-BQliPE7n-B8SIuLJ2.js → Maptiler-DdeFS4iM-Brs-80yb.js} +2 -2
- package/dist/assets/{Maptiler-BQliPE7n-B8SIuLJ2.js.map → Maptiler-DdeFS4iM-Brs-80yb.js.map} +1 -1
- package/dist/assets/{Maptiler-BQliPE7n-legacy-Dbs_BWos.js → Maptiler-DdeFS4iM-legacy-Ci9oroQC.js} +2 -2
- package/dist/assets/{Maptiler-BQliPE7n-legacy-Dbs_BWos.js.map → Maptiler-DdeFS4iM-legacy-Ci9oroQC.js.map} +1 -1
- package/dist/assets/{Maptiler-DqeshLom-DEBJexij.js → Maptiler-DqeshLom-B0jdRE1n.js} +2 -2
- package/dist/assets/{Maptiler-DqeshLom-DEBJexij.js.map → Maptiler-DqeshLom-B0jdRE1n.js.map} +1 -1
- package/dist/assets/{Maptiler-DqeshLom-legacy-DKFe6w2r.js → Maptiler-DqeshLom-legacy-CurUmtTs.js} +2 -2
- package/dist/assets/{Maptiler-DqeshLom-legacy-DKFe6w2r.js.map → Maptiler-DqeshLom-legacy-CurUmtTs.js.map} +1 -1
- package/dist/assets/{Maptiler-BtYYeJoo-A8qgmLuQ.js → Maptiler-YjlcPccn-BeECNaQc.js} +2 -2
- package/dist/assets/{Maptiler-BtYYeJoo-A8qgmLuQ.js.map → Maptiler-YjlcPccn-BeECNaQc.js.map} +1 -1
- package/dist/assets/{Maptiler-BtYYeJoo-legacy-6p_OzxFA.js → Maptiler-YjlcPccn-legacy-DUPM1fwa.js} +2 -2
- package/dist/assets/{Maptiler-BtYYeJoo-legacy-6p_OzxFA.js.map → Maptiler-YjlcPccn-legacy-DUPM1fwa.js.map} +1 -1
- package/dist/assets/{MarkerIcon-Bc3X9WQk-BiE4oWxC.js → MarkerIcon-Bc3X9WQk-BuSzLTIC.js} +2 -2
- package/dist/assets/{MarkerIcon-Bc3X9WQk-BiE4oWxC.js.map → MarkerIcon-Bc3X9WQk-BuSzLTIC.js.map} +1 -1
- package/dist/assets/{MarkerIcon-Bc3X9WQk-legacy-D006OcWh.js → MarkerIcon-Bc3X9WQk-legacy-0n6adFAI.js} +2 -2
- package/dist/assets/{MarkerIcon-Bc3X9WQk-legacy-D006OcWh.js.map → MarkerIcon-Bc3X9WQk-legacy-0n6adFAI.js.map} +1 -1
- package/dist/assets/{NeighborhoodCard-CjddOmMg.js → NeighborhoodCard-ePSiX1h0.js} +2 -2
- package/dist/assets/{NeighborhoodCard-CjddOmMg.js.map → NeighborhoodCard-ePSiX1h0.js.map} +1 -1
- package/dist/assets/{NeighborhoodCard-legacy-BXbEUaCk.js → NeighborhoodCard-legacy-B7hL1XOX.js} +2 -2
- package/dist/assets/{NeighborhoodCard-legacy-BXbEUaCk.js.map → NeighborhoodCard-legacy-B7hL1XOX.js.map} +1 -1
- package/dist/assets/{NeighborhoodCharacteristics-rVjVJZhq.js → NeighborhoodCharacteristics-__nE9rKT.js} +2 -2
- package/dist/assets/{NeighborhoodCharacteristics-rVjVJZhq.js.map → NeighborhoodCharacteristics-__nE9rKT.js.map} +1 -1
- package/dist/assets/{NeighborhoodCharacteristics-legacy-N-y878TT.js → NeighborhoodCharacteristics-legacy-zcamdTX5.js} +2 -2
- package/dist/assets/{NeighborhoodCharacteristics-legacy-N-y878TT.js.map → NeighborhoodCharacteristics-legacy-zcamdTX5.js.map} +1 -1
- package/dist/assets/{NeighborhoodDemographics-CS-v8EiF.js → NeighborhoodDemographics-5cGgXnRY.js} +2 -2
- package/dist/assets/{NeighborhoodDemographics-CS-v8EiF.js.map → NeighborhoodDemographics-5cGgXnRY.js.map} +1 -1
- package/dist/assets/{NeighborhoodDemographics-legacy-Dm5pQwht.js → NeighborhoodDemographics-legacy-c3eDH26X.js} +2 -2
- package/dist/assets/{NeighborhoodDemographics-legacy-Dm5pQwht.js.map → NeighborhoodDemographics-legacy-c3eDH26X.js.map} +1 -1
- package/dist/assets/{NeighborhoodFeatured-s-u9pUbm.js → NeighborhoodFeatured-DIXhmlRC.js} +2 -2
- package/dist/assets/{NeighborhoodFeatured-s-u9pUbm.js.map → NeighborhoodFeatured-DIXhmlRC.js.map} +1 -1
- package/dist/assets/{NeighborhoodFeatured-legacy-DFs2mouX.js → NeighborhoodFeatured-legacy-lDme45yC.js} +2 -2
- package/dist/assets/{NeighborhoodFeatured-legacy-DFs2mouX.js.map → NeighborhoodFeatured-legacy-lDme45yC.js.map} +1 -1
- package/dist/assets/{NeighborhoodHero-BywJZ-xz.js → NeighborhoodHero-Bj4FlQVV.js} +2 -2
- package/dist/assets/{NeighborhoodHero-BywJZ-xz.js.map → NeighborhoodHero-Bj4FlQVV.js.map} +1 -1
- package/dist/assets/{NeighborhoodHero-legacy-DBXy8A9v.js → NeighborhoodHero-legacy-C6T-qgPK.js} +2 -2
- package/dist/assets/{NeighborhoodHero-legacy-DBXy8A9v.js.map → NeighborhoodHero-legacy-C6T-qgPK.js.map} +1 -1
- package/dist/assets/{NeighborhoodHighlights-C7wjbeds.js → NeighborhoodHighlights-BBmVnaLl.js} +2 -2
- package/dist/assets/{NeighborhoodHighlights-C7wjbeds.js.map → NeighborhoodHighlights-BBmVnaLl.js.map} +1 -1
- package/dist/assets/{NeighborhoodHighlights-legacy-DuaIiUeU.js → NeighborhoodHighlights-legacy-B2x36QRC.js} +2 -2
- package/dist/assets/{NeighborhoodHighlights-legacy-DuaIiUeU.js.map → NeighborhoodHighlights-legacy-B2x36QRC.js.map} +1 -1
- package/dist/assets/{NeighborhoodMap-chAy5ObD.js → NeighborhoodMap-DwMQLhkw.js} +2 -2
- package/dist/assets/{NeighborhoodMap-chAy5ObD.js.map → NeighborhoodMap-DwMQLhkw.js.map} +1 -1
- package/dist/assets/{NeighborhoodMap-legacy-qKRq45VQ.js → NeighborhoodMap-legacy-CugKbgSp.js} +2 -2
- package/dist/assets/{NeighborhoodMap-legacy-qKRq45VQ.js.map → NeighborhoodMap-legacy-CugKbgSp.js.map} +1 -1
- package/dist/assets/{NeighborhoodMarketTrends-DyzBmnXU.js → NeighborhoodMarketTrends-COqvs4Fz.js} +3 -3
- package/dist/assets/{NeighborhoodMarketTrends-DyzBmnXU.js.map → NeighborhoodMarketTrends-COqvs4Fz.js.map} +1 -1
- package/dist/assets/{NeighborhoodMarketTrends-legacy-DflW5bwf.js → NeighborhoodMarketTrends-legacy-DSHDUUH_.js} +2 -2
- package/dist/assets/{NeighborhoodMarketTrends-legacy-DflW5bwf.js.map → NeighborhoodMarketTrends-legacy-DSHDUUH_.js.map} +1 -1
- package/dist/assets/{NeighborhoodMatch-B0NunmQ1.js → NeighborhoodMatch-GqzEoreu.js} +2 -2
- package/dist/assets/{NeighborhoodMatch-B0NunmQ1.js.map → NeighborhoodMatch-GqzEoreu.js.map} +1 -1
- package/dist/assets/{NeighborhoodMatch-legacy-C9pmkVI0.js → NeighborhoodMatch-legacy-SGEcOXuf.js} +2 -2
- package/dist/assets/{NeighborhoodMatch-legacy-C9pmkVI0.js.map → NeighborhoodMatch-legacy-SGEcOXuf.js.map} +1 -1
- package/dist/assets/{NeighborhoodPropertyValueDrivers-pcHUQKLk.js → NeighborhoodPropertyValueDrivers-Cz4cawqR.js} +2 -2
- package/dist/assets/{NeighborhoodPropertyValueDrivers-pcHUQKLk.js.map → NeighborhoodPropertyValueDrivers-Cz4cawqR.js.map} +1 -1
- package/dist/assets/{NeighborhoodPropertyValueDrivers-legacy-CSn26WOI.js → NeighborhoodPropertyValueDrivers-legacy-7gVUrIgh.js} +2 -2
- package/dist/assets/{NeighborhoodPropertyValueDrivers-legacy-CSn26WOI.js.map → NeighborhoodPropertyValueDrivers-legacy-7gVUrIgh.js.map} +1 -1
- package/dist/assets/{NeighborhoodSchools-mOJqjm1x.js → NeighborhoodSchools-D6CPTgGE.js} +2 -2
- package/dist/assets/{NeighborhoodSchools-mOJqjm1x.js.map → NeighborhoodSchools-D6CPTgGE.js.map} +1 -1
- package/dist/assets/{NeighborhoodSchools-legacy-DZOdDDpP.js → NeighborhoodSchools-legacy-0G_dtI8q.js} +2 -2
- package/dist/assets/{NeighborhoodSchools-legacy-DZOdDDpP.js.map → NeighborhoodSchools-legacy-0G_dtI8q.js.map} +1 -1
- package/dist/assets/{NeighborhoodShowcase-DB50zUgk.js → NeighborhoodShowcase-CRlKc8OL.js} +2 -2
- package/dist/assets/{NeighborhoodShowcase-DB50zUgk.js.map → NeighborhoodShowcase-CRlKc8OL.js.map} +1 -1
- package/dist/assets/{NeighborhoodShowcase-legacy-BkNvt6P2.js → NeighborhoodShowcase-legacy-Bjz5_C24.js} +2 -2
- package/dist/assets/{NeighborhoodShowcase-legacy-BkNvt6P2.js.map → NeighborhoodShowcase-legacy-Bjz5_C24.js.map} +1 -1
- package/dist/assets/{NoDataContent-DMnLpuKS.js → NoDataContent-CTxzT718.js} +2 -2
- package/dist/assets/{NoDataContent-DMnLpuKS.js.map → NoDataContent-CTxzT718.js.map} +1 -1
- package/dist/assets/{NoDataContent-legacy-V241YjyB.js → NoDataContent-legacy-BWvHzb0g.js} +2 -2
- package/dist/assets/{NoDataContent-legacy-V241YjyB.js.map → NoDataContent-legacy-BWvHzb0g.js.map} +1 -1
- package/dist/assets/{ResizeWrapper-DWV5t91u.js → ResizeWrapper-DbYmMKOU.js} +2 -2
- package/dist/assets/{ResizeWrapper-DWV5t91u.js.map → ResizeWrapper-DbYmMKOU.js.map} +1 -1
- package/dist/assets/{ResizeWrapper-legacy-DGnrE5zr.js → ResizeWrapper-legacy-C0ua6RC5.js} +2 -2
- package/dist/assets/{ResizeWrapper-legacy-DGnrE5zr.js.map → ResizeWrapper-legacy-C0ua6RC5.js.map} +1 -1
- package/dist/assets/{ScoreCardList-BFPj6mZA.js → ScoreCardList-B4NURGgK.js} +2 -2
- package/dist/assets/{ScoreCardList-BFPj6mZA.js.map → ScoreCardList-B4NURGgK.js.map} +1 -1
- package/dist/assets/{ScoreCardList-legacy-D8n8_vhM.js → ScoreCardList-legacy-BTRPIWUP.js} +2 -2
- package/dist/assets/{ScoreCardList-legacy-D8n8_vhM.js.map → ScoreCardList-legacy-BTRPIWUP.js.map} +1 -1
- package/dist/assets/{ScoreIcon-legacy-x5Tn3nV1.js → ScoreIcon-legacy-D9igp8MS.js} +2 -2
- package/dist/assets/{ScoreIcon-legacy-x5Tn3nV1.js.map → ScoreIcon-legacy-D9igp8MS.js.map} +1 -1
- package/dist/assets/{ScoreIcon-e7HkxsIV.js → ScoreIcon-s5-ehfPP.js} +2 -2
- package/dist/assets/{ScoreIcon-e7HkxsIV.js.map → ScoreIcon-s5-ehfPP.js.map} +1 -1
- package/dist/assets/{Testing--n5Ro0Ek-C9V56Cfj.js → Testing--n5Ro0Ek-Cc3RGltv.js} +2 -2
- package/dist/assets/{Testing--n5Ro0Ek-C9V56Cfj.js.map → Testing--n5Ro0Ek-Cc3RGltv.js.map} +1 -1
- package/dist/assets/{Testing--n5Ro0Ek-legacy-D_AkmmzN.js → Testing--n5Ro0Ek-legacy-BB0u0086.js} +2 -2
- package/dist/assets/{Testing--n5Ro0Ek-legacy-D_AkmmzN.js.map → Testing--n5Ro0Ek-legacy-BB0u0086.js.map} +1 -1
- package/dist/assets/{Testing-BNJwzbRK-BsZQEhVn.js → Testing-BNJwzbRK-C1viHx8M.js} +2 -2
- package/dist/assets/{Testing-BNJwzbRK-BsZQEhVn.js.map → Testing-BNJwzbRK-C1viHx8M.js.map} +1 -1
- package/dist/assets/{Testing-BNJwzbRK-legacy-DWOKVB8F.js → Testing-BNJwzbRK-legacy-XPR_-0Eg.js} +2 -2
- package/dist/assets/{Testing-BNJwzbRK-legacy-DWOKVB8F.js.map → Testing-BNJwzbRK-legacy-XPR_-0Eg.js.map} +1 -1
- package/dist/assets/{Testing-CoRLhmNT-D1AEkx8H.js → Testing-CoRLhmNT-B4pOjeZH.js} +2 -2
- package/dist/assets/{Testing-CoRLhmNT-D1AEkx8H.js.map → Testing-CoRLhmNT-B4pOjeZH.js.map} +1 -1
- package/dist/assets/{Testing-CoRLhmNT-legacy-C2PTG7qO.js → Testing-CoRLhmNT-legacy-BFVvx40w.js} +2 -2
- package/dist/assets/{Testing-CoRLhmNT-legacy-C2PTG7qO.js.map → Testing-CoRLhmNT-legacy-BFVvx40w.js.map} +1 -1
- package/dist/assets/{Testing-DGUeGxdc-ixrV0Uct.js → Testing-DGUeGxdc-CKSlgBDu.js} +2 -2
- package/dist/assets/{Testing-DGUeGxdc-ixrV0Uct.js.map → Testing-DGUeGxdc-CKSlgBDu.js.map} +1 -1
- package/dist/assets/{Testing-DGUeGxdc-legacy-qdFrcrxK.js → Testing-DGUeGxdc-legacy-B2yBRluh.js} +2 -2
- package/dist/assets/{Testing-DGUeGxdc-legacy-qdFrcrxK.js.map → Testing-DGUeGxdc-legacy-B2yBRluh.js.map} +1 -1
- package/dist/assets/{Testing-DzWAcbhL-6k6EztCf.js → Testing-DzWAcbhL-B5JOmJod.js} +2 -2
- package/dist/assets/{Testing-DzWAcbhL-6k6EztCf.js.map → Testing-DzWAcbhL-B5JOmJod.js.map} +1 -1
- package/dist/assets/{Testing-DzWAcbhL-legacy-CVi7-xZq.js → Testing-DzWAcbhL-legacy-20VBltE2.js} +2 -2
- package/dist/assets/{Testing-DzWAcbhL-legacy-CVi7-xZq.js.map → Testing-DzWAcbhL-legacy-20VBltE2.js.map} +1 -1
- package/dist/assets/{TitleHeader-mQeQYQpJ.js → TitleHeader-Be2YRN93.js} +2 -2
- package/dist/assets/{TitleHeader-mQeQYQpJ.js.map → TitleHeader-Be2YRN93.js.map} +1 -1
- package/dist/assets/{TitleHeader-legacy-BxGrZ-6z.js → TitleHeader-legacy-CzXSoMFC.js} +2 -2
- package/dist/assets/{TitleHeader-legacy-BxGrZ-6z.js.map → TitleHeader-legacy-CzXSoMFC.js.map} +1 -1
- package/dist/assets/{Trans-C0JSM2OQ.js → Trans-DntniXa9.js} +2 -2
- package/dist/assets/{Trans-C0JSM2OQ.js.map → Trans-DntniXa9.js.map} +1 -1
- package/dist/assets/{Trans-legacy-Ce8Vb50C.js → Trans-legacy-B9t4MV_C.js} +2 -2
- package/dist/assets/{Trans-legacy-Ce8Vb50C.js.map → Trans-legacy-B9t4MV_C.js.map} +1 -1
- package/dist/assets/{ValidateOptions-0362goEF.js → ValidateOptions-BqL9iY9R.js} +2 -2
- package/dist/assets/{ValidateOptions-0362goEF.js.map → ValidateOptions-BqL9iY9R.js.map} +1 -1
- package/dist/assets/{ValidateOptions-legacy-DzEh45h5.js → ValidateOptions-legacy-BQ69tin-.js} +2 -2
- package/dist/assets/{ValidateOptions-legacy-DzEh45h5.js.map → ValidateOptions-legacy-BQ69tin-.js.map} +1 -1
- package/dist/assets/constants-BcJ_mS91-kGN6qniT.js +2 -0
- package/dist/assets/constants-BcJ_mS91-kGN6qniT.js.map +1 -0
- package/dist/assets/constants-BcJ_mS91-legacy-akzQjFeX.js +2 -0
- package/dist/assets/constants-BcJ_mS91-legacy-akzQjFeX.js.map +1 -0
- package/dist/assets/{context-BrD4AniQ-DZ0ZiGRI.js → context-BrD4AniQ-D7UQulkM.js} +1 -1
- package/dist/assets/{context-BrD4AniQ-DZ0ZiGRI.js.map → context-BrD4AniQ-D7UQulkM.js.map} +1 -1
- package/dist/assets/{context-BrD4AniQ-legacy-BySS42Wf.js → context-BrD4AniQ-legacy-Ct6QKrhb.js} +1 -1
- package/dist/assets/{context-BrD4AniQ-legacy-BySS42Wf.js.map → context-BrD4AniQ-legacy-Ct6QKrhb.js.map} +1 -1
- package/dist/assets/{dist-3L6XR49Y.js → dist-C_ktdPsv.js} +2 -2
- package/dist/assets/{dist-3L6XR49Y.js.map → dist-C_ktdPsv.js.map} +1 -1
- package/dist/assets/{dist-legacy-B55wY-DS.js → dist-legacy-DIwOLBcZ.js} +2 -2
- package/dist/assets/{dist-legacy-B55wY-DS.js.map → dist-legacy-DIwOLBcZ.js.map} +1 -1
- package/dist/assets/{esm-Be30MpcN-ls4GMpDI.js → esm-Be30MpcN-C7eJiqee.js} +1 -1
- package/dist/assets/{esm-Be30MpcN-ls4GMpDI.js.map → esm-Be30MpcN-C7eJiqee.js.map} +1 -1
- package/dist/assets/{esm-Be30MpcN-legacy-D8iPI9WH.js → esm-Be30MpcN-legacy-MIXlHUgH.js} +1 -1
- package/dist/assets/{esm-Be30MpcN-legacy-D8iPI9WH.js.map → esm-Be30MpcN-legacy-MIXlHUgH.js.map} +1 -1
- package/dist/assets/{getMapProviderConfig-CdGY8cWm.js → getMapProviderConfig-D9e8KNYU.js} +3 -3
- package/dist/assets/{getMapProviderConfig-CdGY8cWm.js.map → getMapProviderConfig-D9e8KNYU.js.map} +1 -1
- package/dist/assets/{getMapProviderConfig-legacy-wmAHunfq.js → getMapProviderConfig-legacy-DVBUhWqR.js} +2 -2
- package/dist/assets/{getMapProviderConfig-legacy-wmAHunfq.js.map → getMapProviderConfig-legacy-DVBUhWqR.js.map} +1 -1
- package/dist/assets/getPaddedBounds-CbCVe2M3-CYpTak_b.js +2 -0
- package/dist/assets/getPaddedBounds-CbCVe2M3-CYpTak_b.js.map +1 -0
- package/dist/assets/getPaddedBounds-CbCVe2M3-legacy-1z3vtmVe.js +2 -0
- package/dist/assets/getPaddedBounds-CbCVe2M3-legacy-1z3vtmVe.js.map +1 -0
- package/dist/assets/{index-CNd7hC6B.js → index-PbHyodiU.js} +3 -3
- package/dist/assets/index-PbHyodiU.js.map +1 -0
- package/dist/assets/index-legacy-CYps6nGB.js +2 -0
- package/dist/assets/index-legacy-CYps6nGB.js.map +1 -0
- package/dist/assets/{index.es-CXXRBE7A.js → index.es-DuM-WVhV.js} +2 -2
- package/dist/assets/{index.es-CXXRBE7A.js.map → index.es-DuM-WVhV.js.map} +1 -1
- package/dist/assets/{index.es-legacy-CAykU5jw.js → index.es-legacy-Cz2m6e4L.js} +2 -2
- package/dist/assets/{index.es-legacy-CAykU5jw.js.map → index.es-legacy-Cz2m6e4L.js.map} +1 -1
- package/dist/assets/{mapbox-jb8Zev6T-Dc19y3gY.js → mapbox-jb8Zev6T-BgSpiKob.js} +2 -2
- package/dist/assets/{mapbox-jb8Zev6T-Dc19y3gY.js.map → mapbox-jb8Zev6T-BgSpiKob.js.map} +1 -1
- package/dist/assets/{mapbox-jb8Zev6T-legacy-BeyVAwDw.js → mapbox-jb8Zev6T-legacy-hBjjoWXX.js} +2 -2
- package/dist/assets/{mapbox-jb8Zev6T-legacy-BeyVAwDw.js.map → mapbox-jb8Zev6T-legacy-hBjjoWXX.js.map} +1 -1
- package/dist/assets/{maplibre-CUYkxr-D-BzuGVu1-.js → maplibre-CUYkxr-D-BJWmGVry.js} +2 -2
- package/dist/assets/{maplibre-CUYkxr-D-BzuGVu1-.js.map → maplibre-CUYkxr-D-BJWmGVry.js.map} +1 -1
- package/dist/assets/{maplibre-CUYkxr-D-legacy-9NqXov2x.js → maplibre-CUYkxr-D-legacy-BNqtRzVB.js} +2 -2
- package/dist/assets/{maplibre-CUYkxr-D-legacy-9NqXov2x.js.map → maplibre-CUYkxr-D-legacy-BNqtRzVB.js.map} +1 -1
- package/dist/assets/neighborhood-fallback-CizB5oi9.js.map +1 -1
- package/dist/assets/{sdks-Bxf4c2j1.js → sdks-BTkz21XL.js} +2 -2
- package/dist/assets/{sdks-Bxf4c2j1.js.map → sdks-BTkz21XL.js.map} +1 -1
- package/dist/assets/{sdks-legacy-DYYmSGi_.js → sdks-legacy-3sJ2n28B.js} +2 -2
- package/dist/assets/{sdks-legacy-DYYmSGi_.js.map → sdks-legacy-3sJ2n28B.js.map} +1 -1
- package/dist/assets/styles-C6SoSE0g-DVodK__e.js +2 -0
- package/dist/assets/styles-C6SoSE0g-DVodK__e.js.map +1 -0
- package/dist/assets/styles-C6SoSE0g-legacy-DQucoUvA.js +2 -0
- package/dist/assets/styles-C6SoSE0g-legacy-DQucoUvA.js.map +1 -0
- package/dist/assets/{styles-CJwaJsrY-B7fRLA0K.js → styles-CJwaJsrY-BTp6ht1Q.js} +1 -1
- package/dist/assets/{styles-CJwaJsrY-B7fRLA0K.js.map → styles-CJwaJsrY-BTp6ht1Q.js.map} +1 -1
- package/dist/assets/{styles-CJwaJsrY-legacy-DpdECtH-.js → styles-CJwaJsrY-legacy-DDFkoq39.js} +1 -1
- package/dist/assets/{styles-CJwaJsrY-legacy-DpdECtH-.js.map → styles-CJwaJsrY-legacy-DDFkoq39.js.map} +1 -1
- package/dist/assets/{useDemographicsData-BvaNug6u.js → useDemographicsData-DKScK522.js} +2 -2
- package/dist/assets/{useDemographicsData-BvaNug6u.js.map → useDemographicsData-DKScK522.js.map} +1 -1
- package/dist/assets/{useDemographicsData-legacy-Ce1DyoWD.js → useDemographicsData-legacy-BsoUaI9P.js} +2 -2
- package/dist/assets/{useDemographicsData-legacy-Ce1DyoWD.js.map → useDemographicsData-legacy-BsoUaI9P.js.map} +1 -1
- package/dist/assets/{useGeographies-PyhHBRG7.js → useGeographies-DejQbRC9.js} +2 -2
- package/dist/assets/{useGeographies-PyhHBRG7.js.map → useGeographies-DejQbRC9.js.map} +1 -1
- package/dist/assets/{useGeographies-legacy-D9GtGYxP.js → useGeographies-legacy-B5ciev2M.js} +2 -2
- package/dist/assets/{useGeographies-legacy-D9GtGYxP.js.map → useGeographies-legacy-B5ciev2M.js.map} +1 -1
- package/dist/assets/{useIsMobile-CFx2Xa3X.js → useIsMobile-Co5SddxR.js} +2 -2
- package/dist/assets/{useIsMobile-CFx2Xa3X.js.map → useIsMobile-Co5SddxR.js.map} +1 -1
- package/dist/assets/{useIsMobile-legacy-CAXdJOlD.js → useIsMobile-legacy-B53LlWR8.js} +2 -2
- package/dist/assets/{useIsMobile-legacy-CAXdJOlD.js.map → useIsMobile-legacy-B53LlWR8.js.map} +1 -1
- package/dist/assets/{useLocation-CgVyB4mN.js → useLocation-DUSQPRn5.js} +2 -2
- package/dist/assets/{useLocation-CgVyB4mN.js.map → useLocation-DUSQPRn5.js.map} +1 -1
- package/dist/assets/{useLocation-legacy-CoN_4aWO.js → useLocation-legacy-CYzO18ij.js} +2 -2
- package/dist/assets/{useLocation-legacy-CoN_4aWO.js.map → useLocation-legacy-CYzO18ij.js.map} +1 -1
- package/dist/assets/{useProfiles-CleTbooi.js → useProfiles-Dv9s6TWw.js} +2 -2
- package/dist/assets/{useProfiles-CleTbooi.js.map → useProfiles-Dv9s6TWw.js.map} +1 -1
- package/dist/assets/{useProfiles-legacy-CLlZc_oV.js → useProfiles-legacy-DF0NXWwe.js} +2 -2
- package/dist/assets/{useProfiles-legacy-CLlZc_oV.js.map → useProfiles-legacy-DF0NXWwe.js.map} +1 -1
- package/dist/assets/{useSchools-CKXVMLym.js → useSchools-Dqdy1J-D.js} +2 -2
- package/dist/assets/{useSchools-CKXVMLym.js.map → useSchools-Dqdy1J-D.js.map} +1 -1
- package/dist/assets/{useSchools-legacy-BvZM00mn.js → useSchools-legacy-CCHNqc2P.js} +2 -2
- package/dist/assets/{useSchools-legacy-BvZM00mn.js.map → useSchools-legacy-CCHNqc2P.js.map} +1 -1
- package/dist/assets/{useScores-BYLlfjJr.js → useScores-C4T2-LUO.js} +2 -2
- package/dist/assets/{useScores-BYLlfjJr.js.map → useScores-C4T2-LUO.js.map} +1 -1
- package/dist/assets/{useScores-legacy-BtklhLy-.js → useScores-legacy-BludORUw.js} +2 -2
- package/dist/assets/{useScores-legacy-BtklhLy-.js.map → useScores-legacy-BludORUw.js.map} +1 -1
- package/dist/assets/utils-DuZH7Cmm-CGFseyIn.js +2 -0
- package/dist/assets/utils-DuZH7Cmm-CGFseyIn.js.map +1 -0
- package/dist/assets/utils-DuZH7Cmm-legacy-vOQGld7w.js +2 -0
- package/dist/assets/utils-DuZH7Cmm-legacy-vOQGld7w.js.map +1 -0
- package/dist/index.html +2 -2
- package/dist/types/context/stateManager/index.d.ts.map +1 -1
- package/dist/types/context/stateManager/index.js +50 -3
- package/dist/types/context/stateManager/index.js.map +1 -1
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/SurveyTriggerProvider/index.test.js +11 -9
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/SurveyTriggerProvider/index.test.js.map +1 -1
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/index.test.js +19 -5
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/index.test.js.map +1 -1
- package/dist/types/sdks/NeighborhoodMap/constants.d.ts +1 -1
- package/dist/types/sdks/NeighborhoodMap/constants.js +1 -1
- package/dist/types/utils/errorTracker/index.d.ts.map +1 -1
- package/dist/types/utils/errorTracker/index.js +6 -5
- package/dist/types/utils/errorTracker/index.js.map +1 -1
- package/dist/types/utils/normalizeLocale/index.d.ts +18 -0
- package/dist/types/utils/normalizeLocale/index.d.ts.map +1 -0
- package/dist/types/utils/normalizeLocale/index.js +24 -0
- package/dist/types/utils/normalizeLocale/index.js.map +1 -0
- package/dist/types/utils/normalizeLocale/index.test.d.ts +2 -0
- package/dist/types/utils/normalizeLocale/index.test.d.ts.map +1 -0
- package/dist/types/utils/normalizeLocale/index.test.js +35 -0
- package/dist/types/utils/normalizeLocale/index.test.js.map +1 -0
- package/package.json +2 -2
- package/dist/assets/Cluster-BHQcO6iC-BLUKMpub.js +0 -2
- package/dist/assets/Google-CH7a2yx--B615NdD8.js +0 -2
- package/dist/assets/Google-CXGCn-oJ-AkqBPqrT.js +0 -2
- package/dist/assets/Google-D1kMMDIv-BsfRv65Q.js +0 -2
- package/dist/assets/Google-D1kMMDIv-BsfRv65Q.js.map +0 -1
- package/dist/assets/Google-D1kMMDIv-legacy-VjXA4xrw.js +0 -2
- package/dist/assets/Google-D1kMMDIv-legacy-VjXA4xrw.js.map +0 -1
- package/dist/assets/Mapbox-CIislOVu-DF1r9xj3.js +0 -2
- package/dist/assets/Mapbox-CIislOVu-DF1r9xj3.js.map +0 -1
- package/dist/assets/Mapbox-CIislOVu-legacy-BL-N58pQ.js +0 -2
- package/dist/assets/Mapbox-CIislOVu-legacy-BL-N58pQ.js.map +0 -1
- package/dist/assets/Maptiler-Cy2r6w4G-SVyBwt0g.js +0 -2
- package/dist/assets/Maptiler-Cy2r6w4G-SVyBwt0g.js.map +0 -1
- package/dist/assets/Maptiler-Cy2r6w4G-legacy-Bhbgroyv.js +0 -2
- package/dist/assets/Maptiler-Cy2r6w4G-legacy-Bhbgroyv.js.map +0 -1
- package/dist/assets/constants-DOpa8YMW-CAHGepUD.js +0 -2
- package/dist/assets/constants-DOpa8YMW-CAHGepUD.js.map +0 -1
- package/dist/assets/constants-DOpa8YMW-legacy-TnabVEaS.js +0 -2
- package/dist/assets/constants-DOpa8YMW-legacy-TnabVEaS.js.map +0 -1
- package/dist/assets/esm-k7KI3vER-DWALg7MX.js +0 -2
- package/dist/assets/esm-k7KI3vER-DWALg7MX.js.map +0 -1
- package/dist/assets/esm-k7KI3vER-legacy-DjAkR8OT.js +0 -2
- package/dist/assets/esm-k7KI3vER-legacy-DjAkR8OT.js.map +0 -1
- package/dist/assets/index-CNd7hC6B.js.map +0 -1
- package/dist/assets/index-legacy-C3WMF-is.js +0 -2
- package/dist/assets/index-legacy-C3WMF-is.js.map +0 -1
- package/dist/assets/styles-hx5_Dz4D-CjeaMkGu.js +0 -2
- package/dist/assets/styles-hx5_Dz4D-CjeaMkGu.js.map +0 -1
- package/dist/assets/styles-hx5_Dz4D-legacy-CNN4CNPX.js +0 -2
- package/dist/assets/styles-hx5_Dz4D-legacy-CNN4CNPX.js.map +0 -1
- package/dist/assets/utils-CjIvvA5e-DRv4kcQu.js +0 -2
- package/dist/assets/utils-CjIvvA5e-DRv4kcQu.js.map +0 -1
- package/dist/assets/utils-CjIvvA5e-legacy-BArgSH63.js +0 -2
- package/dist/assets/utils-CjIvvA5e-legacy-BArgSH63.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodSchools-legacy-DZOdDDpP.js","names":["t","isObject"],"sources":["../../../../node_modules/@phosphor-icons/react/dist/defs/Check.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/Check.es.js","../../src/sdks/NeighborhoodSchools/types.ts","../../src/sdks/NeighborhoodSchools/hooks/useFilteredSchools/index.ts","../../src/sdks/NeighborhoodSchools/context.tsx","../../src/sdks/NeighborhoodSchools/schema.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Content/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Content/index.tsx","../../src/sdks/NeighborhoodSchools/components/Filter/Item/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Item/index.tsx","../../src/sdks/NeighborhoodSchools/components/Filter/Trigger/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Trigger/index.tsx","../../src/sdks/NeighborhoodSchools/components/Filter/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/SchoolName/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/SchoolName/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/Body/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/Body/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/index.tsx","../../../../node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","../../../../node_modules/embla-carousel/esm/embla-carousel.esm.js","../../../../node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","../../src/sdks/NeighborhoodSchools/components/SchoolsList/EmblaCarouselDotButton.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolsList/Controls/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/SchoolSection/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/SchoolSection/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/SchoolCategories/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/index.tsx","../../src/sdks/NeighborhoodSchools/components/Footer/styles.ts","../../src/sdks/NeighborhoodSchools/components/Footer/index.tsx","../../src/sdks/NeighborhoodSchools/components/Content/styles.ts","../../src/sdks/NeighborhoodSchools/components/Content/index.tsx","../../src/sdks/NeighborhoodSchools/index.tsx"],"sourcesContent":["import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M232,56V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M228.24,76.24l-128,128a6,6,0,0,1-8.48,0l-56-56a6,6,0,0,1,8.48-8.48L96,191.51,219.76,67.76a6,6,0,0,1,8.48,8.48Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M226.83,74.83l-128,128a4,4,0,0,1-5.66,0l-56-56a4,4,0,0,1,5.66-5.66L96,194.34,221.17,69.17a4,4,0,1,1,5.66,5.66Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as e from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport a from \"../defs/Check.es.js\";\nconst o = e.forwardRef((c, r) => /* @__PURE__ */ e.createElement(t, { ref: r, ...c, weights: a }));\no.displayName = \"CheckIcon\";\nconst n = o;\nexport {\n n as Check,\n o as CheckIcon\n};\n","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAttribution?: boolean;\n showSchoolRatings?: boolean;\n};\n\nexport type NeighborhoodSchoolsProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport type tableHeaders = Partial<\n \"name\" | \"type\" | \"languages\" | \"levels\" | \"address\" | \"category\"\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-schools-Viewed\",\n ATTRIBUTION_CLICKED = \"LC-Attribution-Clicked\",\n SCHOOL_URL_CLICKED = \"neighborhood-schools-URL-Clicked\",\n FILTER_BY_TYPE = \"neighborhood-schools-Filter-By-Type\",\n FILTER_BY_LEVEL = \"neighborhood-schools-Filter-By-Level\",\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 SCHOOL_URL_CLICKED = \"neighborhood_schools_url_clicked\",\n FILTER_BY_TYPE = \"neighborhood_schools_filter_by_type\",\n FILTER_BY_LEVEL = \"neighborhood_schools_filter_by_level\",\n}\n","import { useMemo } from \"react\";\nimport type { School, Schools } from \"@local-logic/client\";\nimport {\n SchoolLevel,\n SchoolType,\n} from \"@local-logic/client/dist/features/schools\";\n\nimport { SchoolsParams, useSchools } from \"~/features/clientLibrary/useSchools\";\n\ntype UseFilteredSchoolsParams = Omit<SchoolsParams, \"include\"> & {\n country?: string;\n filterLevel?: SchoolLevel;\n filterType?: SchoolType;\n};\n\ntype UseFilteredSchoolsResult = {\n isLoading: boolean;\n schools?: School[];\n filteredSchools?: School[];\n schoolTypes: SchoolType[];\n schoolLevels: SchoolLevel[];\n hasCategories: boolean;\n};\n\nexport function useFilteredSchools({\n country,\n filterLevel,\n filterType,\n ...schoolsParams\n}: UseFilteredSchoolsParams): UseFilteredSchoolsResult {\n const { isLoading, data: schoolsData } = useSchools({\n ...schoolsParams,\n include: [\"schools\" as keyof Schools],\n radius: 2000,\n limit: 30,\n buffer: 250,\n });\n\n const { schools, filteredSchools, schoolTypes, schoolLevels, hasCategories } =\n useMemo(() => {\n const result: Omit<UseFilteredSchoolsResult, \"isLoading\"> = {\n schools: undefined,\n filteredSchools: undefined,\n schoolTypes: [],\n schoolLevels: [],\n hasCategories: false,\n };\n\n if (\n !schoolsData ||\n (!schoolsData.primary_schools && !schoolsData.high_schools)\n ) {\n return result;\n }\n\n const schoolNames = new Set<string>();\n const schoolTypesSet = new Set<SchoolType>();\n const schoolLevelsSet = new Set<SchoolLevel>();\n const mergedSchools = [\n ...(schoolsData.primary_schools || []),\n ...(schoolsData.high_schools || []),\n ];\n const dedupedSchools: School[] = [];\n const visibleSchools: School[] = [];\n\n for (const school of mergedSchools) {\n if (schoolNames.has(school.name)) {\n continue;\n }\n\n schoolNames.add(school.name);\n dedupedSchools.push(school);\n\n if (country === \"USA\") {\n result.hasCategories =\n result.hasCategories ||\n !!school.is_advanced_placement ||\n !!school.is_charter ||\n !!school.is_magnet;\n }\n\n for (const type of school.school_attributes?.types || []) {\n schoolTypesSet.add(type);\n }\n\n for (const level of school.school_attributes?.levels || []) {\n schoolLevelsSet.add(level);\n }\n\n const matchesLevel =\n filterLevel === undefined ||\n school.school_attributes?.levels?.includes(filterLevel);\n const matchesType =\n filterType === undefined ||\n school.school_attributes?.types?.includes(filterType);\n\n if (matchesLevel && matchesType) {\n visibleSchools.push(school);\n }\n }\n\n return {\n schools: dedupedSchools,\n filteredSchools: visibleSchools,\n schoolTypes: [...schoolTypesSet],\n schoolLevels: [...schoolLevelsSet],\n hasCategories: result.hasCategories,\n };\n }, [country, filterLevel, filterType, schoolsData]);\n\n return {\n isLoading,\n schools,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n hasCategories,\n };\n}\n","import React, { useContext, useMemo, useEffect, useState } from \"react\";\n\nimport type { School } from \"@local-logic/client\";\nimport {\n SchoolLevel,\n SchoolType,\n} from \"@local-logic/client/dist/features/schools\";\nimport {\n type NeighborhoodSchoolsProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useFilteredSchools } from \"./hooks/useFilteredSchools\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useLocation } from \"~/hooks/useLocation\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n filteredSchools?: School[];\n schoolTypes: SchoolType[];\n schoolLevels: SchoolLevel[];\n filterType?: SchoolType;\n filterLevel?: SchoolLevel;\n setFilterType: (type?: SchoolType) => void;\n setFilterLevel: (level?: SchoolLevel) => void;\n hasCategories: boolean;\n locale: \"en\" | \"fr\";\n location: {\n country: string;\n state: string;\n };\n showSchoolRatings?: boolean;\n};\n\nconst NeighborhoodSchoolsContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodSchools = () => useContext(NeighborhoodSchoolsContext);\n\nconst NeighborhoodSchoolsProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodSchoolsProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\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 },\n );\n\n const { geographyId, geography } = useMemo(() => {\n const geographiesArray = Object.entries(geographyData || {});\n\n return {\n geographyId: geographiesArray[0]?.[0],\n geography: geographiesArray[0]?.[1],\n };\n }, [isGeographyLoading, geographyData]);\n\n const center = useMemo(() => {\n if (!sdkState.options?.geographyId) {\n return {\n lat: sdkState.options?.lat || 0,\n lng: sdkState.options?.lng || 0,\n };\n }\n\n return geography?.centroid || { lat: 0, lng: 0 };\n }, [\n sdkState.options?.geographyId,\n sdkState.options?.lat,\n sdkState.options?.lng,\n geography,\n ]);\n\n const { isLoading: isLocationLoading, data: location } = useLocation({\n lat: center.lat,\n lng: center.lng,\n });\n\n const [filterLevel, setFilterLevel] = useState<SchoolLevel | undefined>();\n const [filterType, setFilterType] = useState<SchoolType | undefined>();\n\n const {\n isLoading: isSchoolsLoading,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n hasCategories,\n } = useFilteredSchools({\n geogId: geographyId,\n country: location.country,\n filterLevel,\n filterType,\n });\n\n const isLoading = useMemo(\n () => isSchoolsLoading || isLocationLoading,\n [isSchoolsLoading, isLocationLoading],\n );\n\n useEffect(() => {\n setFilterType((currentFilterType) =>\n currentFilterType === undefined || schoolTypes.includes(currentFilterType)\n ? currentFilterType\n : undefined,\n );\n }, [schoolTypes]);\n\n useEffect(() => {\n setFilterLevel((currentFilterLevel) =>\n currentFilterLevel === undefined ||\n schoolLevels.includes(currentFilterLevel)\n ? currentFilterLevel\n : undefined,\n );\n }, [schoolLevels]);\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n filterType,\n filterLevel,\n setFilterType,\n setFilterLevel,\n hasCategories,\n locale,\n location,\n showSchoolRatings: sdkState.options?.showSchoolRatings,\n }),\n [\n isLoading,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n filterType,\n filterLevel,\n locale,\n hasCategories,\n location,\n sdkState.options?.showSchoolRatings,\n ],\n );\n\n return (\n <NeighborhoodSchoolsContext.Provider value={contextValue}>\n {children}\n </NeighborhoodSchoolsContext.Provider>\n );\n};\n\nexport { useNeighborhoodSchools, NeighborhoodSchoolsProvider };\n","import { ObjectSchema, number, object, string, boolean, mixed } from \"yup\";\nimport { Options } from \"./types\";\n\nexport const schema: ObjectSchema<Options> = object({\n lat: number()\n .min(-90, \"Must be a valid latitude.\")\n .max(90, \"Must be a valid latitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n lng: number()\n .min(-180, \"Must be a valid longitude.\")\n .max(180, \"Must be a valid longitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n geographyId: string().optional(),\n title: mixed<string | boolean>().optional(),\n hideAttribution: boolean().optional(),\n showSchoolRatings: boolean().optional(),\n}).noUnknown(true);\n","export const content = `\n overflow-hidden bg-base-white rounded-sm shadow-md\n z-10 min-w-32\n data-[size=medium]:text-sm\n data-[size=large]:text-base\n`;\n\nexport const viewport = `font-inherit p-0`;\n","import React, { ComponentProps } from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\n\nimport * as styles from \"./styles\";\n\ntype ContentProps = {\n size?: \"medium\" | \"large\";\n} & ComponentProps<typeof RadixSelect.Content>;\n\nexport const Content = ({\n size = \"medium\",\n children,\n ...props\n}: ContentProps) => (\n <RadixSelect.Content className={styles.content} data-size={size} {...props}>\n <RadixSelect.Viewport className={styles.viewport}>\n {children}\n </RadixSelect.Viewport>\n </RadixSelect.Content>\n);\n","export const item = `\n font-sans font-inherit py-1 pr-8 pl-6 outline-none\n relative rounded-sm cursor-default text-zinc-800\n\n data-[highlighted]:[&:not([data-variant=\"light\"])]:bg-primary-100\n data-[highlighted]:[&:not([data-variant=\"light\"])]:text-base-white\n\n // Special color between now and design system\n data-[highlighted]:[&:not([data-variant=\"dark\"])]:bg-primary-10\n data-[highlighted]:[&:not([data-variant=\"dark\"])]:text-zinc-950\n `;\n\nexport const itemIndicator = `\n absolute left-0 bottom-0\n inline-flex justify-center items-center\n h-full w-6\n`;\n\nexport const check = `\n text-base-black\n h-3 w-3\n`;\n","import React, { ComponentProps } from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\nimport { CheckIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\n\ntype ItemProps = {\n variant?: \"dark\" | \"light\";\n} & ComponentProps<typeof RadixSelect.Item>;\n\nexport const Item = ({ variant = \"dark\", children, ...props }: ItemProps) => (\n <RadixSelect.Item className={styles.item} data-variant={variant} {...props}>\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n <RadixSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon className={styles.check} />\n </RadixSelect.ItemIndicator>\n </RadixSelect.Item>\n);\n","export const trigger = `\n inline-flex items-center justify-between flex-1\n bg-base-white rounded-lg border\n py-1 pr-2 pl-3 min-w-32\n data-[size=medium]:text-sm data-[size=medium]:h-8\n data-[size=large]:text-base data-[size=large]:h-10\n`;\n\nexport const icon = `\n text-base-black\n h-5 w-5\n`;\n","import React, { ComponentProps } from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\nimport { CaretDownIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\n\ntype TriggerProps = {\n size?: \"medium\" | \"large\";\n} & ComponentProps<typeof RadixSelect.Trigger>;\n\nexport const Trigger = ({\n size = \"medium\",\n children,\n ...props\n}: TriggerProps) => (\n <RadixSelect.Trigger className={styles.trigger} data-size={size} {...props}>\n {children}\n <RadixSelect.SelectIcon>\n <CaretDownIcon className={styles.icon} />\n </RadixSelect.SelectIcon>\n </RadixSelect.Trigger>\n);\n","export const label = `\n ml-2 mb-1\n text-sm font-normal\n`;\n\nexport const filter = `\n shadow\n rounded-lg\n -outline-offset-2\n`;\n\nexport const item = `\n capitalize text-sm font-normal\n py-2 pl-2\n pr-6 sm:pr-36\n`;\n\nexport const icon = `\n w-4 h-4 text-stone-500\n`;\n","import React from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\n\nimport { type Icon, BackpackIcon } from \"@phosphor-icons/react\";\nimport { Content } from \"./Content\";\nimport { Item } from \"./Item\";\nimport { Trigger } from \"./Trigger\";\nimport * as styles from \"./styles\";\n\ntype FilterOption = {\n label: string;\n value: string;\n};\n\nexport const Filter = ({\n options,\n activeFilter,\n allLabel,\n label,\n icon: Icon = BackpackIcon,\n handleFilterChange,\n}: {\n options: FilterOption[];\n activeFilter?: string;\n allLabel: string;\n label: string;\n icon?: Icon;\n handleFilterChange: (option?: string) => void;\n}) => {\n const filterOptions = [{ label: allLabel, value: \"ALL\" }, ...options];\n const selectedValue = activeFilter ?? \"ALL\";\n\n return (\n <div>\n <label\n className={styles.label}\n data-testid={`filter-label-${label}`}\n htmlFor={`filter-select-${label}`}\n >\n {label}\n </label>\n {options && (\n <div className={styles.filter}>\n <RadixSelect.Root\n value={selectedValue}\n onValueChange={(value) =>\n handleFilterChange(value === \"ALL\" ? undefined : value)\n }\n >\n <Trigger size=\"large\" id={`filter-select-${label}`}>\n <Icon className={styles.icon} />\n <p className={styles.item}>\n {\n filterOptions.find((option) => option.value === selectedValue)\n ?.label\n }\n </p>\n </Trigger>\n <Content>\n {filterOptions.map((option) => (\n <Item key={option.value} value={option.value} variant=\"light\">\n <p className={styles.item}>{option.label}</p>\n </Item>\n ))}\n </Content>\n </RadixSelect.Root>\n </div>\n )}\n </div>\n );\n};\n","export const container = `\n overflow-y-scroll\n h-full\n max-h-[70vh]\n border border-neutral-300 rounded-lg\n\n data-[is-loading=true]:h-36\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n `;\n\nexport const table = `\n w-full h-full\n table-auto\n -outline-offset-2\n`;\n\nexport const header = `\n p-4\n text-left\n bg-neutral-50\n [&_h2]:text-md\n [&_h2]:font-medium\n`;\n\nexport const blankFilter = `m-5`;\n","export const schoolName = `\n text-neutral-600\n text-sm font-bold\n data-[has-link=\"true\"]:text-primary-100\n data-[has-link=\"true\"]:pointer\n data-[has-link=\"true\"]:hover:underline\n`;\n\nexport const container = `flex flex-wrap items-center gap-2`;\nexport const ratingTag = `cursor-pointer`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\n\nimport {\n AnalyticsEvents,\n TrackingPipelineEvents,\n} from \"~/sdks/NeighborhoodSchools/types\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\n\nexport const SchoolName = ({ school }: { school: School }) => {\n const { t } = useTranslation([\"common\"]);\n const tracking = useTracking();\n const { showSchoolRatings } = useNeighborhoodSchools();\n\n const schoolURLClicked = () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SCHOOL_URL_CLICKED,\n eventAttributes: [\n {\n label: \"school_name_clicked\",\n data: school.name,\n },\n {\n label: \"school_url_clicked\",\n data: school.url,\n },\n ],\n });\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SCHOOL_URL_CLICKED,\n eventAttributes: {\n school_name: school.name,\n school_url: school.url,\n },\n });\n };\n\n return (\n <div className={styles.container}>\n {school.url ? (\n <a\n onClick={schoolURLClicked}\n className={styles.schoolName}\n href={school.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n data-has-link={school.url !== undefined}\n data-testid=\"school-name-with-link\"\n >\n {school.name}\n </a>\n ) : (\n <p data-testid=\"school-name\" className={styles.schoolName}>\n {school.name}\n </p>\n )}\n\n {showSchoolRatings && school.rating && (\n <div\n data-testid=\"school-rating\"\n className={styles.ratingTag}\n title={t(\"common:map.marker.schoolAttributes.rating\")}\n >\n <Tag>{school.rating}</Tag>\n </div>\n )}\n </div>\n );\n};\n","export const container = `pb-4`;\nexport const board = `text-xs font-normal text-neutral-600`;\n","import React from \"react\";\n\nimport type { School } from \"@local-logic/client\";\nimport { SchoolName } from \"./SchoolName\";\nimport * as styles from \"./styles\";\n\nexport const SchoolHeader = ({ school }: { school: School }) => (\n <div className={styles.container}>\n <SchoolName school={school} />\n\n {school.school_board_attributes?.name && (\n <p data-testid=\"school-board\" className={styles.board}>\n {school.school_board_attributes?.name}\n </p>\n )}\n </div>\n);\n","export const rows = `\n odd:bg-white even:bg-neutral-50\n [&_td]:px-4 [&_td]:py-3\n`;\n\nexport const schoolName = `\n text-neutral-600\n text-sm font-bold\n data-[has-link=\"true\"]:text-primary-100\n data-[has-link=\"true\"]:pointer\n data-[has-link=\"true\"]:hover:underline\n`;\n\nexport const smallText = `\n text-xs font-normal\n text-neutral-600\n`;\n\nexport const mediumText = `\n text-sm font-normal\n text-neutral-600\n`;\n\nexport const badges = `\n flex flex-wrap gap-2\n`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\n\nimport { SchoolHeader } from \"../../SchoolHeader\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport { formatAddress } from \"~/utils/primitives/stringUtils\";\n\nexport const Body = ({\n schools,\n headers,\n}: {\n schools?: School[];\n headers: string[];\n}) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const { hasCategories } = useNeighborhoodSchools();\n\n return (\n <>\n {schools?.map((school) => (\n <tr key={`row-${school.name}`} className={styles.rows}>\n <td>\n <SchoolHeader school={school} />\n </td>\n <td>\n <div className={styles.badges}>\n {school.school_attributes?.types?.map((type) => (\n <Tag key={`${school.name}-${type}`}>{type}</Tag>\n ))}\n </div>\n </td>\n {headers.indexOf(\"languages\") !== -1 && (\n <td>\n <div className={styles.badges}>\n {school.school_attributes?.languages?.map((language) => (\n <Tag key={`${school.name}-${language}`} variant=\"light\">\n {language === \"fr\" ? t(\"french\") : t(\"english\")}\n </Tag>\n ))}\n </div>\n </td>\n )}\n <td>\n <div className={styles.badges}>\n {school.school_attributes?.levels?.map((level) => (\n <Tag key={`${school.name}-${level}`} variant=\"light\">\n {level}\n </Tag>\n ))}\n </div>\n </td>\n {hasCategories && (\n <td>\n <div className={styles.badges}>\n <Tag isVisible={!!school.is_advanced_placement}>\n {t(\"categories.advancedPlacement\")}\n </Tag>\n <Tag isVisible={!!school.is_charter}>\n {t(\"categories.charter\")}\n </Tag>\n <Tag isVisible={!!school.is_magnet}>\n {t(\"categories.magnet\")}\n </Tag>\n </div>\n </td>\n )}\n <td>\n <p className={styles.mediumText}>\n {formatAddress({\n street: school.address,\n city: school.city,\n state: school.province,\n })}\n </p>\n </td>\n </tr>\n ))}\n </>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport * as styles from \"./styles\";\nimport { Body } from \"./Body\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport { tableHeaders } from \"~/sdks/NeighborhoodSchools/types\";\n\nconst baseHeaders: {\n [key: string]: tableHeaders[];\n} = {\n CAN: [\"name\", \"type\", \"languages\", \"levels\", \"address\"],\n USA: [\"name\", \"type\", \"levels\", \"address\"],\n};\n\nexport const SchoolsTable = ({ schools }: { schools?: School[] }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const { isLoading, hasCategories, location } = useNeighborhoodSchools();\n\n const headers = useMemo(() => {\n if (isLoading) {\n // defaulting to USA, to avoid an empty column\n return baseHeaders.USA;\n }\n\n if (location?.country === \"USA\" && hasCategories) {\n const usaHeaders = [...baseHeaders.USA];\n if (!usaHeaders.includes(\"category\")) {\n usaHeaders.splice(usaHeaders.length - 1, 0, \"category\");\n }\n return usaHeaders;\n }\n\n return baseHeaders[location.country];\n }, [isLoading, location, hasCategories]);\n\n return (\n <div className={styles.container} data-is-loading={isLoading}>\n {!isLoading && (\n <table className={styles.table}>\n <thead>\n <tr>\n {headers &&\n headers.map((header) => (\n <th key={header} className={styles.header}>\n <h2>{t(`headers.${header}`)}</h2>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {schools && schools?.length > 0 && (\n <Body schools={schools} headers={headers} />\n )}\n\n {schools?.length === 0 && (\n <div className={styles.blankFilter}>\n <NoDataContent text={t(\"noFilteredData\")} />\n </div>\n )}\n </tbody>\n </table>\n )}\n\n {!isLoading && !schools && <NoDataContent text={t(\"noData\")} />}\n </div>\n );\n};\n","function isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction isRecord(subject) {\n return isObject(subject) || Array.isArray(subject);\n}\nfunction canUseDOM() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction areOptionsEqual(optionsA, optionsB) {\n const optionsAKeys = Object.keys(optionsA);\n const optionsBKeys = Object.keys(optionsB);\n if (optionsAKeys.length !== optionsBKeys.length) return false;\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n if (breakpointsA !== breakpointsB) return false;\n return optionsAKeys.every(key => {\n const valueA = optionsA[key];\n const valueB = optionsB[key];\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`;\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n return areOptionsEqual(valueA, valueB);\n });\n}\nfunction sortAndMapPluginToOptions(plugins) {\n return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options);\n}\nfunction arePluginsEqual(pluginsA, pluginsB) {\n if (pluginsA.length !== pluginsB.length) return false;\n const optionsA = sortAndMapPluginToOptions(pluginsA);\n const optionsB = sortAndMapPluginToOptions(pluginsB);\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index];\n return areOptionsEqual(optionA, optionB);\n });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };\n//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map\n","function isNumber(subject) {\n return typeof subject === 'number';\n}\nfunction isString(subject) {\n return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n return Math.abs(n);\n}\nfunction mathSign(n) {\n return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n if (valueB === 0 || valueA === 0) return 0;\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach(key => {\n const valueA = mergedObjects[key];\n const valueB = currentObject[key];\n const areObjects = isObject(valueA) && isObject(valueB);\n mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n });\n return mergedObjects;\n }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n const predefined = {\n start,\n center,\n end\n };\n function start() {\n return 0;\n }\n function center(n) {\n return end(n) / 2;\n }\n function end(n) {\n return viewSize - n;\n }\n function measure(n, index) {\n if (isString(align)) return predefined[align](n);\n return align(viewSize, n, index);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction EventStore() {\n let listeners = [];\n function add(node, type, handler, options = {\n passive: true\n }) {\n let removeListener;\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options);\n removeListener = () => node.removeEventListener(type, handler, options);\n } else {\n const legacyMediaQueryList = node;\n legacyMediaQueryList.addListener(handler);\n removeListener = () => legacyMediaQueryList.removeListener(handler);\n }\n listeners.push(removeListener);\n return self;\n }\n function clear() {\n listeners = listeners.filter(remove => remove());\n }\n const self = {\n add,\n clear\n };\n return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n const documentVisibleHandler = EventStore();\n const fixedTimeStep = 1000 / 60;\n let lastTimeStamp = null;\n let accumulatedTime = 0;\n let animationId = 0;\n function init() {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset();\n });\n }\n function destroy() {\n stop();\n documentVisibleHandler.clear();\n }\n function animate(timeStamp) {\n if (!animationId) return;\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp;\n update();\n update();\n }\n const timeElapsed = timeStamp - lastTimeStamp;\n lastTimeStamp = timeStamp;\n accumulatedTime += timeElapsed;\n while (accumulatedTime >= fixedTimeStep) {\n update();\n accumulatedTime -= fixedTimeStep;\n }\n const alpha = accumulatedTime / fixedTimeStep;\n render(alpha);\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n }\n function start() {\n if (animationId) return;\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n function stop() {\n ownerWindow.cancelAnimationFrame(animationId);\n lastTimeStamp = null;\n accumulatedTime = 0;\n animationId = 0;\n }\n function reset() {\n lastTimeStamp = null;\n accumulatedTime = 0;\n }\n const self = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n };\n return self;\n}\n\nfunction Axis(axis, contentDirection) {\n const isRightToLeft = contentDirection === 'rtl';\n const isVertical = axis === 'y';\n const scroll = isVertical ? 'y' : 'x';\n const cross = isVertical ? 'x' : 'y';\n const sign = !isVertical && isRightToLeft ? -1 : 1;\n const startEdge = getStartEdge();\n const endEdge = getEndEdge();\n function measureSize(nodeRect) {\n const {\n height,\n width\n } = nodeRect;\n return isVertical ? height : width;\n }\n function getStartEdge() {\n if (isVertical) return 'top';\n return isRightToLeft ? 'right' : 'left';\n }\n function getEndEdge() {\n if (isVertical) return 'bottom';\n return isRightToLeft ? 'left' : 'right';\n }\n function direction(n) {\n return n * sign;\n }\n const self = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n };\n return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n const length = mathAbs(min - max);\n function reachedMin(n) {\n return n < min;\n }\n function reachedMax(n) {\n return n > max;\n }\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n function removeOffset(n) {\n if (!length) return n;\n return n - length * Math.ceil((n - max) / length);\n }\n const self = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n };\n return self;\n}\n\nfunction Counter(max, start, loop) {\n const {\n constrain\n } = Limit(0, max);\n const loopEnd = max + 1;\n let counter = withinLimit(start);\n function withinLimit(n) {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n }\n function get() {\n return counter;\n }\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n function add(n) {\n return clone().set(get() + n);\n }\n function clone() {\n return Counter(max, get(), loop);\n }\n const self = {\n get,\n set,\n add,\n clone\n };\n return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n const {\n cross: crossAxis,\n direction\n } = axis;\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n const nonPassiveEvent = {\n passive: false\n };\n const initEvents = EventStore();\n const dragEvents = EventStore();\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n const snapForceBoost = {\n mouse: 300,\n touch: 400\n };\n const freeForceBoost = {\n mouse: 500,\n touch: 600\n };\n const baseSpeed = dragFree ? 43 : 25;\n let isMoving = false;\n let startScroll = 0;\n let startCross = 0;\n let pointerIsDown = false;\n let preventScroll = false;\n let preventClick = false;\n let isMouse = false;\n function init(emblaApi) {\n if (!watchDrag) return;\n function downIfAllowed(evt) {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n }\n const node = rootNode;\n initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n }\n function destroy() {\n initEvents.clear();\n dragEvents.clear();\n }\n function addDragEvents() {\n const node = isMouse ? ownerDocument : rootNode;\n dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n }\n function isFocusNode(node) {\n const nodeName = node.nodeName || '';\n return focusNodes.includes(nodeName);\n }\n function forceBoost() {\n const boost = dragFree ? freeForceBoost : snapForceBoost;\n const type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n function allowedForce(force, targetChanged) {\n const next = index.add(mathSign(force) * -1);\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n if (skipSnaps && targetChanged) return baseForce * 0.5;\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n function down(evt) {\n const isMouseEvt = isMouseEvent(evt, ownerWindow);\n isMouse = isMouseEvt;\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n isMoving = deltaAbs(target.get(), location.get()) >= 2;\n if (isMouseEvt && evt.button !== 0) return;\n if (isFocusNode(evt.target)) return;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n scrollBody.useFriction(0).useDuration(0);\n target.set(location);\n addDragEvents();\n startScroll = dragTracker.readPoint(evt);\n startCross = dragTracker.readPoint(evt, crossAxis);\n eventHandler.emit('pointerDown');\n }\n function move(evt) {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n const lastScroll = dragTracker.readPoint(evt);\n const lastCross = dragTracker.readPoint(evt, crossAxis);\n const diffScroll = deltaAbs(lastScroll, startScroll);\n const diffCross = deltaAbs(lastCross, startCross);\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt);\n preventScroll = diffScroll > diffCross;\n if (!preventScroll) return up(evt);\n }\n const diff = dragTracker.pointerMove(evt);\n if (diffScroll > dragThreshold) preventClick = true;\n scrollBody.useFriction(0.3).useDuration(0.75);\n animation.start();\n target.add(direction(diff));\n evt.preventDefault();\n }\n function up(evt) {\n const currentLocation = scrollTarget.byDistance(0, false);\n const targetChanged = currentLocation.index !== index.get();\n const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n const force = allowedForce(direction(rawForce), targetChanged);\n const forceFactor = factorAbs(rawForce, force);\n const speed = baseSpeed - 10 * forceFactor;\n const friction = baseFriction + forceFactor / 50;\n preventScroll = false;\n pointerIsDown = false;\n dragEvents.clear();\n scrollBody.useDuration(speed).useFriction(friction);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n eventHandler.emit('pointerUp');\n }\n function click(evt) {\n if (preventClick) {\n evt.stopPropagation();\n evt.preventDefault();\n preventClick = false;\n }\n }\n function pointerDown() {\n return pointerIsDown;\n }\n const self = {\n init,\n destroy,\n pointerDown\n };\n return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n const logInterval = 170;\n let startEvent;\n let lastEvent;\n function readTime(evt) {\n return evt.timeStamp;\n }\n function readPoint(evt, evtAxis) {\n const property = evtAxis || axis.scroll;\n const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n }\n function pointerDown(evt) {\n startEvent = evt;\n lastEvent = evt;\n return readPoint(evt);\n }\n function pointerMove(evt) {\n const diff = readPoint(evt) - readPoint(lastEvent);\n const expired = readTime(evt) - readTime(startEvent) > logInterval;\n lastEvent = evt;\n if (expired) startEvent = evt;\n return diff;\n }\n function pointerUp(evt) {\n if (!startEvent || !lastEvent) return 0;\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n const diffTime = readTime(evt) - readTime(startEvent);\n const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n const force = diffDrag / diffTime;\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n return isFlick ? force : 0;\n }\n const self = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n };\n return self;\n}\n\nfunction NodeRects() {\n function measure(node) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = node;\n const offset = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n };\n return offset;\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction PercentOfView(viewSize) {\n function measure(n) {\n return viewSize * (n / 100);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n const observeNodes = [container].concat(slides);\n let resizeObserver;\n let containerSize;\n let slideSizes = [];\n let destroyed = false;\n function readSize(node) {\n return axis.measureSize(nodeRects.measure(node));\n }\n function init(emblaApi) {\n if (!watchResize) return;\n containerSize = readSize(container);\n slideSizes = slides.map(readSize);\n function defaultCallback(entries) {\n for (const entry of entries) {\n if (destroyed) return;\n const isContainer = entry.target === container;\n const slideIndex = slides.indexOf(entry.target);\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n const newSize = readSize(isContainer ? container : slides[slideIndex]);\n const diffSize = mathAbs(newSize - lastSize);\n if (diffSize >= 0.5) {\n emblaApi.reInit();\n eventHandler.emit('resize');\n break;\n }\n }\n }\n resizeObserver = new ResizeObserver(entries => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries);\n }\n });\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach(node => resizeObserver.observe(node));\n });\n }\n function destroy() {\n destroyed = true;\n if (resizeObserver) resizeObserver.disconnect();\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n let scrollVelocity = 0;\n let scrollDirection = 0;\n let scrollDuration = baseDuration;\n let scrollFriction = baseFriction;\n let rawLocation = location.get();\n let rawLocationPrevious = 0;\n function seek() {\n const displacement = target.get() - location.get();\n const isInstant = !scrollDuration;\n let scrollDistance = 0;\n if (isInstant) {\n scrollVelocity = 0;\n previousLocation.set(target);\n location.set(target);\n scrollDistance = displacement;\n } else {\n previousLocation.set(location);\n scrollVelocity += displacement / scrollDuration;\n scrollVelocity *= scrollFriction;\n rawLocation += scrollVelocity;\n location.add(scrollVelocity);\n scrollDistance = rawLocation - rawLocationPrevious;\n }\n scrollDirection = mathSign(scrollDistance);\n rawLocationPrevious = rawLocation;\n return self;\n }\n function settled() {\n const diff = target.get() - offsetLocation.get();\n return mathAbs(diff) < 0.001;\n }\n function duration() {\n return scrollDuration;\n }\n function direction() {\n return scrollDirection;\n }\n function velocity() {\n return scrollVelocity;\n }\n function useBaseDuration() {\n return useDuration(baseDuration);\n }\n function useBaseFriction() {\n return useFriction(baseFriction);\n }\n function useDuration(n) {\n scrollDuration = n;\n return self;\n }\n function useFriction(n) {\n scrollFriction = n;\n return self;\n }\n const self = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n };\n return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n const pullBackThreshold = percentOfView.measure(10);\n const edgeOffsetTolerance = percentOfView.measure(50);\n const frictionLimit = Limit(0.1, 0.99);\n let disabled = false;\n function shouldConstrain() {\n if (disabled) return false;\n if (!limit.reachedAny(target.get())) return false;\n if (!limit.reachedAny(location.get())) return false;\n return true;\n }\n function constrain(pointerDown) {\n if (!shouldConstrain()) return;\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n const diffToEdge = mathAbs(limit[edge] - location.get());\n const diffToTarget = target.get() - location.get();\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n target.subtract(diffToTarget * friction);\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()));\n scrollBody.useDuration(25).useBaseFriction();\n }\n }\n function toggleActive(active) {\n disabled = !active;\n }\n const self = {\n shouldConstrain,\n constrain,\n toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n const scrollBounds = Limit(-contentSize + viewSize, 0);\n const snapsBounded = measureBounded();\n const scrollContainLimit = findScrollContainLimit();\n const snapsContained = measureContained();\n function usePixelTolerance(bound, snap) {\n return deltaAbs(bound, snap) <= 1;\n }\n function findScrollContainLimit() {\n const startSnap = snapsBounded[0];\n const endSnap = arrayLast(snapsBounded);\n const min = snapsBounded.lastIndexOf(startSnap);\n const max = snapsBounded.indexOf(endSnap) + 1;\n return Limit(min, max);\n }\n function measureBounded() {\n return snapsAligned.map((snapAligned, index) => {\n const {\n min,\n max\n } = scrollBounds;\n const snap = scrollBounds.constrain(snapAligned);\n const isFirst = !index;\n const isLast = arrayIsLastIndex(snapsAligned, index);\n if (isFirst) return max;\n if (isLast) return min;\n if (usePixelTolerance(min, snap)) return min;\n if (usePixelTolerance(max, snap)) return max;\n return snap;\n }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n }\n function measureContained() {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n if (containScroll === 'keepSnaps') return snapsBounded;\n const {\n min,\n max\n } = scrollContainLimit;\n return snapsBounded.slice(min, max);\n }\n const self = {\n snapsContained,\n scrollContainLimit\n };\n return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n const max = scrollSnaps[0];\n const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n const limit = Limit(min, max);\n const self = {\n limit\n };\n return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n const jointSafety = 0.1;\n const min = limit.min + jointSafety;\n const max = limit.max + jointSafety;\n const {\n reachedMin,\n reachedMax\n } = Limit(min, max);\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n function loop(direction) {\n if (!shouldLoop(direction)) return;\n const loopDistance = contentSize * (direction * -1);\n vectors.forEach(v => v.add(loopDistance));\n }\n const self = {\n loop\n };\n return self;\n}\n\nfunction ScrollProgress(limit) {\n const {\n max,\n length\n } = limit;\n function get(n) {\n const currentLocation = n - max;\n return length ? currentLocation / -length : 0;\n }\n const self = {\n get\n };\n return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n const {\n startEdge,\n endEdge\n } = axis;\n const {\n groupSlides\n } = slidesToScroll;\n const alignments = measureSizes().map(alignment.measure);\n const snaps = measureUnaligned();\n const snapsAligned = measureAligned();\n function measureSizes() {\n return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n }\n function measureUnaligned() {\n return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n }\n function measureAligned() {\n return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n }\n const self = {\n snaps,\n snapsAligned\n };\n return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n const {\n groupSlides\n } = slidesToScroll;\n const {\n min,\n max\n } = scrollContainLimit;\n const slideRegistry = createSlideRegistry();\n function createSlideRegistry() {\n const groupedSlideIndexes = groupSlides(slideIndexes);\n const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n if (scrollSnaps.length === 1) return [slideIndexes];\n if (doNotContain) return groupedSlideIndexes;\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(groups, index);\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1;\n return arrayFromNumber(range);\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n return arrayFromNumber(range, arrayLast(groups)[0]);\n }\n return group;\n });\n }\n const self = {\n slideRegistry\n };\n return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n const {\n reachedAny,\n removeOffset,\n constrain\n } = limit;\n function minDistance(distances) {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n }\n function findTargetSnap(target) {\n const distance = loop ? removeOffset(target) : constrain(target);\n const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n diff: shortcut(snap - distance, 0),\n index\n })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n const {\n index\n } = ascDiffsToSnaps[0];\n return {\n index,\n distance\n };\n }\n function shortcut(target, direction) {\n const targets = [target, target + contentSize, target - contentSize];\n if (!loop) return target;\n if (!direction) return minDistance(targets);\n const matchingTargets = targets.filter(t => mathSign(t) === direction);\n if (matchingTargets.length) return minDistance(matchingTargets);\n return arrayLast(targets) - contentSize;\n }\n function byIndex(index, direction) {\n const diffToSnap = scrollSnaps[index] - targetVector.get();\n const distance = shortcut(diffToSnap, direction);\n return {\n index,\n distance\n };\n }\n function byDistance(distance, snap) {\n const target = targetVector.get() + distance;\n const {\n index,\n distance: targetSnapDistance\n } = findTargetSnap(target);\n const reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index,\n distance\n };\n const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n const snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index,\n distance: snapDistance\n };\n }\n const self = {\n byDistance,\n byIndex,\n shortcut\n };\n return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n function scrollTo(target) {\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n targetVector.add(distanceDiff);\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start();\n } else {\n animation.update();\n animation.render(1);\n animation.update();\n }\n }\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n eventHandler.emit('select');\n }\n }\n function distance(n, snap) {\n const target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n function index(n, direction) {\n const targetIndex = indexCurrent.clone().set(n);\n const target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n const self = {\n distance,\n index\n };\n return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n const focusListenerOptions = {\n passive: true,\n capture: true\n };\n let lastTabPressTime = 0;\n function init(emblaApi) {\n if (!watchFocus) return;\n function defaultCallback(index) {\n const nowTime = new Date().getTime();\n const diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n eventHandler.emit('slideFocusStart');\n root.scrollLeft = 0;\n const group = slideRegistry.findIndex(group => group.includes(index));\n if (!isNumber(group)) return;\n scrollBody.useDuration(0);\n scrollTo.index(group, 0);\n eventHandler.emit('slideFocus');\n }\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach((slide, slideIndex) => {\n eventStore.add(slide, 'focus', evt => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex);\n }\n }, focusListenerOptions);\n });\n }\n function registerTabPress(event) {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n }\n const self = {\n init\n };\n return self;\n}\n\nfunction Vector1D(initialValue) {\n let value = initialValue;\n function get() {\n return value;\n }\n function set(n) {\n value = normalizeInput(n);\n }\n function add(n) {\n value += normalizeInput(n);\n }\n function subtract(n) {\n value -= normalizeInput(n);\n }\n function normalizeInput(n) {\n return isNumber(n) ? n : n.get();\n }\n const self = {\n get,\n set,\n add,\n subtract\n };\n return self;\n}\n\nfunction Translate(axis, container) {\n const translate = axis.scroll === 'x' ? x : y;\n const containerStyle = container.style;\n let previousTarget = null;\n let disabled = false;\n function x(n) {\n return `translate3d(${n}px,0px,0px)`;\n }\n function y(n) {\n return `translate3d(0px,${n}px,0px)`;\n }\n function to(target) {\n if (disabled) return;\n const newTarget = roundToTwoDecimals(axis.direction(target));\n if (newTarget === previousTarget) return;\n containerStyle.transform = translate(newTarget);\n previousTarget = newTarget;\n }\n function toggleActive(active) {\n disabled = !active;\n }\n function clear() {\n if (disabled) return;\n containerStyle.transform = '';\n if (!container.getAttribute('style')) container.removeAttribute('style');\n }\n const self = {\n clear,\n to,\n toggleActive\n };\n return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n const roundingSafety = 0.5;\n const ascItems = arrayKeys(slideSizesWithGaps);\n const descItems = arrayKeys(slideSizesWithGaps).reverse();\n const loopPoints = startPoints().concat(endPoints());\n function removeSlideSizes(indexes, from) {\n return indexes.reduce((a, i) => {\n return a - slideSizesWithGaps[i];\n }, from);\n }\n function slidesInGap(indexes, gap) {\n return indexes.reduce((a, i) => {\n const remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n function findSlideBounds(offset) {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }));\n }\n function findLoopPoints(indexes, offset, isEndEdge) {\n const slideBounds = findSlideBounds(offset);\n return indexes.map(index => {\n const initial = isEndEdge ? 0 : -contentSize;\n const altered = isEndEdge ? contentSize : 0;\n const boundEdge = isEndEdge ? 'end' : 'start';\n const loopPoint = slideBounds[index][boundEdge];\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => location.get() > loopPoint ? initial : altered\n };\n });\n }\n function startPoints() {\n const gap = scrollSnaps[0];\n const indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, contentSize, false);\n }\n function endPoints() {\n const gap = viewSize - scrollSnaps[0] - 1;\n const indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, -contentSize, true);\n }\n function canLoop() {\n return loopPoints.every(({\n index\n }) => {\n const otherIndexes = ascItems.filter(i => i !== index);\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n });\n }\n function loop() {\n loopPoints.forEach(loopPoint => {\n const {\n target,\n translate,\n slideLocation\n } = loopPoint;\n const shiftLocation = target();\n if (shiftLocation === slideLocation.get()) return;\n translate.to(shiftLocation);\n slideLocation.set(shiftLocation);\n });\n }\n function clear() {\n loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n }\n const self = {\n canLoop,\n clear,\n loop,\n loopPoints\n };\n return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n let mutationObserver;\n let destroyed = false;\n function init(emblaApi) {\n if (!watchSlides) return;\n function defaultCallback(mutations) {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit();\n eventHandler.emit('slidesChanged');\n break;\n }\n }\n }\n mutationObserver = new MutationObserver(mutations => {\n if (destroyed) return;\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations);\n }\n });\n mutationObserver.observe(container, {\n childList: true\n });\n }\n function destroy() {\n if (mutationObserver) mutationObserver.disconnect();\n destroyed = true;\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n const intersectionEntryMap = {};\n let inViewCache = null;\n let notInViewCache = null;\n let intersectionObserver;\n let destroyed = false;\n function init() {\n intersectionObserver = new IntersectionObserver(entries => {\n if (destroyed) return;\n entries.forEach(entry => {\n const index = slides.indexOf(entry.target);\n intersectionEntryMap[index] = entry;\n });\n inViewCache = null;\n notInViewCache = null;\n eventHandler.emit('slidesInView');\n }, {\n root: container.parentElement,\n threshold\n });\n slides.forEach(slide => intersectionObserver.observe(slide));\n }\n function destroy() {\n if (intersectionObserver) intersectionObserver.disconnect();\n destroyed = true;\n }\n function createInViewList(inView) {\n return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n const index = parseInt(slideIndex);\n const {\n isIntersecting\n } = intersectionEntryMap[index];\n const inViewMatch = inView && isIntersecting;\n const notInViewMatch = !inView && !isIntersecting;\n if (inViewMatch || notInViewMatch) list.push(index);\n return list;\n }, []);\n }\n function get(inView = true) {\n if (inView && inViewCache) return inViewCache;\n if (!inView && notInViewCache) return notInViewCache;\n const slideIndexes = createInViewList(inView);\n if (inView) inViewCache = slideIndexes;\n if (!inView) notInViewCache = slideIndexes;\n return slideIndexes;\n }\n const self = {\n init,\n destroy,\n get\n };\n return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n const {\n measureSize,\n startEdge,\n endEdge\n } = axis;\n const withEdgeGap = slideRects[0] && readEdgeGap;\n const startGap = measureStartGap();\n const endGap = measureEndGap();\n const slideSizes = slideRects.map(measureSize);\n const slideSizesWithGaps = measureWithGaps();\n function measureStartGap() {\n if (!withEdgeGap) return 0;\n const slideRect = slideRects[0];\n return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n }\n function measureEndGap() {\n if (!withEdgeGap) return 0;\n const style = ownerWindow.getComputedStyle(arrayLast(slides));\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n }\n function measureWithGaps() {\n return slideRects.map((rect, index, rects) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(rects, index);\n if (isFirst) return slideSizes[index] + startGap;\n if (isLast) return slideSizes[index] + endGap;\n return rects[index + 1][startEdge] - rect[startEdge];\n }).map(mathAbs);\n }\n const self = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n };\n return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n const {\n startEdge,\n endEdge,\n direction\n } = axis;\n const groupByNumber = isNumber(slidesToScroll);\n function byNumber(array, groupSize) {\n return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n }\n function bySize(array) {\n if (!array.length) return [];\n return arrayKeys(array).reduce((groups, rectB, index) => {\n const rectA = arrayLast(groups) || 0;\n const isFirst = rectA === 0;\n const isLast = rectB === arrayLastIndex(array);\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n const gapA = !loop && isFirst ? direction(startGap) : 0;\n const gapB = !loop && isLast ? direction(endGap) : 0;\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n if (isLast) groups.push(array.length);\n return groups;\n }, []).map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0);\n return array.slice(previousSize, currentSize);\n });\n }\n function groupSlides(array) {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n }\n const self = {\n groupSlides\n };\n return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options;\n // Measurements\n const pixelTolerance = 2;\n const nodeRects = NodeRects();\n const containerRect = nodeRects.measure(container);\n const slideRects = slides.map(nodeRects.measure);\n const axis = Axis(scrollAxis, direction);\n const viewSize = axis.measureSize(containerRect);\n const percentOfView = PercentOfView(viewSize);\n const alignment = Alignment(align, viewSize);\n const containSnaps = !loop && !!containScroll;\n const readEdgeGap = loop || !!containScroll;\n const {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n const {\n snaps,\n snapsAligned\n } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n const {\n snapsContained,\n scrollContainLimit\n } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n const {\n limit\n } = ScrollLimit(contentSize, scrollSnaps, loop);\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n const indexPrevious = index.clone();\n const slideIndexes = arrayKeys(slides);\n // Animation\n const update = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: {\n loop\n }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n scrollBody.seek();\n };\n const render = ({\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: {\n loop\n }\n }, alpha) => {\n const shouldSettle = scrollBody.settled();\n const withinBounds = !scrollBounds.shouldConstrain();\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n if (hasSettledAndIdle) animation.stop();\n const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n offsetLocation.set(interpolatedLocation);\n if (loop) {\n scrollLooper.loop(scrollBody.direction());\n slideLooper.loop();\n }\n translate.to(offsetLocation.get());\n if (hasSettledAndIdle) eventHandler.emit('settle');\n if (!hasSettled) eventHandler.emit('scroll');\n };\n const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n // Shared\n const friction = 0.68;\n const startLocation = scrollSnaps[index.get()];\n const location = Vector1D(startLocation);\n const previousLocation = Vector1D(startLocation);\n const offsetLocation = Vector1D(startLocation);\n const target = Vector1D(startLocation);\n const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n const scrollProgress = ScrollProgress(limit);\n const eventStore = EventStore();\n const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n const {\n slideRegistry\n } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n // Engine\n const engine = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n scrollBody,\n scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n };\n return engine;\n}\n\nfunction EventHandler() {\n let listeners = {};\n let api;\n function init(emblaApi) {\n api = emblaApi;\n }\n function getListeners(evt) {\n return listeners[evt] || [];\n }\n function emit(evt) {\n getListeners(evt).forEach(e => e(api, evt));\n return self;\n }\n function on(evt, cb) {\n listeners[evt] = getListeners(evt).concat([cb]);\n return self;\n }\n function off(evt, cb) {\n listeners[evt] = getListeners(evt).filter(e => e !== cb);\n return self;\n }\n function clear() {\n listeners = {};\n }\n const self = {\n init,\n emit,\n off,\n on,\n clear\n };\n return self;\n}\n\nconst defaultOptions = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n function mergeOptions(optionsA, optionsB) {\n return objectsMergeDeep(optionsA, optionsB || {});\n }\n function optionsAtMedia(options) {\n const optionsAtMedia = options.breakpoints || {};\n const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n return mergeOptions(options, matchedMediaOptions);\n }\n function optionsMediaQueries(optionsList) {\n return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n }\n const self = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n };\n return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n let activePlugins = [];\n function init(emblaApi, plugins) {\n activePlugins = plugins.filter(({\n options\n }) => optionsHandler.optionsAtMedia(options).active !== false);\n activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n return plugins.reduce((map, plugin) => Object.assign(map, {\n [plugin.name]: plugin\n }), {});\n }\n function destroy() {\n activePlugins = activePlugins.filter(plugin => plugin.destroy());\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n const ownerDocument = root.ownerDocument;\n const ownerWindow = ownerDocument.defaultView;\n const optionsHandler = OptionsHandler(ownerWindow);\n const pluginsHandler = PluginsHandler(optionsHandler);\n const mediaHandlers = EventStore();\n const eventHandler = EventHandler();\n const {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n } = optionsHandler;\n const {\n on,\n off,\n emit\n } = eventHandler;\n const reInit = reActivate;\n let destroyed = false;\n let engine;\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n let options = mergeOptions(optionsBase);\n let pluginList = [];\n let pluginApis;\n let container;\n let slides;\n function storeElements() {\n const {\n container: userContainer,\n slides: userSlides\n } = options;\n const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n container = customContainer || root.children[0];\n const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n slides = [].slice.call(customSlides || container.children);\n }\n function createEngine(options) {\n const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, {\n loop: false\n });\n return createEngine(optionsWithoutLoop);\n }\n return engine;\n }\n function activate(withOptions, withPlugins) {\n if (destroyed) return;\n optionsBase = mergeOptions(optionsBase, withOptions);\n options = optionsAtMedia(optionsBase);\n pluginList = withPlugins || pluginList;\n storeElements();\n engine = createEngine(options);\n optionsMediaQueries([optionsBase, ...pluginList.map(({\n options\n }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n if (!options.active) return;\n engine.translate.to(engine.location.get());\n engine.animation.init();\n engine.slidesInView.init();\n engine.slideFocus.init(self);\n engine.eventHandler.init(self);\n engine.resizeHandler.init(self);\n engine.slidesHandler.init(self);\n if (engine.options.loop) engine.slideLooper.loop();\n if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n pluginApis = pluginsHandler.init(self, pluginList);\n }\n function reActivate(withOptions, withPlugins) {\n const startIndex = selectedScrollSnap();\n deActivate();\n activate(mergeOptions({\n startIndex\n }, withOptions), withPlugins);\n eventHandler.emit('reInit');\n }\n function deActivate() {\n engine.dragHandler.destroy();\n engine.eventStore.clear();\n engine.translate.clear();\n engine.slideLooper.clear();\n engine.resizeHandler.destroy();\n engine.slidesHandler.destroy();\n engine.slidesInView.destroy();\n engine.animation.destroy();\n pluginsHandler.destroy();\n mediaHandlers.clear();\n }\n function destroy() {\n if (destroyed) return;\n destroyed = true;\n mediaHandlers.clear();\n deActivate();\n eventHandler.emit('destroy');\n eventHandler.clear();\n }\n function scrollTo(index, jump, direction) {\n if (!options.active || destroyed) return;\n engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n engine.scrollTo.index(index, direction || 0);\n }\n function scrollNext(jump) {\n const next = engine.index.add(1).get();\n scrollTo(next, jump, -1);\n }\n function scrollPrev(jump) {\n const prev = engine.index.add(-1).get();\n scrollTo(prev, jump, 1);\n }\n function canScrollNext() {\n const next = engine.index.add(1).get();\n return next !== selectedScrollSnap();\n }\n function canScrollPrev() {\n const prev = engine.index.add(-1).get();\n return prev !== selectedScrollSnap();\n }\n function scrollSnapList() {\n return engine.scrollSnapList;\n }\n function scrollProgress() {\n return engine.scrollProgress.get(engine.offsetLocation.get());\n }\n function selectedScrollSnap() {\n return engine.index.get();\n }\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n function slidesInView() {\n return engine.slidesInView.get();\n }\n function slidesNotInView() {\n return engine.slidesInView.get(false);\n }\n function plugins() {\n return pluginApis;\n }\n function internalEngine() {\n return engine;\n }\n function rootNode() {\n return root;\n }\n function containerNode() {\n return container;\n }\n function slideNodes() {\n return slides;\n }\n const self = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n };\n activate(userOptions, userPlugins);\n setTimeout(() => eventHandler.emit('init'), 0);\n return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel(options = {}, plugins = []) {\n const storedOptions = useRef(options);\n const storedPlugins = useRef(plugins);\n const [emblaApi, setEmblaApi] = useState();\n const [viewport, setViewport] = useState();\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n }, [emblaApi]);\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return;\n storedOptions.current = options;\n reInit();\n }, [options, reInit]);\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return;\n storedPlugins.current = plugins;\n reInit();\n }, [plugins, reInit]);\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n setEmblaApi(newEmblaApi);\n return () => newEmblaApi.destroy();\n } else {\n setEmblaApi(undefined);\n }\n }, [viewport, setEmblaApi]);\n return [setViewport, emblaApi];\n}\nuseEmblaCarousel.globalOptions = undefined;\n\nexport { useEmblaCarousel as default };\n//# sourceMappingURL=embla-carousel-react.esm.js.map\n","import React, {\n ComponentPropsWithRef,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\n\nimport type { EmblaCarouselType } from \"embla-carousel\";\n\ntype UseDotButtonType = {\n selectedIndex: number;\n scrollSnaps: number[];\n onDotButtonClick: (index: number) => void;\n};\n\nexport const useDotButton = (\n emblaApi: EmblaCarouselType | undefined,\n): UseDotButtonType => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [scrollSnaps, setScrollSnaps] = useState<number[]>([]);\n\n const onDotButtonClick = useCallback(\n (index: number) => {\n if (!emblaApi) return;\n emblaApi.scrollTo(index);\n },\n [emblaApi],\n );\n\n const onInit = useCallback((emblaApiInit: EmblaCarouselType) => {\n setScrollSnaps(emblaApiInit.scrollSnapList());\n }, []);\n\n const onSelect = useCallback((emblaApiSelect: EmblaCarouselType) => {\n setSelectedIndex(emblaApiSelect.selectedScrollSnap());\n }, []);\n\n useEffect(() => {\n if (!emblaApi) return;\n\n onInit(emblaApi);\n onSelect(emblaApi);\n emblaApi.on(\"reInit\", onInit).on(\"reInit\", onSelect).on(\"select\", onSelect);\n }, [emblaApi, onInit, onSelect]);\n\n return {\n selectedIndex,\n scrollSnaps,\n onDotButtonClick,\n };\n};\n\ntype PropType = ComponentPropsWithRef<\"button\">;\n\nexport const DotButton: React.FC<PropType> = (props) => {\n const { children, ...restProps } = props;\n\n return (\n <button type=\"button\" {...restProps}>\n {children}\n </button>\n );\n};\n","export const section = `\n group/schools-list\n\n data-[is-loading=true]:h-36\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n\n`;\n\nexport const container = `\n [&>div:nth-child(odd)]:bg-neutral-50\n`;\n\nexport const slide = `\n px-6 pt-4 pb-6\n md:px-5 md:pt-6 md:pb-6\n`;\n\nexport const title = `\n pb-4 \n`;\n\nexport const schoolName = `\n text-neutral-600\n text-sm font-bold\n data-[has-link=\"true\"]:text-primary-100\n data-[has-link=\"true\"]:pointer\n`;\n\nexport const board = `\n text-xs font-normal\n text-neutral-600\n`;\n\nexport const address = `\n font-normal text-sm\n text-neutral-600 \n mb-4\n`;\n\nexport const controls = `py-2`;\n\nexport const dot = `\n bg-zinc-300\n data-[selected=true]:bg-primary-100\n`;\n\nexport const badges = `\n flex flex-wrap\n mb-4 gap-2\n`;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { DotButton } from \"../EmblaCarouselDotButton\";\nimport * as styles from \"../styles\";\n\nexport const Controls = ({\n selectedIndex,\n scrollSnaps,\n onDotButtonClick,\n}: {\n selectedIndex: number;\n scrollSnaps: number[];\n onDotButtonClick: (index: number) => void;\n}) => {\n return (\n <div className={twMerge(`embla__dots ${styles.controls}`)}>\n {scrollSnaps.map((_, index) => (\n <DotButton\n key={index}\n onClick={() => onDotButtonClick(index)}\n className={twMerge(`embla__dot ${styles.dot}`)}\n data-selected={index === selectedIndex}\n />\n ))}\n </div>\n );\n};\n","export const header = `\n pt-4 pb-2\n font-medium\n text-sm\n border-t border-neutral-300\n`;\n","import React from \"react\";\nimport * as styles from \"./styles\";\n\nexport const SchoolSection = ({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) => {\n return (\n <>\n <p className={styles.header}>{title}</p>\n {children}\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport { SchoolSection } from \"../SchoolSection\";\n\nexport const SchoolCategories = ({ school }: { school: School }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n\n if (\n !school.is_advanced_placement &&\n !school.is_charter &&\n !school.is_magnet\n ) {\n return null;\n }\n\n return (\n <SchoolSection title={t(\"headers.category\")}>\n <>\n <Tag isVisible={!!school.is_advanced_placement}>\n {t(\"categories.advancedPlacement\")}\n </Tag>\n <Tag isVisible={!!school.is_charter}>{t(\"categories.charter\")}</Tag>\n <Tag isVisible={!!school.is_magnet}>{t(\"categories.magnet\")}</Tag>\n </>\n </SchoolSection>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport { SchoolHeader } from \"../../SchoolHeader\";\nimport * as styles from \"../styles\";\n\nimport { SchoolSection } from \"./SchoolSection\";\nimport { SchoolCategories } from \"./SchoolCategories\";\n\nimport { formatAddress } from \"~/utils/primitives/stringUtils\";\n\nexport const SchoolItem = ({ school }: { school: School }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n\n return (\n <div className={styles.slide}>\n <SchoolHeader school={school} />\n\n <SchoolSection title={t(\"headers.type\")}>\n <div className={styles.badges}>\n {school.school_attributes?.types?.map((type) => (\n <Tag key={`${school.name}-${type}`}>{type}</Tag>\n ))}\n </div>\n </SchoolSection>\n\n <SchoolSection title={t(\"headers.levels\")}>\n <div className={styles.badges}>\n {school.school_attributes?.levels?.map((level) => (\n <Tag variant=\"light\" key={`${school.name}-${level}`}>\n {level}\n </Tag>\n ))}\n </div>\n </SchoolSection>\n\n <SchoolCategories school={school} />\n\n <SchoolSection title={t(\"headers.address\")}>\n <p className={styles.address}>\n {formatAddress({\n street: school.address,\n city: school.city,\n state: school.province,\n })}\n </p>\n </SchoolSection>\n </div>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useDotButton } from \"./EmblaCarouselDotButton\";\nimport { Controls } from \"./Controls\";\nimport { SchoolItem } from \"./SchoolItem\";\nimport * as styles from \"./styles\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport \"./embla.css\";\n\nexport const SchoolsList = ({ schools }: { schools?: School[] }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const { isLoading } = useNeighborhoodSchools();\n const [emblaRef, emblaApi] = useEmblaCarousel();\n\n const { selectedIndex, scrollSnaps, onDotButtonClick } =\n useDotButton(emblaApi);\n\n return (\n <>\n <section\n className={twMerge(`embla ${styles.section}`)}\n data-is-loading={isLoading}\n >\n {!isLoading &&\n (!schools || schools.length === 0 ? (\n <NoDataContent text={t(\"noData\")} />\n ) : (\n <div className=\"embla__viewport\" ref={emblaRef}>\n <div className={twMerge(`embla__container ${styles.container}`)}>\n {schools.map((school) => (\n <div className=\"embla__slide\" key={school.name}>\n <SchoolItem school={school} />\n </div>\n ))}\n </div>\n </div>\n ))}\n\n <Controls\n selectedIndex={selectedIndex}\n scrollSnaps={scrollSnaps}\n onDotButtonClick={onDotButtonClick}\n />\n </section>\n </>\n );\n};\n","export const container = `\n mt-4\n md:flex items-center\n bg-base-white\n [&>a]:justify-end\n`;\n\nexport const dataDisclaimer = `flex-1 text-xs`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\n\nimport { Attribution } from \"~/components/Attribution\";\nimport { TrackingPipelineEvents } from \"~/sdks/NeighborhoodSchools/types\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\n\nexport const Footer = ({ hideAttribution }: { hideAttribution?: boolean }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const tracking = useTracking();\n const { locale } = useNeighborhoodSchools();\n\n const handleAttributionClicked = () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.ATTRIBUTION_CLICKED,\n });\n };\n\n return (\n <div className={styles.container}>\n <p className={styles.dataDisclaimer}>{t(\"dataDisclaimer\")}</p>\n <Attribution\n onClick={handleAttributionClicked}\n sdkName=\"neighborhood-schools\"\n locale={locale}\n isHidden={hideAttribution}\n />\n </div>\n );\n};\n","export const spinner = `\n flex justify-center items-center \n px-3 pt-4 pb-3 w-full h-full\n`;\n\nexport const noDataContainer = `\n bg-neutral-50 px-3 pt-4 pb-3 rounded-sm box-border\n`;\n\nexport const header = `\n flex justify-between items-center\n`;\n\nexport const filters = `\n flex flex-wrap\n justify-around sm:justify-normal\n gap-2 md:gap-6\n mb-5 md:mb-6\n mt-3 md:mt-4\n`;\n","import React, { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n SchoolLevel,\n SchoolType,\n} from \"@local-logic/client/dist/features/schools\";\nimport { BackpackIcon, GraduationCapIcon } from \"@phosphor-icons/react\";\n\nimport { Filter } from \"../Filter\";\nimport { SchoolsTable } from \"../SchoolsTable\";\n\nimport { SchoolsList } from \"../SchoolsList\";\nimport { Footer } from \"../Footer\";\nimport * as styles from \"./styles\";\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport {\n AnalyticsEvents,\n TrackingPipelineEvents,\n NeighborhoodSchoolsProps,\n} from \"~/sdks/NeighborhoodSchools/types\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { useTracking } from \"~/tracking\";\n\nexport const Content = () => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const tracking = useTracking();\n const { sdkState } = useStateManagerContext<NeighborhoodSchoolsProps>();\n const {\n filteredSchools,\n schoolLevels,\n schoolTypes,\n filterLevel,\n filterType,\n setFilterLevel,\n setFilterType,\n } = useNeighborhoodSchools();\n const isMobile = useIsMobile();\n\n const schoolTypeOptions = schoolTypes.map((type) => ({\n value: type,\n label: type,\n }));\n\n const schoolLevelOptions = schoolLevels.map((level) => ({\n value: level,\n label: level,\n }));\n\n useEffect(() => {\n if (filterType !== undefined) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.FILTER_BY_TYPE,\n eventAttributes: [\n {\n label: \"filter_by_type\",\n data: filterType,\n },\n ],\n });\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.FILTER_BY_TYPE,\n eventAttributes: {\n filter_by_type: filterType,\n },\n });\n }\n\n if (filterLevel !== undefined) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.FILTER_BY_LEVEL,\n eventAttributes: [\n {\n label: \"filter_by_level\",\n data: filterLevel,\n },\n ],\n });\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.FILTER_BY_LEVEL,\n eventAttributes: {\n filter_by_level: filterLevel,\n },\n });\n }\n }, [filterLevel, filterType]);\n\n return (\n <>\n <TitleHeader\n title={\n typeof sdkState.options?.title === \"string\" ||\n sdkState.options?.title === false\n ? sdkState.options.title\n : t(\"title\")\n }\n />\n <div className={styles.filters}>\n <Filter\n options={schoolTypeOptions}\n icon={BackpackIcon}\n label={t(\"headers.type\")}\n allLabel={t(\"headers.typesFilter\")}\n activeFilter={filterType}\n handleFilterChange={(type) =>\n setFilterType(type as SchoolType | undefined)\n }\n />\n <Filter\n options={schoolLevelOptions}\n icon={GraduationCapIcon}\n label={t(\"headers.levels\")}\n allLabel={t(\"headers.levelsFilter\")}\n activeFilter={filterLevel}\n handleFilterChange={(level) =>\n setFilterLevel(level as SchoolLevel | undefined)\n }\n />\n </div>\n {isMobile ? (\n <SchoolsList schools={filteredSchools} />\n ) : (\n <SchoolsTable schools={filteredSchools} />\n )}\n\n <Footer hideAttribution={sdkState.options?.hideAttribution} />\n </>\n );\n};\n","import React, { useMemo } from \"react\";\n// TODO Move this import to sdks/sdks-app/src/App.tsx once all SDKs are migrated\nimport \"~/assets/styles/globals.css\";\nimport type { NeighborhoodSchoolsProps } from \"./types\";\nimport { NeighborhoodSchoolsProvider } from \"./context\";\nimport { schema } from \"./schema\";\nimport { Content } from \"./components/Content\";\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 NeighborhoodSchools = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodSchoolsProps>();\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 Schools\"\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_SCHOOLS}\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_SCHOOLS,\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 <NeighborhoodSchoolsProvider>\n <Content />\n </NeighborhoodSchoolsProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodSchools;\n"],"x_google_ignoreList":[0,1,22,23,24],"mappings":"+4EsBGA,SAAS,GAAS,GAChB,OAJF,SAAkB,GAChB,MAAmD,oBAA5C,OAAO,UAAU,SAAS,KAAK,GAG/BC,CAAS,IAAY,MAAM,QAAQ,GAK5C,SAAS,GAAgB,EAAU,GACjC,MAAM,EAAe,OAAO,KAAK,GAC3B,EAAe,OAAO,KAAK,GACjC,OAAI,EAAa,SAAW,EAAa,SACpB,KAAK,UAAU,OAAO,KAAK,EAAS,aAAe,CAAA,MACnD,KAAK,UAAU,OAAO,KAAK,EAAS,aAAe,CAAA,KAEjE,EAAa,MAAM,IACxB,MAAM,EAAS,EAAS,GAClB,EAAS,EAAS,GACxB,MAAsB,mBAAX,EAA8B,GAAG,KAAa,GAAG,IACvD,GAAS,IAAY,GAAS,GAC5B,GAAgB,EAAQ,GADoB,IAAW,KAIlE,SAAS,GAA0B,GACjC,OAAO,EAAQ,SAAS,KAAA,CAAM,EAAG,IAAM,EAAE,KAAO,EAAE,KAAO,GAAI,GAAI,IAAI,GAAU,EAAO,SCzBxF,SAAS,GAAS,GAChB,MAA0B,iBAAZ,EAEhB,SAAS,GAAS,GAChB,MAA0B,iBAAZ,EAEhB,SAAS,GAAU,GACjB,MAA0B,kBAAZ,EAEhB,SAAS,GAAS,GAChB,MAAmD,oBAA5C,OAAO,UAAU,SAAS,KAAK,GAExC,SAAS,GAAQ,GACf,OAAO,KAAK,IAAI,GAElB,SAAS,GAAS,GAChB,OAAO,KAAK,KAAK,GAEnB,SAAS,GAAS,EAAQ,GACxB,OAAO,GAAQ,EAAS,GAW1B,SAAS,GAAU,GACjB,OAAO,GAAW,GAAO,IAAI,QAE/B,SAAS,GAAU,GACjB,OAAO,EAAM,GAAe,IAE9B,SAAS,GAAe,GACtB,OAAO,KAAK,IAAI,EAAG,EAAM,OAAS,GAEpC,SAAS,GAAiB,EAAO,GAC/B,OAAO,IAAU,GAAe,GAElC,SAAS,GAAgB,EAAG,EAAU,GACpC,OAAO,MAAM,KAAK,MAAM,GAAE,CAAG,EAAG,IAAM,EAAU,GAElD,SAAS,GAAW,GAClB,OAAO,OAAO,KAAK,GAErB,SAAS,GAAiB,EAAS,GACjC,MAAO,CAAC,EAAS,GAAS,OAAA,CAAQ,EAAe,KAC/C,GAAW,GAAe,QAAQ,IAChC,MAAM,EAAS,EAAc,GACvB,EAAS,EAAc,GAE7B,EAAc,GADK,GAAS,IAAW,GAAS,GACd,GAAiB,EAAQ,GAAU,IAEhE,GACN,CAAA,GAEL,SAAS,GAAa,EAAK,GACzB,YAAyC,IAA3B,EAAY,YAA8B,aAAe,EAAY,WA4BrF,SAAS,KACP,IAAI,EAAY,GAmBhB,MAAM,EAAO,CACX,IAnBF,SAAa,EAAM,EAAM,EAAS,EAAU,CAC1C,SAAS,IAET,IAAI,EACJ,GAAI,qBAAsB,EACxB,EAAK,iBAAiB,EAAM,EAAS,GACrC,EAAA,IAAuB,EAAK,oBAAoB,EAAM,EAAS,OAC1D,CACL,MAAM,EAAuB,EAC7B,EAAqB,YAAY,GACjC,EAAA,IAAuB,EAAqB,eAAe,GAG7D,OADA,EAAU,KAAK,GACR,GAOP,MALF,WACE,EAAY,EAAU,OAAO,GAAU,OAMzC,OAAO,EAGT,SAAS,GAAW,EAAe,EAAa,EAAQ,GACtD,MAAM,EAAyB,KACzB,EAAgB,IAAO,GAC7B,IAAI,EAAgB,KAChB,EAAkB,EAClB,EAAc,EAUlB,SAAS,EAAQ,GACf,IAAK,EAAa,OACb,IACH,EAAgB,EAChB,IACA,KAEF,MAAM,EAAc,EAAY,EAGhC,IAFA,EAAgB,EAChB,GAAmB,EACZ,GAAmB,GACxB,IACA,GAAmB,EAGrB,EADc,EAAkB,GAE5B,IACF,EAAc,EAAY,sBAAsB,IAOpD,SAAS,IACP,EAAY,qBAAqB,GACjC,EAAgB,KAChB,EAAkB,EAClB,EAAc,EAchB,MAAO,CAPL,KA5CF,WACE,EAAuB,IAAI,EAAe,mBAAA,KACpC,EAAc,SAsCpB,EAAgB,KAChB,EAAkB,MAIlB,QAxCF,WACE,IACA,EAAuB,SAuCvB,MAjBF,WACM,IACJ,EAAc,EAAY,sBAAsB,KAgBhD,OACA,SACA,UA0CJ,SAAS,GAAM,EAAM,EAAG,EAAM,GAC5B,MAAM,EAAS,GAAQ,EAAM,GAC7B,SAAS,EAAW,GAClB,OAAO,EAAI,EAEb,SAAS,EAAW,GAClB,OAAO,EAAI,EAEb,SAAS,EAAW,GAClB,OAAO,EAAW,IAAM,EAAW,GAoBrC,MAAO,CATL,SACA,MACA,MACA,UAZF,SAAmB,GACjB,OAAK,EAAW,GACT,EAAW,GAAK,EAAM,EADF,GAY3B,aACA,aACA,aACA,aAZF,SAAsB,GACpB,OAAK,EACE,EAAI,EAAS,KAAK,MAAM,EAAI,GAAO,GADtB,IAgBxB,SAAS,GAAQ,EAAK,EAAO,GAC3B,MAAM,UACJ,GACE,GAAM,EAAG,GACP,EAAU,EAAM,EACtB,IAAI,EAAU,EAAY,GAC1B,SAAS,EAAY,GACnB,OAAQ,EAAsB,IAAS,EAAU,GAAK,GAAvC,EAAU,GAE3B,SAAS,IACP,OAAO,EAST,SAAS,IACP,OAAO,GAAQ,EAAK,IAAO,GAE7B,MAAM,EAAO,CACX,MACA,IAZF,SAAa,GAEX,OADA,EAAU,EAAY,GACf,GAWP,IATF,SAAa,GACX,OAAO,IAAQ,IAAI,IAAQ,IAS3B,SAEF,OAAO,EAGT,SAAS,GAAY,EAAM,EAAU,EAAe,EAAa,EAAQ,EAAa,EAAU,EAAW,EAAU,EAAY,EAAc,EAAO,EAAc,EAAe,EAAU,EAAe,EAAW,EAAc,GACnO,MACE,MAAO,EAAA,UACP,GACE,EACE,EAAa,CAAC,QAAS,SAAU,YACjC,EAAkB,CACtB,SAAS,GAEL,EAAa,KACb,EAAa,KACb,EAAoB,GAAM,GAAI,KAAK,UAAU,EAAc,QAAQ,KACnE,EAAiB,CACrB,MAAO,IACP,MAAO,KAEH,EAAiB,CACrB,MAAO,IACP,MAAO,KAEH,EAAY,EAAW,GAAK,GAClC,IAAI,GAAW,EACX,EAAc,EACd,EAAa,EACb,GAAgB,EAChB,GAAgB,EAChB,GAAe,EACf,GAAU,EAiDd,SAAS,EAAK,GAEZ,IADoB,GAAa,EAAK,IACpB,EAAI,QAAQ,QAAU,EAAG,OAAO,EAAG,GACrD,MAAM,EAAa,EAAY,UAAU,GACnC,EAAY,EAAY,UAAU,EAAK,GACvC,EAAa,GAAS,EAAY,GAClC,EAAY,GAAS,EAAW,GACtC,IAAK,IAAkB,EAAS,CAC9B,IAAK,EAAI,WAAY,OAAO,EAAG,GAE/B,GADA,EAAgB,EAAa,GACxB,EAAe,OAAO,EAAG,GAEhC,MAAM,EAAO,EAAY,YAAY,GACjC,EAAa,IAAe,GAAe,GAC/C,EAAW,YAAY,IAAK,YAAY,KACxC,EAAU,QACV,EAAO,IAAI,EAAU,IACrB,EAAI,iBAEN,SAAS,EAAG,GAEV,MAAM,EADkB,EAAa,WAAW,GAAG,GACb,QAAU,EAAM,MAChD,EAAW,EAAY,UAAU,IAjDzB,EAAW,EAAiB,GAC7B,EAAU,QAAU,SAiD3B,EA9CR,SAAsB,EAAO,GAC3B,MAAM,EAAO,EAAM,KAAsB,EAAlB,GAAS,IAC1B,EAAY,EAAa,WAAW,GAAQ,GAAU,SAC5D,OAAI,GAAY,GAAQ,GAAS,EAA0B,EACvD,GAAa,EAAkC,GAAZ,EAChC,EAAa,QAAQ,EAAK,MAAO,GAAG,SAyC7B,CAAa,EAAU,GAAW,GAC1C,GAlWiB,EAkWiB,EAjW3B,KADE,EAkWe,IAjWD,IAAX,GAChB,GAAQ,IAAW,GAAQ,GADU,EAGlC,GADM,GAAS,GAAQ,GAAS,GAAQ,IACzB,IAJxB,IAAmB,EAAQ,EAmWvB,MAAM,EAAQ,EAAY,GAAK,EACzB,EAAW,EAAe,EAAc,GAC9C,GAAgB,EAChB,GAAgB,EAChB,EAAW,QACX,EAAW,YAAY,GAAO,YAAY,GAC1C,EAAS,SAAS,GAAQ,GAC1B,GAAU,EACV,EAAa,KAAK,aAEpB,SAAS,EAAM,GACT,IACF,EAAI,kBACJ,EAAI,iBACJ,GAAe,GAWnB,MAAO,CAJL,KA9FF,SAAc,GACZ,IAAK,EAAW,OAChB,SAAS,EAAc,IACjB,GAAU,IAAc,EAAU,EAAU,KA6BpD,SAAc,GACZ,MAAM,EAAa,GAAa,EAAK,GAIrC,GAHA,EAAU,EACV,EAAe,GAAY,IAAe,EAAI,SAAW,EACzD,EAAW,GAAS,EAAO,MAAO,EAAS,QAAU,EACjD,GAA6B,IAAf,EAAI,OAAc,OACpC,GAtBF,SAAqB,GACnB,MAAM,EAAW,EAAK,UAAY,GAClC,OAAO,EAAW,SAAS,GAoBvB,CAAY,EAAI,QAAS,OAC7B,GAAgB,EAChB,EAAY,YAAY,GACxB,EAAW,YAAY,GAAG,YAAY,GACtC,EAAO,IAAI,GA9Bb,WACE,MAAM,EAAO,EAAU,EAAgB,EACvC,EAAW,IAAI,EAAM,YAAa,EAAM,GAAiB,IAAI,EAAM,WAAY,GAAI,IAAI,EAAM,YAAa,EAAM,GAAiB,IAAI,EAAM,UAAW,GA6BtJ,GACA,EAAc,EAAY,UAAU,GACpC,EAAa,EAAY,UAAU,EAAK,GACxC,EAAa,KAAK,eA3CsC,CAAK,GAE7D,MAAM,EAAO,EACb,EAAW,IAAI,EAAM,YAAa,GAAO,EAAI,iBAAkB,GAAiB,IAAI,EAAM,YAAA,OAA8B,GAAiB,IAAI,EAAM,WAAA,QAA6B,IAAI,EAAM,aAAc,GAAe,IAAI,EAAM,YAAa,GAAe,IAAI,EAAM,cAAe,GAAI,IAAI,EAAM,cAAe,GAAI,IAAI,EAAM,QAAS,GAAO,IAyFjV,QAvFF,WACE,EAAW,QACX,EAAW,SAsFX,YANF,WACE,OAAO,IAUX,SAAS,GAAY,EAAM,GAEzB,IAAI,EACA,EACJ,SAAS,EAAS,GAChB,OAAO,EAAI,UAEb,SAAS,EAAU,EAAK,GAEtB,MAAM,EAAQ,UAAsB,OADnB,GAAW,EAAK,QACS,IAAM,KAChD,OAAQ,GAAa,EAAK,GAAe,EAAM,EAAI,QAAQ,IAAI,GA6BjE,MAAO,CALL,YAtBF,SAAqB,GAGnB,OAFA,EAAa,EACb,EAAY,EACL,EAAU,IAoBjB,YAlBF,SAAqB,GACnB,MAAM,EAAO,EAAU,GAAO,EAAU,GAClC,EAAU,EAAS,GAAO,EAAS,GAlBvB,IAqBlB,OAFA,EAAY,EACR,IAAS,EAAa,GACnB,GAcP,UAZF,SAAmB,GACjB,IAAK,IAAe,EAAW,OAAO,EACtC,MAAM,EAAW,EAAU,GAAa,EAAU,GAC5C,EAAW,EAAS,GAAO,EAAS,GACpC,EAAU,EAAS,GAAO,EAAS,GA3BvB,IA4BZ,EAAQ,EAAW,EAEzB,OADgB,IAAa,GAAW,GAAQ,GAAS,GACxC,EAAQ,GAMzB,aAuCJ,SAAS,GAAc,EAAW,EAAc,EAAa,EAAQ,EAAM,EAAa,GACtF,MAAM,EAAe,CAAC,GAAW,OAAO,GACxC,IAAI,EACA,EACA,EAAa,GACb,GAAY,EAChB,SAAS,EAAS,GAChB,OAAO,EAAK,YAAY,EAAU,QAAQ,IAsC5C,MAAO,CAHL,KAjCF,SAAc,GACP,IACL,EAAgB,EAAS,GACzB,EAAa,EAAO,IAAI,GAgBxB,EAAiB,IAAI,eAAe,KAC9B,GAAU,IAAgB,EAAY,EAAU,KAhBtD,SAAyB,GACvB,IAAK,MAAM,KAAS,EAAS,CAC3B,GAAI,EAAW,OACf,MAAM,EAAc,EAAM,SAAW,EAC/B,EAAa,EAAO,QAAQ,EAAM,QAClC,EAAW,EAAc,EAAgB,EAAW,GAG1D,GADiB,GADD,EAAS,EAAc,EAAY,EAAO,IACvB,IACnB,GAAK,CACnB,EAAS,SACT,EAAa,KAAK,UAClB,QAMF,CAAgB,KAGpB,EAAY,sBAAA,KACV,EAAa,QAAQ,GAAQ,EAAe,QAAQ,QAStD,QANF,WACE,GAAY,EACR,GAAgB,EAAe,eA8EvC,SAAS,GAAa,EAAO,EAAU,EAAQ,EAAY,GACzD,MAAM,EAAoB,EAAc,QAAQ,IAC1C,EAAsB,EAAc,QAAQ,IAC5C,EAAgB,GAAM,GAAK,KACjC,IAAI,GAAW,EACf,SAAS,IACP,OAAI,MACC,EAAM,WAAW,EAAO,UACxB,EAAM,WAAW,EAAS,QAuBjC,MAAO,CAJL,kBACA,UAjBF,SAAmB,GACjB,IAAK,IAAmB,OAExB,MAAM,EAAa,GAAQ,EADd,EAAM,WAAW,EAAS,OAAS,MAAQ,OACf,EAAS,OAC5C,EAAe,EAAO,MAAQ,EAAS,MACvC,EAAW,EAAc,UAAU,EAAa,GACtD,EAAO,SAAS,EAAe,IAC1B,GAAe,GAAQ,GAAgB,IAC1C,EAAO,IAAI,EAAM,UAAU,EAAO,QAClC,EAAW,YAAY,IAAI,oBAS7B,aANF,SAAsB,GACpB,GAAY,IAmEhB,SAAS,GAAa,EAAa,EAAO,EAAU,GAClD,MAGM,WACJ,EAAA,WACA,GACE,GALQ,EAAM,IADE,GAER,EAAM,IAFE,IAoBpB,MAAO,CAFL,KANF,SAAc,GACZ,IANF,SAAoB,GAClB,OAAkB,IAAd,EAAwB,EAAW,EAAS,QAC9B,IAAd,GAAyB,EAAW,EAAS,OAI5C,CAAW,GAAY,OAC5B,MAAM,EAAe,IAA2B,EAAZ,GACpC,EAAQ,QAAQ,GAAK,EAAE,IAAI,MAoF/B,SAAS,GAAa,EAAM,EAAa,EAAa,EAAO,GAC3D,MAAM,WACJ,EAAA,aACA,EAAA,UACA,GACE,EACJ,SAAS,EAAY,GACnB,OAAO,EAAU,SAAS,KAAA,CAAM,EAAG,IAAM,GAAQ,GAAK,GAAQ,IAAI,GAgBpE,SAAS,EAAS,EAAQ,GACxB,MAAM,EAAU,CAAC,EAAQ,EAAS,EAAa,EAAS,GACxD,IAAK,EAAM,OAAO,EAClB,IAAK,EAAW,OAAO,EAAY,GACnC,MAAM,EAAkB,EAAQ,OAAO,GAAK,GAAS,KAAO,GAC5D,OAAI,EAAgB,OAAe,EAAY,GACxC,GAAU,GAAW,EAiC9B,MAAO,CAJL,WAnBF,SAAoB,EAAU,GAC5B,MAAM,EAAS,EAAa,MAAQ,GAC9B,MACJ,EACA,SAAU,GAlCd,SAAwB,GACtB,MAAM,EAAW,EAAO,EAAa,GAAU,EAAU,IAKnD,MACJ,GALsB,EAAY,IAAA,CAAK,EAAM,KAAA,CAC7C,KAAM,EAAS,EAAO,EAAU,GAChC,WACE,KAAA,CAAM,EAAI,IAAO,GAAQ,EAAG,MAAQ,GAAQ,EAAG,OAG/B,GACpB,MAAO,CACL,QACA,YAwBE,CAAe,GACb,GAAgB,GAAQ,EAAW,GACzC,OAAK,GAAQ,EAAqB,CAChC,QACA,YAIK,CACL,QACA,SAHmB,EAAW,EADb,EAAY,GAAS,EACa,KAQrD,QA5BF,SAAiB,EAAO,GAGtB,MAAO,CACL,QACA,SAHe,EADE,EAAY,GAAS,EAAa,MACf,KA2BtC,YAyCJ,SAAS,GAAW,EAAM,EAAQ,EAAe,EAAU,EAAY,EAAY,EAAc,GAC/F,MAAM,EAAuB,CAC3B,SAAS,EACT,SAAS,GAEX,IAAI,EAAmB,EAwBvB,SAAS,EAAiB,GACL,QAAf,EAAM,OAAgB,GAAA,IAAuB,MAAO,WAK1D,MAAO,CAFL,KA3BF,SAAc,GACP,IAaL,EAAW,IAAI,SAAU,UAAW,GAAkB,GACtD,EAAO,QAAA,CAAS,EAAO,KACrB,EAAW,IAAI,EAAO,QAAS,KACzB,GAAU,IAAe,EAAW,EAAU,KAftD,SAAyB,GAGvB,IAAA,IAFoB,MAAO,UACA,EACZ,GAAI,OACnB,EAAa,KAAK,mBAClB,EAAK,WAAa,EAClB,MAAM,EAAQ,EAAc,UAAU,GAAS,EAAM,SAAS,IACzD,GAAS,KACd,EAAW,YAAY,GACvB,EAAS,MAAM,EAAO,GACtB,EAAa,KAAK,eAMd,CAAgB,IAEjB,QAYT,SAAS,GAAS,GAChB,IAAI,EAAQ,EAaZ,SAAS,EAAe,GACtB,OAAO,GAAS,GAAK,EAAI,EAAE,MAQ7B,MAAO,CALL,IAhBF,WACE,OAAO,GAgBP,IAdF,SAAa,GACX,EAAQ,EAAe,IAcvB,IAZF,SAAa,GACX,GAAS,EAAe,IAYxB,SAVF,SAAkB,GAChB,GAAS,EAAe,KAc5B,SAAS,GAAU,EAAM,GACvB,MAAM,EAA4B,MAAhB,EAAK,OAIvB,SAAW,GACT,MAAO,eAAe,gBAExB,SAAW,GACT,MAAO,mBAAmB,YAPtB,EAAiB,EAAU,MACjC,IAAI,EAAiB,KACjB,GAAW,EA2Bf,MAAO,CAJL,MANF,WACM,IACJ,EAAe,UAAY,GACtB,EAAU,aAAa,UAAU,EAAU,gBAAgB,WAIhE,GAjBF,SAAY,GACV,GAAI,EAAU,OACd,MAAM,GA36BkB,EA26Ba,EAAK,UAAU,GA16B/C,KAAK,MAAY,IAAN,GAAa,KADjC,IAA4B,EA46BpB,IAAc,IAClB,EAAe,UAAY,EAAU,GACrC,EAAiB,IAajB,aAXF,SAAsB,GACpB,GAAY,IAehB,SAAS,GAAY,EAAM,EAAU,EAAa,EAAY,EAAoB,EAAO,EAAa,EAAU,GAC9G,MACM,EAAW,GAAU,GACrB,EAAY,GAAU,GAAoB,UAC1C,EAkCN,WACE,MAAM,EAAM,EAAY,GAExB,OAAO,EADS,EAAY,EAAW,GACR,GAAa,GArC3B,GAAc,OA0CxB,EADS,EAAY,EADhB,EAAW,EAAY,GAAK,IAER,GAAa,IAzC/C,SAAS,EAAiB,EAAS,GACjC,OAAO,EAAQ,OAAA,CAAQ,EAAG,IACjB,EAAI,EAAmB,GAC7B,GAEL,SAAS,EAAY,EAAS,GAC5B,OAAO,EAAQ,OAAA,CAAQ,EAAG,IACH,EAAiB,EAAG,GACnB,EAAI,EAAE,OAAO,CAAC,IAAM,EACzC,IAQL,SAAS,EAAe,EAAS,EAAQ,GACvC,MAAM,EAPR,SAAyB,GACvB,OAAO,EAAM,IAAA,CAAK,EAAM,KAAA,CACtB,MAAO,EAAO,EAAW,GAjBN,GAiBgC,EACnD,IAAK,EAAO,EAlBO,GAkBqB,KAItB,CAAgB,GACpC,OAAO,EAAQ,IAAI,IACjB,MAAM,EAAU,EAAY,GAAK,EAC3B,EAAU,EAAY,EAAc,EACpC,EAAY,EAAY,MAAQ,QAChC,EAAY,EAAY,GAAO,GACrC,MAAO,CACL,QACA,YACA,cAAe,IAAS,GACxB,UAAW,GAAU,EAAM,EAAO,IAClC,OAAA,IAAc,EAAS,MAAQ,EAAY,EAAU,KA4C3D,MAAO,CALL,QAzBF,WACE,OAAO,EAAW,MAAA,EAChB,WAGO,EADc,EAAS,OAAO,GAAK,IAAM,GACV,IAAa,KAqBrD,MALF,WACE,EAAW,QAAQ,GAAa,EAAU,UAAU,UAKpD,KAnBF,WACE,EAAW,QAAQ,IACjB,MAAM,OACJ,EAAA,UACA,EAAA,cACA,GACE,EACE,EAAgB,IAClB,IAAkB,EAAc,QACpC,EAAU,GAAG,GACb,EAAc,IAAI,OAUpB,cAKJ,SAAS,GAAc,EAAW,EAAc,GAC9C,IAAI,EACA,GAAY,EA8BhB,MAAO,CAHL,KA1BF,SAAc,GACP,IAUL,EAAmB,IAAI,iBAAiB,IAClC,IACA,GAAU,IAAgB,EAAY,EAAU,KAXtD,SAAyB,GACvB,IAAK,MAAM,KAAY,EACrB,GAAsB,cAAlB,EAAS,KAAsB,CACjC,EAAS,SACT,EAAa,KAAK,iBAClB,OAOF,CAAgB,KAGpB,EAAiB,QAAQ,EAAW,CAClC,WAAW,MASb,QANF,WACM,GAAkB,EAAiB,aACvC,GAAY,IAShB,SAAS,GAAa,EAAW,EAAQ,EAAc,GACrD,MAAM,EAAuB,CAAA,EAC7B,IAEI,EAFA,EAAc,KACd,EAAiB,KAEjB,GAAY,EA8ChB,MAAO,CAJL,KAzCF,WACE,EAAuB,IAAI,qBAAqB,IAC1C,IACJ,EAAQ,QAAQ,IACd,MAAM,EAAQ,EAAO,QAAQ,EAAM,QACnC,EAAqB,GAAS,IAEhC,EAAc,KACd,EAAiB,KACjB,EAAa,KAAK,kBACjB,CACD,KAAM,EAAU,cAChB,cAEF,EAAO,QAAQ,GAAS,EAAqB,QAAQ,KA4BrD,QA1BF,WACM,GAAsB,EAAqB,aAC/C,GAAY,GAyBZ,IAXF,SAAa,GAAS,GACpB,GAAI,GAAU,EAAa,OAAO,EAClC,IAAK,GAAU,EAAgB,OAAO,EACtC,MAAM,EAfR,SAA0B,GACxB,OAAO,GAAW,GAAsB,OAAA,CAAQ,EAAM,KACpD,MAAM,EAAQ,SAAS,IACjB,eACJ,GACE,EAAqB,GAIzB,OAHoB,GAAU,IACN,IAAW,IACA,EAAK,KAAK,GACtC,GACN,IAKkB,CAAiB,GAGtC,OAFI,IAAQ,EAAc,GACrB,IAAQ,EAAiB,GACvB,IAiDX,SAAS,GAAe,EAAM,EAAU,EAAgB,EAAM,EAAe,EAAY,EAAU,EAAQ,GACzG,MAAM,UACJ,EAAA,QACA,EAAA,UACA,GACE,EACE,EAAgB,GAAS,GA6B/B,MAAO,CAFL,YAJF,SAAqB,GACnB,OAAO,EAvBT,SAAkB,EAAO,GACvB,OAAO,GAAU,GAAO,OAAO,GAAK,EAAI,IAAc,GAAG,IAAI,GAAK,EAAM,MAAM,EAAG,EAAI,IAsB9D,CAAS,EAAO,GApBzC,SAAgB,GACd,OAAK,EAAM,OACJ,GAAU,GAAO,OAAA,CAAQ,EAAQ,EAAO,KAC7C,MAAM,EAAQ,GAAU,IAAW,EAC7B,EAAoB,IAAV,EACV,EAAS,IAAU,GAAe,GAClC,EAAQ,EAAc,GAAa,EAAW,GAAO,GACrD,EAAQ,EAAc,GAAa,EAAW,GAAO,GACrD,GAAQ,GAAQ,EAAU,EAAU,GAAY,EAEhD,EAAY,GAAQ,IADZ,GAAQ,EAAS,EAAU,GAAU,IACT,EAAQ,IAGlD,OAFI,GAAS,EAAY,EAAW,GAAgB,EAAO,KAAK,GAC5D,GAAQ,EAAO,KAAK,EAAM,QACvB,GACN,IAAI,IAAA,CAAK,EAAa,EAAO,KAC9B,MAAM,EAAe,KAAK,IAAI,EAAO,EAAQ,IAAM,GACnD,OAAO,EAAM,MAAM,EAAc,KAfT,GAmB+B,CAAO,KAQpE,SAAS,GAAO,EAAM,EAAW,EAAQ,EAAe,EAAa,EAAS,GAE5E,MAAM,MACJ,EACA,KAAM,EAAA,UACN,EAAA,WACA,EAAA,KACA,EAAA,SACA,EAAA,SACA,EAAA,cACA,EAAA,gBACA,EACA,eAAgB,EAAA,UAChB,EAAA,cACA,EAAA,YACA,EAAA,YACA,EAAA,UACA,EAAA,WACA,GACE,EAGE,EArxBC,CAFL,QAlBF,SAAiB,GACf,MAAM,UACJ,EAAA,WACA,EAAA,YACA,EAAA,aACA,GACE,EASJ,MAAO,CAPL,IAAK,EACL,MAAO,EAAa,EACpB,OAAQ,EAAY,EACpB,KAAM,EACN,MAAO,EACP,OAAQ,KA6xBN,EAAgB,EAAU,QAAQ,GAClC,EAAa,EAAO,IAAI,EAAU,SAClC,EA5jCR,SAAc,EAAM,GAClB,MAAM,EAAqC,QAArB,EAChB,EAAsB,MAAT,EAGb,GAAQ,GAAc,GAAgB,EAAK,EA6BjD,MAAO,CAPL,OAxBa,EAAa,IAAM,IAyBhC,MAxBY,EAAa,IAAM,IAyB/B,UAbI,EAAmB,MAChB,EAAgB,QAAU,OAajC,QAVI,EAAmB,SAChB,EAAgB,OAAS,QAUhC,YAvBF,SAAqB,GACnB,MAAM,OACJ,EAAA,MACA,GACE,EACJ,OAAO,EAAa,EAAS,GAmB7B,UATF,SAAmB,GACjB,OAAO,EAAI,IAoiCA,CAAK,EAAY,GACxB,EAAW,EAAK,YAAY,GAC5B,EAvxBR,SAAuB,GAOrB,MAAO,CAFL,QAJF,SAAiB,GACf,OAAO,GAAY,EAAI,OAqxBH,CAAc,GAC9B,EA/qCR,SAAmB,EAAO,GACxB,MAAM,EAAa,CACjB,MAIF,WACE,OAAO,GAJP,OAMF,SAAgB,GACd,OAAO,EAAI,GAAK,GANhB,OAQF,SAAS,EAAI,GACX,OAAO,EAAW,EASpB,MAAO,CAFL,QALF,SAAiB,EAAG,GAClB,OAAI,GAAS,GAAe,EAAW,GAAO,GACvC,EAAM,EAAU,EAAG,KA8pCV,CAAU,EAAO,GAC7B,GAAgB,KAAU,GAE1B,WACJ,EAAA,mBACA,EAAA,SACA,EAAA,OACA,GAhHJ,SAAoB,EAAM,EAAe,EAAY,EAAQ,EAAa,GACxE,MAAM,YACJ,EAAA,UACA,EAAA,QACA,GACE,EACE,EAAc,EAAW,IAAM,EAC/B,EAIN,WACE,IAAK,EAAa,OAAO,EACzB,MAAM,EAAY,EAAW,GAC7B,OAAO,GAAQ,EAAc,GAAa,EAAU,IAPrC,GACX,EAQN,WACE,IAAK,EAAa,OAAO,EACzB,MAAM,EAAQ,EAAY,iBAAiB,GAAU,IACrD,OAAO,WAAW,EAAM,iBAAiB,UAAU,MAXtC,GACT,EAAa,EAAW,IAAI,GAC5B,EAYG,EAAW,IAAA,CAAK,EAAM,EAAO,KAClC,MAAM,GAAW,EACX,EAAS,GAAiB,EAAO,GACvC,OAAI,EAAgB,EAAW,GAAS,EACpC,EAAe,EAAW,GAAS,EAChC,EAAM,EAAQ,GAAG,GAAa,EAAK,KACzC,IAAI,IAQT,MAAO,CALL,aACA,qBACA,WACA,UA+EE,CAAW,EAAM,EAAe,EAAY,EAN5B,KAAU,EAMuC,GAC/D,EAAiB,GAAe,EAAM,EAAU,EAAa,EAAM,EAAe,EAAY,EAAU,EAhBvF,IAiBjB,MACJ,EAAA,aACA,GAniBJ,SAAqB,EAAM,EAAW,EAAe,EAAY,GAC/D,MAAM,UACJ,EAAA,QACA,GACE,GACE,YACJ,GACE,EACE,EAIG,EAAY,GAAY,IAAI,GAAS,GAAU,GAAO,GAAW,EAAM,GAAG,IAAY,IAAI,IAJjE,IAAI,EAAU,SAC1C,EAMG,EAAW,IAAI,GAAQ,EAAc,GAAa,EAAK,IAAY,IAAI,IAAS,GAAQ,IAL3F,EAQG,EAAY,GAAO,IAAI,GAAK,EAAE,IAAI,IAAA,CAAK,EAAM,IAAU,EAAO,EAAW,IAMlF,MAAO,CAHL,QACA,gBA8gBE,CAAY,EAAM,EAAW,EAAe,EAAY,GACtD,GAAe,GAAU,GAAS,GAAU,IAC5C,eACJ,EAAA,mBACA,GAxoBJ,SAAuB,EAAU,EAAa,EAAc,EAAe,GACzE,MAAM,EAAe,IAAO,EAAc,EAAU,GAC9C,EAcG,EAAa,IAAA,CAAK,EAAa,KACpC,MAAM,IACJ,EAAA,IACA,GACE,EACE,EAAO,EAAa,UAAU,GAC9B,GAAW,EACX,EAAS,GAAiB,EAAc,GAC9C,OAAI,EAAgB,EAChB,GACA,EAAkB,EAAK,GADR,EAEf,EAAkB,EAAK,GAAc,EAClC,IACN,IAAI,GAAe,WAAW,EAAY,QAAQ,KA1BjD,EAKN,WACE,MAAM,EAAY,EAAa,GACzB,EAAU,GAAU,GAG1B,OAAO,GAFK,EAAa,YAAY,GACzB,EAAa,QAAQ,GAAW,GATnB,GAE3B,SAAS,EAAkB,EAAO,GAChC,OAAO,GAAS,EAAO,IAAS,EAsClC,MAAO,CAHL,eAVF,WACE,GAAI,GAAe,EAAW,EAAgB,MAAO,CAAC,EAAa,KACnE,GAAsB,cAAlB,EAA+B,OAAO,EAC1C,MAAM,IACJ,EAAA,IACA,GACE,EACJ,OAAO,EAAa,MAAM,EAAK,GAlCV,GAsCrB,sBA+lBE,CAAc,EAAU,EAAa,EAAc,EAzBhC,GA0BjB,EAAc,EAAe,EAAiB,GAC9C,MACJ,GA7lBJ,SAAqB,EAAa,EAAa,GAC7C,MAAM,EAAM,EAAY,GAMxB,MAAO,CAFL,MAFY,GADF,EAAO,EAAM,EAAc,GAAU,GACxB,IA2lBrB,CAAY,EAAa,EAAa,GAEpC,EAAQ,GAAQ,GAAe,GAAc,EAAY,GACzD,EAAgB,EAAM,QACtB,EAAe,GAAU,GA4CzB,EAAY,GAAW,EAAe,EAAA,IA1CtC,GACJ,cACA,aACA,eACA,SACE,YAGG,GAAM,EAAa,UAAU,EAAY,eAC9C,EAAW,QAiCkD,CAAO,IAAS,GA/BzE,GACJ,aACA,YACA,WACA,iBACA,mBACA,eACA,cACA,cACA,YACA,eACA,eACA,SACE,SAED,KACD,MAAM,EAAe,EAAW,UAC1B,GAAgB,EAAa,kBAC7B,EAAa,EAAO,EAAe,GAAgB,EACnD,EAAoB,IAAe,EAAY,cACjD,GAAmB,EAAU,OACjC,MAAM,EAAuB,EAAS,MAAQ,EAAQ,EAAiB,OAAS,EAAI,GACpF,EAAe,IAAI,GACf,IACF,EAAa,KAAK,EAAW,aAC7B,EAAY,QAEd,EAAU,GAAG,EAAe,OACxB,GAAmB,EAAa,KAAK,UACpC,GAAY,EAAa,KAAK,WAEmD,CAAO,GAAQ,IAGjG,EAAgB,EAAY,EAAM,OAClC,EAAW,GAAS,GACpB,EAAmB,GAAS,GAC5B,EAAiB,GAAS,GAC1B,EAAS,GAAS,GAClB,EA5yBR,SAAoB,EAAU,EAAgB,EAAkB,EAAQ,EAAc,GACpF,IAAI,EAAiB,EACjB,EAAkB,EAClB,EAAiB,EACjB,EAAiB,EACjB,EAAc,EAAS,MACvB,EAAsB,EAyC1B,SAAS,EAAY,GAEnB,OADA,EAAiB,EACV,EAET,SAAS,EAAY,GAEnB,OADA,EAAiB,EACV,EAET,MAAM,EAAO,CACX,UArBF,WACE,OAAO,GAqBP,SAzBF,WACE,OAAO,GAyBP,SApBF,WACE,OAAO,GAoBP,KApDF,WACE,MAAM,EAAe,EAAO,MAAQ,EAAS,MAE7C,IAAI,EAAiB,EAgBrB,OAjBmB,GAQjB,EAAiB,IAAI,GACrB,GAAkB,EAAe,EACjC,GAAkB,EAClB,GAAe,EACf,EAAS,IAAI,GACb,EAAiB,EAAc,IAV/B,EAAiB,EACjB,EAAiB,IAAI,GACrB,EAAS,IAAI,GACb,EAAiB,GASnB,EAAkB,GAAS,GAC3B,EAAsB,EACf,GAkCP,QAhCF,WAEE,OAAO,GADM,EAAO,MAAQ,EAAe,OACpB,MA+BvB,gBAjBF,WACE,OAAO,EAAY,IAiBnB,gBArBF,WACE,OAAO,EAAY,IAqBnB,cACA,eAEF,OAAO,EA0uBY,CAAW,EAAU,EAAgB,EAAkB,EAAQ,EANjE,KAOX,EAAe,GAAa,EAAM,EAAa,EAAa,EAAO,GACnE,GAzeR,SAAkB,EAAW,EAAc,EAAe,EAAY,EAAc,EAAc,GAChG,SAAS,EAAS,GAChB,MAAM,EAAe,EAAO,SACtB,EAAY,EAAO,QAAU,EAAa,MAChD,EAAa,IAAI,GACb,IACE,EAAW,WACb,EAAU,SAEV,EAAU,SACV,EAAU,OAAO,GACjB,EAAU,WAGV,IACF,EAAc,IAAI,EAAa,OAC/B,EAAa,IAAI,EAAO,OACxB,EAAa,KAAK,WAgBtB,MAAO,CAHL,SAVF,SAAkB,EAAG,GAEnB,EADe,EAAa,WAAW,EAAG,KAU1C,MAPF,SAAe,EAAG,GAChB,MAAM,EAAc,EAAa,QAAQ,IAAI,GAE7C,EADe,EAAa,QAAQ,EAAY,MAAO,MA+cxC,CAAS,EAAW,EAAO,EAAe,EAAY,EAAc,EAAQ,GACvF,GAvnBR,SAAwB,GACtB,MAAM,IACJ,EAAA,OACA,GACE,EAQJ,MAAO,CAFL,IALF,SAAa,GAEX,OAAO,GADiB,EAAI,IACO,EAAS,IAgnBvB,CAAe,GAChC,GAAa,KACb,GAAe,GAAa,EAAW,EAAQ,EAAc,IAC7D,cACJ,IAjlBJ,SAAuB,EAAc,EAAe,EAAa,EAAoB,EAAgB,GACnG,MAAM,YACJ,GACE,GACE,IACJ,EAAA,IACA,GACE,EAwBJ,MAAO,CAFL,cApBF,WACE,MAAM,EAAsB,EAAY,GAClC,GAAgB,GAAkC,cAAlB,EACtC,OAA2B,IAAvB,EAAY,OAAqB,CAAC,GAClC,EAAqB,EAClB,EAAoB,MAAM,EAAK,GAAK,IAAA,CAAK,EAAO,EAAO,KAC5D,MAAM,GAAW,EACX,EAAS,GAAiB,EAAQ,GACxC,OAAI,EAEK,GADO,GAAU,EAAO,IAAM,GAGnC,EAEK,GADO,GAAe,GAAgB,GAAU,GAAQ,GAAK,EACtC,GAAU,GAAQ,IAE3C,IAjBW,IA0kBlB,CAAc,EAAc,EAAe,EAAa,EAAoB,EAAgB,GAC1F,GAAa,GAAW,EAAM,EAAQ,GAAe,GAAU,EAAY,GAAY,EAAc,GAErG,GAAS,CACb,gBACA,cACA,eACA,gBACA,aACA,YACA,OACA,YAAa,GAAY,EAAM,EAAM,EAAe,EAAa,EAAQ,GAAY,EAAM,GAAc,EAAU,EAAW,GAAU,EAAY,EAAc,EAAO,EAAc,EAAe,EAAU,EAAe,EAzBhN,IAyBqO,GACpP,cACA,gBACA,QACA,gBACA,QACA,WACA,iBACA,mBACA,UACA,cAAe,GAAc,EAAW,EAAc,EAAa,EAAQ,EAAM,EAAa,GAC9F,aACA,aAAc,GAAa,EAAO,EAAgB,EAAQ,EAAY,GACtE,aAAc,GAAa,EAAa,EAAO,EAAgB,CAAC,EAAU,EAAgB,EAAkB,IAC5G,kBACA,eAAgB,EAAY,IAAI,GAAe,KAC/C,cACA,eACA,YACA,YAAa,GAAY,EAAM,EAAU,EAAa,EAAY,EAAoB,EAAO,EAAa,EAAgB,GAC1H,cACA,cAAe,GAAc,EAAW,EAAc,GACtD,gBACA,eACA,iBACA,iBACA,SACA,UAAW,GAAU,EAAM,IAE7B,OAAO,GA4DT,SAAS,GAAe,GACtB,SAAS,EAAa,EAAU,GAC9B,OAAO,GAAiB,EAAU,GAAY,CAAA,GAehD,MAAO,CAJL,eACA,eAVF,SAAwB,GACtB,MAAM,EAAiB,EAAQ,aAAe,CAAA,EAE9C,OAAO,EAAa,EADQ,GAAW,GAAgB,OAAO,GAAS,EAAY,WAAW,GAAO,SAAS,IAAI,GAAS,EAAe,IAAQ,OAAA,CAAQ,EAAG,IAAgB,EAAa,EAAG,GAAc,CAAA,KAS3M,oBANF,SAA6B,GAC3B,OAAO,EAAY,IAAI,GAAW,GAAW,EAAQ,aAAe,CAAA,IAAK,OAAA,CAAQ,EAAK,IAAiB,EAAI,OAAO,GAAe,IAAI,IAAI,EAAY,cA+BzJ,SAAS,GAAc,EAAM,EAAa,GACxC,MAAM,EAAgB,EAAK,cACrB,EAAc,EAAc,YAC5B,EAAiB,GAAe,GAChC,EAzBR,SAAwB,GACtB,IAAI,EAAgB,GAiBpB,MAAO,CAHL,KAbF,SAAc,EAAU,GAKtB,OAJA,EAAgB,EAAQ,OAAA,EACtB,cACsD,IAAlD,EAAe,eAAe,GAAS,QAC7C,EAAc,QAAQ,GAAU,EAAO,KAAK,EAAU,IAC/C,EAAQ,OAAA,CAAQ,EAAK,IAAW,OAAO,OAAO,EAAK,CAAA,CACvD,EAAO,MAAO,IACb,CAAA,IAOJ,QALF,WACE,EAAgB,EAAc,OAAO,GAAU,EAAO,aAajC,CAAe,GAChC,EAAgB,KAChB,EAxGR,WACE,IACI,EADA,EAAY,CAAA,EAKhB,SAAS,EAAa,GACpB,OAAO,EAAU,IAAQ,GAiB3B,MAAM,EAAO,CACX,KAtBF,SAAc,GACZ,EAAM,GAsBN,KAjBF,SAAc,GAEZ,OADA,EAAa,GAAK,QAAQ,GAAK,EAAE,EAAK,IAC/B,GAgBP,IAVF,SAAa,EAAK,GAEhB,OADA,EAAU,GAAO,EAAa,GAAK,OAAO,GAAK,IAAM,GAC9C,GASP,GAfF,SAAY,EAAK,GAEf,OADA,EAAU,GAAO,EAAa,GAAK,OAAO,CAAC,IACpC,GAcP,MARF,WACE,EAAY,CAAA,IASd,OAAO,EAyEc,IACf,aACJ,EAAA,eACA,EAAA,oBACA,GACE,GACE,GACJ,EAAA,IACA,EAAA,KACA,GACE,EACE,EAAS,EACf,IACI,EAIA,EACA,EACA,EAPA,GAAY,EAEZ,EAAc,EAAa,GAAgB,GAAc,eACzD,EAAU,EAAa,GACvB,EAAa,GAcjB,SAAS,EAAa,GACpB,MAAM,EAAS,GAAO,EAAM,EAAW,EAAQ,EAAe,EAAa,EAAS,GACpF,OAAI,EAAQ,OAAS,EAAO,YAAY,UAI/B,EAHoB,OAAO,OAAO,CAAA,EAAI,EAAS,CACpD,MAAM,KAIH,EAET,SAAS,EAAS,EAAa,GACzB,IACJ,EAAc,EAAa,EAAa,GACxC,EAAU,EAAe,GACzB,EAAa,GAAe,EAxB9B,WACE,MACE,UAAW,EACX,OAAQ,GACN,EAEJ,GADwB,GAAS,GAAiB,EAAK,cAAc,GAAiB,IACvD,EAAK,SAAS,GAC7C,MAAM,EAAe,GAAS,GAAc,EAAU,iBAAiB,GAAc,EACrF,EAAS,GAAG,MAAM,KAAK,GAAgB,EAAU,UAiBjD,GACA,EAAS,EAAa,GACtB,EAAoB,CAAC,KAAgB,EAAW,IAAA,EAC9C,aACI,KAAW,QAAQ,GAAS,EAAc,IAAI,EAAO,SAAU,IAChE,EAAQ,SACb,EAAO,UAAU,GAAG,EAAO,SAAS,OACpC,EAAO,UAAU,OACjB,EAAO,aAAa,OACpB,EAAO,WAAW,KAAK,GACvB,EAAO,aAAa,KAAK,GACzB,EAAO,cAAc,KAAK,GAC1B,EAAO,cAAc,KAAK,GACtB,EAAO,QAAQ,MAAM,EAAO,YAAY,OACxC,EAAU,cAAgB,EAAO,QAAQ,EAAO,YAAY,KAAK,GACrE,EAAa,EAAe,KAAK,EAAM,KAEzC,SAAS,EAAW,EAAa,GAC/B,MAAM,EAAa,IACnB,IACA,EAAS,EAAa,CACpB,cACC,GAAc,GACjB,EAAa,KAAK,UAEpB,SAAS,IACP,EAAO,YAAY,UACnB,EAAO,WAAW,QAClB,EAAO,UAAU,QACjB,EAAO,YAAY,QACnB,EAAO,cAAc,UACrB,EAAO,cAAc,UACrB,EAAO,aAAa,UACpB,EAAO,UAAU,UACjB,EAAe,UACf,EAAc,QAUhB,SAAS,EAAS,EAAO,EAAM,GACxB,EAAQ,SAAU,IACvB,EAAO,WAAW,kBAAkB,aAAqB,IAAT,EAAgB,EAAI,EAAQ,UAC5E,EAAO,SAAS,MAAM,EAAO,GAAa,IAwB5C,SAAS,IACP,OAAO,EAAO,MAAM,MA0BtB,MAAM,EAAO,CACX,cA1CF,WAEE,OADa,EAAO,MAAM,IAAI,GAAG,QACjB,KAyChB,cAvCF,WAEE,OADa,EAAO,MAAM,KAAI,GAAI,QAClB,KAsChB,cATF,WACE,OAAO,GASP,eAhBF,WACE,OAAO,GAgBP,QAnEF,WACM,IACJ,GAAY,EACZ,EAAc,QACd,IACA,EAAa,KAAK,WAClB,EAAa,UA8Db,MACA,KACA,OACA,QAxBF,WACE,OAAO,GAwBP,mBAlCF,WACE,OAAO,EAAO,cAAc,OAkC5B,SACA,SArBF,WACE,OAAO,GAqBP,WA9DF,SAAoB,GAElB,EADa,EAAO,MAAM,IAAI,GAAG,MAClB,GAAM,IA6DrB,WA3DF,SAAoB,GAElB,EADa,EAAO,MAAM,KAAI,GAAI,MACnB,EAAM,IA0DrB,eA7CF,WACE,OAAO,EAAO,eAAe,IAAI,EAAO,eAAe,QA6CvD,eAjDF,WACE,OAAO,EAAO,gBAiDd,WACA,qBACA,WAtBF,WACE,OAAO,GAsBP,aAzCF,WACE,OAAO,EAAO,aAAa,OAyC3B,gBAvCF,WACE,OAAO,EAAO,aAAa,KAAI,KA0CjC,OAFA,EAAS,EAAa,GACtB,WAAA,IAAiB,EAAa,KAAK,QAAS,GACrC,EC5nDT,SAAS,GAAiB,EAAU,CAAA,EAAI,EAAU,IAChD,MAAM,GAAA,EAAA,EAAA,QAAuB,GACvB,GAAA,EAAA,EAAA,QAAuB,IACtB,EAAU,IAAA,EAAA,EAAA,aACV,EAAU,IAAA,EAAA,EAAA,YACX,GAAA,EAAA,EAAA,aAAA,KACA,GAAU,EAAS,OAAO,EAAc,QAAS,EAAc,UAClE,CAAC,IAqBJ,OApBA,EAAA,EAAA,WAAA,KACM,GAAgB,EAAc,QAAS,KAC3C,EAAc,QAAU,EACxB,MACC,CAAC,EAAS,KACb,EAAA,EAAA,WAAA,MFUF,SAAyB,EAAU,GACjC,GAAI,EAAS,SAAW,EAAS,OAAQ,OAAO,EAChD,MAAM,EAAW,GAA0B,GACrC,EAAW,GAA0B,GAC3C,OAAO,EAAS,MAAA,CAAO,EAAS,IAEvB,GAAgB,EADP,EAAS,MEdrB,CAAgB,EAAc,QAAS,KAC3C,EAAc,QAAU,EACxB,MACC,CAAC,EAAS,KACb,EAAA,EAAA,WAAA,KACE,GFhB0B,oBAAX,QAA0B,OAAO,UAAY,OAAO,SAAS,eEgBzD,EAAU,CAC3B,GAAc,cAAgB,GAAiB,cAC/C,MAAM,EAAc,GAAc,EAAU,EAAc,QAAS,EAAc,SAEjF,OADA,EAAY,GACZ,IAAa,EAAY,UAEzB,OAAY,IAEb,CAAC,EAAU,IACP,CAAC,EAAa,s3DxB/BjB,EAAoB,IAAI,IAAI,CAChC,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,8GAEjG,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAClE,OACA,CACE,EAAG,kGACH,QAAS,QAEM,EAAE,cAAc,OAAQ,CAAE,EAAG,wHAElD,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,uNAEjG,CACE,QACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,qHAEjG,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,0HAEjG,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,uHC3B7F,EAAA,EAAM,WAAA,CAAY,EAAG,IAAsB,EAAE,cAAcD,EAAAA,EAAAA,EAAAA,CAAK,IAAK,GAAM,GAAA,CAAA,EAAA,CAAG,QAAS,MAC7F,EAAE,YAAc,YCkBJ,GAAL,SAAA,UACL,EAAA,WAAa,8BACb,EAAA,oBAAsB,yBACtB,EAAA,mBAAqB,mCACrB,EAAA,eAAiB,sCACjB,EAAA,gBAAkB,yCALb,KAUK,GAAL,SAAA,UACL,EAAA,WAAa,aACb,EAAA,mBAAqB,mCACrB,EAAA,eAAiB,sCACjB,EAAA,gBAAkB,yCAJb,YEMD,GAAA,EAAmC,cACvC,CAAA,GAGI,GAAA,KAAA,EAAA,EAAA,YAA0C,IAE1C,GAAA,EACJ,eAGI,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACJ,MAAM,SAAE,GAAa,IACf,GAAkB,QAAT,EAAA,EAAS,qBAAA,IAAA,OAAA,EAAT,EAAwB,SAAU,KAC3C,EAAW,IAEjB,EAAA,KACE,EAAS,UAAU,CACjB,UAAW,GAAuB,aAGpC,EAAS,oBAAoB,CAC3B,UAAW,GAAgB,eAI/B,MAAQ,UAAW,EAAoB,KAAM,GAAkB,EAC7D,CACE,OAAiB,QAAjB,EAAQ,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,YAC1B,SAAU,CACR,IAAc,QAAd,EAAK,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,IACvB,IAAc,QAAd,EAAK,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,QAKvB,YAAE,EAAA,UAAa,IAAA,EAAA,EAAA,SAAA,KAA4B,IAAA,EAAA,EAC/C,MAAM,EAAmB,OAAO,QAAQ,GAAiB,CAAA,GAEzD,MAAO,CACL,YAA8B,QAA9B,EAAa,EAAiB,UAAA,IAAA,OAAA,EAAjB,EAAsB,GACnC,UAA4B,QAA5B,EAAW,EAAiB,UAAA,IAAA,OAAA,EAAjB,EAAsB,KAElC,CAAC,EAAoB,IAElB,GAAA,EAAA,EAAA,SAAA,KAAuB,IAAA,EAAA,EAAA,EAC3B,OAAc,QAAV,EAAC,EAAS,eAAA,IAAA,GAAT,EAAkB,aAOhB,aAAA,EAAA,EAAW,WAAY,CAAE,IAAK,EAAG,IAAK,GANpC,CACL,KAAc,QAAT,EAAA,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,MAAO,EAC9B,KAAc,QAAT,EAAA,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,MAAO,IAKjC,CACQ,QADR,EACD,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,YACT,QADS,EAClB,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,IACT,QADS,EAClB,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,IAClB,KAGM,UAAW,EAAmB,KAAM,GAAa,EAAY,CACnE,IAAK,EAAO,IACZ,IAAK,EAAO,OAGP,EAAa,IAAA,EAAA,EAAA,aACb,EAAY,IAAA,EAAA,EAAA,aAGjB,UAAW,EAAA,gBACX,EAAA,YACA,EAAA,aACA,EAAA,cACA,GDvFJ,SAAgB,GAKuC,IALpB,QACjC,EAAA,YACA,EAAA,WACA,GACG,EAAA,EAAA,EAAA,EAAA,GAEH,MAAM,UAAE,EAAW,KAAM,GAAgB,EAAA,EAAA,EAAA,CAAA,EACpC,GAAA,CAAA,EAAA,CACH,QAAS,CAAC,WACV,OAAQ,IACR,MAAO,GACP,OAAQ,QAGJ,QAAE,EAAA,gBAAS,EAAA,YAAiB,EAAA,aAAa,EAAA,cAAc,IAAA,EAAA,EAAA,SAAA,KAEzD,MAAM,EAAsD,CAC1D,aAAS,EACT,qBAAiB,EACjB,YAAa,GACb,aAAc,GACd,eAAe,GAGjB,IACG,IACC,EAAY,kBAAoB,EAAY,aAE9C,OAAO,EAGT,MAAM,EAAc,IAAI,IAClB,EAAiB,IAAI,IACrB,EAAkB,IAAI,IACtB,EAAgB,IAChB,EAAY,iBAAmB,MAC/B,EAAY,cAAgB,IAE5B,EAA2B,GAC3B,EAA2B,GAEjC,IAAK,MAAM,KAAU,EAAe,CAAA,IAAA,EAAA,EAClC,GAAI,EAAY,IAAI,EAAO,MACzB,SAGF,EAAY,IAAI,EAAO,MACvB,EAAe,KAAK,GAEJ,QAAZ,IACF,EAAO,cACL,EAAO,iBACL,EAAO,yBACP,EAAO,cACP,EAAO,WAGb,IAAK,MAAM,KAAe,QAAP,EAAA,EAAO,yBAAA,IAAA,OAAA,EAAP,EAA0B,QAAS,GAAE,CAAA,IAAA,EACtD,EAAe,IAAI,EAAK,CAG1B,IAAK,MAAM,KAAgB,QAAP,EAAA,EAAO,yBAAA,IAAA,OAAA,EAAP,EAA0B,SAAU,GAAE,CAAA,IAAA,EACxD,EAAgB,IAAI,EAAM,CAG5B,MAAM,OACY,IAAhB,IACO,QADS,EAChB,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,cAAA,IAAA,OAAA,EAA1B,EAAkC,SAAS,IACvC,OACW,IAAf,IACO,QADQ,EACf,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,aAAA,IAAA,OAAA,EAA1B,EAAiC,SAAS,IAExC,GAAgB,GAClB,EAAe,KAAK,GAIxB,MAAO,CACL,QAAS,EACT,gBAAiB,EACjB,YAAa,IAAI,GACjB,aAAc,IAAI,GAClB,cAAe,EAAO,gBAEvB,CAAC,EAAS,EAAa,EAAY,IAExC,MAAO,CACL,YACA,UACA,kBACA,cACA,eACA,iBCJE,CAAmB,CACrB,OAAQ,EACR,QAAS,EAAS,QAClB,cACA,eAGI,GAAA,EAAA,EAAA,SAAA,IACE,GAAoB,EAC1B,CAAC,EAAkB,KAGrB,EAAA,EAAA,WAAA,KACE,EAAe,QACS,IAAtB,GAAmC,EAAY,SAAS,GACpD,OACA,IAEL,CAAC,KAEJ,EAAA,EAAA,WAAA,KACE,EAAgB,QACS,IAAvB,GACA,EAAa,SAAS,GAClB,OACA,IAEL,CAAC,IAEJ,MAAM,GAAA,EAAA,EAAA,SAAA,KAAA,IAAA,EAAA,MACG,CACL,YACA,kBACA,cACA,eACA,aACA,cACA,gBACA,iBACA,gBACA,SACA,WACA,kBAA4B,QAA5B,EAAmB,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,oBAEvC,CACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACS,QADT,EACA,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,oBAItB,OACE,EAAA,GAAA,KAAC,GAA2B,SAA5B,CAAqC,MAAO,EACzC,cCzKM,GAAgC,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,WACjC,gBAAiB,IAAU,WAC3B,kBAAmB,IAAU,aAC5B,WAAU,GEfA,GAAA,IAAA,IAAW,KACtB,EAAO,SAAA,SACP,GACG,EAAA,EAAA,EAAA,EAAA,GAAA,OAEH,EAAA,GAAA,KAAC,EAAA,EAAA,EAAA,CAAoB,UDdA,yICc2B,YAAW,GAAU,GAAA,CAAA,EAAA,WACnE,EAAA,GAAA,KAAC,EAAD,CAAsB,UDRF,mBCSjB,iBENM,GAAA,IAAA,IAAQ,QAAE,EAAU,OAAA,SAAQ,GAAa,EAAA,EAAA,EAAA,EAAA,GAAA,OACpD,EAAA,GAAA,MAAC,EAAA,EAAA,EAAA,CAAiB,UDXA,wbCWwB,eAAc,GAAa,GAAA,CAAA,EAAA,UAArE,EACE,EAAA,GAAA,KAAC,EAAD,CAAuB,cACvB,EAAA,GAAA,KAAC,EAAD,CAA2B,UDDF,oGCEvB,EAAA,GAAA,KAAC,EAAD,CAAW,UDII,4CGRR,GAAA,IAAA,IAAW,KACtB,EAAO,SAAA,SACP,GACG,EAAA,EAAA,EAAA,EAAA,GAAA,OAEH,EAAA,GAAA,MAAC,EAAA,EAAA,EAAA,CAAoB,UDfA,iOCe2B,YAAW,GAAU,GAAA,CAAA,EAAA,UAArE,CACG,GACD,EAAA,GAAA,KAAC,EAAD,CAAA,UACE,EAAA,GAAA,KAAC,EAAD,CAAe,UDVD,4CEGP,GAAO,qECGP,GAAA,EACX,UACA,eACA,WACA,MAAA,EACA,KAAM,EAAO,EACb,yBAQI,IAAA,EACJ,MAAM,EAAgB,CAAC,CAAE,MAAO,EAAU,MAAO,UAAY,GACvD,EAAgB,QAAA,EAAgB,MAEtC,OACE,EAAA,GAAA,MAAC,MAAD,CAAA,SAAA,EACE,EAAA,GAAA,KAAC,QAAD,CACE,UDnCa,yCCoCb,cAAa,gBAAgB,IAC7B,QAAS,iBAAiB,aAEzB,IAEF,IACC,EAAA,GAAA,KAAC,MAAD,CAAK,UDrCS,4DCsCZ,EAAA,GAAA,MAAC,EAAD,CACE,MAAO,EACP,cAAgB,GACd,EAA6B,QAAV,OAAkB,EAAY,YAHrD,EAME,EAAA,GAAA,MAAC,GAAD,CAAS,KAAK,QAAQ,GAAI,iBAAiB,aAA3C,EACE,EAAA,GAAA,KAAC,EAAD,CAAM,UDjCA,kCCkCN,EAAA,GAAA,KAAC,IAAD,CAAG,UAAW,YAEoD,UAA9D,EAAc,KAAM,GAAW,EAAO,QAAU,UAAc,IAAA,OAAA,EAA9D,EACI,YAIV,EAAA,GAAA,KAAC,GAAD,CAAA,SACG,EAAc,IAAK,IAClB,EAAA,GAAA,KAAC,GAAD,CAAyB,MAAO,EAAO,MAAO,QAAQ,kBACpD,EAAA,GAAA,KAAC,IAAD,CAAG,UAAW,YAAc,EAAO,SAD1B,EAAO,mBE5DrB,GAAa,qKCcb,GAAA,EAAgB,aAC3B,MAAM,EAAE,GAAM,EAAe,CAAC,WACxB,EAAW,KACX,kBAAE,GAAsB,KAyB9B,OACE,EAAA,GAAA,MAAC,MAAD,CAAK,UDnCgB,6CCmCrB,CACG,EAAO,KACN,EAAA,GAAA,KAAC,IAAD,CACE,QA3BF,KACJ,EAAS,UAAU,CACjB,UAAW,GAAuB,mBAClC,gBAAiB,CACf,CACE,MAAO,sBACP,KAAM,EAAO,MAEf,CACE,MAAO,qBACP,KAAM,EAAO,QAInB,EAAS,oBAAoB,CAC3B,UAAW,GAAgB,mBAC3B,gBAAiB,CACf,YAAa,EAAO,KACpB,WAAY,EAAO,QAUjB,UAAW,GACX,KAAM,EAAO,IACb,OAAO,SACP,IAAI,aACJ,qBAA8B,IAAf,EAAO,IACtB,cAAY,iCAEX,EAAO,QAGV,EAAA,GAAA,KAAC,IAAD,CAAG,cAAY,cAAc,UAAW,YACrC,EAAO,OAIX,GAAqB,EAAO,SAC3B,EAAA,GAAA,KAAC,MAAD,CACE,cAAY,gBACZ,UDxDe,iBCyDf,MAAO,EAAE,uDAET,EAAA,GAAA,KAAC,EAAD,CAAA,SAAM,EAAO,eE9DV,GAAA,EAAkB,aAAA,IAAA,EAAA,EAAA,OAC7B,EAAA,GAAA,MAAC,MAAD,CAAK,UDPkB,gBCOvB,EACE,EAAA,GAAA,KAAC,GAAD,CAAoB,YAEZ,QAAP,EAAA,EAAO,+BAAA,IAAA,OAAA,EAAP,EAAgC,QAC/B,EAAA,GAAA,KAAC,IAAD,CAAG,cAAY,eAAe,UDVf,gDCWL,UAAP,EAAO,+BAAA,IAAA,OAAA,EAAP,EAAgC,WCW5B,GAAS,6BCZT,GAAA,EACX,UACA,cAKA,MAAM,EAAE,GAAM,EAAe,wBACvB,cAAE,GAAkB,KAE1B,OACE,EAAA,GAAA,KAAA,GAAA,SAAA,CAAA,SACG,aAAA,EAAA,EAAS,IAAK,IAAA,IAAA,EAAA,EAAA,EAAA,OACb,EAAA,GAAA,MAAC,KAAD,CAA+B,UDxBnB,4ECwBZ,EACE,EAAA,GAAA,KAAC,KAAD,CAAA,UACE,EAAA,GAAA,KAAC,GAAD,CAAsB,cAExB,EAAA,GAAA,KAAC,KAAD,CAAA,UACE,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,YACN,UAAP,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,aAAA,IAAA,OAAA,EAA1B,EAAiC,IAAK,IACrC,EAAA,GAAA,KAAC,EAAD,CAAA,SAAqC,GAA3B,GAAG,EAAO,QAAQ,WAIA,IAAjC,EAAQ,QAAQ,eACf,EAAA,GAAA,KAAC,KAAD,CAAA,UACE,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,YACN,UAAP,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,iBAAA,IAAA,OAAA,EAA1B,EAAqC,IAAK,IACzC,EAAA,GAAA,KAAC,EAAD,CAAwC,QAAQ,iBACzB,EAAP,OAAb,EAAsB,SAAc,YAD7B,GAAG,EAAO,QAAQ,WAOpC,EAAA,GAAA,KAAC,KAAD,CAAA,UACE,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,YACN,UAAP,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,cAAA,IAAA,OAAA,EAA1B,EAAkC,IAAK,IACtC,EAAA,GAAA,KAAC,EAAD,CAAqC,QAAQ,iBAC1C,GADO,GAAG,EAAO,QAAQ,UAMjC,IACC,EAAA,GAAA,KAAC,KAAD,CAAA,UACE,EAAA,GAAA,MAAC,MAAD,CAAK,UAAW,YAAhB,EACE,EAAA,GAAA,KAAC,EAAD,CAAK,YAAa,EAAO,+BACtB,EAAE,mCAEL,EAAA,GAAA,KAAC,EAAD,CAAK,YAAa,EAAO,oBACtB,EAAE,yBAEL,EAAA,GAAA,KAAC,EAAD,CAAK,YAAa,EAAO,mBACtB,EAAE,6BAKX,EAAA,GAAA,KAAC,KAAD,CAAA,UACE,EAAA,GAAA,KAAC,IAAD,CAAG,UDrDW,yDCsDX,EAAc,CACb,OAAQ,EAAO,QACf,KAAM,EAAO,KACb,MAAO,EAAO,iBAnDb,OAAO,EAAO,aCdzB,GAEF,CACF,IAAK,CAAC,OAAQ,OAAQ,YAAa,SAAU,WAC7C,IAAK,CAAC,OAAQ,OAAQ,SAAU,YAGrB,GAAA,EAAkB,cAC7B,MAAM,EAAE,GAAM,EAAe,wBACvB,UAAE,EAAA,cAAW,EAAA,SAAe,GAAa,KAEzC,GAAA,EAAA,EAAA,SAAA,KACJ,GAAI,EAEF,OAAO,GAAY,IAGrB,GAA0B,SAAtB,aAAA,EAAA,EAAU,UAAqB,EAAe,CAChD,MAAM,EAAa,IAAI,GAAY,KAInC,OAHK,EAAW,SAAS,aACvB,EAAW,OAAO,EAAW,OAAS,EAAG,EAAG,YAEvC,EAGT,OAAO,GAAY,EAAS,UAC3B,CAAC,EAAW,EAAU,IAEzB,OACE,EAAA,GAAA,MAAC,MAAD,CAAK,UPvCgB,6MOuCa,kBAAiB,WAAnD,EACI,IACA,EAAA,GAAA,MAAC,QAAD,CAAO,UP9BM,kEO8Bb,EACE,EAAA,GAAA,KAAC,QAAD,CAAA,UACE,EAAA,GAAA,KAAC,KAAD,CAAA,SACG,GACC,EAAQ,IAAK,IACX,EAAA,GAAA,KAAC,KAAD,CAAiB,UP7Bb,4FO8BF,EAAA,GAAA,KAAC,KAAD,CAAA,SAAK,EAAE,WAAW,QADX,SAMjB,EAAA,GAAA,MAAC,QAAD,CAAA,SAAA,CACG,IAAW,aAAA,EAAA,EAAS,QAAS,IAC5B,EAAA,GAAA,KAAC,GAAD,CAAe,UAAkB,YAGd,KAApB,aAAA,EAAA,EAAS,UACR,EAAA,GAAA,KAAC,MAAD,CAAK,UPjCQ,gBOkCX,EAAA,GAAA,KAAC,EAAD,CAAe,KAAM,EAAE,6BAO/B,IAAc,IAAW,EAAA,GAAA,KAAC,EAAD,CAAe,KAAM,EAAE,gBE+0ClD,GAAiB,CACrB,MAAO,SACP,KAAM,IACN,UAAW,KACX,OAAQ,KACR,cAAe,YACf,UAAW,MACX,eAAgB,EAChB,gBAAiB,EACjB,YAAa,CAAA,EACb,UAAU,EACV,cAAe,GACf,MAAM,EACN,WAAW,EACX,SAAU,GACV,WAAY,EACZ,QAAQ,EACR,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,GA6Nd,GAAc,mBAAgB,EChmD9B,GAAiB,mBAAgB,ECnBpB,GACX,IAEA,MAAO,EAAe,IAAA,EAAA,EAAA,UAA6B,IAC5C,EAAa,IAAA,EAAA,EAAA,UAAqC,IAEnD,GAAA,EAAA,EAAA,aACH,IACM,GACL,EAAS,SAAS,IAEpB,CAAC,IAGG,GAAA,EAAA,EAAA,aAAsB,IAC1B,EAAe,EAAa,mBAC3B,IAEG,GAAA,EAAA,EAAA,aAAwB,IAC5B,EAAiB,EAAe,uBAC/B,IAUH,OARA,EAAA,EAAA,WAAA,KACO,IAEL,EAAO,GACP,EAAS,GACT,EAAS,GAAG,SAAU,GAAQ,GAAG,SAAU,GAAU,GAAG,SAAU,KACjE,CAAC,EAAU,EAAQ,IAEf,CACL,gBACA,cACA,qBAMS,GAAiC,IAC5C,MAAM,SAAE,GAA2B,EAAd,EAAA,EAAc,EAAA,GAEnC,OACE,EAAA,GAAA,KAAC,SAAA,EAAA,EAAA,CAAO,KAAK,UAAa,GAAA,CAAA,EAAA,CACvB,eCZM,GAAS,qCC1CT,GAAA,EACX,gBACA,cACA,uBAOE,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,EAAQ,6BACrB,EAAY,IAAA,CAAK,EAAG,KACnB,EAAA,GAAA,KAAC,GAAD,CAEE,QAAA,IAAe,EAAiB,GAChC,UAAW,EAAQ,uEACnB,gBAAe,IAAU,GAHpB,MEfF,GAAA,EACX,QACA,eAME,EAAA,GAAA,MAAA,GAAA,SAAA,CAAA,SAAA,EACE,EAAA,GAAA,KAAC,IAAD,CAAG,UDZa,oFCYc,IAC7B,KCPM,GAAA,EAAsB,aACjC,MAAM,EAAE,GAAM,EAAe,uBAE7B,OACG,EAAO,uBACP,EAAO,YACP,EAAO,WAMR,EAAA,GAAA,KAAC,GAAD,CAAe,MAAO,EAAE,8BACtB,EAAA,GAAA,MAAA,GAAA,SAAA,CAAA,SAAA,EACE,EAAA,GAAA,KAAC,EAAD,CAAK,YAAa,EAAO,+BACtB,EAAE,mCAEL,EAAA,GAAA,KAAC,EAAD,CAAK,YAAa,EAAO,oBAAa,EAAE,yBACxC,EAAA,GAAA,KAAC,EAAD,CAAK,YAAa,EAAO,mBAAY,EAAE,4BAVpC,MCFE,GAAA,EAAgB,aAAiC,IAAA,EAAA,EAC5D,MAAM,EAAE,GAAM,EAAe,uBAE7B,OACE,EAAA,GAAA,MAAC,MAAD,CAAK,ULHY,2DKGjB,EACE,EAAA,GAAA,KAAC,GAAD,CAAsB,YAEtB,EAAA,GAAA,KAAC,GAAD,CAAe,MAAO,EAAE,0BACtB,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,YACN,UAAP,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,aAAA,IAAA,OAAA,EAA1B,EAAiC,IAAK,IACrC,EAAA,GAAA,KAAC,EAAD,CAAA,SAAqC,GAA3B,GAAG,EAAO,QAAQ,WAKlC,EAAA,GAAA,KAAC,GAAD,CAAe,MAAO,EAAE,4BACtB,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,YACN,UAAP,EAAO,yBAAA,IAAA,GAAmB,QAAnB,EAAP,EAA0B,cAAA,IAAA,OAAA,EAA1B,EAAkC,IAAK,IACtC,EAAA,GAAA,KAAC,EAAD,CAAK,QAAQ,iBACV,GADuB,GAAG,EAAO,QAAQ,WAOlD,EAAA,GAAA,KAAC,GAAD,CAA0B,YAE1B,EAAA,GAAA,KAAC,GAAD,CAAe,MAAO,EAAE,6BACtB,EAAA,GAAA,KAAC,IAAD,CAAG,ULNY,kEKOZ,EAAc,CACb,OAAQ,EAAO,QACf,KAAM,EAAO,KACb,MAAO,EAAO,mBC9Bb,GAAA,EAAiB,cAC5B,MAAM,EAAE,GAAM,EAAe,wBACvB,UAAE,GAAc,MACf,EAAU,GAAY,MAEvB,cAAE,EAAA,YAAe,EAAA,iBAAa,GAClC,GAAa,GAEf,OACE,EAAA,GAAA,KAAA,GAAA,SAAA,CAAA,UACE,EAAA,GAAA,MAAC,UAAD,CACE,UAAW,EAAQ,mJACnB,kBAAiB,WAFnB,EAII,IACE,GAA8B,IAAnB,EAAQ,QAGnB,EAAA,GAAA,KAAC,MAAD,CAAK,UAAU,kBAAkB,IAAK,YACpC,EAAA,GAAA,KAAC,MAAD,CAAK,UAAW,EAAQ,wEACrB,EAAQ,IAAK,IACZ,EAAA,GAAA,KAAC,MAAD,CAAK,UAAU,yBACb,EAAA,GAAA,KAAC,GAAD,CAAoB,YADa,EAAO,YALhD,EAAA,GAAA,KAAC,EAAD,CAAe,KAAM,EAAE,cAa3B,EAAA,GAAA,KAAC,GAAD,CACiB,gBACF,cACK,2BErCf,GAAA,EAAY,sBACvB,MAAM,EAAE,GAAM,EAAe,uBACvB,EAAW,KACX,OAAE,GAAW,KAQnB,OACE,EAAA,GAAA,MAAC,MAAD,CAAK,UDrBgB,oFCqBrB,EACE,EAAA,GAAA,KAAC,IAAD,CAAG,UDfqB,0BCec,EAAE,qBACxC,EAAA,GAAA,KAAC,EAAD,CACE,QAVA,KACJ,EAAS,UAAU,CACjB,UAAW,GAAuB,uBAShC,QAAQ,uBACA,SACR,SAAU,QEFL,GAAA,KAAgB,IAAA,EAAA,EAAA,EAC3B,MAAM,EAAE,GAAM,EAAe,uBACvB,EAAW,KACX,SAAE,GAAa,KACf,gBACJ,EAAA,aACA,EAAA,YACA,EAAA,YACA,EAAA,WACA,EAAA,eACA,EAAA,cACA,GACE,KACE,EAAW,IAEX,EAAoB,EAAY,IAAK,IAAA,CACzC,MAAO,EACP,MAAO,KAGH,EAAqB,EAAa,IAAK,IAAA,CAC3C,MAAO,EACP,MAAO,KAyCT,OAtCA,EAAA,EAAA,WAAA,UACqB,IAAf,IACF,EAAS,UAAU,CACjB,UAAW,GAAuB,eAClC,gBAAiB,CACf,CACE,MAAO,iBACP,KAAM,MAIZ,EAAS,oBAAoB,CAC3B,UAAW,GAAgB,eAC3B,gBAAiB,CACf,eAAgB,WAKF,IAAhB,IACF,EAAS,UAAU,CACjB,UAAW,GAAuB,gBAClC,gBAAiB,CACf,CACE,MAAO,kBACP,KAAM,MAIZ,EAAS,oBAAoB,CAC3B,UAAW,GAAgB,gBAC3B,gBAAiB,CACf,gBAAiB,OAItB,CAAC,EAAa,KAGf,EAAA,GAAA,MAAA,GAAA,SAAA,CAAA,SAAA,EACE,EAAA,GAAA,KAAC,EAAD,CACE,MACqC,iBAAnB,QAAhB,EAAO,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,SACG,KAAnB,QAAT,EAAA,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,OACd,EAAS,QAAQ,MACjB,EAAE,YAGV,EAAA,GAAA,MAAC,MAAD,CAAK,UDrFY,sHCqFjB,EACE,EAAA,GAAA,KAAC,GAAD,CACE,QAAS,EACT,KAAM,EACN,MAAO,EAAE,gBACT,SAAU,EAAE,uBACZ,aAAc,EACd,mBAAqB,GACnB,EAAc,MAGlB,EAAA,GAAA,KAAC,GAAD,CACE,QAAS,EACT,KAAM,EACN,MAAO,EAAE,kBACT,SAAU,EAAE,wBACZ,aAAc,EACd,mBAAqB,GACnB,EAAe,QAIpB,GACC,EAAA,GAAA,KAAC,GAAD,CAAa,QAAS,KAEtB,EAAA,GAAA,KAAC,GAAD,CAAc,QAAS,KAGzB,EAAA,GAAA,KAAC,GAAD,CAAQ,gBAA0B,QAA1B,EAAiB,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,sBC7GjD,EAAoB,EAAmB,iBAAiB,KAAI,EAAA,UAEtD,KAA4B,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAChC,MAAM,SAAE,GAAa,IACf,EAAW,IACX,GAAkB,QAAT,EAAA,EAAS,qBAAA,IAAA,OAAA,EAAT,EAAwB,SAAU,KAE3C,GAAA,EAAA,EAAA,SAAA,KAAyB,IAAA,EAAA,EAAA,EAAA,EAC7B,OAAa,QAAb,EAAI,EAAS,eAAA,IAAA,GAAT,EAAkB,YACb,CACL,YAAsB,QAAtB,EAAa,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,aAI5B,CACL,IAAc,QAAd,EAAK,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,IACvB,IAAc,QAAd,EAAK,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,MAExB,CACQ,QADR,EACD,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,IACT,QADS,EAClB,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,IACT,QADS,EAClB,EAAS,eAAA,IAAA,OAAA,EAAT,EAAkB,cAGpB,OACE,EAAA,GAAA,KAAC,EAAD,CAAA,UACE,EAAA,GAAA,KAAC,EAAD,CACE,IAAI,uBACI,UACR,QAAS,EAAS,kBAElB,EAAA,GAAA,KAAC,EAAD,CACE,YAAsB,QAAtB,EAAa,EAAS,qBAAA,IAAA,GAAe,QAAf,EAAT,EAAwB,mBAAA,IAAA,OAAA,EAAxB,EAAqC,IAClD,OAAQ,EAAS,OACjB,WAAqB,QAArB,EAAY,EAAS,qBAAA,IAAA,OAAA,EAAT,EAAwB,WACpC,OAAiB,QAAjB,EAAQ,EAAS,qBAAA,IAAA,OAAA,EAAT,EAAwB,OAChC,QAAS,EAAa,+BAEtB,EAAA,GAAA,KAAC,EAAD,CACE,yBAA0B,CACxB,OAAQ,EAAS,QAAU,IAE7B,kBAAmB,EAAmB,iBACtC,KAAM,CACJ,SAAU,EAAS,SACnB,YAAa,EAAa,qBAC1B,eAAA,WAEF,WAAY,CACV,WACA,KAAM,EAAS,SACf,SAAU,SAAS,SACnB,SACA,YAEF,MAAO,CACL,aACE,aAGJ,EAAA,GAAA,KAAC,GAAD,CAAA,UACE,EAAA,GAAA,KAAC,GAAD,CAAA"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodSchools-legacy-0G_dtI8q.js","names":["t","isObject"],"sources":["../../../../node_modules/@phosphor-icons/react/dist/defs/Check.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/Check.es.js","../../src/sdks/NeighborhoodSchools/types.ts","../../src/sdks/NeighborhoodSchools/hooks/useFilteredSchools/index.ts","../../src/sdks/NeighborhoodSchools/context.tsx","../../src/sdks/NeighborhoodSchools/schema.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Content/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Content/index.tsx","../../src/sdks/NeighborhoodSchools/components/Filter/Item/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Item/index.tsx","../../src/sdks/NeighborhoodSchools/components/Filter/Trigger/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/Trigger/index.tsx","../../src/sdks/NeighborhoodSchools/components/Filter/styles.ts","../../src/sdks/NeighborhoodSchools/components/Filter/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/SchoolName/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/SchoolName/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolHeader/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/Body/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/Body/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsTable/index.tsx","../../../../node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","../../../../node_modules/embla-carousel/esm/embla-carousel.esm.js","../../../../node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","../../src/sdks/NeighborhoodSchools/components/SchoolsList/EmblaCarouselDotButton.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolsList/Controls/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/SchoolSection/styles.ts","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/SchoolSection/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/SchoolCategories/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/SchoolItem/index.tsx","../../src/sdks/NeighborhoodSchools/components/SchoolsList/index.tsx","../../src/sdks/NeighborhoodSchools/components/Footer/styles.ts","../../src/sdks/NeighborhoodSchools/components/Footer/index.tsx","../../src/sdks/NeighborhoodSchools/components/Content/styles.ts","../../src/sdks/NeighborhoodSchools/components/Content/index.tsx","../../src/sdks/NeighborhoodSchools/index.tsx"],"sourcesContent":["import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M232,56V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M228.24,76.24l-128,128a6,6,0,0,1-8.48,0l-56-56a6,6,0,0,1,8.48-8.48L96,191.51,219.76,67.76a6,6,0,0,1,8.48,8.48Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M226.83,74.83l-128,128a4,4,0,0,1-5.66,0l-56-56a4,4,0,0,1,5.66-5.66L96,194.34,221.17,69.17a4,4,0,1,1,5.66,5.66Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as e from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport a from \"../defs/Check.es.js\";\nconst o = e.forwardRef((c, r) => /* @__PURE__ */ e.createElement(t, { ref: r, ...c, weights: a }));\no.displayName = \"CheckIcon\";\nconst n = o;\nexport {\n n as Check,\n o as CheckIcon\n};\n","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAttribution?: boolean;\n showSchoolRatings?: boolean;\n};\n\nexport type NeighborhoodSchoolsProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport type tableHeaders = Partial<\n \"name\" | \"type\" | \"languages\" | \"levels\" | \"address\" | \"category\"\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-schools-Viewed\",\n ATTRIBUTION_CLICKED = \"LC-Attribution-Clicked\",\n SCHOOL_URL_CLICKED = \"neighborhood-schools-URL-Clicked\",\n FILTER_BY_TYPE = \"neighborhood-schools-Filter-By-Type\",\n FILTER_BY_LEVEL = \"neighborhood-schools-Filter-By-Level\",\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 SCHOOL_URL_CLICKED = \"neighborhood_schools_url_clicked\",\n FILTER_BY_TYPE = \"neighborhood_schools_filter_by_type\",\n FILTER_BY_LEVEL = \"neighborhood_schools_filter_by_level\",\n}\n","import { useMemo } from \"react\";\nimport type { School, Schools } from \"@local-logic/client\";\nimport {\n SchoolLevel,\n SchoolType,\n} from \"@local-logic/client/dist/features/schools\";\n\nimport { SchoolsParams, useSchools } from \"~/features/clientLibrary/useSchools\";\n\ntype UseFilteredSchoolsParams = Omit<SchoolsParams, \"include\"> & {\n country?: string;\n filterLevel?: SchoolLevel;\n filterType?: SchoolType;\n};\n\ntype UseFilteredSchoolsResult = {\n isLoading: boolean;\n schools?: School[];\n filteredSchools?: School[];\n schoolTypes: SchoolType[];\n schoolLevels: SchoolLevel[];\n hasCategories: boolean;\n};\n\nexport function useFilteredSchools({\n country,\n filterLevel,\n filterType,\n ...schoolsParams\n}: UseFilteredSchoolsParams): UseFilteredSchoolsResult {\n const { isLoading, data: schoolsData } = useSchools({\n ...schoolsParams,\n include: [\"schools\" as keyof Schools],\n radius: 2000,\n limit: 30,\n buffer: 250,\n });\n\n const { schools, filteredSchools, schoolTypes, schoolLevels, hasCategories } =\n useMemo(() => {\n const result: Omit<UseFilteredSchoolsResult, \"isLoading\"> = {\n schools: undefined,\n filteredSchools: undefined,\n schoolTypes: [],\n schoolLevels: [],\n hasCategories: false,\n };\n\n if (\n !schoolsData ||\n (!schoolsData.primary_schools && !schoolsData.high_schools)\n ) {\n return result;\n }\n\n const schoolNames = new Set<string>();\n const schoolTypesSet = new Set<SchoolType>();\n const schoolLevelsSet = new Set<SchoolLevel>();\n const mergedSchools = [\n ...(schoolsData.primary_schools || []),\n ...(schoolsData.high_schools || []),\n ];\n const dedupedSchools: School[] = [];\n const visibleSchools: School[] = [];\n\n for (const school of mergedSchools) {\n if (schoolNames.has(school.name)) {\n continue;\n }\n\n schoolNames.add(school.name);\n dedupedSchools.push(school);\n\n if (country === \"USA\") {\n result.hasCategories =\n result.hasCategories ||\n !!school.is_advanced_placement ||\n !!school.is_charter ||\n !!school.is_magnet;\n }\n\n for (const type of school.school_attributes?.types || []) {\n schoolTypesSet.add(type);\n }\n\n for (const level of school.school_attributes?.levels || []) {\n schoolLevelsSet.add(level);\n }\n\n const matchesLevel =\n filterLevel === undefined ||\n school.school_attributes?.levels?.includes(filterLevel);\n const matchesType =\n filterType === undefined ||\n school.school_attributes?.types?.includes(filterType);\n\n if (matchesLevel && matchesType) {\n visibleSchools.push(school);\n }\n }\n\n return {\n schools: dedupedSchools,\n filteredSchools: visibleSchools,\n schoolTypes: [...schoolTypesSet],\n schoolLevels: [...schoolLevelsSet],\n hasCategories: result.hasCategories,\n };\n }, [country, filterLevel, filterType, schoolsData]);\n\n return {\n isLoading,\n schools,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n hasCategories,\n };\n}\n","import React, { useContext, useMemo, useEffect, useState } from \"react\";\n\nimport type { School } from \"@local-logic/client\";\nimport {\n SchoolLevel,\n SchoolType,\n} from \"@local-logic/client/dist/features/schools\";\nimport {\n type NeighborhoodSchoolsProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useFilteredSchools } from \"./hooks/useFilteredSchools\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useLocation } from \"~/hooks/useLocation\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n filteredSchools?: School[];\n schoolTypes: SchoolType[];\n schoolLevels: SchoolLevel[];\n filterType?: SchoolType;\n filterLevel?: SchoolLevel;\n setFilterType: (type?: SchoolType) => void;\n setFilterLevel: (level?: SchoolLevel) => void;\n hasCategories: boolean;\n locale: \"en\" | \"fr\";\n location: {\n country: string;\n state: string;\n };\n showSchoolRatings?: boolean;\n};\n\nconst NeighborhoodSchoolsContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodSchools = () => useContext(NeighborhoodSchoolsContext);\n\nconst NeighborhoodSchoolsProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodSchoolsProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\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 },\n );\n\n const { geographyId, geography } = useMemo(() => {\n const geographiesArray = Object.entries(geographyData || {});\n\n return {\n geographyId: geographiesArray[0]?.[0],\n geography: geographiesArray[0]?.[1],\n };\n }, [isGeographyLoading, geographyData]);\n\n const center = useMemo(() => {\n if (!sdkState.options?.geographyId) {\n return {\n lat: sdkState.options?.lat || 0,\n lng: sdkState.options?.lng || 0,\n };\n }\n\n return geography?.centroid || { lat: 0, lng: 0 };\n }, [\n sdkState.options?.geographyId,\n sdkState.options?.lat,\n sdkState.options?.lng,\n geography,\n ]);\n\n const { isLoading: isLocationLoading, data: location } = useLocation({\n lat: center.lat,\n lng: center.lng,\n });\n\n const [filterLevel, setFilterLevel] = useState<SchoolLevel | undefined>();\n const [filterType, setFilterType] = useState<SchoolType | undefined>();\n\n const {\n isLoading: isSchoolsLoading,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n hasCategories,\n } = useFilteredSchools({\n geogId: geographyId,\n country: location.country,\n filterLevel,\n filterType,\n });\n\n const isLoading = useMemo(\n () => isSchoolsLoading || isLocationLoading,\n [isSchoolsLoading, isLocationLoading],\n );\n\n useEffect(() => {\n setFilterType((currentFilterType) =>\n currentFilterType === undefined || schoolTypes.includes(currentFilterType)\n ? currentFilterType\n : undefined,\n );\n }, [schoolTypes]);\n\n useEffect(() => {\n setFilterLevel((currentFilterLevel) =>\n currentFilterLevel === undefined ||\n schoolLevels.includes(currentFilterLevel)\n ? currentFilterLevel\n : undefined,\n );\n }, [schoolLevels]);\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n filterType,\n filterLevel,\n setFilterType,\n setFilterLevel,\n hasCategories,\n locale,\n location,\n showSchoolRatings: sdkState.options?.showSchoolRatings,\n }),\n [\n isLoading,\n filteredSchools,\n schoolTypes,\n schoolLevels,\n filterType,\n filterLevel,\n locale,\n hasCategories,\n location,\n sdkState.options?.showSchoolRatings,\n ],\n );\n\n return (\n <NeighborhoodSchoolsContext.Provider value={contextValue}>\n {children}\n </NeighborhoodSchoolsContext.Provider>\n );\n};\n\nexport { useNeighborhoodSchools, NeighborhoodSchoolsProvider };\n","import { ObjectSchema, number, object, string, boolean, mixed } from \"yup\";\nimport { Options } from \"./types\";\n\nexport const schema: ObjectSchema<Options> = object({\n lat: number()\n .min(-90, \"Must be a valid latitude.\")\n .max(90, \"Must be a valid latitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n lng: number()\n .min(-180, \"Must be a valid longitude.\")\n .max(180, \"Must be a valid longitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n geographyId: string().optional(),\n title: mixed<string | boolean>().optional(),\n hideAttribution: boolean().optional(),\n showSchoolRatings: boolean().optional(),\n}).noUnknown(true);\n","export const content = `\n overflow-hidden bg-base-white rounded-sm shadow-md\n z-10 min-w-32\n data-[size=medium]:text-sm\n data-[size=large]:text-base\n`;\n\nexport const viewport = `font-inherit p-0`;\n","import React, { ComponentProps } from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\n\nimport * as styles from \"./styles\";\n\ntype ContentProps = {\n size?: \"medium\" | \"large\";\n} & ComponentProps<typeof RadixSelect.Content>;\n\nexport const Content = ({\n size = \"medium\",\n children,\n ...props\n}: ContentProps) => (\n <RadixSelect.Content className={styles.content} data-size={size} {...props}>\n <RadixSelect.Viewport className={styles.viewport}>\n {children}\n </RadixSelect.Viewport>\n </RadixSelect.Content>\n);\n","export const item = `\n font-sans font-inherit py-1 pr-8 pl-6 outline-none\n relative rounded-sm cursor-default text-zinc-800\n\n data-[highlighted]:[&:not([data-variant=\"light\"])]:bg-primary-100\n data-[highlighted]:[&:not([data-variant=\"light\"])]:text-base-white\n\n // Special color between now and design system\n data-[highlighted]:[&:not([data-variant=\"dark\"])]:bg-primary-10\n data-[highlighted]:[&:not([data-variant=\"dark\"])]:text-zinc-950\n `;\n\nexport const itemIndicator = `\n absolute left-0 bottom-0\n inline-flex justify-center items-center\n h-full w-6\n`;\n\nexport const check = `\n text-base-black\n h-3 w-3\n`;\n","import React, { ComponentProps } from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\nimport { CheckIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\n\ntype ItemProps = {\n variant?: \"dark\" | \"light\";\n} & ComponentProps<typeof RadixSelect.Item>;\n\nexport const Item = ({ variant = \"dark\", children, ...props }: ItemProps) => (\n <RadixSelect.Item className={styles.item} data-variant={variant} {...props}>\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n <RadixSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon className={styles.check} />\n </RadixSelect.ItemIndicator>\n </RadixSelect.Item>\n);\n","export const trigger = `\n inline-flex items-center justify-between flex-1\n bg-base-white rounded-lg border\n py-1 pr-2 pl-3 min-w-32\n data-[size=medium]:text-sm data-[size=medium]:h-8\n data-[size=large]:text-base data-[size=large]:h-10\n`;\n\nexport const icon = `\n text-base-black\n h-5 w-5\n`;\n","import React, { ComponentProps } from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\nimport { CaretDownIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\n\ntype TriggerProps = {\n size?: \"medium\" | \"large\";\n} & ComponentProps<typeof RadixSelect.Trigger>;\n\nexport const Trigger = ({\n size = \"medium\",\n children,\n ...props\n}: TriggerProps) => (\n <RadixSelect.Trigger className={styles.trigger} data-size={size} {...props}>\n {children}\n <RadixSelect.SelectIcon>\n <CaretDownIcon className={styles.icon} />\n </RadixSelect.SelectIcon>\n </RadixSelect.Trigger>\n);\n","export const label = `\n ml-2 mb-1\n text-sm font-normal\n`;\n\nexport const filter = `\n shadow\n rounded-lg\n -outline-offset-2\n`;\n\nexport const item = `\n capitalize text-sm font-normal\n py-2 pl-2\n pr-6 sm:pr-36\n`;\n\nexport const icon = `\n w-4 h-4 text-stone-500\n`;\n","import React from \"react\";\nimport * as RadixSelect from \"@radix-ui/react-select\";\n\nimport { type Icon, BackpackIcon } from \"@phosphor-icons/react\";\nimport { Content } from \"./Content\";\nimport { Item } from \"./Item\";\nimport { Trigger } from \"./Trigger\";\nimport * as styles from \"./styles\";\n\ntype FilterOption = {\n label: string;\n value: string;\n};\n\nexport const Filter = ({\n options,\n activeFilter,\n allLabel,\n label,\n icon: Icon = BackpackIcon,\n handleFilterChange,\n}: {\n options: FilterOption[];\n activeFilter?: string;\n allLabel: string;\n label: string;\n icon?: Icon;\n handleFilterChange: (option?: string) => void;\n}) => {\n const filterOptions = [{ label: allLabel, value: \"ALL\" }, ...options];\n const selectedValue = activeFilter ?? \"ALL\";\n\n return (\n <div>\n <label\n className={styles.label}\n data-testid={`filter-label-${label}`}\n htmlFor={`filter-select-${label}`}\n >\n {label}\n </label>\n {options && (\n <div className={styles.filter}>\n <RadixSelect.Root\n value={selectedValue}\n onValueChange={(value) =>\n handleFilterChange(value === \"ALL\" ? undefined : value)\n }\n >\n <Trigger size=\"large\" id={`filter-select-${label}`}>\n <Icon className={styles.icon} />\n <p className={styles.item}>\n {\n filterOptions.find((option) => option.value === selectedValue)\n ?.label\n }\n </p>\n </Trigger>\n <Content>\n {filterOptions.map((option) => (\n <Item key={option.value} value={option.value} variant=\"light\">\n <p className={styles.item}>{option.label}</p>\n </Item>\n ))}\n </Content>\n </RadixSelect.Root>\n </div>\n )}\n </div>\n );\n};\n","export const container = `\n overflow-y-scroll\n h-full\n max-h-[70vh]\n border border-neutral-300 rounded-lg\n\n data-[is-loading=true]:h-36\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n `;\n\nexport const table = `\n w-full h-full\n table-auto\n -outline-offset-2\n`;\n\nexport const header = `\n p-4\n text-left\n bg-neutral-50\n [&_h2]:text-md\n [&_h2]:font-medium\n`;\n\nexport const blankFilter = `m-5`;\n","export const schoolName = `\n text-neutral-600\n text-sm font-bold\n data-[has-link=\"true\"]:text-primary-100\n data-[has-link=\"true\"]:pointer\n data-[has-link=\"true\"]:hover:underline\n`;\n\nexport const container = `flex flex-wrap items-center gap-2`;\nexport const ratingTag = `cursor-pointer`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\n\nimport {\n AnalyticsEvents,\n TrackingPipelineEvents,\n} from \"~/sdks/NeighborhoodSchools/types\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\n\nexport const SchoolName = ({ school }: { school: School }) => {\n const { t } = useTranslation([\"common\"]);\n const tracking = useTracking();\n const { showSchoolRatings } = useNeighborhoodSchools();\n\n const schoolURLClicked = () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SCHOOL_URL_CLICKED,\n eventAttributes: [\n {\n label: \"school_name_clicked\",\n data: school.name,\n },\n {\n label: \"school_url_clicked\",\n data: school.url,\n },\n ],\n });\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SCHOOL_URL_CLICKED,\n eventAttributes: {\n school_name: school.name,\n school_url: school.url,\n },\n });\n };\n\n return (\n <div className={styles.container}>\n {school.url ? (\n <a\n onClick={schoolURLClicked}\n className={styles.schoolName}\n href={school.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n data-has-link={school.url !== undefined}\n data-testid=\"school-name-with-link\"\n >\n {school.name}\n </a>\n ) : (\n <p data-testid=\"school-name\" className={styles.schoolName}>\n {school.name}\n </p>\n )}\n\n {showSchoolRatings && school.rating && (\n <div\n data-testid=\"school-rating\"\n className={styles.ratingTag}\n title={t(\"common:map.marker.schoolAttributes.rating\")}\n >\n <Tag>{school.rating}</Tag>\n </div>\n )}\n </div>\n );\n};\n","export const container = `pb-4`;\nexport const board = `text-xs font-normal text-neutral-600`;\n","import React from \"react\";\n\nimport type { School } from \"@local-logic/client\";\nimport { SchoolName } from \"./SchoolName\";\nimport * as styles from \"./styles\";\n\nexport const SchoolHeader = ({ school }: { school: School }) => (\n <div className={styles.container}>\n <SchoolName school={school} />\n\n {school.school_board_attributes?.name && (\n <p data-testid=\"school-board\" className={styles.board}>\n {school.school_board_attributes?.name}\n </p>\n )}\n </div>\n);\n","export const rows = `\n odd:bg-white even:bg-neutral-50\n [&_td]:px-4 [&_td]:py-3\n`;\n\nexport const schoolName = `\n text-neutral-600\n text-sm font-bold\n data-[has-link=\"true\"]:text-primary-100\n data-[has-link=\"true\"]:pointer\n data-[has-link=\"true\"]:hover:underline\n`;\n\nexport const smallText = `\n text-xs font-normal\n text-neutral-600\n`;\n\nexport const mediumText = `\n text-sm font-normal\n text-neutral-600\n`;\n\nexport const badges = `\n flex flex-wrap gap-2\n`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\n\nimport { SchoolHeader } from \"../../SchoolHeader\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport { formatAddress } from \"~/utils/primitives/stringUtils\";\n\nexport const Body = ({\n schools,\n headers,\n}: {\n schools?: School[];\n headers: string[];\n}) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const { hasCategories } = useNeighborhoodSchools();\n\n return (\n <>\n {schools?.map((school) => (\n <tr key={`row-${school.name}`} className={styles.rows}>\n <td>\n <SchoolHeader school={school} />\n </td>\n <td>\n <div className={styles.badges}>\n {school.school_attributes?.types?.map((type) => (\n <Tag key={`${school.name}-${type}`}>{type}</Tag>\n ))}\n </div>\n </td>\n {headers.indexOf(\"languages\") !== -1 && (\n <td>\n <div className={styles.badges}>\n {school.school_attributes?.languages?.map((language) => (\n <Tag key={`${school.name}-${language}`} variant=\"light\">\n {language === \"fr\" ? t(\"french\") : t(\"english\")}\n </Tag>\n ))}\n </div>\n </td>\n )}\n <td>\n <div className={styles.badges}>\n {school.school_attributes?.levels?.map((level) => (\n <Tag key={`${school.name}-${level}`} variant=\"light\">\n {level}\n </Tag>\n ))}\n </div>\n </td>\n {hasCategories && (\n <td>\n <div className={styles.badges}>\n <Tag isVisible={!!school.is_advanced_placement}>\n {t(\"categories.advancedPlacement\")}\n </Tag>\n <Tag isVisible={!!school.is_charter}>\n {t(\"categories.charter\")}\n </Tag>\n <Tag isVisible={!!school.is_magnet}>\n {t(\"categories.magnet\")}\n </Tag>\n </div>\n </td>\n )}\n <td>\n <p className={styles.mediumText}>\n {formatAddress({\n street: school.address,\n city: school.city,\n state: school.province,\n })}\n </p>\n </td>\n </tr>\n ))}\n </>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport * as styles from \"./styles\";\nimport { Body } from \"./Body\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport { tableHeaders } from \"~/sdks/NeighborhoodSchools/types\";\n\nconst baseHeaders: {\n [key: string]: tableHeaders[];\n} = {\n CAN: [\"name\", \"type\", \"languages\", \"levels\", \"address\"],\n USA: [\"name\", \"type\", \"levels\", \"address\"],\n};\n\nexport const SchoolsTable = ({ schools }: { schools?: School[] }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const { isLoading, hasCategories, location } = useNeighborhoodSchools();\n\n const headers = useMemo(() => {\n if (isLoading) {\n // defaulting to USA, to avoid an empty column\n return baseHeaders.USA;\n }\n\n if (location?.country === \"USA\" && hasCategories) {\n const usaHeaders = [...baseHeaders.USA];\n if (!usaHeaders.includes(\"category\")) {\n usaHeaders.splice(usaHeaders.length - 1, 0, \"category\");\n }\n return usaHeaders;\n }\n\n return baseHeaders[location.country];\n }, [isLoading, location, hasCategories]);\n\n return (\n <div className={styles.container} data-is-loading={isLoading}>\n {!isLoading && (\n <table className={styles.table}>\n <thead>\n <tr>\n {headers &&\n headers.map((header) => (\n <th key={header} className={styles.header}>\n <h2>{t(`headers.${header}`)}</h2>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {schools && schools?.length > 0 && (\n <Body schools={schools} headers={headers} />\n )}\n\n {schools?.length === 0 && (\n <div className={styles.blankFilter}>\n <NoDataContent text={t(\"noFilteredData\")} />\n </div>\n )}\n </tbody>\n </table>\n )}\n\n {!isLoading && !schools && <NoDataContent text={t(\"noData\")} />}\n </div>\n );\n};\n","function isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction isRecord(subject) {\n return isObject(subject) || Array.isArray(subject);\n}\nfunction canUseDOM() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction areOptionsEqual(optionsA, optionsB) {\n const optionsAKeys = Object.keys(optionsA);\n const optionsBKeys = Object.keys(optionsB);\n if (optionsAKeys.length !== optionsBKeys.length) return false;\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n if (breakpointsA !== breakpointsB) return false;\n return optionsAKeys.every(key => {\n const valueA = optionsA[key];\n const valueB = optionsB[key];\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`;\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n return areOptionsEqual(valueA, valueB);\n });\n}\nfunction sortAndMapPluginToOptions(plugins) {\n return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options);\n}\nfunction arePluginsEqual(pluginsA, pluginsB) {\n if (pluginsA.length !== pluginsB.length) return false;\n const optionsA = sortAndMapPluginToOptions(pluginsA);\n const optionsB = sortAndMapPluginToOptions(pluginsB);\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index];\n return areOptionsEqual(optionA, optionB);\n });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };\n//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map\n","function isNumber(subject) {\n return typeof subject === 'number';\n}\nfunction isString(subject) {\n return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n return Math.abs(n);\n}\nfunction mathSign(n) {\n return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n if (valueB === 0 || valueA === 0) return 0;\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach(key => {\n const valueA = mergedObjects[key];\n const valueB = currentObject[key];\n const areObjects = isObject(valueA) && isObject(valueB);\n mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n });\n return mergedObjects;\n }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n const predefined = {\n start,\n center,\n end\n };\n function start() {\n return 0;\n }\n function center(n) {\n return end(n) / 2;\n }\n function end(n) {\n return viewSize - n;\n }\n function measure(n, index) {\n if (isString(align)) return predefined[align](n);\n return align(viewSize, n, index);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction EventStore() {\n let listeners = [];\n function add(node, type, handler, options = {\n passive: true\n }) {\n let removeListener;\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options);\n removeListener = () => node.removeEventListener(type, handler, options);\n } else {\n const legacyMediaQueryList = node;\n legacyMediaQueryList.addListener(handler);\n removeListener = () => legacyMediaQueryList.removeListener(handler);\n }\n listeners.push(removeListener);\n return self;\n }\n function clear() {\n listeners = listeners.filter(remove => remove());\n }\n const self = {\n add,\n clear\n };\n return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n const documentVisibleHandler = EventStore();\n const fixedTimeStep = 1000 / 60;\n let lastTimeStamp = null;\n let accumulatedTime = 0;\n let animationId = 0;\n function init() {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset();\n });\n }\n function destroy() {\n stop();\n documentVisibleHandler.clear();\n }\n function animate(timeStamp) {\n if (!animationId) return;\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp;\n update();\n update();\n }\n const timeElapsed = timeStamp - lastTimeStamp;\n lastTimeStamp = timeStamp;\n accumulatedTime += timeElapsed;\n while (accumulatedTime >= fixedTimeStep) {\n update();\n accumulatedTime -= fixedTimeStep;\n }\n const alpha = accumulatedTime / fixedTimeStep;\n render(alpha);\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n }\n function start() {\n if (animationId) return;\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n function stop() {\n ownerWindow.cancelAnimationFrame(animationId);\n lastTimeStamp = null;\n accumulatedTime = 0;\n animationId = 0;\n }\n function reset() {\n lastTimeStamp = null;\n accumulatedTime = 0;\n }\n const self = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n };\n return self;\n}\n\nfunction Axis(axis, contentDirection) {\n const isRightToLeft = contentDirection === 'rtl';\n const isVertical = axis === 'y';\n const scroll = isVertical ? 'y' : 'x';\n const cross = isVertical ? 'x' : 'y';\n const sign = !isVertical && isRightToLeft ? -1 : 1;\n const startEdge = getStartEdge();\n const endEdge = getEndEdge();\n function measureSize(nodeRect) {\n const {\n height,\n width\n } = nodeRect;\n return isVertical ? height : width;\n }\n function getStartEdge() {\n if (isVertical) return 'top';\n return isRightToLeft ? 'right' : 'left';\n }\n function getEndEdge() {\n if (isVertical) return 'bottom';\n return isRightToLeft ? 'left' : 'right';\n }\n function direction(n) {\n return n * sign;\n }\n const self = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n };\n return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n const length = mathAbs(min - max);\n function reachedMin(n) {\n return n < min;\n }\n function reachedMax(n) {\n return n > max;\n }\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n function removeOffset(n) {\n if (!length) return n;\n return n - length * Math.ceil((n - max) / length);\n }\n const self = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n };\n return self;\n}\n\nfunction Counter(max, start, loop) {\n const {\n constrain\n } = Limit(0, max);\n const loopEnd = max + 1;\n let counter = withinLimit(start);\n function withinLimit(n) {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n }\n function get() {\n return counter;\n }\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n function add(n) {\n return clone().set(get() + n);\n }\n function clone() {\n return Counter(max, get(), loop);\n }\n const self = {\n get,\n set,\n add,\n clone\n };\n return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n const {\n cross: crossAxis,\n direction\n } = axis;\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n const nonPassiveEvent = {\n passive: false\n };\n const initEvents = EventStore();\n const dragEvents = EventStore();\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n const snapForceBoost = {\n mouse: 300,\n touch: 400\n };\n const freeForceBoost = {\n mouse: 500,\n touch: 600\n };\n const baseSpeed = dragFree ? 43 : 25;\n let isMoving = false;\n let startScroll = 0;\n let startCross = 0;\n let pointerIsDown = false;\n let preventScroll = false;\n let preventClick = false;\n let isMouse = false;\n function init(emblaApi) {\n if (!watchDrag) return;\n function downIfAllowed(evt) {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n }\n const node = rootNode;\n initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n }\n function destroy() {\n initEvents.clear();\n dragEvents.clear();\n }\n function addDragEvents() {\n const node = isMouse ? ownerDocument : rootNode;\n dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n }\n function isFocusNode(node) {\n const nodeName = node.nodeName || '';\n return focusNodes.includes(nodeName);\n }\n function forceBoost() {\n const boost = dragFree ? freeForceBoost : snapForceBoost;\n const type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n function allowedForce(force, targetChanged) {\n const next = index.add(mathSign(force) * -1);\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n if (skipSnaps && targetChanged) return baseForce * 0.5;\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n function down(evt) {\n const isMouseEvt = isMouseEvent(evt, ownerWindow);\n isMouse = isMouseEvt;\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n isMoving = deltaAbs(target.get(), location.get()) >= 2;\n if (isMouseEvt && evt.button !== 0) return;\n if (isFocusNode(evt.target)) return;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n scrollBody.useFriction(0).useDuration(0);\n target.set(location);\n addDragEvents();\n startScroll = dragTracker.readPoint(evt);\n startCross = dragTracker.readPoint(evt, crossAxis);\n eventHandler.emit('pointerDown');\n }\n function move(evt) {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n const lastScroll = dragTracker.readPoint(evt);\n const lastCross = dragTracker.readPoint(evt, crossAxis);\n const diffScroll = deltaAbs(lastScroll, startScroll);\n const diffCross = deltaAbs(lastCross, startCross);\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt);\n preventScroll = diffScroll > diffCross;\n if (!preventScroll) return up(evt);\n }\n const diff = dragTracker.pointerMove(evt);\n if (diffScroll > dragThreshold) preventClick = true;\n scrollBody.useFriction(0.3).useDuration(0.75);\n animation.start();\n target.add(direction(diff));\n evt.preventDefault();\n }\n function up(evt) {\n const currentLocation = scrollTarget.byDistance(0, false);\n const targetChanged = currentLocation.index !== index.get();\n const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n const force = allowedForce(direction(rawForce), targetChanged);\n const forceFactor = factorAbs(rawForce, force);\n const speed = baseSpeed - 10 * forceFactor;\n const friction = baseFriction + forceFactor / 50;\n preventScroll = false;\n pointerIsDown = false;\n dragEvents.clear();\n scrollBody.useDuration(speed).useFriction(friction);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n eventHandler.emit('pointerUp');\n }\n function click(evt) {\n if (preventClick) {\n evt.stopPropagation();\n evt.preventDefault();\n preventClick = false;\n }\n }\n function pointerDown() {\n return pointerIsDown;\n }\n const self = {\n init,\n destroy,\n pointerDown\n };\n return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n const logInterval = 170;\n let startEvent;\n let lastEvent;\n function readTime(evt) {\n return evt.timeStamp;\n }\n function readPoint(evt, evtAxis) {\n const property = evtAxis || axis.scroll;\n const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n }\n function pointerDown(evt) {\n startEvent = evt;\n lastEvent = evt;\n return readPoint(evt);\n }\n function pointerMove(evt) {\n const diff = readPoint(evt) - readPoint(lastEvent);\n const expired = readTime(evt) - readTime(startEvent) > logInterval;\n lastEvent = evt;\n if (expired) startEvent = evt;\n return diff;\n }\n function pointerUp(evt) {\n if (!startEvent || !lastEvent) return 0;\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n const diffTime = readTime(evt) - readTime(startEvent);\n const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n const force = diffDrag / diffTime;\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n return isFlick ? force : 0;\n }\n const self = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n };\n return self;\n}\n\nfunction NodeRects() {\n function measure(node) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = node;\n const offset = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n };\n return offset;\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction PercentOfView(viewSize) {\n function measure(n) {\n return viewSize * (n / 100);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n const observeNodes = [container].concat(slides);\n let resizeObserver;\n let containerSize;\n let slideSizes = [];\n let destroyed = false;\n function readSize(node) {\n return axis.measureSize(nodeRects.measure(node));\n }\n function init(emblaApi) {\n if (!watchResize) return;\n containerSize = readSize(container);\n slideSizes = slides.map(readSize);\n function defaultCallback(entries) {\n for (const entry of entries) {\n if (destroyed) return;\n const isContainer = entry.target === container;\n const slideIndex = slides.indexOf(entry.target);\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n const newSize = readSize(isContainer ? container : slides[slideIndex]);\n const diffSize = mathAbs(newSize - lastSize);\n if (diffSize >= 0.5) {\n emblaApi.reInit();\n eventHandler.emit('resize');\n break;\n }\n }\n }\n resizeObserver = new ResizeObserver(entries => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries);\n }\n });\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach(node => resizeObserver.observe(node));\n });\n }\n function destroy() {\n destroyed = true;\n if (resizeObserver) resizeObserver.disconnect();\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n let scrollVelocity = 0;\n let scrollDirection = 0;\n let scrollDuration = baseDuration;\n let scrollFriction = baseFriction;\n let rawLocation = location.get();\n let rawLocationPrevious = 0;\n function seek() {\n const displacement = target.get() - location.get();\n const isInstant = !scrollDuration;\n let scrollDistance = 0;\n if (isInstant) {\n scrollVelocity = 0;\n previousLocation.set(target);\n location.set(target);\n scrollDistance = displacement;\n } else {\n previousLocation.set(location);\n scrollVelocity += displacement / scrollDuration;\n scrollVelocity *= scrollFriction;\n rawLocation += scrollVelocity;\n location.add(scrollVelocity);\n scrollDistance = rawLocation - rawLocationPrevious;\n }\n scrollDirection = mathSign(scrollDistance);\n rawLocationPrevious = rawLocation;\n return self;\n }\n function settled() {\n const diff = target.get() - offsetLocation.get();\n return mathAbs(diff) < 0.001;\n }\n function duration() {\n return scrollDuration;\n }\n function direction() {\n return scrollDirection;\n }\n function velocity() {\n return scrollVelocity;\n }\n function useBaseDuration() {\n return useDuration(baseDuration);\n }\n function useBaseFriction() {\n return useFriction(baseFriction);\n }\n function useDuration(n) {\n scrollDuration = n;\n return self;\n }\n function useFriction(n) {\n scrollFriction = n;\n return self;\n }\n const self = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n };\n return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n const pullBackThreshold = percentOfView.measure(10);\n const edgeOffsetTolerance = percentOfView.measure(50);\n const frictionLimit = Limit(0.1, 0.99);\n let disabled = false;\n function shouldConstrain() {\n if (disabled) return false;\n if (!limit.reachedAny(target.get())) return false;\n if (!limit.reachedAny(location.get())) return false;\n return true;\n }\n function constrain(pointerDown) {\n if (!shouldConstrain()) return;\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n const diffToEdge = mathAbs(limit[edge] - location.get());\n const diffToTarget = target.get() - location.get();\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n target.subtract(diffToTarget * friction);\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()));\n scrollBody.useDuration(25).useBaseFriction();\n }\n }\n function toggleActive(active) {\n disabled = !active;\n }\n const self = {\n shouldConstrain,\n constrain,\n toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n const scrollBounds = Limit(-contentSize + viewSize, 0);\n const snapsBounded = measureBounded();\n const scrollContainLimit = findScrollContainLimit();\n const snapsContained = measureContained();\n function usePixelTolerance(bound, snap) {\n return deltaAbs(bound, snap) <= 1;\n }\n function findScrollContainLimit() {\n const startSnap = snapsBounded[0];\n const endSnap = arrayLast(snapsBounded);\n const min = snapsBounded.lastIndexOf(startSnap);\n const max = snapsBounded.indexOf(endSnap) + 1;\n return Limit(min, max);\n }\n function measureBounded() {\n return snapsAligned.map((snapAligned, index) => {\n const {\n min,\n max\n } = scrollBounds;\n const snap = scrollBounds.constrain(snapAligned);\n const isFirst = !index;\n const isLast = arrayIsLastIndex(snapsAligned, index);\n if (isFirst) return max;\n if (isLast) return min;\n if (usePixelTolerance(min, snap)) return min;\n if (usePixelTolerance(max, snap)) return max;\n return snap;\n }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n }\n function measureContained() {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n if (containScroll === 'keepSnaps') return snapsBounded;\n const {\n min,\n max\n } = scrollContainLimit;\n return snapsBounded.slice(min, max);\n }\n const self = {\n snapsContained,\n scrollContainLimit\n };\n return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n const max = scrollSnaps[0];\n const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n const limit = Limit(min, max);\n const self = {\n limit\n };\n return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n const jointSafety = 0.1;\n const min = limit.min + jointSafety;\n const max = limit.max + jointSafety;\n const {\n reachedMin,\n reachedMax\n } = Limit(min, max);\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n function loop(direction) {\n if (!shouldLoop(direction)) return;\n const loopDistance = contentSize * (direction * -1);\n vectors.forEach(v => v.add(loopDistance));\n }\n const self = {\n loop\n };\n return self;\n}\n\nfunction ScrollProgress(limit) {\n const {\n max,\n length\n } = limit;\n function get(n) {\n const currentLocation = n - max;\n return length ? currentLocation / -length : 0;\n }\n const self = {\n get\n };\n return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n const {\n startEdge,\n endEdge\n } = axis;\n const {\n groupSlides\n } = slidesToScroll;\n const alignments = measureSizes().map(alignment.measure);\n const snaps = measureUnaligned();\n const snapsAligned = measureAligned();\n function measureSizes() {\n return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n }\n function measureUnaligned() {\n return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n }\n function measureAligned() {\n return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n }\n const self = {\n snaps,\n snapsAligned\n };\n return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n const {\n groupSlides\n } = slidesToScroll;\n const {\n min,\n max\n } = scrollContainLimit;\n const slideRegistry = createSlideRegistry();\n function createSlideRegistry() {\n const groupedSlideIndexes = groupSlides(slideIndexes);\n const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n if (scrollSnaps.length === 1) return [slideIndexes];\n if (doNotContain) return groupedSlideIndexes;\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(groups, index);\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1;\n return arrayFromNumber(range);\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n return arrayFromNumber(range, arrayLast(groups)[0]);\n }\n return group;\n });\n }\n const self = {\n slideRegistry\n };\n return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n const {\n reachedAny,\n removeOffset,\n constrain\n } = limit;\n function minDistance(distances) {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n }\n function findTargetSnap(target) {\n const distance = loop ? removeOffset(target) : constrain(target);\n const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n diff: shortcut(snap - distance, 0),\n index\n })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n const {\n index\n } = ascDiffsToSnaps[0];\n return {\n index,\n distance\n };\n }\n function shortcut(target, direction) {\n const targets = [target, target + contentSize, target - contentSize];\n if (!loop) return target;\n if (!direction) return minDistance(targets);\n const matchingTargets = targets.filter(t => mathSign(t) === direction);\n if (matchingTargets.length) return minDistance(matchingTargets);\n return arrayLast(targets) - contentSize;\n }\n function byIndex(index, direction) {\n const diffToSnap = scrollSnaps[index] - targetVector.get();\n const distance = shortcut(diffToSnap, direction);\n return {\n index,\n distance\n };\n }\n function byDistance(distance, snap) {\n const target = targetVector.get() + distance;\n const {\n index,\n distance: targetSnapDistance\n } = findTargetSnap(target);\n const reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index,\n distance\n };\n const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n const snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index,\n distance: snapDistance\n };\n }\n const self = {\n byDistance,\n byIndex,\n shortcut\n };\n return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n function scrollTo(target) {\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n targetVector.add(distanceDiff);\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start();\n } else {\n animation.update();\n animation.render(1);\n animation.update();\n }\n }\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n eventHandler.emit('select');\n }\n }\n function distance(n, snap) {\n const target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n function index(n, direction) {\n const targetIndex = indexCurrent.clone().set(n);\n const target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n const self = {\n distance,\n index\n };\n return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n const focusListenerOptions = {\n passive: true,\n capture: true\n };\n let lastTabPressTime = 0;\n function init(emblaApi) {\n if (!watchFocus) return;\n function defaultCallback(index) {\n const nowTime = new Date().getTime();\n const diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n eventHandler.emit('slideFocusStart');\n root.scrollLeft = 0;\n const group = slideRegistry.findIndex(group => group.includes(index));\n if (!isNumber(group)) return;\n scrollBody.useDuration(0);\n scrollTo.index(group, 0);\n eventHandler.emit('slideFocus');\n }\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach((slide, slideIndex) => {\n eventStore.add(slide, 'focus', evt => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex);\n }\n }, focusListenerOptions);\n });\n }\n function registerTabPress(event) {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n }\n const self = {\n init\n };\n return self;\n}\n\nfunction Vector1D(initialValue) {\n let value = initialValue;\n function get() {\n return value;\n }\n function set(n) {\n value = normalizeInput(n);\n }\n function add(n) {\n value += normalizeInput(n);\n }\n function subtract(n) {\n value -= normalizeInput(n);\n }\n function normalizeInput(n) {\n return isNumber(n) ? n : n.get();\n }\n const self = {\n get,\n set,\n add,\n subtract\n };\n return self;\n}\n\nfunction Translate(axis, container) {\n const translate = axis.scroll === 'x' ? x : y;\n const containerStyle = container.style;\n let previousTarget = null;\n let disabled = false;\n function x(n) {\n return `translate3d(${n}px,0px,0px)`;\n }\n function y(n) {\n return `translate3d(0px,${n}px,0px)`;\n }\n function to(target) {\n if (disabled) return;\n const newTarget = roundToTwoDecimals(axis.direction(target));\n if (newTarget === previousTarget) return;\n containerStyle.transform = translate(newTarget);\n previousTarget = newTarget;\n }\n function toggleActive(active) {\n disabled = !active;\n }\n function clear() {\n if (disabled) return;\n containerStyle.transform = '';\n if (!container.getAttribute('style')) container.removeAttribute('style');\n }\n const self = {\n clear,\n to,\n toggleActive\n };\n return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n const roundingSafety = 0.5;\n const ascItems = arrayKeys(slideSizesWithGaps);\n const descItems = arrayKeys(slideSizesWithGaps).reverse();\n const loopPoints = startPoints().concat(endPoints());\n function removeSlideSizes(indexes, from) {\n return indexes.reduce((a, i) => {\n return a - slideSizesWithGaps[i];\n }, from);\n }\n function slidesInGap(indexes, gap) {\n return indexes.reduce((a, i) => {\n const remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n function findSlideBounds(offset) {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }));\n }\n function findLoopPoints(indexes, offset, isEndEdge) {\n const slideBounds = findSlideBounds(offset);\n return indexes.map(index => {\n const initial = isEndEdge ? 0 : -contentSize;\n const altered = isEndEdge ? contentSize : 0;\n const boundEdge = isEndEdge ? 'end' : 'start';\n const loopPoint = slideBounds[index][boundEdge];\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => location.get() > loopPoint ? initial : altered\n };\n });\n }\n function startPoints() {\n const gap = scrollSnaps[0];\n const indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, contentSize, false);\n }\n function endPoints() {\n const gap = viewSize - scrollSnaps[0] - 1;\n const indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, -contentSize, true);\n }\n function canLoop() {\n return loopPoints.every(({\n index\n }) => {\n const otherIndexes = ascItems.filter(i => i !== index);\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n });\n }\n function loop() {\n loopPoints.forEach(loopPoint => {\n const {\n target,\n translate,\n slideLocation\n } = loopPoint;\n const shiftLocation = target();\n if (shiftLocation === slideLocation.get()) return;\n translate.to(shiftLocation);\n slideLocation.set(shiftLocation);\n });\n }\n function clear() {\n loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n }\n const self = {\n canLoop,\n clear,\n loop,\n loopPoints\n };\n return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n let mutationObserver;\n let destroyed = false;\n function init(emblaApi) {\n if (!watchSlides) return;\n function defaultCallback(mutations) {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit();\n eventHandler.emit('slidesChanged');\n break;\n }\n }\n }\n mutationObserver = new MutationObserver(mutations => {\n if (destroyed) return;\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations);\n }\n });\n mutationObserver.observe(container, {\n childList: true\n });\n }\n function destroy() {\n if (mutationObserver) mutationObserver.disconnect();\n destroyed = true;\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n const intersectionEntryMap = {};\n let inViewCache = null;\n let notInViewCache = null;\n let intersectionObserver;\n let destroyed = false;\n function init() {\n intersectionObserver = new IntersectionObserver(entries => {\n if (destroyed) return;\n entries.forEach(entry => {\n const index = slides.indexOf(entry.target);\n intersectionEntryMap[index] = entry;\n });\n inViewCache = null;\n notInViewCache = null;\n eventHandler.emit('slidesInView');\n }, {\n root: container.parentElement,\n threshold\n });\n slides.forEach(slide => intersectionObserver.observe(slide));\n }\n function destroy() {\n if (intersectionObserver) intersectionObserver.disconnect();\n destroyed = true;\n }\n function createInViewList(inView) {\n return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n const index = parseInt(slideIndex);\n const {\n isIntersecting\n } = intersectionEntryMap[index];\n const inViewMatch = inView && isIntersecting;\n const notInViewMatch = !inView && !isIntersecting;\n if (inViewMatch || notInViewMatch) list.push(index);\n return list;\n }, []);\n }\n function get(inView = true) {\n if (inView && inViewCache) return inViewCache;\n if (!inView && notInViewCache) return notInViewCache;\n const slideIndexes = createInViewList(inView);\n if (inView) inViewCache = slideIndexes;\n if (!inView) notInViewCache = slideIndexes;\n return slideIndexes;\n }\n const self = {\n init,\n destroy,\n get\n };\n return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n const {\n measureSize,\n startEdge,\n endEdge\n } = axis;\n const withEdgeGap = slideRects[0] && readEdgeGap;\n const startGap = measureStartGap();\n const endGap = measureEndGap();\n const slideSizes = slideRects.map(measureSize);\n const slideSizesWithGaps = measureWithGaps();\n function measureStartGap() {\n if (!withEdgeGap) return 0;\n const slideRect = slideRects[0];\n return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n }\n function measureEndGap() {\n if (!withEdgeGap) return 0;\n const style = ownerWindow.getComputedStyle(arrayLast(slides));\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n }\n function measureWithGaps() {\n return slideRects.map((rect, index, rects) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(rects, index);\n if (isFirst) return slideSizes[index] + startGap;\n if (isLast) return slideSizes[index] + endGap;\n return rects[index + 1][startEdge] - rect[startEdge];\n }).map(mathAbs);\n }\n const self = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n };\n return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n const {\n startEdge,\n endEdge,\n direction\n } = axis;\n const groupByNumber = isNumber(slidesToScroll);\n function byNumber(array, groupSize) {\n return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n }\n function bySize(array) {\n if (!array.length) return [];\n return arrayKeys(array).reduce((groups, rectB, index) => {\n const rectA = arrayLast(groups) || 0;\n const isFirst = rectA === 0;\n const isLast = rectB === arrayLastIndex(array);\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n const gapA = !loop && isFirst ? direction(startGap) : 0;\n const gapB = !loop && isLast ? direction(endGap) : 0;\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n if (isLast) groups.push(array.length);\n return groups;\n }, []).map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0);\n return array.slice(previousSize, currentSize);\n });\n }\n function groupSlides(array) {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n }\n const self = {\n groupSlides\n };\n return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options;\n // Measurements\n const pixelTolerance = 2;\n const nodeRects = NodeRects();\n const containerRect = nodeRects.measure(container);\n const slideRects = slides.map(nodeRects.measure);\n const axis = Axis(scrollAxis, direction);\n const viewSize = axis.measureSize(containerRect);\n const percentOfView = PercentOfView(viewSize);\n const alignment = Alignment(align, viewSize);\n const containSnaps = !loop && !!containScroll;\n const readEdgeGap = loop || !!containScroll;\n const {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n const {\n snaps,\n snapsAligned\n } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n const {\n snapsContained,\n scrollContainLimit\n } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n const {\n limit\n } = ScrollLimit(contentSize, scrollSnaps, loop);\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n const indexPrevious = index.clone();\n const slideIndexes = arrayKeys(slides);\n // Animation\n const update = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: {\n loop\n }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n scrollBody.seek();\n };\n const render = ({\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: {\n loop\n }\n }, alpha) => {\n const shouldSettle = scrollBody.settled();\n const withinBounds = !scrollBounds.shouldConstrain();\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n if (hasSettledAndIdle) animation.stop();\n const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n offsetLocation.set(interpolatedLocation);\n if (loop) {\n scrollLooper.loop(scrollBody.direction());\n slideLooper.loop();\n }\n translate.to(offsetLocation.get());\n if (hasSettledAndIdle) eventHandler.emit('settle');\n if (!hasSettled) eventHandler.emit('scroll');\n };\n const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n // Shared\n const friction = 0.68;\n const startLocation = scrollSnaps[index.get()];\n const location = Vector1D(startLocation);\n const previousLocation = Vector1D(startLocation);\n const offsetLocation = Vector1D(startLocation);\n const target = Vector1D(startLocation);\n const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n const scrollProgress = ScrollProgress(limit);\n const eventStore = EventStore();\n const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n const {\n slideRegistry\n } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n // Engine\n const engine = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n scrollBody,\n scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n };\n return engine;\n}\n\nfunction EventHandler() {\n let listeners = {};\n let api;\n function init(emblaApi) {\n api = emblaApi;\n }\n function getListeners(evt) {\n return listeners[evt] || [];\n }\n function emit(evt) {\n getListeners(evt).forEach(e => e(api, evt));\n return self;\n }\n function on(evt, cb) {\n listeners[evt] = getListeners(evt).concat([cb]);\n return self;\n }\n function off(evt, cb) {\n listeners[evt] = getListeners(evt).filter(e => e !== cb);\n return self;\n }\n function clear() {\n listeners = {};\n }\n const self = {\n init,\n emit,\n off,\n on,\n clear\n };\n return self;\n}\n\nconst defaultOptions = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n function mergeOptions(optionsA, optionsB) {\n return objectsMergeDeep(optionsA, optionsB || {});\n }\n function optionsAtMedia(options) {\n const optionsAtMedia = options.breakpoints || {};\n const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n return mergeOptions(options, matchedMediaOptions);\n }\n function optionsMediaQueries(optionsList) {\n return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n }\n const self = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n };\n return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n let activePlugins = [];\n function init(emblaApi, plugins) {\n activePlugins = plugins.filter(({\n options\n }) => optionsHandler.optionsAtMedia(options).active !== false);\n activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n return plugins.reduce((map, plugin) => Object.assign(map, {\n [plugin.name]: plugin\n }), {});\n }\n function destroy() {\n activePlugins = activePlugins.filter(plugin => plugin.destroy());\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n const ownerDocument = root.ownerDocument;\n const ownerWindow = ownerDocument.defaultView;\n const optionsHandler = OptionsHandler(ownerWindow);\n const pluginsHandler = PluginsHandler(optionsHandler);\n const mediaHandlers = EventStore();\n const eventHandler = EventHandler();\n const {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n } = optionsHandler;\n const {\n on,\n off,\n emit\n } = eventHandler;\n const reInit = reActivate;\n let destroyed = false;\n let engine;\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n let options = mergeOptions(optionsBase);\n let pluginList = [];\n let pluginApis;\n let container;\n let slides;\n function storeElements() {\n const {\n container: userContainer,\n slides: userSlides\n } = options;\n const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n container = customContainer || root.children[0];\n const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n slides = [].slice.call(customSlides || container.children);\n }\n function createEngine(options) {\n const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, {\n loop: false\n });\n return createEngine(optionsWithoutLoop);\n }\n return engine;\n }\n function activate(withOptions, withPlugins) {\n if (destroyed) return;\n optionsBase = mergeOptions(optionsBase, withOptions);\n options = optionsAtMedia(optionsBase);\n pluginList = withPlugins || pluginList;\n storeElements();\n engine = createEngine(options);\n optionsMediaQueries([optionsBase, ...pluginList.map(({\n options\n }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n if (!options.active) return;\n engine.translate.to(engine.location.get());\n engine.animation.init();\n engine.slidesInView.init();\n engine.slideFocus.init(self);\n engine.eventHandler.init(self);\n engine.resizeHandler.init(self);\n engine.slidesHandler.init(self);\n if (engine.options.loop) engine.slideLooper.loop();\n if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n pluginApis = pluginsHandler.init(self, pluginList);\n }\n function reActivate(withOptions, withPlugins) {\n const startIndex = selectedScrollSnap();\n deActivate();\n activate(mergeOptions({\n startIndex\n }, withOptions), withPlugins);\n eventHandler.emit('reInit');\n }\n function deActivate() {\n engine.dragHandler.destroy();\n engine.eventStore.clear();\n engine.translate.clear();\n engine.slideLooper.clear();\n engine.resizeHandler.destroy();\n engine.slidesHandler.destroy();\n engine.slidesInView.destroy();\n engine.animation.destroy();\n pluginsHandler.destroy();\n mediaHandlers.clear();\n }\n function destroy() {\n if (destroyed) return;\n destroyed = true;\n mediaHandlers.clear();\n deActivate();\n eventHandler.emit('destroy');\n eventHandler.clear();\n }\n function scrollTo(index, jump, direction) {\n if (!options.active || destroyed) return;\n engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n engine.scrollTo.index(index, direction || 0);\n }\n function scrollNext(jump) {\n const next = engine.index.add(1).get();\n scrollTo(next, jump, -1);\n }\n function scrollPrev(jump) {\n const prev = engine.index.add(-1).get();\n scrollTo(prev, jump, 1);\n }\n function canScrollNext() {\n const next = engine.index.add(1).get();\n return next !== selectedScrollSnap();\n }\n function canScrollPrev() {\n const prev = engine.index.add(-1).get();\n return prev !== selectedScrollSnap();\n }\n function scrollSnapList() {\n return engine.scrollSnapList;\n }\n function scrollProgress() {\n return engine.scrollProgress.get(engine.offsetLocation.get());\n }\n function selectedScrollSnap() {\n return engine.index.get();\n }\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n function slidesInView() {\n return engine.slidesInView.get();\n }\n function slidesNotInView() {\n return engine.slidesInView.get(false);\n }\n function plugins() {\n return pluginApis;\n }\n function internalEngine() {\n return engine;\n }\n function rootNode() {\n return root;\n }\n function containerNode() {\n return container;\n }\n function slideNodes() {\n return slides;\n }\n const self = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n };\n activate(userOptions, userPlugins);\n setTimeout(() => eventHandler.emit('init'), 0);\n return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel(options = {}, plugins = []) {\n const storedOptions = useRef(options);\n const storedPlugins = useRef(plugins);\n const [emblaApi, setEmblaApi] = useState();\n const [viewport, setViewport] = useState();\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n }, [emblaApi]);\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return;\n storedOptions.current = options;\n reInit();\n }, [options, reInit]);\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return;\n storedPlugins.current = plugins;\n reInit();\n }, [plugins, reInit]);\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n setEmblaApi(newEmblaApi);\n return () => newEmblaApi.destroy();\n } else {\n setEmblaApi(undefined);\n }\n }, [viewport, setEmblaApi]);\n return [setViewport, emblaApi];\n}\nuseEmblaCarousel.globalOptions = undefined;\n\nexport { useEmblaCarousel as default };\n//# sourceMappingURL=embla-carousel-react.esm.js.map\n","import React, {\n ComponentPropsWithRef,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\n\nimport type { EmblaCarouselType } from \"embla-carousel\";\n\ntype UseDotButtonType = {\n selectedIndex: number;\n scrollSnaps: number[];\n onDotButtonClick: (index: number) => void;\n};\n\nexport const useDotButton = (\n emblaApi: EmblaCarouselType | undefined,\n): UseDotButtonType => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [scrollSnaps, setScrollSnaps] = useState<number[]>([]);\n\n const onDotButtonClick = useCallback(\n (index: number) => {\n if (!emblaApi) return;\n emblaApi.scrollTo(index);\n },\n [emblaApi],\n );\n\n const onInit = useCallback((emblaApiInit: EmblaCarouselType) => {\n setScrollSnaps(emblaApiInit.scrollSnapList());\n }, []);\n\n const onSelect = useCallback((emblaApiSelect: EmblaCarouselType) => {\n setSelectedIndex(emblaApiSelect.selectedScrollSnap());\n }, []);\n\n useEffect(() => {\n if (!emblaApi) return;\n\n onInit(emblaApi);\n onSelect(emblaApi);\n emblaApi.on(\"reInit\", onInit).on(\"reInit\", onSelect).on(\"select\", onSelect);\n }, [emblaApi, onInit, onSelect]);\n\n return {\n selectedIndex,\n scrollSnaps,\n onDotButtonClick,\n };\n};\n\ntype PropType = ComponentPropsWithRef<\"button\">;\n\nexport const DotButton: React.FC<PropType> = (props) => {\n const { children, ...restProps } = props;\n\n return (\n <button type=\"button\" {...restProps}>\n {children}\n </button>\n );\n};\n","export const section = `\n group/schools-list\n\n data-[is-loading=true]:h-36\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n\n`;\n\nexport const container = `\n [&>div:nth-child(odd)]:bg-neutral-50\n`;\n\nexport const slide = `\n px-6 pt-4 pb-6\n md:px-5 md:pt-6 md:pb-6\n`;\n\nexport const title = `\n pb-4 \n`;\n\nexport const schoolName = `\n text-neutral-600\n text-sm font-bold\n data-[has-link=\"true\"]:text-primary-100\n data-[has-link=\"true\"]:pointer\n`;\n\nexport const board = `\n text-xs font-normal\n text-neutral-600\n`;\n\nexport const address = `\n font-normal text-sm\n text-neutral-600 \n mb-4\n`;\n\nexport const controls = `py-2`;\n\nexport const dot = `\n bg-zinc-300\n data-[selected=true]:bg-primary-100\n`;\n\nexport const badges = `\n flex flex-wrap\n mb-4 gap-2\n`;\n","import React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { DotButton } from \"../EmblaCarouselDotButton\";\nimport * as styles from \"../styles\";\n\nexport const Controls = ({\n selectedIndex,\n scrollSnaps,\n onDotButtonClick,\n}: {\n selectedIndex: number;\n scrollSnaps: number[];\n onDotButtonClick: (index: number) => void;\n}) => {\n return (\n <div className={twMerge(`embla__dots ${styles.controls}`)}>\n {scrollSnaps.map((_, index) => (\n <DotButton\n key={index}\n onClick={() => onDotButtonClick(index)}\n className={twMerge(`embla__dot ${styles.dot}`)}\n data-selected={index === selectedIndex}\n />\n ))}\n </div>\n );\n};\n","export const header = `\n pt-4 pb-2\n font-medium\n text-sm\n border-t border-neutral-300\n`;\n","import React from \"react\";\nimport * as styles from \"./styles\";\n\nexport const SchoolSection = ({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) => {\n return (\n <>\n <p className={styles.header}>{title}</p>\n {children}\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport { SchoolSection } from \"../SchoolSection\";\n\nexport const SchoolCategories = ({ school }: { school: School }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n\n if (\n !school.is_advanced_placement &&\n !school.is_charter &&\n !school.is_magnet\n ) {\n return null;\n }\n\n return (\n <SchoolSection title={t(\"headers.category\")}>\n <>\n <Tag isVisible={!!school.is_advanced_placement}>\n {t(\"categories.advancedPlacement\")}\n </Tag>\n <Tag isVisible={!!school.is_charter}>{t(\"categories.charter\")}</Tag>\n <Tag isVisible={!!school.is_magnet}>{t(\"categories.magnet\")}</Tag>\n </>\n </SchoolSection>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport { SchoolHeader } from \"../../SchoolHeader\";\nimport * as styles from \"../styles\";\n\nimport { SchoolSection } from \"./SchoolSection\";\nimport { SchoolCategories } from \"./SchoolCategories\";\n\nimport { formatAddress } from \"~/utils/primitives/stringUtils\";\n\nexport const SchoolItem = ({ school }: { school: School }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n\n return (\n <div className={styles.slide}>\n <SchoolHeader school={school} />\n\n <SchoolSection title={t(\"headers.type\")}>\n <div className={styles.badges}>\n {school.school_attributes?.types?.map((type) => (\n <Tag key={`${school.name}-${type}`}>{type}</Tag>\n ))}\n </div>\n </SchoolSection>\n\n <SchoolSection title={t(\"headers.levels\")}>\n <div className={styles.badges}>\n {school.school_attributes?.levels?.map((level) => (\n <Tag variant=\"light\" key={`${school.name}-${level}`}>\n {level}\n </Tag>\n ))}\n </div>\n </SchoolSection>\n\n <SchoolCategories school={school} />\n\n <SchoolSection title={t(\"headers.address\")}>\n <p className={styles.address}>\n {formatAddress({\n street: school.address,\n city: school.city,\n state: school.province,\n })}\n </p>\n </SchoolSection>\n </div>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { School } from \"@local-logic/client\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useDotButton } from \"./EmblaCarouselDotButton\";\nimport { Controls } from \"./Controls\";\nimport { SchoolItem } from \"./SchoolItem\";\nimport * as styles from \"./styles\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport \"./embla.css\";\n\nexport const SchoolsList = ({ schools }: { schools?: School[] }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const { isLoading } = useNeighborhoodSchools();\n const [emblaRef, emblaApi] = useEmblaCarousel();\n\n const { selectedIndex, scrollSnaps, onDotButtonClick } =\n useDotButton(emblaApi);\n\n return (\n <>\n <section\n className={twMerge(`embla ${styles.section}`)}\n data-is-loading={isLoading}\n >\n {!isLoading &&\n (!schools || schools.length === 0 ? (\n <NoDataContent text={t(\"noData\")} />\n ) : (\n <div className=\"embla__viewport\" ref={emblaRef}>\n <div className={twMerge(`embla__container ${styles.container}`)}>\n {schools.map((school) => (\n <div className=\"embla__slide\" key={school.name}>\n <SchoolItem school={school} />\n </div>\n ))}\n </div>\n </div>\n ))}\n\n <Controls\n selectedIndex={selectedIndex}\n scrollSnaps={scrollSnaps}\n onDotButtonClick={onDotButtonClick}\n />\n </section>\n </>\n );\n};\n","export const container = `\n mt-4\n md:flex items-center\n bg-base-white\n [&>a]:justify-end\n`;\n\nexport const dataDisclaimer = `flex-1 text-xs`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\n\nimport { Attribution } from \"~/components/Attribution\";\nimport { TrackingPipelineEvents } from \"~/sdks/NeighborhoodSchools/types\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\n\nexport const Footer = ({ hideAttribution }: { hideAttribution?: boolean }) => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const tracking = useTracking();\n const { locale } = useNeighborhoodSchools();\n\n const handleAttributionClicked = () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.ATTRIBUTION_CLICKED,\n });\n };\n\n return (\n <div className={styles.container}>\n <p className={styles.dataDisclaimer}>{t(\"dataDisclaimer\")}</p>\n <Attribution\n onClick={handleAttributionClicked}\n sdkName=\"neighborhood-schools\"\n locale={locale}\n isHidden={hideAttribution}\n />\n </div>\n );\n};\n","export const spinner = `\n flex justify-center items-center \n px-3 pt-4 pb-3 w-full h-full\n`;\n\nexport const noDataContainer = `\n bg-neutral-50 px-3 pt-4 pb-3 rounded-sm box-border\n`;\n\nexport const header = `\n flex justify-between items-center\n`;\n\nexport const filters = `\n flex flex-wrap\n justify-around sm:justify-normal\n gap-2 md:gap-6\n mb-5 md:mb-6\n mt-3 md:mt-4\n`;\n","import React, { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n SchoolLevel,\n SchoolType,\n} from \"@local-logic/client/dist/features/schools\";\nimport { BackpackIcon, GraduationCapIcon } from \"@phosphor-icons/react\";\n\nimport { Filter } from \"../Filter\";\nimport { SchoolsTable } from \"../SchoolsTable\";\n\nimport { SchoolsList } from \"../SchoolsList\";\nimport { Footer } from \"../Footer\";\nimport * as styles from \"./styles\";\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport { useNeighborhoodSchools } from \"~/sdks/NeighborhoodSchools/context\";\nimport {\n AnalyticsEvents,\n TrackingPipelineEvents,\n NeighborhoodSchoolsProps,\n} from \"~/sdks/NeighborhoodSchools/types\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { useTracking } from \"~/tracking\";\n\nexport const Content = () => {\n const { t } = useTranslation(\"neighborhoodSchools\");\n const tracking = useTracking();\n const { sdkState } = useStateManagerContext<NeighborhoodSchoolsProps>();\n const {\n filteredSchools,\n schoolLevels,\n schoolTypes,\n filterLevel,\n filterType,\n setFilterLevel,\n setFilterType,\n } = useNeighborhoodSchools();\n const isMobile = useIsMobile();\n\n const schoolTypeOptions = schoolTypes.map((type) => ({\n value: type,\n label: type,\n }));\n\n const schoolLevelOptions = schoolLevels.map((level) => ({\n value: level,\n label: level,\n }));\n\n useEffect(() => {\n if (filterType !== undefined) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.FILTER_BY_TYPE,\n eventAttributes: [\n {\n label: \"filter_by_type\",\n data: filterType,\n },\n ],\n });\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.FILTER_BY_TYPE,\n eventAttributes: {\n filter_by_type: filterType,\n },\n });\n }\n\n if (filterLevel !== undefined) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.FILTER_BY_LEVEL,\n eventAttributes: [\n {\n label: \"filter_by_level\",\n data: filterLevel,\n },\n ],\n });\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.FILTER_BY_LEVEL,\n eventAttributes: {\n filter_by_level: filterLevel,\n },\n });\n }\n }, [filterLevel, filterType]);\n\n return (\n <>\n <TitleHeader\n title={\n typeof sdkState.options?.title === \"string\" ||\n sdkState.options?.title === false\n ? sdkState.options.title\n : t(\"title\")\n }\n />\n <div className={styles.filters}>\n <Filter\n options={schoolTypeOptions}\n icon={BackpackIcon}\n label={t(\"headers.type\")}\n allLabel={t(\"headers.typesFilter\")}\n activeFilter={filterType}\n handleFilterChange={(type) =>\n setFilterType(type as SchoolType | undefined)\n }\n />\n <Filter\n options={schoolLevelOptions}\n icon={GraduationCapIcon}\n label={t(\"headers.levels\")}\n allLabel={t(\"headers.levelsFilter\")}\n activeFilter={filterLevel}\n handleFilterChange={(level) =>\n setFilterLevel(level as SchoolLevel | undefined)\n }\n />\n </div>\n {isMobile ? (\n <SchoolsList schools={filteredSchools} />\n ) : (\n <SchoolsTable schools={filteredSchools} />\n )}\n\n <Footer hideAttribution={sdkState.options?.hideAttribution} />\n </>\n );\n};\n","import React, { useMemo } from \"react\";\n// TODO Move this import to sdks/sdks-app/src/App.tsx once all SDKs are migrated\nimport \"~/assets/styles/globals.css\";\nimport type { NeighborhoodSchoolsProps } from \"./types\";\nimport { NeighborhoodSchoolsProvider } from \"./context\";\nimport { schema } from \"./schema\";\nimport { Content } from \"./components/Content\";\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 NeighborhoodSchools = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodSchoolsProps>();\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 Schools\"\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_SCHOOLS}\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_SCHOOLS,\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 <NeighborhoodSchoolsProvider>\n <Content />\n </NeighborhoodSchoolsProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodSchools;\n"],"x_google_ignoreList":[0,1,22,23,24],"mappings":"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"}
|