@dcl/landing-site 0.5.1-24803483354.commit-bb6520e → 0.5.1-24846465451.commit-1f3abc7
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/assets/{AccessTime-DpsycoTx.js → AccessTime-HgE1uMjl.js} +1 -1
- package/assets/{AccessTime-DpsycoTx.js.map → AccessTime-HgE1uMjl.js.map} +1 -1
- package/assets/{Add-CtUiG6Qa.js → Add-DWpGYLEy.js} +1 -1
- package/assets/{Add-CtUiG6Qa.js.map → Add-DWpGYLEy.js.map} +1 -1
- package/assets/AdminLayout.styled-CQwL2XEi.js +1 -0
- package/assets/AdminLayout.styled-CQwL2XEi.js.map +1 -0
- package/assets/{AnimatedBackground-CO__t7bG.js → AnimatedBackground-CY9KApzI.js} +2 -2
- package/assets/{AnimatedBackground-CO__t7bG.js.map → AnimatedBackground-CY9KApzI.js.map} +1 -1
- package/assets/{AnimatedSection-CpvtnDxq.js → AnimatedSection-atlqhaaJ.js} +1 -1
- package/assets/{AnimatedSection-CpvtnDxq.js.map → AnimatedSection-atlqhaaJ.js.map} +1 -1
- package/assets/{AuthorPage-Bpt5CD2Q.js → AuthorPage-OXQ0S0tL.js} +1 -1
- package/assets/{AuthorPage-Bpt5CD2Q.js.map → AuthorPage-OXQ0S0tL.js.map} +1 -1
- package/assets/{Avatar-DM27A1Qp.js → Avatar-UH4W2WAk.js} +1 -1
- package/assets/{Avatar-DM27A1Qp.js.map → Avatar-UH4W2WAk.js.map} +1 -1
- package/assets/{AvatarFace-L7ktQqoW.js → AvatarFace-8lGZVR0F.js} +1 -1
- package/assets/{AvatarFace-L7ktQqoW.js.map → AvatarFace-8lGZVR0F.js.map} +1 -1
- package/assets/{Badges-Cfdyl8RH.js → Badges-DIf7qRfK.js} +1 -1
- package/assets/{Badges-Cfdyl8RH.js.map → Badges-DIf7qRfK.js.map} +1 -1
- package/assets/{BlogLayout-C4txjesH.js → BlogLayout-Bvlb_hEZ.js} +1 -1
- package/assets/{BlogLayout-C4txjesH.js.map → BlogLayout-Bvlb_hEZ.js.map} +1 -1
- package/assets/{BlogPage-Ck61T45y.js → BlogPage-D3i9CzrU.js} +1 -1
- package/assets/{BlogPage-Ck61T45y.js.map → BlogPage-D3i9CzrU.js.map} +1 -1
- package/assets/{CTAButton-CFiXuCIG.js → CTAButton-CIRbCRyU.js} +1 -1
- package/assets/{CTAButton-CFiXuCIG.js.map → CTAButton-CIRbCRyU.js.map} +1 -1
- package/assets/{CardContent-BmJC2B1l.js → CardContent-THhPoxmR.js} +1 -1
- package/assets/{CardContent-BmJC2B1l.js.map → CardContent-THhPoxmR.js.map} +1 -1
- package/assets/{CardMedia-BvzeWU4S.js → CardMedia-9XvH5baB.js} +1 -1
- package/assets/{CardMedia-BvzeWU4S.js.map → CardMedia-9XvH5baB.js.map} +1 -1
- package/assets/{Carousel-ByC5ldRJ.js → Carousel-BqIJDEb9.js} +1 -1
- package/assets/{Carousel-ByC5ldRJ.js.map → Carousel-BqIJDEb9.js.map} +1 -1
- package/assets/{CategoryPage-BqkILV2z.js → CategoryPage-C4u5o4mh.js} +1 -1
- package/assets/{CategoryPage-BqkILV2z.js.map → CategoryPage-C4u5o4mh.js.map} +1 -1
- package/assets/{Check-BOF4_DCU.js → Check-CFiKgYJs.js} +1 -1
- package/assets/{Check-BOF4_DCU.js.map → Check-CFiKgYJs.js.map} +1 -1
- package/assets/{CircleAndArrow-El01hGIC.js → CircleAndArrow-O8sN3E_v.js} +1 -1
- package/assets/{CircleAndArrow-El01hGIC.js.map → CircleAndArrow-O8sN3E_v.js.map} +1 -1
- package/assets/{CircularProgress-D1x03AKQ.js → CircularProgress-Z0W76ens.js} +1 -1
- package/assets/{CircularProgress-D1x03AKQ.js.map → CircularProgress-Z0W76ens.js.map} +1 -1
- package/assets/{ContentCopy-C4kDxda3.js → ContentCopy-88ne4JTk.js} +1 -1
- package/assets/{ContentCopy-C4kDxda3.js.map → ContentCopy-88ne4JTk.js.map} +1 -1
- package/assets/CreateEventPage-HI_5pzkQ.js +16 -0
- package/assets/CreateEventPage-HI_5pzkQ.js.map +1 -0
- package/assets/{CreatorHubDownload-D_CBz7M3.js → CreatorHubDownload-C_IyZZl2.js} +1 -1
- package/assets/{CreatorHubDownload-D_CBz7M3.js.map → CreatorHubDownload-C_IyZZl2.js.map} +1 -1
- package/assets/{CreatorHubDownloadSuccess-B5QI-fsj.js → CreatorHubDownloadSuccess-DVGIO7MB.js} +1 -1
- package/assets/{CreatorHubDownloadSuccess-B5QI-fsj.js.map → CreatorHubDownloadSuccess-DVGIO7MB.js.map} +1 -1
- package/assets/{DappsShell-BC3H8ts9.js → DappsShell-CFZyE77Z.js} +1 -1
- package/assets/{DappsShell-BC3H8ts9.js.map → DappsShell-CFZyE77Z.js.map} +1 -1
- package/assets/{DownloadSuccessLayout-DUmT7uWX.js → DownloadSuccessLayout-Bqi9ZKaN.js} +1 -1
- package/assets/{DownloadSuccessLayout-DUmT7uWX.js.map → DownloadSuccessLayout-Bqi9ZKaN.js.map} +1 -1
- package/assets/{EventsPage-C9kUjKcs.js → EventsPage-DQRgzFAr.js} +1 -1
- package/assets/{EventsPage-C9kUjKcs.js.map → EventsPage-DQRgzFAr.js.map} +1 -1
- package/assets/{Grow-BxJOb7Ur.js → Grow-BHy15Dn2.js} +1 -1
- package/assets/{Grow-BxJOb7Ur.js.map → Grow-BHy15Dn2.js.map} +1 -1
- package/assets/HomePage-By8bcZyK.js +1 -0
- package/assets/HomePage-By8bcZyK.js.map +1 -0
- package/assets/{InvalidPage-Bzsjkjz7.js → InvalidPage-Debgf-PV.js} +1 -1
- package/assets/{InvalidPage-Bzsjkjz7.js.map → InvalidPage-Debgf-PV.js.map} +1 -1
- package/assets/{InviteFaqs-D5mF7omx.js → InviteFaqs-GNUarAeA.js} +1 -1
- package/assets/{InviteFaqs-D5mF7omx.js.map → InviteFaqs-GNUarAeA.js.map} +1 -1
- package/assets/{InvitePage-BpKnAj4V.js → InvitePage-BWbamxve.js} +2 -2
- package/assets/{InvitePage-BpKnAj4V.js.map → InvitePage-BWbamxve.js.map} +1 -1
- package/assets/{JumpInButton-CqKycSau.js → JumpInButton-DorJjQyB.js} +1 -1
- package/assets/{JumpInButton-CqKycSau.js.map → JumpInButton-DorJjQyB.js.map} +1 -1
- package/assets/{JumpInIcon-ZOn0wOk1.js → JumpInIcon-DfpHf5gS.js} +1 -1
- package/assets/{JumpInIcon-ZOn0wOk1.js.map → JumpInIcon-DfpHf5gS.js.map} +1 -1
- package/assets/{KeyboardArrowRight-BYjm2LN-.js → KeyboardArrowRight-DdkI-avV.js} +1 -1
- package/assets/{KeyboardArrowRight-BYjm2LN-.js.map → KeyboardArrowRight-DdkI-avV.js.map} +1 -1
- package/assets/{LegacyEventRedirect-dCzyDptD.js → LegacyEventRedirect-DRboznqd.js} +1 -1
- package/assets/{LegacyEventRedirect-dCzyDptD.js.map → LegacyEventRedirect-DRboznqd.js.map} +1 -1
- package/assets/{LegalPageLayout-DINPtlgk.js → LegalPageLayout-S2fzAMXj.js} +1 -1
- package/assets/{LegalPageLayout-DINPtlgk.js.map → LegalPageLayout-S2fzAMXj.js.map} +1 -1
- package/assets/{Link-lvNSZJho.js → Link-DzgysiL-.js} +1 -1
- package/assets/{Link-lvNSZJho.js.map → Link-DzgysiL-.js.map} +1 -1
- package/assets/Menu-GeJMADr-.js +1 -0
- package/assets/Menu-GeJMADr-.js.map +1 -0
- package/assets/MenuItem-BK7OLKkT.js +1 -0
- package/assets/MenuItem-BK7OLKkT.js.map +1 -0
- package/assets/{PageContainer.styled-Bbv_6rIn.js → PageContainer.styled-DvE7NPbD.js} +1 -1
- package/assets/{PageContainer.styled-Bbv_6rIn.js.map → PageContainer.styled-DvE7NPbD.js.map} +1 -1
- package/assets/{Paper-CaFKxPzv.js → Paper-D1WB3MQ6.js} +1 -1
- package/assets/{Paper-CaFKxPzv.js.map → Paper-D1WB3MQ6.js.map} +1 -1
- package/assets/PendingEventCard-B7JbvnL5.js +3 -0
- package/assets/PendingEventCard-B7JbvnL5.js.map +1 -0
- package/assets/PendingEventsPage-CcDBEr9M.js +1 -0
- package/assets/PendingEventsPage-CcDBEr9M.js.map +1 -0
- package/assets/{PlacesPage-Btx40VGe.js → PlacesPage-MkHUyi3j.js} +1 -1
- package/assets/{PlacesPage-Btx40VGe.js.map → PlacesPage-MkHUyi3j.js.map} +1 -1
- package/assets/{PostCard-SDZ_3aVu.js → PostCard-C61NfgmU.js} +1 -1
- package/assets/{PostCard-SDZ_3aVu.js.map → PostCard-C61NfgmU.js.map} +1 -1
- package/assets/{PostPage-D9faiVAT.js → PostPage-BCzjf8V1.js} +1 -1
- package/assets/{PostPage-D9faiVAT.js.map → PostPage-BCzjf8V1.js.map} +1 -1
- package/assets/{PostPage.styled-CzIG7Tl3.js → PostPage.styled-BRWGJ8p8.js} +3 -3
- package/assets/{PostPage.styled-CzIG7Tl3.js.map → PostPage.styled-BRWGJ8p8.js.map} +1 -1
- package/assets/{PreviewPage-CF-KNgQh.js → PreviewPage-DWebBF8F.js} +1 -1
- package/assets/{PreviewPage-CF-KNgQh.js.map → PreviewPage-DWebBF8F.js.map} +1 -1
- package/assets/{RemindMeButton-BtxpQEzy.js → RemindMeButton-DnlXMDH0.js} +1 -1
- package/assets/{RemindMeButton-BtxpQEzy.js.map → RemindMeButton-DnlXMDH0.js.map} +1 -1
- package/assets/{SEO-B1EK7Y3P.js → SEO-5chg1jEQ.js} +1 -1
- package/assets/{SEO-B1EK7Y3P.js.map → SEO-5chg1jEQ.js.map} +1 -1
- package/assets/{SearchPage-B4wICXqh.js → SearchPage-Db-35tEZ.js} +1 -1
- package/assets/{SearchPage-B4wICXqh.js.map → SearchPage-Db-35tEZ.js.map} +1 -1
- package/assets/{SignInRedirect-CFIlTqwD.js → SignInRedirect-C1Hp0Nnl.js} +1 -1
- package/assets/{SignInRedirect-CFIlTqwD.js.map → SignInRedirect-C1Hp0Nnl.js.map} +1 -1
- package/assets/{SignInRedirect-DunroI2V.js → SignInRedirect-DcrAjaP6.js} +1 -1
- package/assets/{SignInRedirect-DunroI2V.js.map → SignInRedirect-DcrAjaP6.js.map} +1 -1
- package/assets/{Skeleton-iNlScP9H.js → Skeleton-CSFvCtu0.js} +1 -1
- package/assets/{Skeleton-iNlScP9H.js.map → Skeleton-CSFvCtu0.js.map} +1 -1
- package/assets/Switch-swOw3biA.js +1 -0
- package/assets/Switch-swOw3biA.js.map +1 -0
- package/assets/TextField-C018XFrK.js +2 -0
- package/assets/TextField-C018XFrK.js.map +1 -0
- package/assets/{Tooltip-Kem9dSAd.js → Tooltip-CasBLMgX.js} +1 -1
- package/assets/{Tooltip-Kem9dSAd.js.map → Tooltip-CasBLMgX.js.map} +1 -1
- package/assets/{TwitterEmbed-BRI3ivet.js → TwitterEmbed-CLNUtpsQ.js} +1 -1
- package/assets/{TwitterEmbed-BRI3ivet.js.map → TwitterEmbed-CLNUtpsQ.js.map} +1 -1
- package/assets/UsersAdminPage-UAdQmyUX.js +2 -0
- package/assets/UsersAdminPage-UAdQmyUX.js.map +1 -0
- package/assets/{Video-CKs5_Z0w.js → Video-NGhd3LeA.js} +1 -1
- package/assets/{Video-CKs5_Z0w.js.map → Video-NGhd3LeA.js.map} +1 -1
- package/assets/WearablePreview-BilBSC94.js +4 -0
- package/assets/{WearablePreview-Bca5KMOK.js.map → WearablePreview-BilBSC94.js.map} +1 -1
- package/assets/{WhatsOnLayout-BiKCXvlg.js → WhatsOnLayout-SFhGzfLv.js} +1 -1
- package/assets/{WhatsOnLayout-BiKCXvlg.js.map → WhatsOnLayout-SFhGzfLv.js.map} +1 -1
- package/assets/admin.client-B5xGzvMY.js +1 -0
- package/assets/admin.client-B5xGzvMY.js.map +1 -0
- package/assets/{auto-track-DNEnayEP.js → auto-track-CVCHvRCG.js} +1 -1
- package/assets/{auto-track-DNEnayEP.js.map → auto-track-CVCHvRCG.js.map} +1 -1
- package/assets/{ccip-BhHvKQc6.js → ccip-YeVOYAND.js} +1 -1
- package/assets/{ccip-BhHvKQc6.js.map → ccip-YeVOYAND.js.map} +1 -1
- package/assets/{createSvgIcon-B2OEoWjD.js → createSvgIcon-BXXQfd3j.js} +1 -1
- package/assets/{createSvgIcon-B2OEoWjD.js.map → createSvgIcon-BXXQfd3j.js.map} +1 -1
- package/assets/{download-BJW25sds.js → download-DIO3YpIC.js} +2 -2
- package/assets/{download-BJW25sds.js.map → download-DIO3YpIC.js.map} +1 -1
- package/assets/{downloadWithIdentity-COI7bkOD.js → downloadWithIdentity-_pqyEylP.js} +1 -1
- package/assets/{downloadWithIdentity-COI7bkOD.js.map → downloadWithIdentity-_pqyEylP.js.map} +1 -1
- package/assets/events.client-KDioNnTz.js +1 -0
- package/assets/events.client-KDioNnTz.js.map +1 -0
- package/assets/{index-Bu59k1qI.js → index-46z1cHVl.js} +1 -1
- package/assets/{index-Bu59k1qI.js.map → index-46z1cHVl.js.map} +1 -1
- package/assets/{index-BbM07Zad.js → index-B-jMtaWP.js} +1 -1
- package/assets/{index-BbM07Zad.js.map → index-B-jMtaWP.js.map} +1 -1
- package/assets/{index-CCJh3g39.js → index-BAm-Pzt1.js} +1 -1
- package/assets/{index-CCJh3g39.js.map → index-BAm-Pzt1.js.map} +1 -1
- package/assets/{index-DsKNeH7X.js → index-BFPvT5pa.js} +1 -1
- package/assets/{index-DsKNeH7X.js.map → index-BFPvT5pa.js.map} +1 -1
- package/assets/{index-gJ1MOEiZ.js → index-BP0MprVq.js} +3 -3
- package/assets/{index-gJ1MOEiZ.js.map → index-BP0MprVq.js.map} +1 -1
- package/assets/{index-DOEJnoYg.js → index-BPWecXcY.js} +1 -1
- package/assets/{index-DOEJnoYg.js.map → index-BPWecXcY.js.map} +1 -1
- package/assets/{index-B7GlY0il.js → index-BV5D6He9.js} +1 -1
- package/assets/{index-B7GlY0il.js.map → index-BV5D6He9.js.map} +1 -1
- package/assets/{index-D9krZGYy.js → index-BWvXRlTE.js} +34 -34
- package/assets/index-BWvXRlTE.js.map +1 -0
- package/assets/{index-BRm9VGyh.js → index-ButFVFTl.js} +1 -1
- package/assets/{index-BRm9VGyh.js.map → index-ButFVFTl.js.map} +1 -1
- package/assets/{index-tw_cdOWS.js → index-C-p9HFH_.js} +1 -1
- package/assets/{index-tw_cdOWS.js.map → index-C-p9HFH_.js.map} +1 -1
- package/assets/{index-BDx-bY1l.js → index-C5LUyd00.js} +2 -2
- package/assets/{index-BDx-bY1l.js.map → index-C5LUyd00.js.map} +1 -1
- package/assets/{index-DErVyQiP.js → index-CMGrnQsz.js} +1 -1
- package/assets/{index-DErVyQiP.js.map → index-CMGrnQsz.js.map} +1 -1
- package/assets/{index-ch8SCHpn.js → index-CeEWUadA.js} +1 -1
- package/assets/{index-ch8SCHpn.js.map → index-CeEWUadA.js.map} +1 -1
- package/assets/{index-BqjJBRSi.js → index-CgMXgkmG.js} +1 -1
- package/assets/{index-BqjJBRSi.js.map → index-CgMXgkmG.js.map} +1 -1
- package/assets/index-CjU0loIz.js +1 -0
- package/assets/{index-Dg4AWVL8.js.map → index-CjU0loIz.js.map} +1 -1
- package/assets/{index-XmZQan5Q.js → index-CjsVUu5b.js} +1 -1
- package/assets/{index-XmZQan5Q.js.map → index-CjsVUu5b.js.map} +1 -1
- package/assets/{index-DytFFz4y.js → index-D-HyZoai.js} +3 -3
- package/assets/{index-DytFFz4y.js.map → index-D-HyZoai.js.map} +1 -1
- package/assets/{index-eL7TPZy3.js → index-D4XK2ofK.js} +1 -1
- package/assets/{index-eL7TPZy3.js.map → index-D4XK2ofK.js.map} +1 -1
- package/assets/{index-DukWSxvV.js → index-DBoeO0yj.js} +1 -1
- package/assets/{index-DukWSxvV.js.map → index-DBoeO0yj.js.map} +1 -1
- package/assets/{index-h1t0zAy8.js → index-DHyrb8Ae.js} +1 -1
- package/assets/{index-h1t0zAy8.js.map → index-DHyrb8Ae.js.map} +1 -1
- package/assets/{index-BEU_7_ne.js → index-DJYAOhbz.js} +1 -1
- package/assets/{index-BEU_7_ne.js.map → index-DJYAOhbz.js.map} +1 -1
- package/assets/{index-aBiQGEwK.js → index-DUwBC5EP.js} +1 -1
- package/assets/{index-aBiQGEwK.js.map → index-DUwBC5EP.js.map} +1 -1
- package/assets/{index-Ds3h83Za.js → index-DVUi9PgH.js} +1 -1
- package/assets/{index-Ds3h83Za.js.map → index-DVUi9PgH.js.map} +1 -1
- package/assets/{index-Cec4TfYr.js → index-DZpTCrkB.js} +1 -1
- package/assets/{index-Cec4TfYr.js.map → index-DZpTCrkB.js.map} +1 -1
- package/assets/{index-CbJkiIwc.js → index-DrcOL406.js} +1 -1
- package/assets/{index-CbJkiIwc.js.map → index-DrcOL406.js.map} +1 -1
- package/assets/{index-PzH_zo30.js → index-DwmSadCe.js} +1 -1
- package/assets/{index-PzH_zo30.js.map → index-DwmSadCe.js.map} +1 -1
- package/assets/{index-TNlEMSkO.js → index-Dy9lOKvc.js} +1 -1
- package/assets/{index-TNlEMSkO.js.map → index-Dy9lOKvc.js.map} +1 -1
- package/assets/{index-DskznNlR.js → index-EndbBmWs.js} +1 -1
- package/assets/{index-DskznNlR.js.map → index-EndbBmWs.js.map} +1 -1
- package/assets/index-FOXwt2hH.js +1 -0
- package/assets/{index-B-X7xo-v.js.map → index-FOXwt2hH.js.map} +1 -1
- package/assets/{index-B3_NlVHL.js → index-PNT9J6AQ.js} +1 -1
- package/assets/{index-B3_NlVHL.js.map → index-PNT9J6AQ.js.map} +1 -1
- package/assets/{index-DvT2DV5d.js → index-U6w71K7Y.js} +1 -1
- package/assets/{index-DvT2DV5d.js.map → index-U6w71K7Y.js.map} +1 -1
- package/assets/{index-BM3mFwuT.js → index-mJ6v7MBb.js} +1 -1
- package/assets/{index-BM3mFwuT.js.map → index-mJ6v7MBb.js.map} +1 -1
- package/assets/{placesClient-Brx26wG2.js → placesClient-C2aFU8QL.js} +1 -1
- package/assets/{placesClient-Brx26wG2.js.map → placesClient-C2aFU8QL.js.map} +1 -1
- package/assets/{profile.client-BhwopOt8.js → profile.client-X_-2wpWn.js} +1 -1
- package/assets/{profile.client-BhwopOt8.js.map → profile.client-X_-2wpWn.js.map} +1 -1
- package/assets/rtk-query-react.modern-eNgJtwbJ.js +9 -0
- package/assets/{rtk-query-react.modern-BAShPeSa.js.map → rtk-query-react.modern-eNgJtwbJ.js.map} +1 -1
- package/assets/{shared.styled-CwLQaYli.js → shared.styled-CzGNFzDn.js} +1 -1
- package/assets/{shared.styled-CwLQaYli.js.map → shared.styled-CzGNFzDn.js.map} +1 -1
- package/assets/{signedFetch-BH66xky9.js → signedFetch-wfXfas0G.js} +1 -1
- package/assets/{signedFetch-BH66xky9.js.map → signedFetch-wfXfas0G.js.map} +1 -1
- package/assets/store-Yluidaqz.js +1 -0
- package/assets/store-Yluidaqz.js.map +1 -0
- package/assets/{url-D90migVD.js → url-BvNOSdx9.js} +1 -1
- package/assets/{url-D90migVD.js.map → url-BvNOSdx9.js.map} +1 -1
- package/assets/useAdminPermissions-DtBORrGI.js +1 -0
- package/assets/useAdminPermissions-DtBORrGI.js.map +1 -0
- package/assets/{useAuthIdentity-B6QSalIu.js → useAuthIdentity-B89tP4lt.js} +1 -1
- package/assets/{useAuthIdentity-B6QSalIu.js.map → useAuthIdentity-B89tP4lt.js.map} +1 -1
- package/assets/useCanEditEvent-BhQzxRgL.js +1 -0
- package/assets/useCanEditEvent-BhQzxRgL.js.map +1 -0
- package/assets/{useCreatorHubDownload-Cqo_jiD_.js → useCreatorHubDownload-BI1AVMM2.js} +1 -1
- package/assets/{useCreatorHubDownload-Cqo_jiD_.js.map → useCreatorHubDownload-BI1AVMM2.js.map} +1 -1
- package/assets/{useInfiniteBlogPosts-DJkZrrll.js → useInfiniteBlogPosts-Dhb_txNw.js} +1 -1
- package/assets/{useInfiniteBlogPosts-DJkZrrll.js.map → useInfiniteBlogPosts-Dhb_txNw.js.map} +1 -1
- package/assets/{useManaBalances.impl-CnS1IZqg.js → useManaBalances.impl-Byl7YHKM.js} +3 -3
- package/assets/{useManaBalances.impl-CnS1IZqg.js.map → useManaBalances.impl-Byl7YHKM.js.map} +1 -1
- package/assets/{useProfileAvatar-C_W2tZIS.js → useProfileAvatar-BAqgxJ1A.js} +1 -1
- package/assets/{useProfileAvatar-C_W2tZIS.js.map → useProfileAvatar-BAqgxJ1A.js.map} +1 -1
- package/assets/{useSlot-8XCS788i.js → useSlot-GF7Jj78E.js} +1 -1
- package/assets/{useSlot-8XCS788i.js.map → useSlot-GF7Jj78E.js.map} +1 -1
- package/assets/{utils-CNAAosuZ.js → utils-CmqDRpr2.js} +1 -1
- package/assets/{utils-CNAAosuZ.js.map → utils-CmqDRpr2.js.map} +1 -1
- package/index.html +15 -15
- package/package.json +3 -3
- package/assets/AdminLayout.styled-nMbBrmih.js +0 -1
- package/assets/AdminLayout.styled-nMbBrmih.js.map +0 -1
- package/assets/ArrowBackIosNew-Dvsk5ZUT.js +0 -1
- package/assets/ArrowBackIosNew-Dvsk5ZUT.js.map +0 -1
- package/assets/CreateEventPage-ZOlXojoA.js +0 -16
- package/assets/CreateEventPage-ZOlXojoA.js.map +0 -1
- package/assets/FutureCard-WKBFz6qp.js +0 -3
- package/assets/FutureCard-WKBFz6qp.js.map +0 -1
- package/assets/HomePage-CUPFKRVr.js +0 -1
- package/assets/HomePage-CUPFKRVr.js.map +0 -1
- package/assets/MenuItem-duRqfCJq.js +0 -1
- package/assets/MenuItem-duRqfCJq.js.map +0 -1
- package/assets/PendingEventsPage-CM3liVzS.js +0 -1
- package/assets/PendingEventsPage-CM3liVzS.js.map +0 -1
- package/assets/TextField-DpWq-ZfM.js +0 -2
- package/assets/TextField-DpWq-ZfM.js.map +0 -1
- package/assets/UsersAdminPage-Bv_kpY6k.js +0 -2
- package/assets/UsersAdminPage-Bv_kpY6k.js.map +0 -1
- package/assets/WearablePreview-Bca5KMOK.js +0 -4
- package/assets/admin.client-BVloTpEY.js +0 -1
- package/assets/admin.client-BVloTpEY.js.map +0 -1
- package/assets/events.client-By7Zddj9.js +0 -1
- package/assets/events.client-By7Zddj9.js.map +0 -1
- package/assets/index-B-X7xo-v.js +0 -1
- package/assets/index-D9krZGYy.js.map +0 -1
- package/assets/index-Dg4AWVL8.js +0 -1
- package/assets/rtk-query-react.modern-BAShPeSa.js +0 -9
- package/assets/store-CyqSuDHi.js +0 -1
- package/assets/store-CyqSuDHi.js.map +0 -1
- package/assets/useAdminPermissions-CkjK7NYZ.js +0 -1
- package/assets/useAdminPermissions-CkjK7NYZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as t,a}from"./index-
|
|
1
|
+
import{s as t,a}from"./index-BWvXRlTE.js";const s=t(a)(({theme:o})=>({textAlign:"center",paddingTop:o.spacing(8),paddingBottom:o.spacing(8)}));export{s as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.styled-
|
|
1
|
+
{"version":3,"file":"shared.styled-CzGNFzDn.js","sources":["../../src/pages/blog/shared.styled.ts"],"sourcesContent":["import { Box, styled } from 'decentraland-ui2'\n\nconst CenteredBox = styled(Box)(({ theme }) => ({\n textAlign: 'center',\n paddingTop: theme.spacing(8),\n paddingBottom: theme.spacing(8)\n}))\n\nexport { CenteredBox }\n"],"names":["CenteredBox","styled","Box","theme"],"mappings":"0CAEA,MAAMA,EAAcC,EAAOC,CAAG,EAAE,CAAC,CAAE,MAAAC,MAAa,CAC9C,UAAW,SACX,WAAYA,EAAM,QAAQ,CAAC,EAC3B,cAAeA,EAAM,QAAQ,CAAC,CAChC,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as r}from"./index-
|
|
1
|
+
import{n as r}from"./index-BWvXRlTE.js";const n=r.signedFetchFactory();function h(t,e,i,c,o){return n(t,{method:i,identity:e,body:c,headers:o})}function a(t,e){return e?n(t,{method:"GET",identity:e}):fetch(t)}export{a,h as f};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signedFetch-
|
|
1
|
+
{"version":3,"file":"signedFetch-wfXfas0G.js","sources":["../../src/utils/signedFetch.ts"],"sourcesContent":["import type { AuthIdentity } from '@dcl/crypto'\nimport { signedFetchFactory } from 'decentraland-crypto-fetch'\n\nconst signedFetch = signedFetchFactory()\n\nfunction fetchWithIdentity(\n url: string,\n identity: AuthIdentity,\n method: 'GET' | 'POST' | 'PATCH' | 'DELETE',\n body?: BodyInit,\n headers?: Record<string, string>\n): Promise<Response> {\n return signedFetch(url, { method, identity, body, headers })\n}\n\nfunction fetchWithOptionalIdentity(url: string, identity: AuthIdentity | undefined): Promise<Response> {\n if (identity) {\n return signedFetch(url, { method: 'GET', identity })\n }\n return fetch(url)\n}\n\nexport { fetchWithIdentity, fetchWithOptionalIdentity }\n"],"names":["signedFetch","signedFetchFactory","fetchWithIdentity","url","identity","method","body","headers","fetchWithOptionalIdentity"],"mappings":"wCAGA,MAAMA,EAAcC,EAAAA,mBAAA,EAEpB,SAASC,EACPC,EACAC,EACAC,EACAC,EACAC,EACmB,CACnB,OAAOP,EAAYG,EAAK,CAAE,OAAAE,EAAQ,SAAAD,EAAU,KAAAE,EAAM,QAAAC,EAAS,CAC7D,CAEA,SAASC,EAA0BL,EAAaC,EAAuD,CACrG,OAAIA,EACKJ,EAAYG,EAAK,CAAE,OAAQ,MAAO,SAAAC,EAAU,EAE9C,MAAMD,CAAG,CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as l,a as p,b as u,d as m,e as f,i as g,u as h,g as S,h as C}from"./rtk-query-react.modern-eNgJtwbJ.js";import{a}from"./admin.client-B5xGzvMY.js";import{e as s}from"./events.client-KDioNnTz.js";import{g as c}from"./index-BWvXRlTE.js";import{p as o}from"./placesClient-C2aFU8QL.js";const M=()=>{const e=c("CMS_BASE_URL");if(!e)throw new Error("CMS_BASE_URL environment variable is not set");return e},_=c("CMS_BASE_URL")??"",n=l({reducerPath:"cmsClient",baseQuery:p({baseUrl:""}),tagTypes:["BlogPosts","BlogPost","Categories","Authors","SearchResults"],keepUnusedDataFor:300,refetchOnFocus:!1,refetchOnReconnect:!1,endpoints:()=>({})}),t=u(),w=t.getInitialState(),i=m({name:"blog",initialState:w,reducers:{postUpserted:(e,r)=>t.upsertOne(e,r),postsUpserted:(e,r)=>t.upsertMany(e,r),postsClear:e=>t.removeAll(e)}}),{postUpserted:y,postsUpserted:L,postsClear:O}=i.actions,A=i.reducer,F=t.getSelectors();function U(){const e=f();return e.startListening({matcher:g(s.endpoints.createEvent.matchFulfilled,s.endpoints.updateEvent.matchFulfilled),effect:(r,d)=>{d.dispatch(a.util.invalidateTags(["PendingEvents"]))}}),e}const b=C({[s.reducerPath]:s.reducer,[a.reducerPath]:a.reducer,blog:A,[n.reducerPath]:n.reducer,[o.reducerPath]:o.reducer}),T=S({reducer:b,middleware:e=>e().prepend(U().middleware).concat(s.middleware,a.middleware,n.middleware,o.middleware),devTools:!1}),Q=h;export{n as a,L as b,_ as c,M as g,F as p,T as s,Q as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-Yluidaqz.js","sources":["../../src/services/blogClient.ts","../../src/features/blog/blog.slice.ts","../../src/shells/whatsOnAdmin.listeners.ts","../../src/shells/store.ts"],"sourcesContent":["import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\nimport { getEnv } from '../config/env'\n\n// Lazy getter — throws only when a query actually runs, not at import time.\n// A module-level throw crashes DappsShell at import even when no blog query is made.\nconst getCmsBaseUrl = (): string => {\n const url = getEnv('CMS_BASE_URL')\n if (!url) throw new Error('CMS_BASE_URL environment variable is not set')\n // In development, use the Vite proxy to avoid CORS issues; in production, use the direct CMS URL\n return import.meta.env.DEV ? '/api/cms' : url\n}\n\n// Exposed for blog.helpers.ts (fetchFromCMS uses it to resolve references)\nconst cmsBaseUrl = import.meta.env.DEV ? '/api/cms' : getEnv('CMS_BASE_URL') ?? ''\n\n/**\n * CMS Client — blog posts, categories, authors, and full-text search from Contentful.\n * Search endpoints inject into this same client because the cms-server search path\n * (/blog/posts?q=) shares the CMS_BASE_URL origin and HTTP cache.\n */\nconst cmsClient = createApi({\n reducerPath: 'cmsClient',\n // baseUrl is resolved lazily per-request so the module can be imported without CMS_BASE_URL set\n baseQuery: fetchBaseQuery({ baseUrl: '' }),\n tagTypes: ['BlogPosts', 'BlogPost', 'Categories', 'Authors', 'SearchResults'],\n keepUnusedDataFor: 300, // Cache for 5 minutes\n refetchOnFocus: false,\n refetchOnReconnect: false,\n endpoints: () => ({})\n})\n\nexport { cmsBaseUrl, cmsClient, getCmsBaseUrl }\n","import { createEntityAdapter, createSlice } from '@reduxjs/toolkit'\nimport type { BlogPost } from '../../shared/blog/types/blog.domain'\n\n// Entity adapter for normalized posts storage\nconst postsAdapter = createEntityAdapter<BlogPost>()\n\n// Initial state using the adapter\nconst initialState = postsAdapter.getInitialState()\n\nconst blogSlice = createSlice({\n name: 'blog',\n initialState,\n reducers: {\n postUpserted: (state, action) => postsAdapter.upsertOne(state, action),\n postsUpserted: (state, action) => postsAdapter.upsertMany(state, action),\n postsClear: state => postsAdapter.removeAll(state)\n }\n})\n\nconst { postUpserted, postsUpserted, postsClear } = blogSlice.actions\n\nconst blogReducer = blogSlice.reducer\n\n// Export adapter selectors (will be used with RootState in selectors file)\nconst postsSelectors = postsAdapter.getSelectors()\n\nexport { blogReducer, blogSlice, postsClear, postUpserted, postsSelectors, postsUpserted }\n","import { createListenerMiddleware, isAnyOf } from '@reduxjs/toolkit'\nimport { adminClient } from '../features/whats-on/admin'\nimport { eventsClient } from '../features/whats-on-events/events.client'\n\nfunction createWhatsOnAdminListenerMiddleware() {\n const listenerMiddleware = createListenerMiddleware()\n\n listenerMiddleware.startListening({\n matcher: isAnyOf(eventsClient.endpoints.createEvent.matchFulfilled, eventsClient.endpoints.updateEvent.matchFulfilled),\n effect: (_action, listenerApi) => {\n listenerApi.dispatch(adminClient.util.invalidateTags(['PendingEvents']))\n }\n })\n\n return listenerMiddleware\n}\n\nexport { createWhatsOnAdminListenerMiddleware }\n","import { useDispatch, useSelector } from 'react-redux'\nimport type { TypedUseSelectorHook } from 'react-redux'\nimport { combineReducers, configureStore } from '@reduxjs/toolkit'\nimport { blogReducer } from '../features/blog/blog.slice'\nimport { adminClient } from '../features/whats-on/admin'\nimport { eventsClient } from '../features/whats-on-events/events.client'\nimport { cmsClient } from '../services/blogClient'\nimport { placesClient } from '../services/placesClient'\nimport { createWhatsOnAdminListenerMiddleware } from './whatsOnAdmin.listeners'\n\nconst rootReducer = combineReducers({\n [eventsClient.reducerPath]: eventsClient.reducer,\n [adminClient.reducerPath]: adminClient.reducer,\n blog: blogReducer,\n [cmsClient.reducerPath]: cmsClient.reducer,\n [placesClient.reducerPath]: placesClient.reducer\n})\n\nconst store = configureStore({\n reducer: rootReducer,\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware()\n .prepend(createWhatsOnAdminListenerMiddleware().middleware)\n .concat(eventsClient.middleware, adminClient.middleware, cmsClient.middleware, placesClient.middleware),\n devTools: import.meta.env.DEV\n})\n\ntype RootState = ReturnType<typeof store.getState>\ntype AppDispatch = typeof store.dispatch\n\nconst useAppDispatch = () => useDispatch<AppDispatch>()\nconst useAppSelector: TypedUseSelectorHook<RootState> = useSelector\n\nexport { store, useAppDispatch, useAppSelector }\nexport type { RootState, AppDispatch }\n"],"names":["getCmsBaseUrl","url","getEnv","cmsBaseUrl","cmsClient","createApi","fetchBaseQuery","postsAdapter","createEntityAdapter","initialState","blogSlice","createSlice","state","action","postUpserted","postsUpserted","postsClear","blogReducer","postsSelectors","createWhatsOnAdminListenerMiddleware","listenerMiddleware","createListenerMiddleware","isAnyOf","eventsClient","_action","listenerApi","adminClient","rootReducer","combineReducers","placesClient","store","configureStore","getDefaultMiddleware","useAppSelector","useSelector"],"mappings":"kSAKA,MAAMA,EAAgB,IAAc,CAClC,MAAMC,EAAMC,EAAO,cAAc,EACjC,GAAI,CAACD,EAAK,MAAM,IAAI,MAAM,8CAA8C,EAExE,OAA0CA,CAC5C,EAGME,EAAgDD,EAAO,cAAc,GAAK,GAO1EE,EAAYC,EAAU,CAC1B,YAAa,YAEb,UAAWC,EAAe,CAAE,QAAS,GAAI,EACzC,SAAU,CAAC,YAAa,WAAY,aAAc,UAAW,eAAe,EAC5E,kBAAmB,IACnB,eAAgB,GAChB,mBAAoB,GACpB,UAAW,KAAO,CAAA,EACpB,CAAC,ECzBKC,EAAeC,EAAA,EAGfC,EAAeF,EAAa,gBAAA,EAE5BG,EAAYC,EAAY,CAC5B,KAAM,OACN,aAAAF,EACA,SAAU,CACR,aAAc,CAACG,EAAOC,IAAWN,EAAa,UAAUK,EAAOC,CAAM,EACrE,cAAe,CAACD,EAAOC,IAAWN,EAAa,WAAWK,EAAOC,CAAM,EACvE,WAAYD,GAASL,EAAa,UAAUK,CAAK,CAAA,CAErD,CAAC,EAEK,CAAE,aAAAE,EAAc,cAAAC,EAAe,WAAAC,CAAA,EAAeN,EAAU,QAExDO,EAAcP,EAAU,QAGxBQ,EAAiBX,EAAa,aAAA,ECpBpC,SAASY,GAAuC,CAC9C,MAAMC,EAAqBC,EAAA,EAE3B,OAAAD,EAAmB,eAAe,CAChC,QAASE,EAAQC,EAAa,UAAU,YAAY,eAAgBA,EAAa,UAAU,YAAY,cAAc,EACrH,OAAQ,CAACC,EAASC,IAAgB,CAChCA,EAAY,SAASC,EAAY,KAAK,eAAe,CAAC,eAAe,CAAC,CAAC,CACzE,CAAA,CACD,EAEMN,CACT,CCLA,MAAMO,EAAcC,EAAgB,CAClC,CAACL,EAAa,WAAW,EAAGA,EAAa,QACzC,CAACG,EAAY,WAAW,EAAGA,EAAY,QACvC,KAAMT,EACN,CAACb,EAAU,WAAW,EAAGA,EAAU,QACnC,CAACyB,EAAa,WAAW,EAAGA,EAAa,OAC3C,CAAC,EAEKC,EAAQC,EAAe,CAC3B,QAASJ,EACT,WAAYK,GACVA,IACG,QAAQb,IAAuC,UAAU,EACzD,OAAOI,EAAa,WAAYG,EAAY,WAAYtB,EAAU,WAAYyB,EAAa,UAAU,EAC1G,SAAU,EACZ,CAAC,EAMKI,EAAkDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as A}from"./index-
|
|
1
|
+
import{c as A}from"./index-CjsVUu5b.js";var c;(function(e){e.WINDOWS="Windows",e.MACOS="macOS"})(c||(c={}));var s;(function(e){e.LAUNCHER="launcher",e.AUTO_SIGNING="auto-signing"})(s||(s={}));const u="https://explorer-artifacts.decentraland.org/launcher-rust",N="https://explorer-artifacts.decentraland.org/launcher/dcl",O=A.get("AUTO_SIGNING_BASE_URL"),L={[s.LAUNCHER]:{urls:{[c.WINDOWS]:{amd64:`${u}/Decentraland_installer.exe`},[c.MACOS]:{amd64:`${N}/Decentraland%20Outdated-mac-x64.dmg`,arm64:`${u}/Decentraland_installer.dmg`}}},[s.AUTO_SIGNING]:{urls:{[c.WINDOWS]:{amd64:`${O}/:identityId/decentraland.exe`},[c.MACOS]:{amd64:`${N}/Decentraland%20Outdated-mac-x64.dmg`,arm64:`${O}/:identityId/decentraland.dmg`}}}},i=(e=s.LAUNCHER,t)=>{const n=L[e];if(!n)return null;const r=a=>a&&(e===s.AUTO_SIGNING&&t?a.replace(":identityId",t):a);return{[c.WINDOWS]:{amd64:r(n.urls.Windows.amd64)},[c.MACOS]:{amd64:r(n.urls.macOS.amd64),arm64:r(n.urls.macOS.arm64)}}},m=(e,t)=>{if(!t||Object.keys(t).length===0)return e;const n=new URL(e);return Object.entries(t).forEach(([r,a])=>{a!=null&&n.searchParams.append(r,a)}),n.toString()},C=(e,t,n)=>{const r=new URL(e);return r.searchParams.delete(t),r.searchParams.append(t,n),r.toString()},d=e=>{if(!e)return null;const t={};for(const[n,r]of Object.entries(e)){const a={};for(const[l,o]of Object.entries(r))o&&(a[l]=o);Object.keys(a).length>0&&(t[n]=a)}return Object.keys(t).length>0?t:null},I=async(e,t)=>{if(!e){const n=i(s.LAUNCHER);return t||d(n)}try{const n=await e(),r=n?i(s.AUTO_SIGNING,n):i(s.LAUNCHER);return d(r)||t||null}catch(n){console.error("Failed to generate identityId:",n);const r=i(s.LAUNCHER);return d(r)||t||null}},f=(e,t,n,r)=>{if(!r?.[e])return n;const a=r[e];return t&&a[t]?a[t]:Object.values(a)[0]||n},U=d(i(s.LAUNCHER))||{};export{s as C,U as F,m as a,I as c,f as e,i as g,d as s,C as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-
|
|
1
|
+
{"version":3,"file":"url-BvNOSdx9.js","sources":["../../node_modules/decentraland-ui2/dist/components/DownloadButton/DownloadButton.types.js","../../node_modules/decentraland-ui2/dist/modules/cdnReleases.js","../../src/modules/url.ts"],"sourcesContent":["var OperativeSystem;\n(function (OperativeSystem) {\n OperativeSystem[\"WINDOWS\"] = \"Windows\";\n OperativeSystem[\"MACOS\"] = \"macOS\";\n})(OperativeSystem || (OperativeSystem = {}));\nexport { OperativeSystem };\n//# sourceMappingURL=DownloadButton.types.js.map","import { OperativeSystem } from '../components/DownloadButton';\nimport { config } from '../config';\nvar CDNSource;\n(function (CDNSource) {\n CDNSource[\"LAUNCHER\"] = \"launcher\";\n CDNSource[\"AUTO_SIGNING\"] = \"auto-signing\";\n // Add future CDN sources here\n})(CDNSource || (CDNSource = {}));\nconst LAUNCHER_BASE_URL = 'https://explorer-artifacts.decentraland.org/launcher-rust';\nconst LAUNCHER_LEGACY_BASE_URL = 'https://explorer-artifacts.decentraland.org/launcher/dcl';\nconst AUTO_SIGNING_BASE_URL = config.get('AUTO_SIGNING_BASE_URL');\nconst CDN_CONFIGS = {\n [CDNSource.LAUNCHER]: {\n urls: {\n [OperativeSystem.WINDOWS]: {\n amd64: `${LAUNCHER_BASE_URL}/Decentraland_installer.exe`\n },\n [OperativeSystem.MACOS]: {\n amd64: `${LAUNCHER_LEGACY_BASE_URL}/Decentraland%20Outdated-mac-x64.dmg`,\n arm64: `${LAUNCHER_BASE_URL}/Decentraland_installer.dmg`\n }\n }\n },\n [CDNSource.AUTO_SIGNING]: {\n urls: {\n [OperativeSystem.WINDOWS]: {\n amd64: `${AUTO_SIGNING_BASE_URL}/:identityId/decentraland.exe`\n },\n [OperativeSystem.MACOS]: {\n amd64: `${LAUNCHER_LEGACY_BASE_URL}/Decentraland%20Outdated-mac-x64.dmg`,\n arm64: `${AUTO_SIGNING_BASE_URL}/:identityId/decentraland.dmg`\n }\n }\n }\n // Add more CDN configurations here as needed\n};\nconst getCDNRelease = (source = CDNSource.LAUNCHER, identityId) => {\n const cdnConfig = CDN_CONFIGS[source];\n if (!cdnConfig) {\n return null;\n }\n const replaceIdentityId = (url) => {\n if (!url)\n return url;\n // Replace :identityId placeholder in the path for AUTO_SIGNING source\n if (source === CDNSource.AUTO_SIGNING && identityId) {\n return url.replace(':identityId', identityId);\n }\n return url;\n };\n return {\n [OperativeSystem.WINDOWS]: {\n amd64: replaceIdentityId(cdnConfig.urls.Windows.amd64)\n },\n [OperativeSystem.MACOS]: {\n amd64: replaceIdentityId(cdnConfig.urls.macOS.amd64),\n arm64: replaceIdentityId(cdnConfig.urls.macOS.arm64)\n }\n };\n};\nexport { getCDNRelease, CDNSource };\n//# sourceMappingURL=cdnReleases.js.map","import { CDNSource, getCDNRelease } from 'decentraland-ui2/dist/modules/cdnReleases'\nimport { Architecture } from '../types/download.types'\n\nconst addQueryParamsToUrlString = (url: string, params: Record<string, string | undefined | null>): string => {\n if (!params || Object.keys(params).length === 0) {\n return url\n }\n\n const urlObj = new URL(url)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n urlObj.searchParams.append(key, value)\n }\n })\n\n return urlObj.toString()\n}\n\nconst updateUrlWithLastValue = (url: string, paramKey: string, paramValue: string) => {\n const urlObj = new URL(url)\n\n urlObj.searchParams.delete(paramKey)\n urlObj.searchParams.append(paramKey, paramValue)\n\n return urlObj.toString()\n}\n\nconst sanitizeCDNReleaseLinks = (\n cdnLinks: Record<string, Record<string, string | undefined>> | null\n): Record<string, Record<string, string>> | null => {\n if (!cdnLinks) return null\n\n const sanitizedLinks: Record<string, Record<string, string>> = {}\n for (const [os, archLinks] of Object.entries(cdnLinks)) {\n const sanitizedArchLinks: Record<string, string> = {}\n for (const [arch, link] of Object.entries(archLinks)) {\n if (link) {\n sanitizedArchLinks[arch] = link\n }\n }\n if (Object.keys(sanitizedArchLinks).length > 0) {\n sanitizedLinks[os] = sanitizedArchLinks\n }\n }\n return Object.keys(sanitizedLinks).length > 0 ? sanitizedLinks : null\n}\n\nconst calculateCDNReleaseLinksWithIdentity = async (\n getIdentityId?: () => Promise<string | undefined>,\n fallbackLinks?: Record<string, Record<string, string>> | null\n): Promise<Record<string, Record<string, string>> | null> => {\n if (!getIdentityId) {\n const launcherLinks = getCDNRelease(CDNSource.LAUNCHER)\n return fallbackLinks || sanitizeCDNReleaseLinks(launcherLinks)\n }\n\n try {\n const currentIdentityId = await getIdentityId()\n const cdnLinks = currentIdentityId ? getCDNRelease(CDNSource.AUTO_SIGNING, currentIdentityId) : getCDNRelease(CDNSource.LAUNCHER)\n\n return sanitizeCDNReleaseLinks(cdnLinks) || fallbackLinks || null\n } catch (error) {\n console.error('Failed to generate identityId:', error)\n const launcherLinks = getCDNRelease(CDNSource.LAUNCHER)\n return sanitizeCDNReleaseLinks(launcherLinks) || fallbackLinks || null\n }\n}\n\nconst extractDownloadLinkFromCDNReleaseOption = (\n optionText: string,\n optionArch: Architecture | undefined,\n optionFallbackLink: string | undefined,\n cdnReleaseLinks: Record<string, Record<string, string>> | null\n): string | undefined => {\n if (!cdnReleaseLinks?.[optionText]) return optionFallbackLink\n\n const osLinks = cdnReleaseLinks[optionText]\n if (optionArch && osLinks[optionArch]) {\n return osLinks[optionArch]\n }\n\n const firstAvailableLink = Object.values(osLinks)[0]\n return firstAvailableLink || optionFallbackLink\n}\n\nconst FALLBACK_CDN_RELEASE_LINKS = sanitizeCDNReleaseLinks(getCDNRelease(CDNSource.LAUNCHER)) || {}\n\nexport {\n FALLBACK_CDN_RELEASE_LINKS,\n addQueryParamsToUrlString,\n calculateCDNReleaseLinksWithIdentity,\n extractDownloadLinkFromCDNReleaseOption,\n sanitizeCDNReleaseLinks,\n updateUrlWithLastValue\n}\n"],"names":["OperativeSystem","CDNSource","LAUNCHER_BASE_URL","LAUNCHER_LEGACY_BASE_URL","AUTO_SIGNING_BASE_URL","config","CDN_CONFIGS","getCDNRelease","source","identityId","cdnConfig","replaceIdentityId","url","addQueryParamsToUrlString","params","urlObj","key","value","updateUrlWithLastValue","paramKey","paramValue","sanitizeCDNReleaseLinks","cdnLinks","sanitizedLinks","os","archLinks","sanitizedArchLinks","arch","link","calculateCDNReleaseLinksWithIdentity","getIdentityId","fallbackLinks","launcherLinks","currentIdentityId","error","extractDownloadLinkFromCDNReleaseOption","optionText","optionArch","optionFallbackLink","cdnReleaseLinks","osLinks","FALLBACK_CDN_RELEASE_LINKS"],"mappings":"wCAAA,IAAIA,GACH,SAAUA,EAAiB,CACxBA,EAAgB,QAAa,UAC7BA,EAAgB,MAAW,OAC/B,GAAGA,IAAoBA,EAAkB,CAAA,EAAG,ECFzC,IAACC,GACH,SAAUA,EAAW,CAClBA,EAAU,SAAc,WACxBA,EAAU,aAAkB,cAEhC,GAAGA,IAAcA,EAAY,CAAA,EAAG,EAChC,MAAMC,EAAoB,4DACpBC,EAA2B,2DAC3BC,EAAwBC,EAAO,IAAI,uBAAuB,EAC1DC,EAAc,CAChB,CAACL,EAAU,QAAQ,EAAG,CAClB,KAAM,CACF,CAACD,EAAgB,OAAO,EAAG,CACvB,MAAO,GAAGE,CAAiB,6BAC3C,EACY,CAACF,EAAgB,KAAK,EAAG,CACrB,MAAO,GAAGG,CAAwB,uCAClC,MAAO,GAAGD,CAAiB,6BAC3C,CACA,CACA,EACI,CAACD,EAAU,YAAY,EAAG,CACtB,KAAM,CACF,CAACD,EAAgB,OAAO,EAAG,CACvB,MAAO,GAAGI,CAAqB,+BAC/C,EACY,CAACJ,EAAgB,KAAK,EAAG,CACrB,MAAO,GAAGG,CAAwB,uCAClC,MAAO,GAAGC,CAAqB,+BAC/C,CACA,CACA,CAEA,EACMG,EAAgB,CAACC,EAASP,EAAU,SAAUQ,IAAe,CAC/D,MAAMC,EAAYJ,EAAYE,CAAM,EACpC,GAAI,CAACE,EACD,OAAO,KAEX,MAAMC,EAAqBC,GAClBA,IAGDJ,IAAWP,EAAU,cAAgBQ,EAC9BG,EAAI,QAAQ,cAAeH,CAAU,EAEzCG,GAEX,MAAO,CACH,CAACZ,EAAgB,OAAO,EAAG,CACvB,MAAOW,EAAkBD,EAAU,KAAK,QAAQ,KAAK,CACjE,EACQ,CAACV,EAAgB,KAAK,EAAG,CACrB,MAAOW,EAAkBD,EAAU,KAAK,MAAM,KAAK,EACnD,MAAOC,EAAkBD,EAAU,KAAK,MAAM,KAAK,CAC/D,CACA,CACA,ECxDMG,EAA4B,CAACD,EAAaE,IAA8D,CAC5G,GAAI,CAACA,GAAU,OAAO,KAAKA,CAAM,EAAE,SAAW,EAC5C,OAAOF,EAGT,MAAMG,EAAS,IAAI,IAAIH,CAAG,EAE1B,cAAO,QAAQE,CAAM,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CACpBA,GAAU,MACnCF,EAAO,aAAa,OAAOC,EAAKC,CAAK,CAEzC,CAAC,EAEMF,EAAO,SAAA,CAChB,EAEMG,EAAyB,CAACN,EAAaO,EAAkBC,IAAuB,CACpF,MAAML,EAAS,IAAI,IAAIH,CAAG,EAE1B,OAAAG,EAAO,aAAa,OAAOI,CAAQ,EACnCJ,EAAO,aAAa,OAAOI,EAAUC,CAAU,EAExCL,EAAO,SAAA,CAChB,EAEMM,EACJC,GACkD,CAClD,GAAI,CAACA,EAAU,OAAO,KAEtB,MAAMC,EAAyD,CAAA,EAC/D,SAAW,CAACC,EAAIC,CAAS,IAAK,OAAO,QAAQH,CAAQ,EAAG,CACtD,MAAMI,EAA6C,CAAA,EACnD,SAAW,CAACC,EAAMC,CAAI,IAAK,OAAO,QAAQH,CAAS,EAC7CG,IACFF,EAAmBC,CAAI,EAAIC,GAG3B,OAAO,KAAKF,CAAkB,EAAE,OAAS,IAC3CH,EAAeC,CAAE,EAAIE,EAEzB,CACA,OAAO,OAAO,KAAKH,CAAc,EAAE,OAAS,EAAIA,EAAiB,IACnE,EAEMM,EAAuC,MAC3CC,EACAC,IAC2D,CAC3D,GAAI,CAACD,EAAe,CAClB,MAAME,EAAgBzB,EAAcN,EAAU,QAAQ,EACtD,OAAO8B,GAAiBV,EAAwBW,CAAa,CAC/D,CAEA,GAAI,CACF,MAAMC,EAAoB,MAAMH,EAAA,EAC1BR,EAAWW,EAAoB1B,EAAcN,EAAU,aAAcgC,CAAiB,EAAI1B,EAAcN,EAAU,QAAQ,EAEhI,OAAOoB,EAAwBC,CAAQ,GAAKS,GAAiB,IAC/D,OAASG,EAAO,CACd,QAAQ,MAAM,iCAAkCA,CAAK,EACrD,MAAMF,EAAgBzB,EAAcN,EAAU,QAAQ,EACtD,OAAOoB,EAAwBW,CAAa,GAAKD,GAAiB,IACpE,CACF,EAEMI,EAA0C,CAC9CC,EACAC,EACAC,EACAC,IACuB,CACvB,GAAI,CAACA,IAAkBH,CAAU,EAAG,OAAOE,EAE3C,MAAME,EAAUD,EAAgBH,CAAU,EAC1C,OAAIC,GAAcG,EAAQH,CAAU,EAC3BG,EAAQH,CAAU,EAGA,OAAO,OAAOG,CAAO,EAAE,CAAC,GACtBF,CAC/B,EAEMG,EAA6BpB,EAAwBd,EAAcN,EAAU,QAAQ,CAAC,GAAK,CAAA","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as s}from"./vendor-router-D7SOoytt.js";import{u as E}from"./admin.client-B5xGzvMY.js";import{u as o}from"./useAuthIdentity-B89tP4lt.js";import{s as r}from"./rtk-query-react.modern-eNgJtwbJ.js";var t=(e=>(e.APPROVE_OWN_EVENT="approve_own_event",e.APPROVE_ANY_EVENT="approve_any_event",e.EDIT_ANY_EVENT="edit_any_event",e.EDIT_ANY_SCHEDULE="edit_any_schedule",e.EDIT_ANY_PROFILE="edit_any_profile",e))(t||{});const v=["approve_own_event","approve_any_event","edit_any_event","edit_any_profile"],y=["invalid_image","invalid_event_name","inappropriate_description","invalid_duration","invalid_location"],d=/^0x[0-9a-fA-F]{40}$/,A=e=>Array.isArray(e)&&e.length>0,N=e=>d.test(e.trim()),_=[];function T(){const{identity:e,hasValidIdentity:i}=o(),a=E(i&&e?{identity:e}:r);return s.useMemo(()=>{const n=i?a.data?.permissions??_:_;return{isLoading:a.isLoading,hasIdentity:i,permissions:n,canApproveOwnEvent:n.includes(t.APPROVE_OWN_EVENT),canApproveAnyEvent:n.includes(t.APPROVE_ANY_EVENT),canEditAnyEvent:n.includes(t.EDIT_ANY_EVENT),canEditAnySchedule:n.includes(t.EDIT_ANY_SCHEDULE),canEditAnyProfile:n.includes(t.EDIT_ANY_PROFILE),isAdmin:A(n)}},[i,a.data,a.isLoading])}export{t as A,y as R,v as U,N as i,T as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAdminPermissions-DtBORrGI.js","sources":["../../src/features/whats-on/admin/admin.types.ts","../../src/features/whats-on/admin/admin.helpers.ts","../../src/hooks/useAdminPermissions.ts"],"sourcesContent":["import type { AuthIdentity } from '@dcl/crypto'\n\nenum AdminPermission {\n APPROVE_OWN_EVENT = 'approve_own_event',\n APPROVE_ANY_EVENT = 'approve_any_event',\n EDIT_ANY_EVENT = 'edit_any_event',\n EDIT_ANY_SCHEDULE = 'edit_any_schedule',\n EDIT_ANY_PROFILE = 'edit_any_profile'\n}\n\nconst UPDATEABLE_PERMISSIONS: readonly AdminPermission[] = [\n AdminPermission.APPROVE_OWN_EVENT,\n AdminPermission.APPROVE_ANY_EVENT,\n AdminPermission.EDIT_ANY_EVENT,\n AdminPermission.EDIT_ANY_PROFILE\n] as const\n\nconst REJECT_REASONS = ['invalid_image', 'invalid_event_name', 'inappropriate_description', 'invalid_duration', 'invalid_location'] as const\n\ntype AdminProfileSettings = {\n user: string\n email: string | null\n permissions: AdminPermission[]\n}\n\ntype IdentityOnlyParams = { identity: AuthIdentity }\ntype UpdateAdminPermissionsParams = IdentityOnlyParams & { address: string; permissions: AdminPermission[] }\ntype AdminEventActionParams = IdentityOnlyParams & { eventId: string }\ntype RejectReasonCode = (typeof REJECT_REASONS)[number]\ntype AdminRejectEventParams = AdminEventActionParams & { reasons?: RejectReasonCode[]; notes?: string }\n\nexport { AdminPermission, REJECT_REASONS, UPDATEABLE_PERMISSIONS }\nexport type {\n AdminEventActionParams,\n AdminProfileSettings,\n AdminRejectEventParams,\n IdentityOnlyParams,\n RejectReasonCode,\n UpdateAdminPermissionsParams\n}\n","import { AdminPermission } from './admin.types'\n\nconst ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/\n\nconst hasAnyAdminPermission = (permissions: readonly AdminPermission[] | undefined): boolean =>\n Array.isArray(permissions) && permissions.length > 0\n\nconst isValidWalletAddress = (value: string): boolean => ADDRESS_REGEX.test(value.trim())\n\nexport { hasAnyAdminPermission, isValidWalletAddress }\n","import { useMemo } from 'react'\nimport { skipToken } from '@reduxjs/toolkit/query/react'\nimport { useGetMyProfileSettingsQuery } from '../features/whats-on/admin/admin.client'\nimport { hasAnyAdminPermission } from '../features/whats-on/admin/admin.helpers'\nimport { AdminPermission } from '../features/whats-on/admin/admin.types'\nimport { useAuthIdentity } from './useAuthIdentity'\n\ntype AdminPermissionsState = {\n isLoading: boolean\n hasIdentity: boolean\n permissions: AdminPermission[]\n canApproveOwnEvent: boolean\n canApproveAnyEvent: boolean\n canEditAnyEvent: boolean\n canEditAnySchedule: boolean\n canEditAnyProfile: boolean\n isAdmin: boolean\n}\n\nconst EMPTY: AdminPermission[] = []\n\nfunction useAdminPermissions(): AdminPermissionsState {\n const { identity, hasValidIdentity } = useAuthIdentity()\n const queryResult = useGetMyProfileSettingsQuery(hasValidIdentity && identity ? { identity } : skipToken)\n\n return useMemo(() => {\n const permissions = hasValidIdentity ? queryResult.data?.permissions ?? EMPTY : EMPTY\n return {\n isLoading: queryResult.isLoading,\n hasIdentity: hasValidIdentity,\n permissions,\n canApproveOwnEvent: permissions.includes(AdminPermission.APPROVE_OWN_EVENT),\n canApproveAnyEvent: permissions.includes(AdminPermission.APPROVE_ANY_EVENT),\n canEditAnyEvent: permissions.includes(AdminPermission.EDIT_ANY_EVENT),\n canEditAnySchedule: permissions.includes(AdminPermission.EDIT_ANY_SCHEDULE),\n canEditAnyProfile: permissions.includes(AdminPermission.EDIT_ANY_PROFILE),\n isAdmin: hasAnyAdminPermission(permissions)\n }\n }, [hasValidIdentity, queryResult.data, queryResult.isLoading])\n}\n\nexport { useAdminPermissions }\nexport type { AdminPermissionsState }\n"],"names":["AdminPermission","UPDATEABLE_PERMISSIONS","REJECT_REASONS","ADDRESS_REGEX","hasAnyAdminPermission","permissions","isValidWalletAddress","value","EMPTY","useAdminPermissions","identity","hasValidIdentity","useAuthIdentity","queryResult","useGetMyProfileSettingsQuery","skipToken","useMemo"],"mappings":"0MAEA,IAAKA,GAAAA,IACHA,EAAA,kBAAoB,oBACpBA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBACpBA,EAAA,iBAAmB,mBALhBA,IAAAA,GAAA,CAAA,CAAA,EAQL,MAAMC,EAAqD,CACzD,oBACA,oBACA,iBACA,kBACF,EAEMC,EAAiB,CAAC,gBAAiB,qBAAsB,4BAA6B,mBAAoB,kBAAkB,ECf5HC,EAAgB,sBAEhBC,EAAyBC,GAC7B,MAAM,QAAQA,CAAW,GAAKA,EAAY,OAAS,EAE/CC,EAAwBC,GAA2BJ,EAAc,KAAKI,EAAM,MAAM,ECYlFC,EAA2B,CAAA,EAEjC,SAASC,GAA6C,CACpD,KAAM,CAAE,SAAAC,EAAU,iBAAAC,CAAA,EAAqBC,EAAA,EACjCC,EAAcC,EAA6BH,GAAoBD,EAAW,CAAE,SAAAA,CAAA,EAAaK,CAAS,EAExG,OAAOC,EAAAA,QAAQ,IAAM,CACnB,MAAMX,EAAcM,EAAmBE,EAAY,MAAM,aAAeL,EAAQA,EAChF,MAAO,CACL,UAAWK,EAAY,UACvB,YAAaF,EACb,YAAAN,EACA,mBAAoBA,EAAY,SAASL,EAAgB,iBAAiB,EAC1E,mBAAoBK,EAAY,SAASL,EAAgB,iBAAiB,EAC1E,gBAAiBK,EAAY,SAASL,EAAgB,cAAc,EACpE,mBAAoBK,EAAY,SAASL,EAAgB,iBAAiB,EAC1E,kBAAmBK,EAAY,SAASL,EAAgB,gBAAgB,EACxE,QAASI,EAAsBC,CAAW,CAAA,CAE9C,EAAG,CAACM,EAAkBE,EAAY,KAAMA,EAAY,SAAS,CAAC,CAChE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as s}from"./vendor-router-D7SOoytt.js";import{u as d,d as i}from"./index-
|
|
1
|
+
import{r as s}from"./vendor-router-D7SOoytt.js";import{u as d,d as i}from"./index-BWvXRlTE.js";function u(){const{address:e}=d(),t=e||void 0,r=s.useMemo(()=>{if(t)try{return i.localStorageGetIdentity(t.toLowerCase())??void 0}catch(o){console.error("[useAuthIdentity] Failed to get identity:",o);return}},[t]);return{identity:r,hasValidIdentity:!!r,address:t}}export{u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthIdentity-
|
|
1
|
+
{"version":3,"file":"useAuthIdentity-B89tP4lt.js","sources":["../../src/hooks/useAuthIdentity.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { AuthIdentity } from '@dcl/crypto'\nimport { localStorageGetIdentity } from '@dcl/single-sign-on-client'\nimport { useWalletAddress } from './useWalletAddress'\n\ntype UseAuthIdentityResult = {\n identity: AuthIdentity | undefined\n hasValidIdentity: boolean\n address: `0x${string}` | undefined\n}\n\nfunction useAuthIdentity(): UseAuthIdentityResult {\n const { address } = useWalletAddress()\n const walletAddress = address ? (address as `0x${string}`) : undefined\n\n const identity = useMemo<AuthIdentity | undefined>(() => {\n if (!walletAddress) return undefined\n try {\n return localStorageGetIdentity(walletAddress.toLowerCase()) ?? undefined\n } catch (error) {\n console.error('[useAuthIdentity] Failed to get identity:', error)\n return undefined\n }\n }, [walletAddress])\n\n return {\n identity,\n hasValidIdentity: Boolean(identity),\n address: walletAddress\n }\n}\n\nexport { useAuthIdentity }\nexport type { UseAuthIdentityResult }\n"],"names":["useAuthIdentity","address","useWalletAddress","walletAddress","identity","useMemo","localStorageGetIdentity","error"],"mappings":"+FAWA,SAASA,GAAyC,CAChD,KAAM,CAAE,QAAAC,CAAA,EAAYC,EAAA,EACdC,EAAgBF,GAAuC,OAEvDG,EAAWC,EAAAA,QAAkC,IAAM,CACvD,GAAKF,EACL,GAAI,CACF,OAAOG,EAAAA,wBAAwBH,EAAc,YAAA,CAAa,GAAK,MACjE,OAASI,EAAO,CACd,QAAQ,MAAM,4CAA6CA,CAAK,EAChE,MACF,CACF,EAAG,CAACJ,CAAa,CAAC,EAElB,MAAO,CACL,SAAAC,EACA,iBAAkB,EAAQA,EAC1B,QAASD,CAAA,CAEb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as i,j as n,D as o,u}from"./index-BWvXRlTE.js";import{u as d}from"./useAdminPermissions-DtBORrGI.js";var e={},f=o;Object.defineProperty(e,"__esModule",{value:!0});var l=e.default=void 0,c=f(i()),v=n;l=e.default=(0,c.default)((0,v.jsx)("path",{d:"M17.77 3.77 16 2 6 12l10 10 1.77-1.77L9.54 12z"}),"ArrowBackIosNew");function m(a){const{address:t}=u(),{canEditAnyEvent:r,isLoading:s}=d();return s?{canEdit:!1,isLoading:!0}:r?{canEdit:!0,isLoading:!1}:!t||!a?{canEdit:!1,isLoading:!1}:{canEdit:t.toLowerCase()===a.toLowerCase(),isLoading:!1}}export{l as d,m as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCanEditEvent-BhQzxRgL.js","sources":["../../node_modules/@mui/icons-material/ArrowBackIosNew.js","../../src/hooks/useCanEditEvent.ts"],"sourcesContent":["\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17.77 3.77 16 2 6 12l10 10 1.77-1.77L9.54 12z\"\n}), 'ArrowBackIosNew');","import { useAdminPermissions } from './useAdminPermissions'\nimport { useWalletAddress } from './useWalletAddress'\n\ntype UseCanEditEventResult = {\n canEdit: boolean\n isLoading: boolean\n}\n\nfunction useCanEditEvent(creatorAddress: string | null | undefined): UseCanEditEventResult {\n const { address } = useWalletAddress()\n const { canEditAnyEvent, isLoading } = useAdminPermissions()\n\n if (isLoading) return { canEdit: false, isLoading: true }\n if (canEditAnyEvent) return { canEdit: true, isLoading: false }\n if (!address || !creatorAddress) return { canEdit: false, isLoading: false }\n return { canEdit: address.toLowerCase() === creatorAddress.toLowerCase(), isLoading: false }\n}\n\nexport { useCanEditEvent }\nexport type { UseCanEditEventResult }\n"],"names":["_interopRequireDefault","require$$0","ArrowBackIosNew","default_1","_createSvgIcon","require$$1","_jsxRuntime","require$$2","useCanEditEvent","creatorAddress","address","useWalletAddress","canEditAnyEvent","isLoading","useAdminPermissions"],"mappings":"uHAGIA,EAAyBC,EAC7B,OAAO,eAAeC,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACD,IAAAC,EAAAD,EAAA,QAAkB,OACdE,EAAiBJ,EAAuBK,GAAgC,EACxEC,EAAcC,EACHJ,EAAAD,EAAA,WAAsBE,EAAe,YAA2BE,EAAY,KAAK,OAAQ,CACtG,EAAG,gDACL,CAAC,EAAG,iBAAiB,ECJrB,SAASE,EAAgBC,EAAkE,CACzF,KAAM,CAAE,QAAAC,CAAA,EAAYC,EAAA,EACd,CAAE,gBAAAC,EAAiB,UAAAC,CAAA,EAAcC,EAAA,EAEvC,OAAID,EAAkB,CAAE,QAAS,GAAO,UAAW,EAAA,EAC/CD,EAAwB,CAAE,QAAS,GAAM,UAAW,EAAA,EACpD,CAACF,GAAW,CAACD,EAAuB,CAAE,QAAS,GAAO,UAAW,EAAA,EAC9D,CAAE,QAASC,EAAQ,YAAA,IAAkBD,EAAe,YAAA,EAAe,UAAW,EAAA,CACvF","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s,a as h,q as A,O as r,t as x,v as b}from"./index-
|
|
1
|
+
import{s,a as h,q as A,O as r,t as x,v as b}from"./index-BWvXRlTE.js";import{r as o}from"./vendor-router-D7SOoytt.js";import{t as O}from"./file-Cr_gl9BS.js";import{u as y,a as C}from"./url-BvNOSdx9.js";import{u as R,R as k}from"./useLatestGithubRelease-DRfAJTYG.js";const E=s("img")({width:"20px",height:"20px",filter:"brightness(0) invert(1)"}),I=s(h)({display:"flex",alignItems:"center",gap:"8px",marginTop:"8px",justifyContent:"center"}),U=s("span")({fontSize:"14px",color:"rgba(255, 255, 255, 0.7)"}),B=s("button")(({theme:l})=>({background:"none",border:"none",cursor:"pointer",padding:"4px",display:"flex",alignItems:"center",outline:"none","&:focus-visible":{outline:`2px solid ${l.palette.primary.main}`,outlineOffset:2}})),_=s("img")({width:"20px",height:"20px",filter:"brightness(0) invert(1)"}),w="/download/creator-hub-success",D=3e3,u={[r.WINDOWS]:b,[r.MACOS]:x};function j(){const[l,e]=A(),{links:t,loading:m}=R(k.CREATOR_HUB),a=o.useRef(null);o.useEffect(()=>()=>{a.current!==null&&clearTimeout(a.current)},[]);const p=!m&&!!t&&!l,d=o.useMemo(()=>!t||!e?null:e.os.name===r.MACOS?{text:r.MACOS,image:u[r.MACOS],link:t[r.MACOS]?.arm64||t[r.MACOS]?.amd64,arch:e.cpu.architecture}:t[e.os.name]?{text:e.os.name,image:u[e.os.name],link:t[e.os.name]?.[e.cpu.architecture],arch:e.cpu.architecture}:null,[e,t]),g=o.useMemo(()=>!t||!e?[]:Object.keys(t).filter(n=>n!==e.os.name).map(n=>{const i=t[n],c=Object.keys(i)[0];return{text:n,image:u[n],link:i?.[c],arch:c}}),[e,t]),f=o.useCallback(n=>{if(!n.link)return;a.current!==null&&(clearTimeout(a.current),a.current=null),O(n.link);const i=y(new URL(w,window.location.origin).toString(),"os",n.text),c=C(i,{arch:n.arch});a.current=setTimeout(()=>{window.location.href=c},D)},[]);return{isReady:p,primaryOption:d,secondaryOptions:g,handleDownload:f}}export{I as A,E as D,U as a,B as b,_ as c,j as u};
|
package/assets/{useCreatorHubDownload-Cqo_jiD_.js.map → useCreatorHubDownload-BI1AVMM2.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreatorHubDownload-
|
|
1
|
+
{"version":3,"file":"useCreatorHubDownload-BI1AVMM2.js","sources":["../../src/components/Create/DownloadButtons.styled.ts","../../src/hooks/useCreatorHubDownload.ts"],"sourcesContent":["import { Box, styled } from 'decentraland-ui2'\n\nconst DownloadButtonImage = styled('img')({\n width: '20px',\n height: '20px',\n filter: 'brightness(0) invert(1)'\n})\n\nconst AlsoAvailableContainer = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginTop: '8px',\n justifyContent: 'center'\n})\n\nconst AlsoAvailableText = styled('span')({\n fontSize: '14px',\n color: 'rgba(255, 255, 255, 0.7)'\n})\n\nconst AlternativeIconButton = styled('button')(({ theme }) => ({\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '4px',\n display: 'flex',\n alignItems: 'center',\n outline: 'none',\n ['&:focus-visible']: {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2\n }\n}))\n\nconst AlternativeButtonImage = styled('img')({\n width: '20px',\n height: '20px',\n filter: 'brightness(0) invert(1)'\n})\n\nexport { AlsoAvailableContainer, AlsoAvailableText, AlternativeButtonImage, AlternativeIconButton, DownloadButtonImage }\n","import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useAdvancedUserAgentData } from '@dcl/hooks'\nimport appleLogo from '../images/apple-logo.svg'\nimport microsoftLogo from '../images/microsoft-logo.svg'\nimport { triggerFileDownload } from '../modules/file'\nimport { addQueryParamsToUrlString, updateUrlWithLastValue } from '../modules/url'\nimport { OperativeSystem } from '../types/download.types'\nimport type { Architecture } from '../types/download.types'\nimport { Repo, useLatestGithubRelease } from './useLatestGithubRelease'\n\nconst REDIRECT_PATH = '/download/creator-hub-success'\nconst REDIRECT_DELAY_MS = 3000\n\ntype DownloadOption = {\n text: string\n image: string\n link?: string\n arch?: Architecture\n}\n\nconst imageByOs: Record<string, string> = {\n [OperativeSystem.WINDOWS]: microsoftLogo,\n [OperativeSystem.MACOS]: appleLogo\n}\n\nfunction useCreatorHubDownload() {\n const [isLoadingUserAgentData, userAgentData] = useAdvancedUserAgentData()\n const { links, loading: isLoadingLinks } = useLatestGithubRelease(Repo.CREATOR_HUB)\n const redirectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n return () => {\n if (redirectTimerRef.current !== null) {\n clearTimeout(redirectTimerRef.current)\n }\n }\n }, [])\n\n const isReady = !isLoadingLinks && !!links && !isLoadingUserAgentData\n\n const primaryOption: DownloadOption | null = useMemo(() => {\n if (!links || !userAgentData) return null\n\n if (userAgentData.os.name === OperativeSystem.MACOS) {\n return {\n text: OperativeSystem.MACOS,\n image: imageByOs[OperativeSystem.MACOS],\n link: links[OperativeSystem.MACOS]?.arm64 || links[OperativeSystem.MACOS]?.amd64,\n arch: userAgentData.cpu.architecture as Architecture\n }\n }\n\n if (links[userAgentData.os.name]) {\n return {\n text: userAgentData.os.name,\n image: imageByOs[userAgentData.os.name],\n link: links[userAgentData.os.name]?.[userAgentData.cpu.architecture],\n arch: userAgentData.cpu.architecture as Architecture\n }\n }\n\n return null\n }, [userAgentData, links])\n\n const secondaryOptions: DownloadOption[] = useMemo(() => {\n if (!links || !userAgentData) return []\n\n return Object.keys(links)\n .filter(os => os !== userAgentData.os.name)\n .map(os => {\n const osLinks = links[os]\n const firstArch = Object.keys(osLinks)[0]\n return {\n text: os,\n image: imageByOs[os],\n link: osLinks?.[firstArch],\n arch: firstArch as Architecture\n }\n })\n }, [userAgentData, links])\n\n const handleDownload = useCallback((option: DownloadOption) => {\n if (!option.link) return\n\n if (redirectTimerRef.current !== null) {\n clearTimeout(redirectTimerRef.current)\n redirectTimerRef.current = null\n }\n\n triggerFileDownload(option.link)\n\n const redirectUrl = updateUrlWithLastValue(new URL(REDIRECT_PATH, window.location.origin).toString(), 'os', option.text)\n const finalUrl = addQueryParamsToUrlString(redirectUrl, { arch: option.arch })\n redirectTimerRef.current = setTimeout(() => {\n window.location.href = finalUrl\n }, REDIRECT_DELAY_MS)\n }, [])\n\n return { isReady, primaryOption, secondaryOptions, handleDownload }\n}\n\nexport { useCreatorHubDownload }\nexport type { DownloadOption }\n"],"names":["DownloadButtonImage","styled","AlsoAvailableContainer","Box","AlsoAvailableText","AlternativeIconButton","theme","AlternativeButtonImage","REDIRECT_PATH","REDIRECT_DELAY_MS","imageByOs","OperativeSystem","microsoftLogo","appleLogo","useCreatorHubDownload","isLoadingUserAgentData","userAgentData","useAdvancedUserAgentData","links","isLoadingLinks","useLatestGithubRelease","Repo","redirectTimerRef","useRef","useEffect","isReady","primaryOption","useMemo","secondaryOptions","os","osLinks","firstArch","handleDownload","useCallback","option","triggerFileDownload","redirectUrl","updateUrlWithLastValue","finalUrl","addQueryParamsToUrlString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as r,a as g,j as t,w as E,X as I}from"./index-
|
|
1
|
+
import{s as r,a as g,j as t,w as E,X as I}from"./index-BWvXRlTE.js";import{r as a,L as B}from"./vendor-router-D7SOoytt.js";import{C as D,M,D as H,a as A,P as j}from"./PostCard-C61NfgmU.js";import{S as u}from"./Skeleton-CSFvCtu0.js";import"./vendor-ua-D7qqAxdq.js";import{g as _}from"./BlogLayout-Bvlb_hEZ.js";const F=({onLoadMore:e,hasMore:n,isLoading:o,threshold:s=500,debounceMs:p=500})=>{const d=a.useRef(e),i=a.useRef(0);a.useEffect(()=>{d.current=e},[e]),a.useEffect(()=>{const c=()=>{const f=Date.now();if(f-i.current<p)return;const l=document.documentElement.scrollHeight,m=document.documentElement.scrollTop,h=document.documentElement.clientHeight;l-(m+h)<s&&n&&!o&&(i.current=f,d.current())};window.addEventListener("scroll",c,{passive:!0});const x=setTimeout(c,500);return()=>{window.removeEventListener("scroll",c),clearTimeout(x)}},[n,o,s,p])},v=r(g)(()=>({width:"100%",margin:"0 40px 40px 0",position:"relative",display:"flex",justifyContent:"space-between","@media (max-width: 1096px)":{display:"none"}})),O=r("img")(()=>({objectFit:"cover",boxShadow:"0 2px 4px 0 rgba(0, 0, 0, 0.16)",borderRadius:"5px",width:"697px",height:"349px",marginRight:"31px",transition:"transform 250ms ease, box-shadow 250ms ease"})),P=r(g)({width:"335px"}),W=r(B)(({theme:e})=>({textDecoration:"none",display:"block",color:e.palette.text.primary,"& h2, & h3":{fontSize:"34px",lineHeight:"42px",color:e.palette.text.primary,fontWeight:500},"&:visited, &:link, &:active":{color:e.palette.text.primary},"& *":{color:e.palette.text.primary}})),$=r("p")(({theme:e})=>({display:"block",fontSize:"17px",lineHeight:"26px",letterSpacing:"-0.4px",margin:0,paddingTop:"8px",fontWeight:400,color:e.palette.text.primary})),z=r(g)(()=>({display:"flex",justifyContent:"space-between"})),Q=r(u)(()=>({width:"697px",height:"348px"})),G=r(u)(()=>({width:"100%",height:"40px"})),N=r(u)(()=>({width:"90%",height:"40px"})),k=r(u)(()=>({width:"100px"})),y=r(u)(()=>({width:"100%"})),X=r(u)(()=>({width:"80%"})),q=r(g)(({theme:e})=>({marginTop:e.spacing(2)})),C=e=>{const{post:n,loading:o}=e;return o?t.jsxs(v,{children:[t.jsx(Q,{variant:"rectangular"}),t.jsxs(P,{children:[t.jsxs(z,{children:[t.jsx(k,{variant:"text"}),t.jsx(k,{variant:"text"})]}),t.jsx(G,{variant:"text"}),t.jsx(N,{variant:"text"}),t.jsxs(q,{children:[t.jsx(y,{variant:"text"}),t.jsx(y,{variant:"text"}),t.jsx(y,{variant:"text"}),t.jsx(X,{variant:"text"})]})]})]}):n?t.jsxs(v,{children:[t.jsx(D,{to:n.url,children:t.jsx(O,{src:n.image.url,alt:n.title,width:697,height:349,fetchPriority:"high",decoding:"async"})}),t.jsxs(P,{children:[t.jsxs(M,{children:[t.jsx(H,{children:n.publishedDate}),t.jsx("span",{children:t.jsx(A,{to:n.category.url,children:n.category.title})})]}),t.jsx(W,{to:n.url,children:t.jsx(E,{variant:"h3",component:"h2",children:n.title})}),t.jsx($,{children:n.description})]})]}):null},T=r(g,{shouldForwardProp:e=>e!=="hasMainPost"})(({theme:e,hasMainPost:n})=>({display:"flex",flexWrap:"wrap",justifyContent:"flex-start",paddingBottom:e.spacing(2.5),"& > div:nth-of-type(3n)":{marginRight:e.spacing(4)},...n&&{"& > div:nth-of-type(3n + 1)":{marginRight:0}},...!n&&{"& > div:nth-of-type(3n + 3)":{marginRight:0}},"@media (max-width: 1096px)":{justifyContent:"space-between","& > div, & > div:nth-of-type(3n)":{marginRight:0}}})),w=e=>"isPlaceholder"in e&&e.isPlaceholder===!0,nt=a.memo(e=>{const{posts:n,loading:o,hasMainPost:s=!1}=e,p=I("(min-width: 1096px)");if(o&&n.length===0){const i=s?7:6;return t.jsxs(T,{hasMainPost:s,children:[s&&t.jsx(C,{loading:!0}),Array.from(Array(i),(c,x)=>s&&x===0?null:t.jsx(j,{loading:!0},`skeleton-${x}`))]})}if(!n||n.length===0)return null;const d=n.find(i=>!w(i));return t.jsxs(T,{hasMainPost:s,children:[s&&p&&d&&t.jsx(C,{post:d}),n.map(i=>s&&p&&!w(i)&&i===d?null:w(i)?t.jsx(j,{loading:!0},i.id):t.jsx(j,{post:i},i.id))]})}),J=7,R=6,K=(e,n)=>Array.from({length:e},(o,s)=>({id:`placeholder-${n}-${s}`,isPlaceholder:!0}));function it({category:e,author:n}={}){const[o,s]=a.useState(0),[p,d]=a.useState(!1),i=a.useRef(0),{data:c,isLoading:x,error:f,isFetching:l}=_({category:e,author:n,limit:o===0?J:R,skip:o}),m=a.useMemo(()=>{const S=c?.posts??[];return p&&l?[...S,...K(R,i.current)]:S},[c?.posts,p,l]),h=c?.hasMore??!0,L=x&&o===0;a.useEffect(()=>{s(0),d(!1),i.current=0},[e,n]),a.useEffect(()=>{l&&o>0?(i.current+=1,d(!0)):l||d(!1)},[l,o]);const b=a.useCallback(()=>{l||!h||!c||s(c.nextCmsSkip)},[l,h,c]);return F({onLoadMore:b,hasMore:h,isLoading:l}),{posts:m,isLoading:x,isLoadingInitial:L,isFetching:l,hasMore:h,error:f}}export{nt as P,it as u};
|
package/assets/{useInfiniteBlogPosts-DJkZrrll.js.map → useInfiniteBlogPosts-Dhb_txNw.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInfiniteBlogPosts-DJkZrrll.js","sources":["../../node_modules/@dcl/hooks/esm/hooks/useInfiniteScroll.js","../../src/components/blog/MainPostCard/MainPostCard.styled.ts","../../src/components/blog/MainPostCard/MainPostCard.tsx","../../src/components/blog/PostList/PostList.styled.ts","../../src/components/blog/PostList/PostList.tsx","../../src/features/blog/useInfiniteBlogPosts.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n/**\n * Hook to implement infinite scroll functionality\n * Triggers onLoadMore callback when user scrolls near the bottom of the page\n * @param options - Configuration options for infinite scroll\n * @param options.onLoadMore - Callback to trigger when user scrolls near the end\n * @param options.hasMore - Whether more data is available to load\n * @param options.isLoading - Whether data is currently loading\n * @param options.threshold - Distance from bottom (in pixels) to trigger load. Default: 500\n * @param options.debounceMs - Minimum time (in milliseconds) between triggers to prevent multiple calls. Default: 500\n */\nconst useInfiniteScroll = ({ onLoadMore, hasMore, isLoading, threshold = 500, debounceMs = 500, }) => {\n const onLoadMoreRef = useRef(onLoadMore);\n const lastTriggerRef = useRef(0);\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore;\n }, [onLoadMore]);\n useEffect(() => {\n const handleScroll = () => {\n const now = Date.now();\n if (now - lastTriggerRef.current < debounceMs) {\n return;\n }\n const scrollHeight = document.documentElement.scrollHeight;\n const scrollTop = document.documentElement.scrollTop;\n const clientHeight = document.documentElement.clientHeight;\n const distanceFromBottom = scrollHeight - (scrollTop + clientHeight);\n if (distanceFromBottom < threshold && hasMore && !isLoading) {\n lastTriggerRef.current = now;\n onLoadMoreRef.current();\n }\n };\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n const timeoutId = setTimeout(handleScroll, 500);\n return () => {\n window.removeEventListener(\"scroll\", handleScroll);\n clearTimeout(timeoutId);\n };\n }, [hasMore, isLoading, threshold, debounceMs]);\n};\nexport { useInfiniteScroll };\n//# sourceMappingURL=useInfiniteScroll.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Link } from 'react-router-dom'\nimport { Box, Skeleton, styled } from 'decentraland-ui2'\nimport { CardImageLink, CategoryLink, DateText, MetaBox } from '../shared/PostCard.styled'\n\nconst CardContainer = styled(Box)(() => ({\n width: '100%',\n margin: '0 40px 40px 0',\n position: 'relative',\n display: 'flex',\n justifyContent: 'space-between',\n '@media (max-width: 1096px)': {\n display: 'none'\n }\n}))\n\nconst CardImage = styled('img')(() => ({\n objectFit: 'cover',\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.16)',\n borderRadius: '5px',\n width: '697px',\n height: '349px',\n marginRight: '31px',\n transition: 'transform 250ms ease, box-shadow 250ms ease'\n}))\n\nconst CardInfo = styled(Box)({\n width: '335px'\n})\n\nconst TitleLink = styled(Link)(({ theme }) => ({\n textDecoration: 'none',\n display: 'block',\n color: theme.palette.text.primary,\n '& h2, & h3': {\n fontSize: '34px',\n lineHeight: '42px',\n color: theme.palette.text.primary,\n fontWeight: 500\n },\n '&:visited, &:link, &:active': {\n color: theme.palette.text.primary\n },\n '& *': {\n color: theme.palette.text.primary\n }\n}))\n\nconst Description = styled('p')(({ theme }) => ({\n display: 'block',\n fontSize: '17px',\n lineHeight: '26px',\n letterSpacing: '-0.4px',\n margin: 0,\n paddingTop: '8px',\n fontWeight: 400,\n color: theme.palette.text.primary\n}))\n\nconst LoadingHeader = styled(Box)(() => ({\n display: 'flex',\n justifyContent: 'space-between'\n}))\n\nconst LoadingImage = styled(Skeleton)(() => ({\n width: '697px',\n height: '348px'\n}))\n\nconst LoadingTitleLine = styled(Skeleton)(() => ({\n width: '100%',\n height: '40px'\n}))\n\nconst LoadingTitleLineShort = styled(Skeleton)(() => ({\n width: '90%',\n height: '40px'\n}))\n\nconst LoadingMetaSkeleton = styled(Skeleton)(() => ({\n width: '100px'\n}))\n\nconst LoadingTextSkeleton = styled(Skeleton)(() => ({\n width: '100%'\n}))\n\nconst LoadingTextSkeletonShort = styled(Skeleton)(() => ({\n width: '80%'\n}))\n\nconst LoadingContentBox = styled(Box)(({ theme }) => ({\n marginTop: theme.spacing(2)\n}))\n\nexport {\n CardContainer,\n CardImage,\n CardImageLink,\n CardInfo,\n CategoryLink,\n DateText,\n Description,\n LoadingContentBox,\n LoadingHeader,\n LoadingImage,\n LoadingMetaSkeleton,\n LoadingTextSkeleton,\n LoadingTextSkeletonShort,\n LoadingTitleLine,\n LoadingTitleLineShort,\n MetaBox,\n TitleLink\n}\n","import { Typography } from 'decentraland-ui2'\nimport type { MainPostCardProps } from './MainPostCard.types'\nimport {\n CardContainer,\n CardImage,\n CardImageLink,\n CardInfo,\n CategoryLink,\n DateText,\n Description,\n LoadingContentBox,\n LoadingHeader,\n LoadingImage,\n LoadingMetaSkeleton,\n LoadingTextSkeleton,\n LoadingTextSkeletonShort,\n LoadingTitleLine,\n LoadingTitleLineShort,\n MetaBox,\n TitleLink\n} from './MainPostCard.styled'\n\nconst MainPostCard = (props: MainPostCardProps) => {\n const { post, loading } = props\n\n if (loading) {\n return (\n <CardContainer>\n <LoadingImage variant=\"rectangular\" />\n <CardInfo>\n <LoadingHeader>\n <LoadingMetaSkeleton variant=\"text\" />\n <LoadingMetaSkeleton variant=\"text\" />\n </LoadingHeader>\n <LoadingTitleLine variant=\"text\" />\n <LoadingTitleLineShort variant=\"text\" />\n <LoadingContentBox>\n <LoadingTextSkeleton variant=\"text\" />\n <LoadingTextSkeleton variant=\"text\" />\n <LoadingTextSkeleton variant=\"text\" />\n <LoadingTextSkeletonShort variant=\"text\" />\n </LoadingContentBox>\n </CardInfo>\n </CardContainer>\n )\n }\n\n if (!post) return null\n\n return (\n <CardContainer>\n <CardImageLink to={post.url}>\n <CardImage src={post.image.url} alt={post.title} width={697} height={349} fetchPriority=\"high\" decoding=\"async\" />\n </CardImageLink>\n <CardInfo>\n <MetaBox>\n <DateText>{post.publishedDate}</DateText>\n <span>\n <CategoryLink to={post.category.url}>{post.category.title}</CategoryLink>\n </span>\n </MetaBox>\n <TitleLink to={post.url}>\n <Typography variant=\"h3\" component=\"h2\">\n {post.title}\n </Typography>\n </TitleLink>\n <Description>{post.description}</Description>\n </CardInfo>\n </CardContainer>\n )\n}\n\nexport { MainPostCard }\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Box, styled } from 'decentraland-ui2'\n\nconst PostListWrapper = styled(Box, { shouldForwardProp: prop => prop !== 'hasMainPost' })<{ hasMainPost: boolean }>(\n ({ theme, hasMainPost }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'flex-start',\n paddingBottom: theme.spacing(2.5),\n '& > div:nth-of-type(3n)': {\n marginRight: theme.spacing(4)\n },\n ...(hasMainPost && {\n '& > div:nth-of-type(3n + 1)': {\n marginRight: 0\n }\n }),\n ...(!hasMainPost && {\n '& > div:nth-of-type(3n + 3)': {\n marginRight: 0\n }\n }),\n '@media (max-width: 1096px)': {\n justifyContent: 'space-between',\n '& > div, & > div:nth-of-type(3n)': {\n marginRight: 0\n }\n }\n })\n)\n\nexport { PostListWrapper }\n","import { memo } from 'react'\nimport { useMediaQuery } from 'decentraland-ui2'\nimport type { BlogPost } from '../../../shared/blog/types/blog.domain'\nimport { MainPostCard } from '../MainPostCard'\nimport { PostCard } from '../PostCard'\nimport type { PostListProps } from './PostList.types'\nimport { PostListWrapper } from './PostList.styled'\n\n// Type guard to check if a post is a placeholder\nconst isPlaceholder = (post: { id: string; isPlaceholder?: boolean }): post is { id: string; isPlaceholder: true } => {\n return 'isPlaceholder' in post && post.isPlaceholder === true\n}\n\nconst PostList = memo((props: PostListProps) => {\n const { posts, loading, hasMainPost = false } = props\n const isBigScreen = useMediaQuery('(min-width: 1096px)')\n\n // Initial loading with no posts at all\n if (loading && posts.length === 0) {\n const count = hasMainPost ? 7 : 6\n\n return (\n <PostListWrapper hasMainPost={hasMainPost}>\n {hasMainPost && <MainPostCard loading />}\n {Array.from(Array(count), (_, index) => {\n if (hasMainPost && index === 0) {\n return null // MainPostCard already rendered\n }\n return <PostCard key={`skeleton-${index}`} loading />\n })}\n </PostListWrapper>\n )\n }\n\n if (!posts || posts.length === 0) {\n return null\n }\n\n // Get first real post for MainPostCard (if applicable)\n const firstRealPost = posts.find(p => !isPlaceholder(p)) as BlogPost | undefined\n\n return (\n <PostListWrapper hasMainPost={hasMainPost}>\n {hasMainPost && isBigScreen && firstRealPost && <MainPostCard post={firstRealPost} />}\n {posts.map(post => {\n // Skip the first real post if we're showing it as MainPostCard\n if (hasMainPost && isBigScreen && !isPlaceholder(post) && post === firstRealPost) {\n return null\n }\n\n // Render placeholder as loading skeleton\n if (isPlaceholder(post)) {\n return <PostCard key={post.id} loading />\n }\n\n return <PostCard key={post.id} post={post} />\n })}\n </PostListWrapper>\n )\n})\n\nexport { PostList }\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useInfiniteScroll } from '@dcl/hooks'\nimport type { PostOrPlaceholder } from '../../shared/blog/types/blog.domain'\nimport { useGetBlogPostsQuery } from './blog.client'\n\nconst POSTS_INITIAL_LOAD = 7\nconst POSTS_PER_LOAD = 6\n\ninterface UseInfiniteBlogPostsParams {\n category?: string\n author?: string\n}\n\ninterface UseInfiniteBlogPostsResult {\n posts: PostOrPlaceholder[]\n isLoading: boolean\n isLoadingInitial: boolean\n isFetching: boolean\n hasMore: boolean\n error: unknown\n}\n\n// Helper to create placeholder posts\nconst createPlaceholders = (count: number, batchId: number): PostOrPlaceholder[] => {\n return Array.from({ length: count }, (_, i) => ({\n id: `placeholder-${batchId}-${i}`,\n isPlaceholder: true as const\n }))\n}\n\nfunction useInfiniteBlogPosts({ category, author }: UseInfiniteBlogPostsParams = {}): UseInfiniteBlogPostsResult {\n const [currentSkip, setCurrentSkip] = useState(0)\n const [showPlaceholders, setShowPlaceholders] = useState(false)\n const batchIdRef = useRef(0)\n\n // Use RTK Query with pagination - cache handles accumulation via merge\n // Backend handles category/author filtering, so we request real page sizes\n const { data, isLoading, error, isFetching } = useGetBlogPostsQuery({\n category,\n author,\n limit: currentSkip === 0 ? POSTS_INITIAL_LOAD : POSTS_PER_LOAD,\n skip: currentSkip\n })\n\n // Build display posts: cached posts + placeholders when loading more\n const displayPosts = useMemo<PostOrPlaceholder[]>(() => {\n const posts = data?.posts ?? []\n if (showPlaceholders && isFetching) {\n return [...posts, ...createPlaceholders(POSTS_PER_LOAD, batchIdRef.current)]\n }\n return posts\n }, [data?.posts, showPlaceholders, isFetching])\n\n const hasMore = data?.hasMore ?? true\n const isLoadingInitial = isLoading && currentSkip === 0\n\n // Reset skip when filters change\n useEffect(() => {\n setCurrentSkip(0)\n setShowPlaceholders(false)\n batchIdRef.current = 0\n }, [category, author])\n\n // Show placeholders when fetching more (not initial)\n useEffect(() => {\n if (isFetching && currentSkip > 0) {\n batchIdRef.current += 1\n setShowPlaceholders(true)\n } else if (!isFetching) {\n setShowPlaceholders(false)\n }\n }, [isFetching, currentSkip])\n\n // Load more function - use nextCmsSkip to properly paginate\n const loadMore = useCallback(() => {\n if (isFetching || !hasMore || !data) {\n return\n }\n // Use the CMS-level skip for proper pagination\n setCurrentSkip(data.nextCmsSkip)\n }, [isFetching, hasMore, data])\n\n // Use @dcl/hooks infinite scroll\n useInfiniteScroll({\n onLoadMore: loadMore,\n hasMore,\n isLoading: isFetching\n })\n\n return {\n posts: displayPosts,\n isLoading,\n isLoadingInitial,\n isFetching,\n hasMore,\n error\n }\n}\n\nexport { useInfiniteBlogPosts, type UseInfiniteBlogPostsParams, type UseInfiniteBlogPostsResult }\n"],"names":["useInfiniteScroll","onLoadMore","hasMore","isLoading","threshold","debounceMs","onLoadMoreRef","useRef","lastTriggerRef","useEffect","handleScroll","now","scrollHeight","scrollTop","clientHeight","timeoutId","CardContainer","styled","Box","CardImage","CardInfo","TitleLink","Link","theme","Description","LoadingHeader","LoadingImage","Skeleton","LoadingTitleLine","LoadingTitleLineShort","LoadingMetaSkeleton","LoadingTextSkeleton","LoadingTextSkeletonShort","LoadingContentBox","MainPostCard","props","post","loading","jsx","jsxs","CardImageLink","MetaBox","DateText","CategoryLink","Typography","PostListWrapper","prop","hasMainPost","isPlaceholder","PostList","memo","posts","isBigScreen","useMediaQuery","count","_","index","PostCard","firstRealPost","p","POSTS_INITIAL_LOAD","POSTS_PER_LOAD","createPlaceholders","batchId","i","useInfiniteBlogPosts","category","author","currentSkip","setCurrentSkip","useState","showPlaceholders","setShowPlaceholders","batchIdRef","data","error","isFetching","useGetBlogPostsQuery","displayPosts","useMemo","isLoadingInitial","loadMore","useCallback"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"useInfiniteBlogPosts-Dhb_txNw.js","sources":["../../node_modules/@dcl/hooks/esm/hooks/useInfiniteScroll.js","../../src/components/blog/MainPostCard/MainPostCard.styled.ts","../../src/components/blog/MainPostCard/MainPostCard.tsx","../../src/components/blog/PostList/PostList.styled.ts","../../src/components/blog/PostList/PostList.tsx","../../src/features/blog/useInfiniteBlogPosts.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n/**\n * Hook to implement infinite scroll functionality\n * Triggers onLoadMore callback when user scrolls near the bottom of the page\n * @param options - Configuration options for infinite scroll\n * @param options.onLoadMore - Callback to trigger when user scrolls near the end\n * @param options.hasMore - Whether more data is available to load\n * @param options.isLoading - Whether data is currently loading\n * @param options.threshold - Distance from bottom (in pixels) to trigger load. Default: 500\n * @param options.debounceMs - Minimum time (in milliseconds) between triggers to prevent multiple calls. Default: 500\n */\nconst useInfiniteScroll = ({ onLoadMore, hasMore, isLoading, threshold = 500, debounceMs = 500, }) => {\n const onLoadMoreRef = useRef(onLoadMore);\n const lastTriggerRef = useRef(0);\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore;\n }, [onLoadMore]);\n useEffect(() => {\n const handleScroll = () => {\n const now = Date.now();\n if (now - lastTriggerRef.current < debounceMs) {\n return;\n }\n const scrollHeight = document.documentElement.scrollHeight;\n const scrollTop = document.documentElement.scrollTop;\n const clientHeight = document.documentElement.clientHeight;\n const distanceFromBottom = scrollHeight - (scrollTop + clientHeight);\n if (distanceFromBottom < threshold && hasMore && !isLoading) {\n lastTriggerRef.current = now;\n onLoadMoreRef.current();\n }\n };\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n const timeoutId = setTimeout(handleScroll, 500);\n return () => {\n window.removeEventListener(\"scroll\", handleScroll);\n clearTimeout(timeoutId);\n };\n }, [hasMore, isLoading, threshold, debounceMs]);\n};\nexport { useInfiniteScroll };\n//# sourceMappingURL=useInfiniteScroll.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Link } from 'react-router-dom'\nimport { Box, Skeleton, styled } from 'decentraland-ui2'\nimport { CardImageLink, CategoryLink, DateText, MetaBox } from '../shared/PostCard.styled'\n\nconst CardContainer = styled(Box)(() => ({\n width: '100%',\n margin: '0 40px 40px 0',\n position: 'relative',\n display: 'flex',\n justifyContent: 'space-between',\n '@media (max-width: 1096px)': {\n display: 'none'\n }\n}))\n\nconst CardImage = styled('img')(() => ({\n objectFit: 'cover',\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.16)',\n borderRadius: '5px',\n width: '697px',\n height: '349px',\n marginRight: '31px',\n transition: 'transform 250ms ease, box-shadow 250ms ease'\n}))\n\nconst CardInfo = styled(Box)({\n width: '335px'\n})\n\nconst TitleLink = styled(Link)(({ theme }) => ({\n textDecoration: 'none',\n display: 'block',\n color: theme.palette.text.primary,\n '& h2, & h3': {\n fontSize: '34px',\n lineHeight: '42px',\n color: theme.palette.text.primary,\n fontWeight: 500\n },\n '&:visited, &:link, &:active': {\n color: theme.palette.text.primary\n },\n '& *': {\n color: theme.palette.text.primary\n }\n}))\n\nconst Description = styled('p')(({ theme }) => ({\n display: 'block',\n fontSize: '17px',\n lineHeight: '26px',\n letterSpacing: '-0.4px',\n margin: 0,\n paddingTop: '8px',\n fontWeight: 400,\n color: theme.palette.text.primary\n}))\n\nconst LoadingHeader = styled(Box)(() => ({\n display: 'flex',\n justifyContent: 'space-between'\n}))\n\nconst LoadingImage = styled(Skeleton)(() => ({\n width: '697px',\n height: '348px'\n}))\n\nconst LoadingTitleLine = styled(Skeleton)(() => ({\n width: '100%',\n height: '40px'\n}))\n\nconst LoadingTitleLineShort = styled(Skeleton)(() => ({\n width: '90%',\n height: '40px'\n}))\n\nconst LoadingMetaSkeleton = styled(Skeleton)(() => ({\n width: '100px'\n}))\n\nconst LoadingTextSkeleton = styled(Skeleton)(() => ({\n width: '100%'\n}))\n\nconst LoadingTextSkeletonShort = styled(Skeleton)(() => ({\n width: '80%'\n}))\n\nconst LoadingContentBox = styled(Box)(({ theme }) => ({\n marginTop: theme.spacing(2)\n}))\n\nexport {\n CardContainer,\n CardImage,\n CardImageLink,\n CardInfo,\n CategoryLink,\n DateText,\n Description,\n LoadingContentBox,\n LoadingHeader,\n LoadingImage,\n LoadingMetaSkeleton,\n LoadingTextSkeleton,\n LoadingTextSkeletonShort,\n LoadingTitleLine,\n LoadingTitleLineShort,\n MetaBox,\n TitleLink\n}\n","import { Typography } from 'decentraland-ui2'\nimport type { MainPostCardProps } from './MainPostCard.types'\nimport {\n CardContainer,\n CardImage,\n CardImageLink,\n CardInfo,\n CategoryLink,\n DateText,\n Description,\n LoadingContentBox,\n LoadingHeader,\n LoadingImage,\n LoadingMetaSkeleton,\n LoadingTextSkeleton,\n LoadingTextSkeletonShort,\n LoadingTitleLine,\n LoadingTitleLineShort,\n MetaBox,\n TitleLink\n} from './MainPostCard.styled'\n\nconst MainPostCard = (props: MainPostCardProps) => {\n const { post, loading } = props\n\n if (loading) {\n return (\n <CardContainer>\n <LoadingImage variant=\"rectangular\" />\n <CardInfo>\n <LoadingHeader>\n <LoadingMetaSkeleton variant=\"text\" />\n <LoadingMetaSkeleton variant=\"text\" />\n </LoadingHeader>\n <LoadingTitleLine variant=\"text\" />\n <LoadingTitleLineShort variant=\"text\" />\n <LoadingContentBox>\n <LoadingTextSkeleton variant=\"text\" />\n <LoadingTextSkeleton variant=\"text\" />\n <LoadingTextSkeleton variant=\"text\" />\n <LoadingTextSkeletonShort variant=\"text\" />\n </LoadingContentBox>\n </CardInfo>\n </CardContainer>\n )\n }\n\n if (!post) return null\n\n return (\n <CardContainer>\n <CardImageLink to={post.url}>\n <CardImage src={post.image.url} alt={post.title} width={697} height={349} fetchPriority=\"high\" decoding=\"async\" />\n </CardImageLink>\n <CardInfo>\n <MetaBox>\n <DateText>{post.publishedDate}</DateText>\n <span>\n <CategoryLink to={post.category.url}>{post.category.title}</CategoryLink>\n </span>\n </MetaBox>\n <TitleLink to={post.url}>\n <Typography variant=\"h3\" component=\"h2\">\n {post.title}\n </Typography>\n </TitleLink>\n <Description>{post.description}</Description>\n </CardInfo>\n </CardContainer>\n )\n}\n\nexport { MainPostCard }\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Box, styled } from 'decentraland-ui2'\n\nconst PostListWrapper = styled(Box, { shouldForwardProp: prop => prop !== 'hasMainPost' })<{ hasMainPost: boolean }>(\n ({ theme, hasMainPost }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'flex-start',\n paddingBottom: theme.spacing(2.5),\n '& > div:nth-of-type(3n)': {\n marginRight: theme.spacing(4)\n },\n ...(hasMainPost && {\n '& > div:nth-of-type(3n + 1)': {\n marginRight: 0\n }\n }),\n ...(!hasMainPost && {\n '& > div:nth-of-type(3n + 3)': {\n marginRight: 0\n }\n }),\n '@media (max-width: 1096px)': {\n justifyContent: 'space-between',\n '& > div, & > div:nth-of-type(3n)': {\n marginRight: 0\n }\n }\n })\n)\n\nexport { PostListWrapper }\n","import { memo } from 'react'\nimport { useMediaQuery } from 'decentraland-ui2'\nimport type { BlogPost } from '../../../shared/blog/types/blog.domain'\nimport { MainPostCard } from '../MainPostCard'\nimport { PostCard } from '../PostCard'\nimport type { PostListProps } from './PostList.types'\nimport { PostListWrapper } from './PostList.styled'\n\n// Type guard to check if a post is a placeholder\nconst isPlaceholder = (post: { id: string; isPlaceholder?: boolean }): post is { id: string; isPlaceholder: true } => {\n return 'isPlaceholder' in post && post.isPlaceholder === true\n}\n\nconst PostList = memo((props: PostListProps) => {\n const { posts, loading, hasMainPost = false } = props\n const isBigScreen = useMediaQuery('(min-width: 1096px)')\n\n // Initial loading with no posts at all\n if (loading && posts.length === 0) {\n const count = hasMainPost ? 7 : 6\n\n return (\n <PostListWrapper hasMainPost={hasMainPost}>\n {hasMainPost && <MainPostCard loading />}\n {Array.from(Array(count), (_, index) => {\n if (hasMainPost && index === 0) {\n return null // MainPostCard already rendered\n }\n return <PostCard key={`skeleton-${index}`} loading />\n })}\n </PostListWrapper>\n )\n }\n\n if (!posts || posts.length === 0) {\n return null\n }\n\n // Get first real post for MainPostCard (if applicable)\n const firstRealPost = posts.find(p => !isPlaceholder(p)) as BlogPost | undefined\n\n return (\n <PostListWrapper hasMainPost={hasMainPost}>\n {hasMainPost && isBigScreen && firstRealPost && <MainPostCard post={firstRealPost} />}\n {posts.map(post => {\n // Skip the first real post if we're showing it as MainPostCard\n if (hasMainPost && isBigScreen && !isPlaceholder(post) && post === firstRealPost) {\n return null\n }\n\n // Render placeholder as loading skeleton\n if (isPlaceholder(post)) {\n return <PostCard key={post.id} loading />\n }\n\n return <PostCard key={post.id} post={post} />\n })}\n </PostListWrapper>\n )\n})\n\nexport { PostList }\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useInfiniteScroll } from '@dcl/hooks'\nimport type { PostOrPlaceholder } from '../../shared/blog/types/blog.domain'\nimport { useGetBlogPostsQuery } from './blog.client'\n\nconst POSTS_INITIAL_LOAD = 7\nconst POSTS_PER_LOAD = 6\n\ninterface UseInfiniteBlogPostsParams {\n category?: string\n author?: string\n}\n\ninterface UseInfiniteBlogPostsResult {\n posts: PostOrPlaceholder[]\n isLoading: boolean\n isLoadingInitial: boolean\n isFetching: boolean\n hasMore: boolean\n error: unknown\n}\n\n// Helper to create placeholder posts\nconst createPlaceholders = (count: number, batchId: number): PostOrPlaceholder[] => {\n return Array.from({ length: count }, (_, i) => ({\n id: `placeholder-${batchId}-${i}`,\n isPlaceholder: true as const\n }))\n}\n\nfunction useInfiniteBlogPosts({ category, author }: UseInfiniteBlogPostsParams = {}): UseInfiniteBlogPostsResult {\n const [currentSkip, setCurrentSkip] = useState(0)\n const [showPlaceholders, setShowPlaceholders] = useState(false)\n const batchIdRef = useRef(0)\n\n // Use RTK Query with pagination - cache handles accumulation via merge\n // Backend handles category/author filtering, so we request real page sizes\n const { data, isLoading, error, isFetching } = useGetBlogPostsQuery({\n category,\n author,\n limit: currentSkip === 0 ? POSTS_INITIAL_LOAD : POSTS_PER_LOAD,\n skip: currentSkip\n })\n\n // Build display posts: cached posts + placeholders when loading more\n const displayPosts = useMemo<PostOrPlaceholder[]>(() => {\n const posts = data?.posts ?? []\n if (showPlaceholders && isFetching) {\n return [...posts, ...createPlaceholders(POSTS_PER_LOAD, batchIdRef.current)]\n }\n return posts\n }, [data?.posts, showPlaceholders, isFetching])\n\n const hasMore = data?.hasMore ?? true\n const isLoadingInitial = isLoading && currentSkip === 0\n\n // Reset skip when filters change\n useEffect(() => {\n setCurrentSkip(0)\n setShowPlaceholders(false)\n batchIdRef.current = 0\n }, [category, author])\n\n // Show placeholders when fetching more (not initial)\n useEffect(() => {\n if (isFetching && currentSkip > 0) {\n batchIdRef.current += 1\n setShowPlaceholders(true)\n } else if (!isFetching) {\n setShowPlaceholders(false)\n }\n }, [isFetching, currentSkip])\n\n // Load more function - use nextCmsSkip to properly paginate\n const loadMore = useCallback(() => {\n if (isFetching || !hasMore || !data) {\n return\n }\n // Use the CMS-level skip for proper pagination\n setCurrentSkip(data.nextCmsSkip)\n }, [isFetching, hasMore, data])\n\n // Use @dcl/hooks infinite scroll\n useInfiniteScroll({\n onLoadMore: loadMore,\n hasMore,\n isLoading: isFetching\n })\n\n return {\n posts: displayPosts,\n isLoading,\n isLoadingInitial,\n isFetching,\n hasMore,\n error\n }\n}\n\nexport { useInfiniteBlogPosts, type UseInfiniteBlogPostsParams, type UseInfiniteBlogPostsResult }\n"],"names":["useInfiniteScroll","onLoadMore","hasMore","isLoading","threshold","debounceMs","onLoadMoreRef","useRef","lastTriggerRef","useEffect","handleScroll","now","scrollHeight","scrollTop","clientHeight","timeoutId","CardContainer","styled","Box","CardImage","CardInfo","TitleLink","Link","theme","Description","LoadingHeader","LoadingImage","Skeleton","LoadingTitleLine","LoadingTitleLineShort","LoadingMetaSkeleton","LoadingTextSkeleton","LoadingTextSkeletonShort","LoadingContentBox","MainPostCard","props","post","loading","jsx","jsxs","CardImageLink","MetaBox","DateText","CategoryLink","Typography","PostListWrapper","prop","hasMainPost","isPlaceholder","PostList","memo","posts","isBigScreen","useMediaQuery","count","_","index","PostCard","firstRealPost","p","POSTS_INITIAL_LOAD","POSTS_PER_LOAD","createPlaceholders","batchId","i","useInfiniteBlogPosts","category","author","currentSkip","setCurrentSkip","useState","showPlaceholders","setShowPlaceholders","batchIdRef","data","error","isFetching","useGetBlogPostsQuery","displayPosts","useMemo","isLoadingInitial","loadMore","useCallback"],"mappings":"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","x_google_ignoreList":[0]}
|