@dcl/landing-site 0.5.1-24686484792.commit-e56f2bf → 0.5.1-24696786650.commit-39f76cb

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.
Files changed (187) hide show
  1. package/assets/{AnimatedBackground-BbbuCmrW.js → AnimatedBackground-ChAxvzpE.js} +2 -2
  2. package/assets/{AnimatedBackground-BbbuCmrW.js.map → AnimatedBackground-ChAxvzpE.js.map} +1 -1
  3. package/assets/{AnimatedSection-CcAt5h6R.js → AnimatedSection-BTD2Dz_H.js} +1 -1
  4. package/assets/{AnimatedSection-CcAt5h6R.js.map → AnimatedSection-BTD2Dz_H.js.map} +1 -1
  5. package/assets/{ArrowBackIosNew-lqzUFZQL.js → ArrowBackIosNew-Dy0wgUVY.js} +1 -1
  6. package/assets/{ArrowBackIosNew-lqzUFZQL.js.map → ArrowBackIosNew-Dy0wgUVY.js.map} +1 -1
  7. package/assets/{AuthorPage-4inFQH2X.js → AuthorPage-Byuf4cVh.js} +1 -1
  8. package/assets/{AuthorPage-4inFQH2X.js.map → AuthorPage-Byuf4cVh.js.map} +1 -1
  9. package/assets/{Badges-DPcq_7dC.js → Badges-MRoIfo36.js} +1 -1
  10. package/assets/{Badges-DPcq_7dC.js.map → Badges-MRoIfo36.js.map} +1 -1
  11. package/assets/{BlogLayout-Bl9FID_L.js → BlogLayout-zeqeF6P_.js} +1 -1
  12. package/assets/{BlogLayout-Bl9FID_L.js.map → BlogLayout-zeqeF6P_.js.map} +1 -1
  13. package/assets/{BlogPage-4c8ZFzdw.js → BlogPage-D9JUOgNf.js} +1 -1
  14. package/assets/{BlogPage-4c8ZFzdw.js.map → BlogPage-D9JUOgNf.js.map} +1 -1
  15. package/assets/{CTAButton-D8_9d6Wu.js → CTAButton-dUbnAFrF.js} +1 -1
  16. package/assets/{CTAButton-D8_9d6Wu.js.map → CTAButton-dUbnAFrF.js.map} +1 -1
  17. package/assets/{CardContent-BQ0iSa2p.js → CardContent-C2Yp8bGg.js} +1 -1
  18. package/assets/{CardContent-BQ0iSa2p.js.map → CardContent-C2Yp8bGg.js.map} +1 -1
  19. package/assets/{CardMedia-B6PneSTk.js → CardMedia-B8io6l5d.js} +1 -1
  20. package/assets/{CardMedia-B6PneSTk.js.map → CardMedia-B8io6l5d.js.map} +1 -1
  21. package/assets/{Carousel-DJd7E-wq.js → Carousel-8PM_J7Qk.js} +1 -1
  22. package/assets/{Carousel-DJd7E-wq.js.map → Carousel-8PM_J7Qk.js.map} +1 -1
  23. package/assets/{CategoryPage-DNQI3nXz.js → CategoryPage-BgijBlf0.js} +1 -1
  24. package/assets/{CategoryPage-DNQI3nXz.js.map → CategoryPage-BgijBlf0.js.map} +1 -1
  25. package/assets/{CircleAndArrow-DIeWRbH9.js → CircleAndArrow-DeiiAyu0.js} +1 -1
  26. package/assets/{CircleAndArrow-DIeWRbH9.js.map → CircleAndArrow-DeiiAyu0.js.map} +1 -1
  27. package/assets/{CircularProgress-AsNM1BvH.js → CircularProgress-COCfVUkZ.js} +1 -1
  28. package/assets/{CircularProgress-AsNM1BvH.js.map → CircularProgress-COCfVUkZ.js.map} +1 -1
  29. package/assets/{ContentCopy-CDhBZqHF.js → ContentCopy-D1MZhJvE.js} +1 -1
  30. package/assets/{ContentCopy-CDhBZqHF.js.map → ContentCopy-D1MZhJvE.js.map} +1 -1
  31. package/assets/{CreateEventPage-NcQUT47j.js → CreateEventPage-hChmRJMr.js} +1 -1
  32. package/assets/CreateEventPage-hChmRJMr.js.map +1 -0
  33. package/assets/{CreatorHubDownload-y9x_B8ll.js → CreatorHubDownload-DYMGdevm.js} +1 -1
  34. package/assets/{CreatorHubDownload-y9x_B8ll.js.map → CreatorHubDownload-DYMGdevm.js.map} +1 -1
  35. package/assets/{CreatorHubDownloadSuccess-BP7MSbSp.js → CreatorHubDownloadSuccess-B_jSl9tg.js} +1 -1
  36. package/assets/{CreatorHubDownloadSuccess-BP7MSbSp.js.map → CreatorHubDownloadSuccess-B_jSl9tg.js.map} +1 -1
  37. package/assets/{DappsShell-HNAsXcn5.js → DappsShell-BicDTonr.js} +1 -1
  38. package/assets/{DappsShell-HNAsXcn5.js.map → DappsShell-BicDTonr.js.map} +1 -1
  39. package/assets/{DownloadSuccessLayout-COBp7A1N.js → DownloadSuccessLayout-CqT-1vfy.js} +1 -1
  40. package/assets/{DownloadSuccessLayout-COBp7A1N.js.map → DownloadSuccessLayout-CqT-1vfy.js.map} +1 -1
  41. package/assets/{Grow-eKASrvPe.js → Grow-BrqQ3k5X.js} +1 -1
  42. package/assets/{Grow-eKASrvPe.js.map → Grow-BrqQ3k5X.js.map} +1 -1
  43. package/assets/HomePage-BZg04XAY.js +3 -0
  44. package/assets/HomePage-BZg04XAY.js.map +1 -0
  45. package/assets/{InviteFaqs-BkOvxqyN.js → InviteFaqs-CsVkWLzg.js} +1 -1
  46. package/assets/{InviteFaqs-BkOvxqyN.js.map → InviteFaqs-CsVkWLzg.js.map} +1 -1
  47. package/assets/{InvitePage-D5lELZNP.js → InvitePage-BDekb47F.js} +2 -2
  48. package/assets/{InvitePage-D5lELZNP.js.map → InvitePage-BDekb47F.js.map} +1 -1
  49. package/assets/{JumpInIcon-bPOWl5ae.js → JumpInIcon-TFxEXFSr.js} +1 -1
  50. package/assets/{JumpInIcon-bPOWl5ae.js.map → JumpInIcon-TFxEXFSr.js.map} +1 -1
  51. package/assets/{LegalPageLayout-DeH35WpT.js → LegalPageLayout-DpJoq1IM.js} +1 -1
  52. package/assets/{LegalPageLayout-DeH35WpT.js.map → LegalPageLayout-DpJoq1IM.js.map} +1 -1
  53. package/assets/{Link-C3GGl2C6.js → Link-Knt-Kosk.js} +1 -1
  54. package/assets/{Link-C3GGl2C6.js.map → Link-Knt-Kosk.js.map} +1 -1
  55. package/assets/{MenuItem-B0piwgTa.js → MenuItem-ibmHV6zy.js} +1 -1
  56. package/assets/{MenuItem-B0piwgTa.js.map → MenuItem-ibmHV6zy.js.map} +1 -1
  57. package/assets/{Paper-BfSYUoim.js → Paper-DQs--rBO.js} +1 -1
  58. package/assets/{Paper-BfSYUoim.js.map → Paper-DQs--rBO.js.map} +1 -1
  59. package/assets/{PostCard-Zsk0_WYz.js → PostCard-BbfzA3Qx.js} +1 -1
  60. package/assets/{PostCard-Zsk0_WYz.js.map → PostCard-BbfzA3Qx.js.map} +1 -1
  61. package/assets/{PostPage-FBb63V37.js → PostPage-CosfC1Na.js} +1 -1
  62. package/assets/{PostPage-FBb63V37.js.map → PostPage-CosfC1Na.js.map} +1 -1
  63. package/assets/{PostPage.styled-B7Xofl3c.js → PostPage.styled-Dd-3Ce5F.js} +3 -3
  64. package/assets/{PostPage.styled-B7Xofl3c.js.map → PostPage.styled-Dd-3Ce5F.js.map} +1 -1
  65. package/assets/{PreviewPage-Dla6vQZW.js → PreviewPage-Dcx8YtgK.js} +1 -1
  66. package/assets/{PreviewPage-Dla6vQZW.js.map → PreviewPage-Dcx8YtgK.js.map} +1 -1
  67. package/assets/{SEO-CGGKu_zm.js → SEO-CwFoEftO.js} +1 -1
  68. package/assets/{SEO-CGGKu_zm.js.map → SEO-CwFoEftO.js.map} +1 -1
  69. package/assets/{SearchPage-ByMcz1c8.js → SearchPage-BUTdqyzo.js} +1 -1
  70. package/assets/{SearchPage-ByMcz1c8.js.map → SearchPage-BUTdqyzo.js.map} +1 -1
  71. package/assets/{SignInRedirect-BNwfxyGB.js → SignInRedirect-C-ss1k0l.js} +1 -1
  72. package/assets/{SignInRedirect-BNwfxyGB.js.map → SignInRedirect-C-ss1k0l.js.map} +1 -1
  73. package/assets/{SignInRedirect-Bxl1dwag.js → SignInRedirect-CsLtxSTb.js} +1 -1
  74. package/assets/{SignInRedirect-Bxl1dwag.js.map → SignInRedirect-CsLtxSTb.js.map} +1 -1
  75. package/assets/{Skeleton-BP1Os8gY.js → Skeleton-yDn4B-G5.js} +1 -1
  76. package/assets/{Skeleton-BP1Os8gY.js.map → Skeleton-yDn4B-G5.js.map} +1 -1
  77. package/assets/{TwitterEmbed-BbSYYog-.js → TwitterEmbed-CD3AmHIQ.js} +1 -1
  78. package/assets/{TwitterEmbed-BbSYYog-.js.map → TwitterEmbed-CD3AmHIQ.js.map} +1 -1
  79. package/assets/{Video--A0fBGqz.js → Video-phAvQnqc.js} +1 -1
  80. package/assets/{Video--A0fBGqz.js.map → Video-phAvQnqc.js.map} +1 -1
  81. package/assets/{WearablePreview-KunRQByO.js → WearablePreview-DJQBWbVv.js} +1 -1
  82. package/assets/{WearablePreview-KunRQByO.js.map → WearablePreview-DJQBWbVv.js.map} +1 -1
  83. package/assets/{auto-track-DJw7KsLA.js → auto-track-b36iF1aP.js} +1 -1
  84. package/assets/{auto-track-DJw7KsLA.js.map → auto-track-b36iF1aP.js.map} +1 -1
  85. package/assets/{ccip-EHA4QwVS.js → ccip-C--_xcyn.js} +1 -1
  86. package/assets/{ccip-EHA4QwVS.js.map → ccip-C--_xcyn.js.map} +1 -1
  87. package/assets/{createSvgIcon-CnAtXIjx.js → createSvgIcon-Ck-nYodG.js} +1 -1
  88. package/assets/{createSvgIcon-CnAtXIjx.js.map → createSvgIcon-Ck-nYodG.js.map} +1 -1
  89. package/assets/{download-Csh0UAX4.js → download-DdWNey2d.js} +2 -2
  90. package/assets/{download-Csh0UAX4.js.map → download-DdWNey2d.js.map} +1 -1
  91. package/assets/{downloadWithIdentity-imzC-1Iy.js → downloadWithIdentity-BySK_Bjg.js} +1 -1
  92. package/assets/{downloadWithIdentity-imzC-1Iy.js.map → downloadWithIdentity-BySK_Bjg.js.map} +1 -1
  93. package/assets/{events.client-BypQp_hx.js → events.client-CWWGjxi9.js} +1 -1
  94. package/assets/events.client-CWWGjxi9.js.map +1 -0
  95. package/assets/host_avatar-Gho9W3pF.webp +0 -0
  96. package/assets/host_scene-BStngEfA.webp +0 -0
  97. package/assets/{index-DwKCx_Fj.js → index-4Rn0RKA3.js} +17 -17
  98. package/assets/{index-DwKCx_Fj.js.map → index-4Rn0RKA3.js.map} +1 -1
  99. package/assets/{index-Hs2OtJ7_.js → index-AQyj9O_P.js} +1 -1
  100. package/assets/{index-Hs2OtJ7_.js.map → index-AQyj9O_P.js.map} +1 -1
  101. package/assets/{index-BtL1Whr6.js → index-BD4zd6ws.js} +1 -1
  102. package/assets/{index-BtL1Whr6.js.map → index-BD4zd6ws.js.map} +1 -1
  103. package/assets/{index-CqU_IKja.js → index-BJ7TnoEw.js} +1 -1
  104. package/assets/{index-CqU_IKja.js.map → index-BJ7TnoEw.js.map} +1 -1
  105. package/assets/{index-Bfn0rTR9.js → index-Bdgec4Ls.js} +1 -1
  106. package/assets/{index-Bfn0rTR9.js.map → index-Bdgec4Ls.js.map} +1 -1
  107. package/assets/{index-DV8UooZK.js → index-BjIVdBT0.js} +1 -1
  108. package/assets/{index-DV8UooZK.js.map → index-BjIVdBT0.js.map} +1 -1
  109. package/assets/{index-fmnLygLZ.js → index-BnaCJ0sp.js} +1 -1
  110. package/assets/{index-fmnLygLZ.js.map → index-BnaCJ0sp.js.map} +1 -1
  111. package/assets/{index-BO6ciUn8.js → index-C5c9wKGi.js} +1 -1
  112. package/assets/{index-BO6ciUn8.js.map → index-C5c9wKGi.js.map} +1 -1
  113. package/assets/{index-Bq7PojkE.js → index-CLRzSdDs.js} +1 -1
  114. package/assets/{index-Bq7PojkE.js.map → index-CLRzSdDs.js.map} +1 -1
  115. package/assets/{index-B-PLjKpI.js → index-CM1y4MwR.js} +1 -1
  116. package/assets/{index-B-PLjKpI.js.map → index-CM1y4MwR.js.map} +1 -1
  117. package/assets/{index-FcfsIuei.js → index-CSbcajOU.js} +1 -1
  118. package/assets/{index-FcfsIuei.js.map → index-CSbcajOU.js.map} +1 -1
  119. package/assets/{index-CC8b5SLA.js → index-CWHKL6N8.js} +1 -1
  120. package/assets/{index-CC8b5SLA.js.map → index-CWHKL6N8.js.map} +1 -1
  121. package/assets/index-CaN3aesa.js +1 -0
  122. package/assets/{index-DJdpP3iF.js.map → index-CaN3aesa.js.map} +1 -1
  123. package/assets/{index-CJ9b6HdV.js → index-CeX_Loqr.js} +1 -1
  124. package/assets/{index-CJ9b6HdV.js.map → index-CeX_Loqr.js.map} +1 -1
  125. package/assets/{index-BKY10VNY.js → index-Cjz0nm3N.js} +1 -1
  126. package/assets/{index-BKY10VNY.js.map → index-Cjz0nm3N.js.map} +1 -1
  127. package/assets/{index-pguZ7Pr7.js → index-CkaRi2_3.js} +2 -2
  128. package/assets/{index-pguZ7Pr7.js.map → index-CkaRi2_3.js.map} +1 -1
  129. package/assets/{index-XwRFjo-F.js → index-D6yjbNdZ.js} +3 -3
  130. package/assets/{index-XwRFjo-F.js.map → index-D6yjbNdZ.js.map} +1 -1
  131. package/assets/{index-0VgKmd34.js → index-DGs_qCuq.js} +1 -1
  132. package/assets/{index-0VgKmd34.js.map → index-DGs_qCuq.js.map} +1 -1
  133. package/assets/{index-DIU7xr_7.js → index-DHJSVI3a.js} +1 -1
  134. package/assets/{index-DIU7xr_7.js.map → index-DHJSVI3a.js.map} +1 -1
  135. package/assets/{index-KkMZZ6nz.js → index-DMpXTyjU.js} +1 -1
  136. package/assets/{index-KkMZZ6nz.js.map → index-DMpXTyjU.js.map} +1 -1
  137. package/assets/{index-iTL2dY0l.js → index-DXcPgEVs.js} +1 -1
  138. package/assets/{index-iTL2dY0l.js.map → index-DXcPgEVs.js.map} +1 -1
  139. package/assets/{index-BaEE4ZXP.js → index-D_URcwLX.js} +1 -1
  140. package/assets/{index-BaEE4ZXP.js.map → index-D_URcwLX.js.map} +1 -1
  141. package/assets/index-DckfeXPH.js +1 -0
  142. package/assets/index-DckfeXPH.js.map +1 -0
  143. package/assets/{index-CsY_wahP.js → index-Dg-O6Pur.js} +1 -1
  144. package/assets/{index-CsY_wahP.js.map → index-Dg-O6Pur.js.map} +1 -1
  145. package/assets/{index-CXMTgMUj.js → index-DhwtUY1f.js} +1 -1
  146. package/assets/{index-CXMTgMUj.js.map → index-DhwtUY1f.js.map} +1 -1
  147. package/assets/{index-Dx9lzInm.js → index-DrayNXRb.js} +1 -1
  148. package/assets/{index-Dx9lzInm.js.map → index-DrayNXRb.js.map} +1 -1
  149. package/assets/{index-CfKiEnnb.js → index-UYb7Po3h.js} +1 -1
  150. package/assets/{index-CfKiEnnb.js.map → index-UYb7Po3h.js.map} +1 -1
  151. package/assets/{index-Bd63106P.js → index-XKJmyO_p.js} +1 -1
  152. package/assets/{index-Bd63106P.js.map → index-XKJmyO_p.js.map} +1 -1
  153. package/assets/{index-BVu5N7d0.js → index-ZgulVRiq.js} +1 -1
  154. package/assets/{index-BVu5N7d0.js.map → index-ZgulVRiq.js.map} +1 -1
  155. package/assets/{index-DUmIu2EK.js → index-_DB-noma.js} +29 -29
  156. package/assets/{index-DUmIu2EK.js.map → index-_DB-noma.js.map} +1 -1
  157. package/assets/{index-DW87VeBc.js → index-mEd8fX0_.js} +1 -1
  158. package/assets/{index-DW87VeBc.js.map → index-mEd8fX0_.js.map} +1 -1
  159. package/assets/{index-BzmWmDt2.js → index-niWFQNCe.js} +1 -1
  160. package/assets/{index-BzmWmDt2.js.map → index-niWFQNCe.js.map} +1 -1
  161. package/assets/{profile.client-BtZZbgxj.js → profile.client-CmNJLNox.js} +1 -1
  162. package/assets/{profile.client-BtZZbgxj.js.map → profile.client-CmNJLNox.js.map} +1 -1
  163. package/assets/{shared.styled-D8qloAmp.js → shared.styled-8JiXG0YJ.js} +1 -1
  164. package/assets/{shared.styled-D8qloAmp.js.map → shared.styled-8JiXG0YJ.js.map} +1 -1
  165. package/assets/{store-OyTPwmKI.js → store-ChFhVM4L.js} +1 -1
  166. package/assets/{store-OyTPwmKI.js.map → store-ChFhVM4L.js.map} +1 -1
  167. package/assets/{url-BHzlJYXC.js → url-DaZlsYoU.js} +1 -1
  168. package/assets/{url-BHzlJYXC.js.map → url-DaZlsYoU.js.map} +1 -1
  169. package/assets/{useAuthIdentity-D2zQ3q5X.js → useAuthIdentity-CvL2aq09.js} +1 -1
  170. package/assets/{useAuthIdentity-D2zQ3q5X.js.map → useAuthIdentity-CvL2aq09.js.map} +1 -1
  171. package/assets/{useCreatorHubDownload-Dp_zMaiv.js → useCreatorHubDownload-EAoN-CCw.js} +1 -1
  172. package/assets/{useCreatorHubDownload-Dp_zMaiv.js.map → useCreatorHubDownload-EAoN-CCw.js.map} +1 -1
  173. package/assets/{useInfiniteBlogPosts-B9Mv_Fup.js → useInfiniteBlogPosts-Bp1S1sH2.js} +1 -1
  174. package/assets/{useInfiniteBlogPosts-B9Mv_Fup.js.map → useInfiniteBlogPosts-Bp1S1sH2.js.map} +1 -1
  175. package/assets/{useSlot-DM_UQPu8.js → useSlot-Cy5UGC7c.js} +1 -1
  176. package/assets/{useSlot-DM_UQPu8.js.map → useSlot-Cy5UGC7c.js.map} +1 -1
  177. package/assets/{utils-CJGePSnj.js → utils-Ci8rWaIt.js} +1 -1
  178. package/assets/{utils-CJGePSnj.js.map → utils-Ci8rWaIt.js.map} +1 -1
  179. package/index.html +15 -15
  180. package/package.json +3 -3
  181. package/assets/CreateEventPage-NcQUT47j.js.map +0 -1
  182. package/assets/HomePage-CZwkfB5G.js +0 -3
  183. package/assets/HomePage-CZwkfB5G.js.map +0 -1
  184. package/assets/events.client-BypQp_hx.js.map +0 -1
  185. package/assets/index-C1apFG92.js +0 -1
  186. package/assets/index-C1apFG92.js.map +0 -1
  187. package/assets/index-DJdpP3iF.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPage-ByMcz1c8.js","sources":["../../src/components/blog/SearchResultCard/SearchResultCard.styled.ts","../../src/components/blog/SearchResultCard/SearchResultCard.tsx","../../src/pages/blog/SearchPage.styled.ts","../../src/pages/blog/SearchPage.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { Box, Skeleton, Typography, styled } from 'decentraland-ui2'\n\nconst CardContainer = styled(Box)(({ theme }) => ({\n margin: theme.spacing(0, 0, 2),\n listStyleType: 'none',\n flexGrow: 1,\n borderRadius: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n border: 'transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'flex-start',\n transition: 'transform 250ms ease, box-shadow 250ms ease',\n boxShadow: theme.shadows[1],\n height: '150px',\n '& > a': {\n display: 'flex',\n width: '100%',\n height: '100%',\n textDecoration: 'none'\n },\n '&:hover': {\n transform: 'translate(0, -4px)',\n boxShadow: theme.shadows[2]\n },\n [theme.breakpoints.down('sm')]: {\n height: '100px'\n }\n}))\n\nconst CardContentBox = styled(Box)(() => ({\n display: 'flex',\n width: '100%',\n height: '100%'\n}))\n\nconst CardImage = styled('img')(({ theme }) => ({\n flexShrink: 0,\n width: '232px',\n height: '100%',\n objectFit: 'cover',\n borderRadius: `${theme.shape.borderRadius}px 0 0 ${theme.shape.borderRadius}px`,\n [theme.breakpoints.down('sm')]: {\n width: '33%'\n }\n}))\n\nconst CardTextBox = styled(Box)(({ theme }) => ({\n padding: theme.spacing(2.75, 2.5, 3, 2.5),\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n overflow: 'hidden',\n '& em': {\n fontStyle: 'normal',\n fontWeight: 700,\n color: theme.palette.primary.main\n },\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(1.75)\n }\n}))\n\nconst CardTitle = styled(Typography)(({ theme }) => ({\n margin: `0 0 ${theme.spacing(0.5)}`,\n fontSize: theme.typography.pxToRem(20),\n lineHeight: '28px',\n fontWeight: 500,\n color: theme.palette.text.primary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n [theme.breakpoints.down('sm')]: {\n fontSize: theme.typography.pxToRem(15),\n lineHeight: '18px'\n }\n}))\n\nconst CardDescription = styled(Typography)(({ theme }) => ({\n lineHeight: '24px',\n padding: 0,\n margin: 0,\n fontSize: theme.typography.pxToRem(15),\n color: theme.palette.text.secondary,\n textAlign: 'left',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n}))\n\nconst LoadingImage = styled(Skeleton)(({ theme }) => ({\n width: '232px',\n height: '100%',\n borderRadius: `${theme.shape.borderRadius}px 0 0 ${theme.shape.borderRadius}px`,\n flexShrink: 0,\n [theme.breakpoints.down('sm')]: {\n width: '33%'\n }\n}))\n\nconst LoadingTitle = styled(Skeleton)(({ theme }) => ({\n width: '80%',\n height: theme.spacing(3.5),\n marginBottom: theme.spacing(1)\n}))\n\nconst LoadingDescription = styled(Skeleton)(({ theme }) => ({\n width: '100%',\n height: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n}))\n\nconst LoadingDescriptionShort = styled(Skeleton)(({ theme }) => ({\n width: '60%',\n height: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n}))\n\nexport {\n CardContainer,\n CardContentBox,\n CardDescription,\n CardImage,\n CardTextBox,\n CardTitle,\n LoadingDescription,\n LoadingDescriptionShort,\n LoadingImage,\n LoadingTitle\n}\n","import { Link } from 'react-router-dom'\nimport { sanitizeHighlight } from '../Search/sanitizeHighlight'\nimport type { SearchResultCardProps } from './SearchResultCard.types'\nimport {\n CardContainer,\n CardContentBox,\n CardDescription,\n CardImage,\n CardTextBox,\n CardTitle,\n LoadingDescription,\n LoadingDescriptionShort,\n LoadingImage,\n LoadingTitle\n} from './SearchResultCard.styled'\n\nconst SearchResultCard = (props: SearchResultCardProps) => {\n const { result, loading } = props\n\n if (loading) {\n return (\n <CardContainer>\n <CardContentBox>\n <LoadingImage variant=\"rectangular\" />\n <CardTextBox>\n <LoadingTitle variant=\"text\" />\n <LoadingDescription variant=\"text\" />\n <LoadingDescriptionShort variant=\"text\" />\n </CardTextBox>\n </CardContentBox>\n </CardContainer>\n )\n }\n\n if (!result) {\n return null\n }\n\n return (\n <CardContainer>\n <Link to={result.url}>\n <CardContentBox>\n {result.image && <CardImage src={result.image} alt=\"\" loading=\"lazy\" decoding=\"async\" />}\n <CardTextBox>\n {typeof result.title === 'string' ? (\n // eslint-disable-next-line @typescript-eslint/naming-convention\n <CardTitle dangerouslySetInnerHTML={{ __html: sanitizeHighlight(result.title) }} />\n ) : (\n <CardTitle>{result.title}</CardTitle>\n )}\n {typeof result.description === 'string' ? (\n // eslint-disable-next-line @typescript-eslint/naming-convention\n <CardDescription dangerouslySetInnerHTML={{ __html: sanitizeHighlight(result.description) }} />\n ) : (\n <CardDescription>{result.description}</CardDescription>\n )}\n </CardTextBox>\n </CardContentBox>\n </Link>\n </CardContainer>\n )\n}\n\nexport { SearchResultCard }\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Box, Typography, styled } from 'decentraland-ui2'\n\nconst SearchSubtitle = styled(Typography)(({ theme }) => ({\n margin: theme.spacing(4.5, 0, 3),\n ...theme.typography.h4,\n fontWeight: 400,\n padding: theme.spacing(0, 2),\n '& span': {\n fontWeight: 700\n }\n}))\n\nconst HeaderBox = styled(Box)(({ theme }) => ({\n marginBottom: theme.spacing(3)\n}))\n\nconst CenteredBox = styled(Box)(({ theme }) => ({\n textAlign: 'center',\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4)\n}))\n\nconst ResultsWrapper = styled(Box)(() => ({\n display: 'flex',\n flexDirection: 'column'\n}))\n\nconst LoadMoreContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n justifyContent: 'center',\n marginTop: theme.spacing(4)\n}))\n\nexport { CenteredBox, HeaderBox, LoadMoreContainer, ResultsWrapper, SearchSubtitle }\n","import { useEffect, useMemo, useState } from 'react'\nimport { useSearchParams } from 'react-router-dom'\nimport { useTranslation } from '@dcl/hooks'\nimport { Button, Typography } from 'decentraland-ui2'\nimport { BlogLayout } from '../../components/blog/BlogLayout'\nimport { SearchResultCard } from '../../components/blog/SearchResultCard'\nimport { SEO } from '../../components/blog/SEO/SEO'\nimport { getEnv } from '../../config/env'\nimport { useSearchBlogPostsQuery } from '../../features/search/search.client'\nimport type { SearchResult } from '../../shared/blog/types/blog.domain'\nimport { CenteredBox, HeaderBox, LoadMoreContainer, ResultsWrapper, SearchSubtitle } from './SearchPage.styled'\n\nconst HITS_PER_PAGE = 10\n\nexport const SearchPage = () => {\n const { t } = useTranslation()\n const [searchParams] = useSearchParams()\n const [page, setPage] = useState(0)\n const [accumulatedResults, setAccumulatedResults] = useState<SearchResult[]>([])\n\n const query = useMemo(() => searchParams.get('q') || '', [searchParams])\n\n const { data, isLoading, isFetching } = useSearchBlogPostsQuery(\n {\n query,\n hitsPerPage: HITS_PER_PAGE,\n page\n },\n { skip: query.length < 3 }\n )\n\n // Reset accumulated results when query changes\n useEffect(() => {\n setPage(0)\n setAccumulatedResults([])\n }, [query])\n\n // Accumulate results when data changes\n useEffect(() => {\n if (data?.results) {\n if (page === 0) {\n setAccumulatedResults(data.results)\n } else {\n setAccumulatedResults(prev => [...prev, ...data.results])\n }\n }\n }, [data, page])\n\n const handleLoadMore = () => {\n setPage(prev => prev + 1)\n setTimeout(() => window.scrollBy({ top: 500, left: 0, behavior: 'smooth' }), 0)\n }\n\n const showResults = accumulatedResults.length > 0\n const showEmpty = !isLoading && query.length >= 3 && accumulatedResults.length === 0 && data?.results.length === 0\n const showLoading = isLoading && accumulatedResults.length === 0\n const hasMore = data?.hasMore ?? false\n\n const searchDescription = query ? t('search.description_with_query', { query }) : t('search.description')\n const baseUrl = getEnv('BLOG_BASE_URL') || ''\n\n return (\n <BlogLayout showBlogNavigation={true}>\n <SEO\n title={query ? t('search.title_with_query', { query }) : t('search.title')}\n description={searchDescription}\n url={query ? `${baseUrl}/search?q=${encodeURIComponent(query)}` : `${baseUrl}/search`}\n />\n {query.length >= 3 && (\n <HeaderBox>\n <SearchSubtitle>\n {t('search.results_for')} <span>&ldquo;{query}&rdquo;</span>\n </SearchSubtitle>\n </HeaderBox>\n )}\n\n {showLoading && (\n <ResultsWrapper>\n {Array.from({ length: 5 }, (_, index) => (\n <SearchResultCard key={index} loading />\n ))}\n </ResultsWrapper>\n )}\n\n {showResults && (\n <ResultsWrapper>\n {accumulatedResults.map((result, index) => (\n <SearchResultCard key={`${result.url}-${index}`} result={result} />\n ))}\n </ResultsWrapper>\n )}\n\n {isFetching && !isLoading && (\n <ResultsWrapper>\n {Array.from({ length: 3 }, (_, index) => (\n <SearchResultCard key={`loading-more-${index}`} loading />\n ))}\n </ResultsWrapper>\n )}\n\n {hasMore && showResults && !isFetching && (\n <LoadMoreContainer>\n <Button variant=\"contained\" onClick={handleLoadMore}>\n {t('blog.load_more')}\n </Button>\n </LoadMoreContainer>\n )}\n\n {showEmpty && (\n <CenteredBox>\n <Typography variant=\"h5\" gutterBottom>\n {t('blog.nothing_to_show')}\n </Typography>\n <Typography color=\"textSecondary\">\n {t('search.no_results_for')} &ldquo;{query}&rdquo;\n </Typography>\n </CenteredBox>\n )}\n </BlogLayout>\n )\n}\n"],"names":["CardContainer","styled","Box","theme","CardContentBox","CardImage","CardTextBox","CardTitle","Typography","CardDescription","LoadingImage","Skeleton","LoadingTitle","LoadingDescription","LoadingDescriptionShort","SearchResultCard","props","result","loading","jsx","jsxs","Link","sanitizeHighlight","SearchSubtitle","HeaderBox","CenteredBox","ResultsWrapper","LoadMoreContainer","HITS_PER_PAGE","SearchPage","useTranslation","searchParams","useSearchParams","page","setPage","useState","accumulatedResults","setAccumulatedResults","query","useMemo","data","isLoading","isFetching","useSearchBlogPostsQuery","useEffect","prev","handleLoadMore","showResults","showEmpty","showLoading","hasMore","searchDescription","baseUrl","getEnv","BlogLayout","SEO","_","index","Button"],"mappings":"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"}
1
+ {"version":3,"file":"SearchPage-BUTdqyzo.js","sources":["../../src/components/blog/SearchResultCard/SearchResultCard.styled.ts","../../src/components/blog/SearchResultCard/SearchResultCard.tsx","../../src/pages/blog/SearchPage.styled.ts","../../src/pages/blog/SearchPage.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { Box, Skeleton, Typography, styled } from 'decentraland-ui2'\n\nconst CardContainer = styled(Box)(({ theme }) => ({\n margin: theme.spacing(0, 0, 2),\n listStyleType: 'none',\n flexGrow: 1,\n borderRadius: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n border: 'transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'flex-start',\n transition: 'transform 250ms ease, box-shadow 250ms ease',\n boxShadow: theme.shadows[1],\n height: '150px',\n '& > a': {\n display: 'flex',\n width: '100%',\n height: '100%',\n textDecoration: 'none'\n },\n '&:hover': {\n transform: 'translate(0, -4px)',\n boxShadow: theme.shadows[2]\n },\n [theme.breakpoints.down('sm')]: {\n height: '100px'\n }\n}))\n\nconst CardContentBox = styled(Box)(() => ({\n display: 'flex',\n width: '100%',\n height: '100%'\n}))\n\nconst CardImage = styled('img')(({ theme }) => ({\n flexShrink: 0,\n width: '232px',\n height: '100%',\n objectFit: 'cover',\n borderRadius: `${theme.shape.borderRadius}px 0 0 ${theme.shape.borderRadius}px`,\n [theme.breakpoints.down('sm')]: {\n width: '33%'\n }\n}))\n\nconst CardTextBox = styled(Box)(({ theme }) => ({\n padding: theme.spacing(2.75, 2.5, 3, 2.5),\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n overflow: 'hidden',\n '& em': {\n fontStyle: 'normal',\n fontWeight: 700,\n color: theme.palette.primary.main\n },\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(1.75)\n }\n}))\n\nconst CardTitle = styled(Typography)(({ theme }) => ({\n margin: `0 0 ${theme.spacing(0.5)}`,\n fontSize: theme.typography.pxToRem(20),\n lineHeight: '28px',\n fontWeight: 500,\n color: theme.palette.text.primary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n [theme.breakpoints.down('sm')]: {\n fontSize: theme.typography.pxToRem(15),\n lineHeight: '18px'\n }\n}))\n\nconst CardDescription = styled(Typography)(({ theme }) => ({\n lineHeight: '24px',\n padding: 0,\n margin: 0,\n fontSize: theme.typography.pxToRem(15),\n color: theme.palette.text.secondary,\n textAlign: 'left',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n}))\n\nconst LoadingImage = styled(Skeleton)(({ theme }) => ({\n width: '232px',\n height: '100%',\n borderRadius: `${theme.shape.borderRadius}px 0 0 ${theme.shape.borderRadius}px`,\n flexShrink: 0,\n [theme.breakpoints.down('sm')]: {\n width: '33%'\n }\n}))\n\nconst LoadingTitle = styled(Skeleton)(({ theme }) => ({\n width: '80%',\n height: theme.spacing(3.5),\n marginBottom: theme.spacing(1)\n}))\n\nconst LoadingDescription = styled(Skeleton)(({ theme }) => ({\n width: '100%',\n height: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n}))\n\nconst LoadingDescriptionShort = styled(Skeleton)(({ theme }) => ({\n width: '60%',\n height: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n}))\n\nexport {\n CardContainer,\n CardContentBox,\n CardDescription,\n CardImage,\n CardTextBox,\n CardTitle,\n LoadingDescription,\n LoadingDescriptionShort,\n LoadingImage,\n LoadingTitle\n}\n","import { Link } from 'react-router-dom'\nimport { sanitizeHighlight } from '../Search/sanitizeHighlight'\nimport type { SearchResultCardProps } from './SearchResultCard.types'\nimport {\n CardContainer,\n CardContentBox,\n CardDescription,\n CardImage,\n CardTextBox,\n CardTitle,\n LoadingDescription,\n LoadingDescriptionShort,\n LoadingImage,\n LoadingTitle\n} from './SearchResultCard.styled'\n\nconst SearchResultCard = (props: SearchResultCardProps) => {\n const { result, loading } = props\n\n if (loading) {\n return (\n <CardContainer>\n <CardContentBox>\n <LoadingImage variant=\"rectangular\" />\n <CardTextBox>\n <LoadingTitle variant=\"text\" />\n <LoadingDescription variant=\"text\" />\n <LoadingDescriptionShort variant=\"text\" />\n </CardTextBox>\n </CardContentBox>\n </CardContainer>\n )\n }\n\n if (!result) {\n return null\n }\n\n return (\n <CardContainer>\n <Link to={result.url}>\n <CardContentBox>\n {result.image && <CardImage src={result.image} alt=\"\" loading=\"lazy\" decoding=\"async\" />}\n <CardTextBox>\n {typeof result.title === 'string' ? (\n // eslint-disable-next-line @typescript-eslint/naming-convention\n <CardTitle dangerouslySetInnerHTML={{ __html: sanitizeHighlight(result.title) }} />\n ) : (\n <CardTitle>{result.title}</CardTitle>\n )}\n {typeof result.description === 'string' ? (\n // eslint-disable-next-line @typescript-eslint/naming-convention\n <CardDescription dangerouslySetInnerHTML={{ __html: sanitizeHighlight(result.description) }} />\n ) : (\n <CardDescription>{result.description}</CardDescription>\n )}\n </CardTextBox>\n </CardContentBox>\n </Link>\n </CardContainer>\n )\n}\n\nexport { SearchResultCard }\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Box, Typography, styled } from 'decentraland-ui2'\n\nconst SearchSubtitle = styled(Typography)(({ theme }) => ({\n margin: theme.spacing(4.5, 0, 3),\n ...theme.typography.h4,\n fontWeight: 400,\n padding: theme.spacing(0, 2),\n '& span': {\n fontWeight: 700\n }\n}))\n\nconst HeaderBox = styled(Box)(({ theme }) => ({\n marginBottom: theme.spacing(3)\n}))\n\nconst CenteredBox = styled(Box)(({ theme }) => ({\n textAlign: 'center',\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4)\n}))\n\nconst ResultsWrapper = styled(Box)(() => ({\n display: 'flex',\n flexDirection: 'column'\n}))\n\nconst LoadMoreContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n justifyContent: 'center',\n marginTop: theme.spacing(4)\n}))\n\nexport { CenteredBox, HeaderBox, LoadMoreContainer, ResultsWrapper, SearchSubtitle }\n","import { useEffect, useMemo, useState } from 'react'\nimport { useSearchParams } from 'react-router-dom'\nimport { useTranslation } from '@dcl/hooks'\nimport { Button, Typography } from 'decentraland-ui2'\nimport { BlogLayout } from '../../components/blog/BlogLayout'\nimport { SearchResultCard } from '../../components/blog/SearchResultCard'\nimport { SEO } from '../../components/blog/SEO/SEO'\nimport { getEnv } from '../../config/env'\nimport { useSearchBlogPostsQuery } from '../../features/search/search.client'\nimport type { SearchResult } from '../../shared/blog/types/blog.domain'\nimport { CenteredBox, HeaderBox, LoadMoreContainer, ResultsWrapper, SearchSubtitle } from './SearchPage.styled'\n\nconst HITS_PER_PAGE = 10\n\nexport const SearchPage = () => {\n const { t } = useTranslation()\n const [searchParams] = useSearchParams()\n const [page, setPage] = useState(0)\n const [accumulatedResults, setAccumulatedResults] = useState<SearchResult[]>([])\n\n const query = useMemo(() => searchParams.get('q') || '', [searchParams])\n\n const { data, isLoading, isFetching } = useSearchBlogPostsQuery(\n {\n query,\n hitsPerPage: HITS_PER_PAGE,\n page\n },\n { skip: query.length < 3 }\n )\n\n // Reset accumulated results when query changes\n useEffect(() => {\n setPage(0)\n setAccumulatedResults([])\n }, [query])\n\n // Accumulate results when data changes\n useEffect(() => {\n if (data?.results) {\n if (page === 0) {\n setAccumulatedResults(data.results)\n } else {\n setAccumulatedResults(prev => [...prev, ...data.results])\n }\n }\n }, [data, page])\n\n const handleLoadMore = () => {\n setPage(prev => prev + 1)\n setTimeout(() => window.scrollBy({ top: 500, left: 0, behavior: 'smooth' }), 0)\n }\n\n const showResults = accumulatedResults.length > 0\n const showEmpty = !isLoading && query.length >= 3 && accumulatedResults.length === 0 && data?.results.length === 0\n const showLoading = isLoading && accumulatedResults.length === 0\n const hasMore = data?.hasMore ?? false\n\n const searchDescription = query ? t('search.description_with_query', { query }) : t('search.description')\n const baseUrl = getEnv('BLOG_BASE_URL') || ''\n\n return (\n <BlogLayout showBlogNavigation={true}>\n <SEO\n title={query ? t('search.title_with_query', { query }) : t('search.title')}\n description={searchDescription}\n url={query ? `${baseUrl}/search?q=${encodeURIComponent(query)}` : `${baseUrl}/search`}\n />\n {query.length >= 3 && (\n <HeaderBox>\n <SearchSubtitle>\n {t('search.results_for')} <span>&ldquo;{query}&rdquo;</span>\n </SearchSubtitle>\n </HeaderBox>\n )}\n\n {showLoading && (\n <ResultsWrapper>\n {Array.from({ length: 5 }, (_, index) => (\n <SearchResultCard key={index} loading />\n ))}\n </ResultsWrapper>\n )}\n\n {showResults && (\n <ResultsWrapper>\n {accumulatedResults.map((result, index) => (\n <SearchResultCard key={`${result.url}-${index}`} result={result} />\n ))}\n </ResultsWrapper>\n )}\n\n {isFetching && !isLoading && (\n <ResultsWrapper>\n {Array.from({ length: 3 }, (_, index) => (\n <SearchResultCard key={`loading-more-${index}`} loading />\n ))}\n </ResultsWrapper>\n )}\n\n {hasMore && showResults && !isFetching && (\n <LoadMoreContainer>\n <Button variant=\"contained\" onClick={handleLoadMore}>\n {t('blog.load_more')}\n </Button>\n </LoadMoreContainer>\n )}\n\n {showEmpty && (\n <CenteredBox>\n <Typography variant=\"h5\" gutterBottom>\n {t('blog.nothing_to_show')}\n </Typography>\n <Typography color=\"textSecondary\">\n {t('search.no_results_for')} &ldquo;{query}&rdquo;\n </Typography>\n </CenteredBox>\n )}\n </BlogLayout>\n )\n}\n"],"names":["CardContainer","styled","Box","theme","CardContentBox","CardImage","CardTextBox","CardTitle","Typography","CardDescription","LoadingImage","Skeleton","LoadingTitle","LoadingDescription","LoadingDescriptionShort","SearchResultCard","props","result","loading","jsx","jsxs","Link","sanitizeHighlight","SearchSubtitle","HeaderBox","CenteredBox","ResultsWrapper","LoadMoreContainer","HITS_PER_PAGE","SearchPage","useTranslation","searchParams","useSearchParams","page","setPage","useState","accumulatedResults","setAccumulatedResults","query","useMemo","data","isLoading","isFetching","useSearchBlogPostsQuery","useEffect","prev","handleLoadMore","showResults","showEmpty","showLoading","hasMore","searchDescription","baseUrl","getEnv","BlogLayout","SEO","_","index","Button"],"mappings":"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"}
@@ -1 +1 @@
1
- import{r as a}from"./vendor-router-D_36sTKu.js";import{g as i}from"./index-DUmIu2EK.js";import"./vendor-sentry-BSvWNK4f.js";import"./vendor-crypto-uuuQA3i5.js";import"./vendor-schemas-DJzTSxpO.js";import"./vendor-ua-D7qqAxdq.js";import"./vendor-intl-D2lXWsDp.js";function c(){return/^decentraland.(zone|org|today)$/.test(window.location.host)?"/blog":""}function s(t,e){const o=c(),n=new URL(t,window.location.origin);let r=n.pathname+n.search;return o&&r.startsWith(o)&&(r=r.slice(o.length)||"/"),`${o}${r}`}function h(){const t=i("AUTH_URL")??"/auth";return t.startsWith("http")||window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"?t:`${window.location.origin}${t.startsWith("/")?"":"/"}${t}`}function l(){const t=window.location.pathname,e=window.location.search;return new URLSearchParams(e).get("redirectTo")??`${t}${e}`}function u(t,e){const o=l(),n=s(o),r=h();window.location.replace(`${r}/login?redirectTo=${encodeURIComponent(n)}`)}function $(){return a.useEffect(()=>{u()},[]),null}export{$ as SignInRedirect};
1
+ import{r as a}from"./vendor-router-D_36sTKu.js";import{g as i}from"./index-_DB-noma.js";import"./vendor-sentry-BSvWNK4f.js";import"./vendor-crypto-uuuQA3i5.js";import"./vendor-schemas-DJzTSxpO.js";import"./vendor-ua-D7qqAxdq.js";import"./vendor-intl-D2lXWsDp.js";function c(){return/^decentraland.(zone|org|today)$/.test(window.location.host)?"/blog":""}function s(t,e){const o=c(),n=new URL(t,window.location.origin);let r=n.pathname+n.search;return o&&r.startsWith(o)&&(r=r.slice(o.length)||"/"),`${o}${r}`}function h(){const t=i("AUTH_URL")??"/auth";return t.startsWith("http")||window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"?t:`${window.location.origin}${t.startsWith("/")?"":"/"}${t}`}function l(){const t=window.location.pathname,e=window.location.search;return new URLSearchParams(e).get("redirectTo")??`${t}${e}`}function u(t,e){const o=l(),n=s(o),r=h();window.location.replace(`${r}/login?redirectTo=${encodeURIComponent(n)}`)}function $(){return a.useEffect(()=>{u()},[]),null}export{$ as SignInRedirect};
@@ -1 +1 @@
1
- {"version":3,"file":"SignInRedirect-BNwfxyGB.js","sources":["../../src/utils/blogAuthRedirect.ts","../../src/pages/blog/SignInRedirect.tsx"],"sourcesContent":["import { getEnv } from '../config/env'\n\n/**\n * Gets the basename based on the current host.\n * Returns \"/blog\" for decentraland domains, empty string otherwise.\n */\nfunction getBasename(): string {\n return /^decentraland.(zone|org|today)$/.test(window.location.host) ? '/blog' : ''\n}\n\n/**\n * Builds a redirect URL for authentication.\n * @param path - The path to redirect to after authentication (may include query params)\n * @param queryParams - Optional query parameters to append to the path\n * @returns The full redirect URL with basename\n */\nfunction buildAuthRedirectUrl(path: string, queryParams?: Record<string, string>): string {\n const basename = getBasename()\n\n // Parse the path, handling cases where it already includes query params\n const url = new URL(path, window.location.origin)\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n url.searchParams.set(key, value)\n })\n }\n\n // Remove the origin, keep only pathname + search\n let pathWithQuery = url.pathname + url.search\n\n // Strip the basename prefix if already present to avoid duplication (e.g. /blog/blog)\n if (basename && pathWithQuery.startsWith(basename)) {\n pathWithQuery = pathWithQuery.slice(basename.length) || '/'\n }\n\n return `${basename}${pathWithQuery}`\n}\n\n/**\n * Resolves the auth URL based on environment and host.\n * - If AUTH_URL is absolute (http/https), use it directly\n * - If AUTH_URL is relative: use same origin + path so Vercel rewrite /auth -> decentraland.zone/auth applies\n */\nfunction resolveAuthUrl(): string {\n const authUrl = getEnv('AUTH_URL') ?? '/auth'\n\n if (authUrl.startsWith('http')) {\n return authUrl\n }\n\n const isLocalhost = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1'\n\n if (isLocalhost) {\n return authUrl\n }\n\n return `${window.location.origin}${authUrl.startsWith('/') ? '' : '/'}${authUrl}`\n}\n\n/**\n * Resolves the path to redirect to after login from the current URL.\n * If the URL has a redirectTo query param, uses it; otherwise uses pathname + search.\n */\nfunction getRedirectPathFromCurrentUrl(): string {\n const pathname = window.location.pathname\n const search = window.location.search\n const searchParams = new URLSearchParams(search)\n const currentRedirectTo = searchParams.get('redirectTo')\n return currentRedirectTo ?? `${pathname}${search}`\n}\n\n/**\n * Redirects to the authentication URL with the specified redirect path.\n * When path is omitted, resolves it from the current URL (respecting redirectTo query param).\n * @param path - Optional path to redirect to after authentication (defaults to current URL)\n * @param queryParams - Optional query parameters to append to the path\n */\nfunction redirectToAuth(path?: string, queryParams?: Record<string, string>): void {\n const redirectPath = path ?? getRedirectPathFromCurrentUrl()\n const redirectTo = buildAuthRedirectUrl(redirectPath, queryParams)\n const authUrl = resolveAuthUrl()\n\n window.location.replace(`${authUrl}/login?redirectTo=${encodeURIComponent(redirectTo)}`)\n}\n\nexport { buildAuthRedirectUrl, redirectToAuth }\n","import { useEffect } from 'react'\nimport { redirectToAuth } from '../../utils/blogAuthRedirect'\n\nfunction SignInRedirect() {\n useEffect(() => {\n redirectToAuth()\n }, [])\n\n return null\n}\n\nexport { SignInRedirect }\n"],"names":["getBasename","buildAuthRedirectUrl","path","queryParams","basename","url","pathWithQuery","resolveAuthUrl","authUrl","getEnv","getRedirectPathFromCurrentUrl","pathname","search","redirectToAuth","redirectPath","redirectTo","SignInRedirect","useEffect"],"mappings":"uQAMA,SAASA,GAAsB,CAC7B,MAAO,kCAAkC,KAAK,OAAO,SAAS,IAAI,EAAI,QAAU,EAClF,CAQA,SAASC,EAAqBC,EAAcC,EAA8C,CACxF,MAAMC,EAAWJ,EAAA,EAGXK,EAAM,IAAI,IAAIH,EAAM,OAAO,SAAS,MAAM,EAQhD,IAAII,EAAgBD,EAAI,SAAWA,EAAI,OAGvC,OAAID,GAAYE,EAAc,WAAWF,CAAQ,IAC/CE,EAAgBA,EAAc,MAAMF,EAAS,MAAM,GAAK,KAGnD,GAAGA,CAAQ,GAAGE,CAAa,EACpC,CAOA,SAASC,GAAyB,CAChC,MAAMC,EAAUC,EAAO,UAAU,GAAK,QAQtC,OANID,EAAQ,WAAW,MAAM,GAIT,OAAO,SAAS,WAAa,aAAe,OAAO,SAAS,WAAa,YAGpFA,EAGF,GAAG,OAAO,SAAS,MAAM,GAAGA,EAAQ,WAAW,GAAG,EAAI,GAAK,GAAG,GAAGA,CAAO,EACjF,CAMA,SAASE,GAAwC,CAC/C,MAAMC,EAAW,OAAO,SAAS,SAC3BC,EAAS,OAAO,SAAS,OAG/B,OAFqB,IAAI,gBAAgBA,CAAM,EACR,IAAI,YAAY,GAC3B,GAAGD,CAAQ,GAAGC,CAAM,EAClD,CAQA,SAASC,EAAeX,EAAeC,EAA4C,CACjF,MAAMW,EAAuBJ,EAAA,EACvBK,EAAad,EAAqBa,CAAyB,EAC3DN,EAAUD,EAAA,EAEhB,OAAO,SAAS,QAAQ,GAAGC,CAAO,qBAAqB,mBAAmBO,CAAU,CAAC,EAAE,CACzF,CChFA,SAASC,GAAiB,CACxBC,OAAAA,EAAAA,UAAU,IAAM,CACdJ,EAAA,CACF,EAAG,CAAA,CAAE,EAEE,IACT"}
1
+ {"version":3,"file":"SignInRedirect-C-ss1k0l.js","sources":["../../src/utils/blogAuthRedirect.ts","../../src/pages/blog/SignInRedirect.tsx"],"sourcesContent":["import { getEnv } from '../config/env'\n\n/**\n * Gets the basename based on the current host.\n * Returns \"/blog\" for decentraland domains, empty string otherwise.\n */\nfunction getBasename(): string {\n return /^decentraland.(zone|org|today)$/.test(window.location.host) ? '/blog' : ''\n}\n\n/**\n * Builds a redirect URL for authentication.\n * @param path - The path to redirect to after authentication (may include query params)\n * @param queryParams - Optional query parameters to append to the path\n * @returns The full redirect URL with basename\n */\nfunction buildAuthRedirectUrl(path: string, queryParams?: Record<string, string>): string {\n const basename = getBasename()\n\n // Parse the path, handling cases where it already includes query params\n const url = new URL(path, window.location.origin)\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n url.searchParams.set(key, value)\n })\n }\n\n // Remove the origin, keep only pathname + search\n let pathWithQuery = url.pathname + url.search\n\n // Strip the basename prefix if already present to avoid duplication (e.g. /blog/blog)\n if (basename && pathWithQuery.startsWith(basename)) {\n pathWithQuery = pathWithQuery.slice(basename.length) || '/'\n }\n\n return `${basename}${pathWithQuery}`\n}\n\n/**\n * Resolves the auth URL based on environment and host.\n * - If AUTH_URL is absolute (http/https), use it directly\n * - If AUTH_URL is relative: use same origin + path so Vercel rewrite /auth -> decentraland.zone/auth applies\n */\nfunction resolveAuthUrl(): string {\n const authUrl = getEnv('AUTH_URL') ?? '/auth'\n\n if (authUrl.startsWith('http')) {\n return authUrl\n }\n\n const isLocalhost = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1'\n\n if (isLocalhost) {\n return authUrl\n }\n\n return `${window.location.origin}${authUrl.startsWith('/') ? '' : '/'}${authUrl}`\n}\n\n/**\n * Resolves the path to redirect to after login from the current URL.\n * If the URL has a redirectTo query param, uses it; otherwise uses pathname + search.\n */\nfunction getRedirectPathFromCurrentUrl(): string {\n const pathname = window.location.pathname\n const search = window.location.search\n const searchParams = new URLSearchParams(search)\n const currentRedirectTo = searchParams.get('redirectTo')\n return currentRedirectTo ?? `${pathname}${search}`\n}\n\n/**\n * Redirects to the authentication URL with the specified redirect path.\n * When path is omitted, resolves it from the current URL (respecting redirectTo query param).\n * @param path - Optional path to redirect to after authentication (defaults to current URL)\n * @param queryParams - Optional query parameters to append to the path\n */\nfunction redirectToAuth(path?: string, queryParams?: Record<string, string>): void {\n const redirectPath = path ?? getRedirectPathFromCurrentUrl()\n const redirectTo = buildAuthRedirectUrl(redirectPath, queryParams)\n const authUrl = resolveAuthUrl()\n\n window.location.replace(`${authUrl}/login?redirectTo=${encodeURIComponent(redirectTo)}`)\n}\n\nexport { buildAuthRedirectUrl, redirectToAuth }\n","import { useEffect } from 'react'\nimport { redirectToAuth } from '../../utils/blogAuthRedirect'\n\nfunction SignInRedirect() {\n useEffect(() => {\n redirectToAuth()\n }, [])\n\n return null\n}\n\nexport { SignInRedirect }\n"],"names":["getBasename","buildAuthRedirectUrl","path","queryParams","basename","url","pathWithQuery","resolveAuthUrl","authUrl","getEnv","getRedirectPathFromCurrentUrl","pathname","search","redirectToAuth","redirectPath","redirectTo","SignInRedirect","useEffect"],"mappings":"uQAMA,SAASA,GAAsB,CAC7B,MAAO,kCAAkC,KAAK,OAAO,SAAS,IAAI,EAAI,QAAU,EAClF,CAQA,SAASC,EAAqBC,EAAcC,EAA8C,CACxF,MAAMC,EAAWJ,EAAA,EAGXK,EAAM,IAAI,IAAIH,EAAM,OAAO,SAAS,MAAM,EAQhD,IAAII,EAAgBD,EAAI,SAAWA,EAAI,OAGvC,OAAID,GAAYE,EAAc,WAAWF,CAAQ,IAC/CE,EAAgBA,EAAc,MAAMF,EAAS,MAAM,GAAK,KAGnD,GAAGA,CAAQ,GAAGE,CAAa,EACpC,CAOA,SAASC,GAAyB,CAChC,MAAMC,EAAUC,EAAO,UAAU,GAAK,QAQtC,OANID,EAAQ,WAAW,MAAM,GAIT,OAAO,SAAS,WAAa,aAAe,OAAO,SAAS,WAAa,YAGpFA,EAGF,GAAG,OAAO,SAAS,MAAM,GAAGA,EAAQ,WAAW,GAAG,EAAI,GAAK,GAAG,GAAGA,CAAO,EACjF,CAMA,SAASE,GAAwC,CAC/C,MAAMC,EAAW,OAAO,SAAS,SAC3BC,EAAS,OAAO,SAAS,OAG/B,OAFqB,IAAI,gBAAgBA,CAAM,EACR,IAAI,YAAY,GAC3B,GAAGD,CAAQ,GAAGC,CAAM,EAClD,CAQA,SAASC,EAAeX,EAAeC,EAA4C,CACjF,MAAMW,EAAuBJ,EAAA,EACvBK,EAAad,EAAqBa,CAAyB,EAC3DN,EAAUD,EAAA,EAEhB,OAAO,SAAS,QAAQ,GAAGC,CAAO,qBAAqB,mBAAmBO,CAAU,CAAC,EAAE,CACzF,CChFA,SAASC,GAAiB,CACxBC,OAAAA,EAAAA,UAAU,IAAM,CACdJ,EAAA,CACF,EAAG,CAAA,CAAE,EAEE,IACT"}
@@ -1 +1 @@
1
- import{u as o,r as c}from"./vendor-router-D_36sTKu.js";import{r as a}from"./index-DUmIu2EK.js";import"./vendor-sentry-BSvWNK4f.js";import"./vendor-crypto-uuuQA3i5.js";import"./vendor-schemas-DJzTSxpO.js";import"./vendor-ua-D7qqAxdq.js";import"./vendor-intl-D2lXWsDp.js";function P(){const{pathname:t,search:r}=o();return c.useEffect(()=>{const e=new URLSearchParams(r).get("redirectTo")||`${t}${r}`;a(e)},[t,r]),null}export{P as SignInRedirect};
1
+ import{u as o,r as c}from"./vendor-router-D_36sTKu.js";import{r as a}from"./index-_DB-noma.js";import"./vendor-sentry-BSvWNK4f.js";import"./vendor-crypto-uuuQA3i5.js";import"./vendor-schemas-DJzTSxpO.js";import"./vendor-ua-D7qqAxdq.js";import"./vendor-intl-D2lXWsDp.js";function P(){const{pathname:t,search:r}=o();return c.useEffect(()=>{const e=new URLSearchParams(r).get("redirectTo")||`${t}${r}`;a(e)},[t,r]),null}export{P as SignInRedirect};
@@ -1 +1 @@
1
- {"version":3,"file":"SignInRedirect-Bxl1dwag.js","sources":["../../src/pages/SignInRedirect.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { redirectToAuth } from '../utils/authRedirect'\n\nfunction SignInRedirect() {\n const { pathname, search } = useLocation()\n\n useEffect(() => {\n const searchParams = new URLSearchParams(search)\n const currentRedirectTo = searchParams.get('redirectTo')\n const redirectPath = currentRedirectTo || `${pathname}${search}`\n redirectToAuth(redirectPath)\n }, [pathname, search])\n\n return null\n}\n\nexport { SignInRedirect }\n"],"names":["SignInRedirect","pathname","search","useLocation","useEffect","redirectPath","redirectToAuth"],"mappings":"8QAIA,SAASA,GAAiB,CACxB,KAAM,CAAE,SAAAC,EAAU,OAAAC,CAAA,EAAWC,EAAA,EAE7BC,OAAAA,EAAAA,UAAU,IAAM,CAGd,MAAMC,EAFe,IAAI,gBAAgBH,CAAM,EACR,IAAI,YAAY,GACb,GAAGD,CAAQ,GAAGC,CAAM,GAC9DI,EAAeD,CAAY,CAC7B,EAAG,CAACJ,EAAUC,CAAM,CAAC,EAEd,IACT"}
1
+ {"version":3,"file":"SignInRedirect-CsLtxSTb.js","sources":["../../src/pages/SignInRedirect.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { redirectToAuth } from '../utils/authRedirect'\n\nfunction SignInRedirect() {\n const { pathname, search } = useLocation()\n\n useEffect(() => {\n const searchParams = new URLSearchParams(search)\n const currentRedirectTo = searchParams.get('redirectTo')\n const redirectPath = currentRedirectTo || `${pathname}${search}`\n redirectToAuth(redirectPath)\n }, [pathname, search])\n\n return null\n}\n\nexport { SignInRedirect }\n"],"names":["SignInRedirect","pathname","search","useLocation","useEffect","redirectPath","redirectToAuth"],"mappings":"8QAIA,SAASA,GAAiB,CACxB,KAAM,CAAE,SAAAC,EAAU,OAAAC,CAAA,EAAWC,EAAA,EAE7BC,OAAAA,EAAAA,UAAU,IAAM,CAGd,MAAMC,EAFe,IAAI,gBAAgBH,CAAM,EACR,IAAI,YAAY,GACb,GAAGD,CAAQ,GAAGC,CAAM,GAC9DI,EAAeD,CAAY,CAC7B,EAAG,CAACJ,EAAUC,CAAM,CAAC,EAEd,IACT"}
@@ -1,4 +1,4 @@
1
- import{an as u,ao as $,A as R,C as _,D as S,_ as M,c as o,j,E as A,G as E,s as O,H as c,I as v}from"./index-DUmIu2EK.js";import{r as U}from"./vendor-router-D_36sTKu.js";function I(t,e=0,n=1){return $(t,e,n)}function X(t){t=t.slice(1);const e=new RegExp(`.{1,${t.length>=6?2:1}}`,"g");let n=t.match(e);return n&&n[0].length===1&&(n=n.map(a=>a+a)),n?`rgb${n.length===4?"a":""}(${n.map((a,i)=>i<3?parseInt(a,16):Math.round(parseInt(a,16)/255*1e3)/1e3).join(", ")})`:""}function x(t){if(t.type)return t;if(t.charAt(0)==="#")return x(X(t));const e=t.indexOf("("),n=t.substring(0,e);if(["rgb","rgba","hsl","hsla","color"].indexOf(n)===-1)throw new Error(u(9,t));let a=t.substring(e+1,t.length-1),i;if(n==="color"){if(a=a.split(" "),i=a.shift(),a.length===4&&a[3].charAt(0)==="/"&&(a[3]=a[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(i)===-1)throw new Error(u(10,i))}else a=a.split(",");return a=a.map(s=>parseFloat(s)),{type:n,values:a,colorSpace:i}}function F(t){const{type:e,colorSpace:n}=t;let{values:a}=t;return e.indexOf("rgb")!==-1?a=a.map((i,s)=>s<3?parseInt(i,10):i):e.indexOf("hsl")!==-1&&(a[1]=`${a[1]}%`,a[2]=`${a[2]}%`),e.indexOf("color")!==-1?a=`${n} ${a.join(" ")}`:a=`${a.join(", ")}`,`${e}(${a})`}function N(t,e){return t=x(t),e=I(e),(t.type==="rgb"||t.type==="hsl")&&(t.type+="a"),t.type==="color"?t.values[3]=`/${e}`:t.values[3]=e,F(t)}function W(t){return String(t).match(/[\d.\-+]*\s*(.*)/)[1]||""}function B(t){return parseFloat(t)}function D(t){return R("MuiSkeleton",t)}_("MuiSkeleton",["root","text","rectangular","rounded","circular","pulse","wave","withChildren","fitContent","heightAuto"]);const K=["animation","className","component","height","style","variant","width"];let l=t=>t,f,g,m,b;const P=t=>{const{classes:e,variant:n,animation:a,hasChildren:i,width:s,height:r}=t;return E({root:["root",n,a,i&&"withChildren",i&&!s&&"fitContent",i&&!r&&"heightAuto"]},D,e)},T=v(f||(f=l`
1
+ import{an as u,ao as $,A as R,C as _,D as S,_ as M,c as o,j,E as A,G as E,s as O,H as c,I as v}from"./index-_DB-noma.js";import{r as U}from"./vendor-router-D_36sTKu.js";function I(t,e=0,n=1){return $(t,e,n)}function X(t){t=t.slice(1);const e=new RegExp(`.{1,${t.length>=6?2:1}}`,"g");let n=t.match(e);return n&&n[0].length===1&&(n=n.map(a=>a+a)),n?`rgb${n.length===4?"a":""}(${n.map((a,i)=>i<3?parseInt(a,16):Math.round(parseInt(a,16)/255*1e3)/1e3).join(", ")})`:""}function x(t){if(t.type)return t;if(t.charAt(0)==="#")return x(X(t));const e=t.indexOf("("),n=t.substring(0,e);if(["rgb","rgba","hsl","hsla","color"].indexOf(n)===-1)throw new Error(u(9,t));let a=t.substring(e+1,t.length-1),i;if(n==="color"){if(a=a.split(" "),i=a.shift(),a.length===4&&a[3].charAt(0)==="/"&&(a[3]=a[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(i)===-1)throw new Error(u(10,i))}else a=a.split(",");return a=a.map(s=>parseFloat(s)),{type:n,values:a,colorSpace:i}}function F(t){const{type:e,colorSpace:n}=t;let{values:a}=t;return e.indexOf("rgb")!==-1?a=a.map((i,s)=>s<3?parseInt(i,10):i):e.indexOf("hsl")!==-1&&(a[1]=`${a[1]}%`,a[2]=`${a[2]}%`),e.indexOf("color")!==-1?a=`${n} ${a.join(" ")}`:a=`${a.join(", ")}`,`${e}(${a})`}function N(t,e){return t=x(t),e=I(e),(t.type==="rgb"||t.type==="hsl")&&(t.type+="a"),t.type==="color"?t.values[3]=`/${e}`:t.values[3]=e,F(t)}function W(t){return String(t).match(/[\d.\-+]*\s*(.*)/)[1]||""}function B(t){return parseFloat(t)}function D(t){return R("MuiSkeleton",t)}_("MuiSkeleton",["root","text","rectangular","rounded","circular","pulse","wave","withChildren","fitContent","heightAuto"]);const K=["animation","className","component","height","style","variant","width"];let l=t=>t,f,g,m,b;const P=t=>{const{classes:e,variant:n,animation:a,hasChildren:i,width:s,height:r}=t;return E({root:["root",n,a,i&&"withChildren",i&&!s&&"fitContent",i&&!r&&"heightAuto"]},D,e)},T=v(f||(f=l`
2
2
  0% {
3
3
  opacity: 1;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton-BP1Os8gY.js","sources":["../../node_modules/@mui/system/esm/colorManipulator.js","../../node_modules/decentraland-ui2/node_modules/@mui/material/styles/cssUtils.js","../../node_modules/decentraland-ui2/node_modules/@mui/material/Skeleton/skeletonClasses.js","../../node_modules/decentraland-ui2/node_modules/@mui/material/Skeleton/Skeleton.js"],"sourcesContent":["import _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\nThe following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` : _formatMuiErrorMessage(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\nThe following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.` : _formatMuiErrorMessage(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.indexOf('hsl') !== -1) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.indexOf('color') !== -1) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n // Idempotent\n if (color.indexOf('#') === 0) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n color = decomposeColor(color);\n value = clampWrapper(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n try {\n return emphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n const backgroundColor = decomposeColor(background);\n const overlayColor = decomposeColor(overlay);\n const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n return recomposeColor({\n type: 'rgb',\n values: rgb\n });\n}","export function isUnitless(value) {\n return String(parseFloat(value)).length === String(value).length;\n}\n\n// Ported from Compass\n// https://github.com/Compass/compass/blob/master/core/stylesheets/compass/typography/_units.scss\n// Emulate the sass function \"unit\"\nexport function getUnit(input) {\n return String(input).match(/[\\d.\\-+]*\\s*(.*)/)[1] || '';\n}\n\n// Emulate the sass function \"unitless\"\nexport function toUnitless(length) {\n return parseFloat(length);\n}\n\n// Convert any CSS <length> or <percentage> value to any another.\n// From https://github.com/KyleAMathews/convert-css-length\nexport function convertLength(baseFontSize) {\n return (length, toUnit) => {\n const fromUnit = getUnit(length);\n\n // Optimize for cases where `from` and `to` units are accidentally the same.\n if (fromUnit === toUnit) {\n return length;\n }\n\n // Convert input length to pixels.\n let pxLength = toUnitless(length);\n if (fromUnit !== 'px') {\n if (fromUnit === 'em') {\n pxLength = toUnitless(length) * toUnitless(baseFontSize);\n } else if (fromUnit === 'rem') {\n pxLength = toUnitless(length) * toUnitless(baseFontSize);\n }\n }\n\n // Convert length in pixels to the output unit\n let outputLength = pxLength;\n if (toUnit !== 'px') {\n if (toUnit === 'em') {\n outputLength = pxLength / toUnitless(baseFontSize);\n } else if (toUnit === 'rem') {\n outputLength = pxLength / toUnitless(baseFontSize);\n } else {\n return length;\n }\n }\n return parseFloat(outputLength.toFixed(5)) + toUnit;\n };\n}\nexport function alignProperty({\n size,\n grid\n}) {\n const sizeBelow = size - size % grid;\n const sizeAbove = sizeBelow + grid;\n return size - sizeBelow < sizeAbove - size ? sizeBelow : sizeAbove;\n}\n\n// fontGrid finds a minimal grid (in rem) for the fontSize values so that the\n// lineHeight falls under a x pixels grid, 4px in the case of Material Design,\n// without changing the relative line height\nexport function fontGrid({\n lineHeight,\n pixels,\n htmlFontSize\n}) {\n return pixels / (lineHeight * htmlFontSize);\n}\n\n/**\n * generate a responsive version of a given CSS property\n * @example\n * responsiveProperty({\n * cssProperty: 'fontSize',\n * min: 15,\n * max: 20,\n * unit: 'px',\n * breakpoints: [300, 600],\n * })\n *\n * // this returns\n *\n * {\n * fontSize: '15px',\n * '@media (min-width:300px)': {\n * fontSize: '17.5px',\n * },\n * '@media (min-width:600px)': {\n * fontSize: '20px',\n * },\n * }\n * @param {Object} params\n * @param {string} params.cssProperty - The CSS property to be made responsive\n * @param {number} params.min - The smallest value of the CSS property\n * @param {number} params.max - The largest value of the CSS property\n * @param {string} [params.unit] - The unit to be used for the CSS property\n * @param {Array.number} [params.breakpoints] - An array of breakpoints\n * @param {number} [params.alignStep] - Round scaled value to fall under this grid\n * @returns {Object} responsive styles for {params.cssProperty}\n */\nexport function responsiveProperty({\n cssProperty,\n min,\n max,\n unit = 'rem',\n breakpoints = [600, 900, 1200],\n transform = null\n}) {\n const output = {\n [cssProperty]: `${min}${unit}`\n };\n const factor = (max - min) / breakpoints[breakpoints.length - 1];\n breakpoints.forEach(breakpoint => {\n let value = min + factor * breakpoint;\n if (transform !== null) {\n value = transform(value);\n }\n output[`@media (min-width:${breakpoint}px)`] = {\n [cssProperty]: `${Math.round(value * 10000) / 10000}${unit}`\n };\n });\n return output;\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSkeletonUtilityClass(slot) {\n return generateUtilityClass('MuiSkeleton', slot);\n}\nconst skeletonClasses = generateUtilityClasses('MuiSkeleton', ['root', 'text', 'rectangular', 'rounded', 'circular', 'pulse', 'wave', 'withChildren', 'fitContent', 'heightAuto']);\nexport default skeletonClasses;","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"animation\", \"className\", \"component\", \"height\", \"style\", \"variant\", \"width\"];\nlet _ = t => t,\n _t,\n _t2,\n _t3,\n _t4;\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { keyframes, css } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha, unstable_getUnit as getUnit, unstable_toUnitless as toUnitless } from '../styles';\nimport styled from '../styles/styled';\nimport { useDefaultProps } from '../DefaultPropsProvider';\nimport { getSkeletonUtilityClass } from './skeletonClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n variant,\n animation,\n hasChildren,\n width,\n height\n } = ownerState;\n const slots = {\n root: ['root', variant, animation, hasChildren && 'withChildren', hasChildren && !width && 'fitContent', hasChildren && !height && 'heightAuto']\n };\n return composeClasses(slots, getSkeletonUtilityClass, classes);\n};\nconst pulseKeyframe = keyframes(_t || (_t = _`\n 0% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.4;\n }\n\n 100% {\n opacity: 1;\n }\n`));\nconst waveKeyframe = keyframes(_t2 || (_t2 = _`\n 0% {\n transform: translateX(-100%);\n }\n\n 50% {\n /* +0.5s of delay between each loop */\n transform: translateX(100%);\n }\n\n 100% {\n transform: translateX(100%);\n }\n`));\nconst SkeletonRoot = styled('span', {\n name: 'MuiSkeleton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.variant], ownerState.animation !== false && styles[ownerState.animation], ownerState.hasChildren && styles.withChildren, ownerState.hasChildren && !ownerState.width && styles.fitContent, ownerState.hasChildren && !ownerState.height && styles.heightAuto];\n }\n})(({\n theme,\n ownerState\n}) => {\n const radiusUnit = getUnit(theme.shape.borderRadius) || 'px';\n const radiusValue = toUnitless(theme.shape.borderRadius);\n return _extends({\n display: 'block',\n // Create a \"on paper\" color with sufficient contrast retaining the color\n backgroundColor: theme.vars ? theme.vars.palette.Skeleton.bg : alpha(theme.palette.text.primary, theme.palette.mode === 'light' ? 0.11 : 0.13),\n height: '1.2em'\n }, ownerState.variant === 'text' && {\n marginTop: 0,\n marginBottom: 0,\n height: 'auto',\n transformOrigin: '0 55%',\n transform: 'scale(1, 0.60)',\n borderRadius: `${radiusValue}${radiusUnit}/${Math.round(radiusValue / 0.6 * 10) / 10}${radiusUnit}`,\n '&:empty:before': {\n content: '\"\\\\00a0\"'\n }\n }, ownerState.variant === 'circular' && {\n borderRadius: '50%'\n }, ownerState.variant === 'rounded' && {\n borderRadius: (theme.vars || theme).shape.borderRadius\n }, ownerState.hasChildren && {\n '& > *': {\n visibility: 'hidden'\n }\n }, ownerState.hasChildren && !ownerState.width && {\n maxWidth: 'fit-content'\n }, ownerState.hasChildren && !ownerState.height && {\n height: 'auto'\n });\n}, ({\n ownerState\n}) => ownerState.animation === 'pulse' && css(_t3 || (_t3 = _`\n animation: ${0} 2s ease-in-out 0.5s infinite;\n `), pulseKeyframe), ({\n ownerState,\n theme\n}) => ownerState.animation === 'wave' && css(_t4 || (_t4 = _`\n position: relative;\n overflow: hidden;\n\n /* Fix bug in Safari https://bugs.webkit.org/show_bug.cgi?id=68196 */\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n &::after {\n animation: ${0} 2s linear 0.5s infinite;\n background: linear-gradient(\n 90deg,\n transparent,\n ${0},\n transparent\n );\n content: '';\n position: absolute;\n transform: translateX(-100%); /* Avoid flash during server-side hydration */\n bottom: 0;\n left: 0;\n right: 0;\n top: 0;\n }\n `), waveKeyframe, (theme.vars || theme).palette.action.hover));\nconst Skeleton = /*#__PURE__*/React.forwardRef(function Skeleton(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiSkeleton'\n });\n const {\n animation = 'pulse',\n className,\n component = 'span',\n height,\n style,\n variant = 'text',\n width\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n animation,\n component,\n variant,\n hasChildren: Boolean(other.children)\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(SkeletonRoot, _extends({\n as: component,\n ref: ref,\n className: clsx(classes.root, className),\n ownerState: ownerState\n }, other, {\n style: _extends({\n width,\n height\n }, style)\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Skeleton.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * The animation.\n * If `false` the animation effect is disabled.\n * @default 'pulse'\n */\n animation: PropTypes.oneOf(['pulse', 'wave', false]),\n /**\n * Optional children to infer width and height from.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Height of the skeleton.\n * Useful when you don't want to adapt the skeleton to a text element but for instance a card.\n */\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * @ignore\n */\n style: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The type of content that will be rendered.\n * @default 'text'\n */\n variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rectangular', 'rounded', 'text']), PropTypes.string]),\n /**\n * Width of the skeleton.\n * Useful when the skeleton is inside an inline element with no width of its own.\n */\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n} : void 0;\nexport default Skeleton;"],"names":["clampWrapper","value","min","max","clamp","hexToRgb","color","re","colors","n","index","decomposeColor","marker","type","_formatMuiErrorMessage","values","colorSpace","recomposeColor","i","alpha","getUnit","input","toUnitless","length","getSkeletonUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","_","_t","_t2","_t3","_t4","useUtilityClasses","ownerState","classes","variant","animation","hasChildren","width","height","composeClasses","pulseKeyframe","keyframes","waveKeyframe","SkeletonRoot","styled","props","styles","theme","radiusUnit","radiusValue","_extends","css","Skeleton","React.forwardRef","inProps","ref","useDefaultProps","className","component","style","other","_objectWithoutPropertiesLoose","_jsx","clsx"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"Skeleton-yDn4B-G5.js","sources":["../../node_modules/@mui/system/esm/colorManipulator.js","../../node_modules/decentraland-ui2/node_modules/@mui/material/styles/cssUtils.js","../../node_modules/decentraland-ui2/node_modules/@mui/material/Skeleton/skeletonClasses.js","../../node_modules/decentraland-ui2/node_modules/@mui/material/Skeleton/Skeleton.js"],"sourcesContent":["import _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\nThe following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` : _formatMuiErrorMessage(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\nThe following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.` : _formatMuiErrorMessage(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.indexOf('hsl') !== -1) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.indexOf('color') !== -1) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n // Idempotent\n if (color.indexOf('#') === 0) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n color = decomposeColor(color);\n value = clampWrapper(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n try {\n return emphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n const backgroundColor = decomposeColor(background);\n const overlayColor = decomposeColor(overlay);\n const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n return recomposeColor({\n type: 'rgb',\n values: rgb\n });\n}","export function isUnitless(value) {\n return String(parseFloat(value)).length === String(value).length;\n}\n\n// Ported from Compass\n// https://github.com/Compass/compass/blob/master/core/stylesheets/compass/typography/_units.scss\n// Emulate the sass function \"unit\"\nexport function getUnit(input) {\n return String(input).match(/[\\d.\\-+]*\\s*(.*)/)[1] || '';\n}\n\n// Emulate the sass function \"unitless\"\nexport function toUnitless(length) {\n return parseFloat(length);\n}\n\n// Convert any CSS <length> or <percentage> value to any another.\n// From https://github.com/KyleAMathews/convert-css-length\nexport function convertLength(baseFontSize) {\n return (length, toUnit) => {\n const fromUnit = getUnit(length);\n\n // Optimize for cases where `from` and `to` units are accidentally the same.\n if (fromUnit === toUnit) {\n return length;\n }\n\n // Convert input length to pixels.\n let pxLength = toUnitless(length);\n if (fromUnit !== 'px') {\n if (fromUnit === 'em') {\n pxLength = toUnitless(length) * toUnitless(baseFontSize);\n } else if (fromUnit === 'rem') {\n pxLength = toUnitless(length) * toUnitless(baseFontSize);\n }\n }\n\n // Convert length in pixels to the output unit\n let outputLength = pxLength;\n if (toUnit !== 'px') {\n if (toUnit === 'em') {\n outputLength = pxLength / toUnitless(baseFontSize);\n } else if (toUnit === 'rem') {\n outputLength = pxLength / toUnitless(baseFontSize);\n } else {\n return length;\n }\n }\n return parseFloat(outputLength.toFixed(5)) + toUnit;\n };\n}\nexport function alignProperty({\n size,\n grid\n}) {\n const sizeBelow = size - size % grid;\n const sizeAbove = sizeBelow + grid;\n return size - sizeBelow < sizeAbove - size ? sizeBelow : sizeAbove;\n}\n\n// fontGrid finds a minimal grid (in rem) for the fontSize values so that the\n// lineHeight falls under a x pixels grid, 4px in the case of Material Design,\n// without changing the relative line height\nexport function fontGrid({\n lineHeight,\n pixels,\n htmlFontSize\n}) {\n return pixels / (lineHeight * htmlFontSize);\n}\n\n/**\n * generate a responsive version of a given CSS property\n * @example\n * responsiveProperty({\n * cssProperty: 'fontSize',\n * min: 15,\n * max: 20,\n * unit: 'px',\n * breakpoints: [300, 600],\n * })\n *\n * // this returns\n *\n * {\n * fontSize: '15px',\n * '@media (min-width:300px)': {\n * fontSize: '17.5px',\n * },\n * '@media (min-width:600px)': {\n * fontSize: '20px',\n * },\n * }\n * @param {Object} params\n * @param {string} params.cssProperty - The CSS property to be made responsive\n * @param {number} params.min - The smallest value of the CSS property\n * @param {number} params.max - The largest value of the CSS property\n * @param {string} [params.unit] - The unit to be used for the CSS property\n * @param {Array.number} [params.breakpoints] - An array of breakpoints\n * @param {number} [params.alignStep] - Round scaled value to fall under this grid\n * @returns {Object} responsive styles for {params.cssProperty}\n */\nexport function responsiveProperty({\n cssProperty,\n min,\n max,\n unit = 'rem',\n breakpoints = [600, 900, 1200],\n transform = null\n}) {\n const output = {\n [cssProperty]: `${min}${unit}`\n };\n const factor = (max - min) / breakpoints[breakpoints.length - 1];\n breakpoints.forEach(breakpoint => {\n let value = min + factor * breakpoint;\n if (transform !== null) {\n value = transform(value);\n }\n output[`@media (min-width:${breakpoint}px)`] = {\n [cssProperty]: `${Math.round(value * 10000) / 10000}${unit}`\n };\n });\n return output;\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSkeletonUtilityClass(slot) {\n return generateUtilityClass('MuiSkeleton', slot);\n}\nconst skeletonClasses = generateUtilityClasses('MuiSkeleton', ['root', 'text', 'rectangular', 'rounded', 'circular', 'pulse', 'wave', 'withChildren', 'fitContent', 'heightAuto']);\nexport default skeletonClasses;","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"animation\", \"className\", \"component\", \"height\", \"style\", \"variant\", \"width\"];\nlet _ = t => t,\n _t,\n _t2,\n _t3,\n _t4;\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { keyframes, css } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha, unstable_getUnit as getUnit, unstable_toUnitless as toUnitless } from '../styles';\nimport styled from '../styles/styled';\nimport { useDefaultProps } from '../DefaultPropsProvider';\nimport { getSkeletonUtilityClass } from './skeletonClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n variant,\n animation,\n hasChildren,\n width,\n height\n } = ownerState;\n const slots = {\n root: ['root', variant, animation, hasChildren && 'withChildren', hasChildren && !width && 'fitContent', hasChildren && !height && 'heightAuto']\n };\n return composeClasses(slots, getSkeletonUtilityClass, classes);\n};\nconst pulseKeyframe = keyframes(_t || (_t = _`\n 0% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.4;\n }\n\n 100% {\n opacity: 1;\n }\n`));\nconst waveKeyframe = keyframes(_t2 || (_t2 = _`\n 0% {\n transform: translateX(-100%);\n }\n\n 50% {\n /* +0.5s of delay between each loop */\n transform: translateX(100%);\n }\n\n 100% {\n transform: translateX(100%);\n }\n`));\nconst SkeletonRoot = styled('span', {\n name: 'MuiSkeleton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.variant], ownerState.animation !== false && styles[ownerState.animation], ownerState.hasChildren && styles.withChildren, ownerState.hasChildren && !ownerState.width && styles.fitContent, ownerState.hasChildren && !ownerState.height && styles.heightAuto];\n }\n})(({\n theme,\n ownerState\n}) => {\n const radiusUnit = getUnit(theme.shape.borderRadius) || 'px';\n const radiusValue = toUnitless(theme.shape.borderRadius);\n return _extends({\n display: 'block',\n // Create a \"on paper\" color with sufficient contrast retaining the color\n backgroundColor: theme.vars ? theme.vars.palette.Skeleton.bg : alpha(theme.palette.text.primary, theme.palette.mode === 'light' ? 0.11 : 0.13),\n height: '1.2em'\n }, ownerState.variant === 'text' && {\n marginTop: 0,\n marginBottom: 0,\n height: 'auto',\n transformOrigin: '0 55%',\n transform: 'scale(1, 0.60)',\n borderRadius: `${radiusValue}${radiusUnit}/${Math.round(radiusValue / 0.6 * 10) / 10}${radiusUnit}`,\n '&:empty:before': {\n content: '\"\\\\00a0\"'\n }\n }, ownerState.variant === 'circular' && {\n borderRadius: '50%'\n }, ownerState.variant === 'rounded' && {\n borderRadius: (theme.vars || theme).shape.borderRadius\n }, ownerState.hasChildren && {\n '& > *': {\n visibility: 'hidden'\n }\n }, ownerState.hasChildren && !ownerState.width && {\n maxWidth: 'fit-content'\n }, ownerState.hasChildren && !ownerState.height && {\n height: 'auto'\n });\n}, ({\n ownerState\n}) => ownerState.animation === 'pulse' && css(_t3 || (_t3 = _`\n animation: ${0} 2s ease-in-out 0.5s infinite;\n `), pulseKeyframe), ({\n ownerState,\n theme\n}) => ownerState.animation === 'wave' && css(_t4 || (_t4 = _`\n position: relative;\n overflow: hidden;\n\n /* Fix bug in Safari https://bugs.webkit.org/show_bug.cgi?id=68196 */\n -webkit-mask-image: -webkit-radial-gradient(white, black);\n\n &::after {\n animation: ${0} 2s linear 0.5s infinite;\n background: linear-gradient(\n 90deg,\n transparent,\n ${0},\n transparent\n );\n content: '';\n position: absolute;\n transform: translateX(-100%); /* Avoid flash during server-side hydration */\n bottom: 0;\n left: 0;\n right: 0;\n top: 0;\n }\n `), waveKeyframe, (theme.vars || theme).palette.action.hover));\nconst Skeleton = /*#__PURE__*/React.forwardRef(function Skeleton(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiSkeleton'\n });\n const {\n animation = 'pulse',\n className,\n component = 'span',\n height,\n style,\n variant = 'text',\n width\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n animation,\n component,\n variant,\n hasChildren: Boolean(other.children)\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(SkeletonRoot, _extends({\n as: component,\n ref: ref,\n className: clsx(classes.root, className),\n ownerState: ownerState\n }, other, {\n style: _extends({\n width,\n height\n }, style)\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Skeleton.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * The animation.\n * If `false` the animation effect is disabled.\n * @default 'pulse'\n */\n animation: PropTypes.oneOf(['pulse', 'wave', false]),\n /**\n * Optional children to infer width and height from.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Height of the skeleton.\n * Useful when you don't want to adapt the skeleton to a text element but for instance a card.\n */\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * @ignore\n */\n style: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The type of content that will be rendered.\n * @default 'text'\n */\n variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rectangular', 'rounded', 'text']), PropTypes.string]),\n /**\n * Width of the skeleton.\n * Useful when the skeleton is inside an inline element with no width of its own.\n */\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n} : void 0;\nexport default Skeleton;"],"names":["clampWrapper","value","min","max","clamp","hexToRgb","color","re","colors","n","index","decomposeColor","marker","type","_formatMuiErrorMessage","values","colorSpace","recomposeColor","i","alpha","getUnit","input","toUnitless","length","getSkeletonUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","_","_t","_t2","_t3","_t4","useUtilityClasses","ownerState","classes","variant","animation","hasChildren","width","height","composeClasses","pulseKeyframe","keyframes","waveKeyframe","SkeletonRoot","styled","props","styles","theme","radiusUnit","radiusValue","_extends","css","Skeleton","React.forwardRef","inProps","ref","useDefaultProps","className","component","style","other","_objectWithoutPropertiesLoose","_jsx","clsx"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1 +1 @@
1
- import{j as c}from"./index-DUmIu2EK.js";import{r as s}from"./vendor-router-D_36sTKu.js";import"./vendor-crypto-uuuQA3i5.js";import"./vendor-schemas-DJzTSxpO.js";import"./vendor-sentry-BSvWNK4f.js";import"./vendor-ua-D7qqAxdq.js";import"./vendor-intl-D2lXWsDp.js";const u="https://platform.twitter.com/widgets.js";let i=null;const a=()=>i||(typeof window>"u"||window.twttr?.widgets?Promise.resolve():(i=new Promise((n,r)=>{const t=document.createElement("script");t.src=u,t.async=!0,t.onload=()=>n(),t.onerror=()=>{i=null,r(new Error("Failed to load Twitter widgets"))},document.head.appendChild(t)}),i)),w=e=>{for(;e.firstChild;)e.removeChild(e.firstChild)},C=({tweetId:e,theme:n="dark"})=>{const r=s.useRef(null),[t,l]=s.useState(!0);return s.useEffect(()=>{let o=!1;return a().then(()=>{if(o||!r.current)return;w(r.current);const d=window.twttr?.widgets;if(d)return d.createTweet(e,r.current,{theme:n})}).finally(()=>{o||l(!1)}),()=>{o=!0}},[e,n]),c.jsx("div",{ref:r,"aria-busy":t?!0:void 0,children:t?"Loading tweet…":null})};export{C as TwitterEmbed};
1
+ import{j as c}from"./index-_DB-noma.js";import{r as s}from"./vendor-router-D_36sTKu.js";import"./vendor-crypto-uuuQA3i5.js";import"./vendor-schemas-DJzTSxpO.js";import"./vendor-sentry-BSvWNK4f.js";import"./vendor-ua-D7qqAxdq.js";import"./vendor-intl-D2lXWsDp.js";const u="https://platform.twitter.com/widgets.js";let i=null;const a=()=>i||(typeof window>"u"||window.twttr?.widgets?Promise.resolve():(i=new Promise((n,r)=>{const t=document.createElement("script");t.src=u,t.async=!0,t.onload=()=>n(),t.onerror=()=>{i=null,r(new Error("Failed to load Twitter widgets"))},document.head.appendChild(t)}),i)),w=e=>{for(;e.firstChild;)e.removeChild(e.firstChild)},C=({tweetId:e,theme:n="dark"})=>{const r=s.useRef(null),[t,l]=s.useState(!0);return s.useEffect(()=>{let o=!1;return a().then(()=>{if(o||!r.current)return;w(r.current);const d=window.twttr?.widgets;if(d)return d.createTweet(e,r.current,{theme:n})}).finally(()=>{o||l(!1)}),()=>{o=!0}},[e,n]),c.jsx("div",{ref:r,"aria-busy":t?!0:void 0,children:t?"Loading tweet…":null})};export{C as TwitterEmbed};
@@ -1 +1 @@
1
- {"version":3,"file":"TwitterEmbed-BbSYYog-.js","sources":["../../src/components/blog/RichText/TwitterEmbed.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\n\nconst WIDGETS_SRC = 'https://platform.twitter.com/widgets.js'\n\ntype TwitterWidgets = {\n createTweet: (tweetId: string, element: HTMLElement, options?: { theme?: 'light' | 'dark' }) => Promise<HTMLElement | undefined>\n}\n\ntype TwitterGlobal = { widgets?: TwitterWidgets }\n\n// Hoisted so concurrent callers share a single script load.\nlet scriptPromise: Promise<void> | null = null\n\nconst loadTwitterWidgets = (): Promise<void> => {\n if (scriptPromise) return scriptPromise\n if (typeof window === 'undefined') return Promise.resolve()\n\n const existing = (window as unknown as { twttr?: TwitterGlobal }).twttr\n if (existing?.widgets) return Promise.resolve()\n\n scriptPromise = new Promise((resolve, reject) => {\n const script = document.createElement('script')\n script.src = WIDGETS_SRC\n script.async = true\n script.onload = () => resolve()\n script.onerror = () => {\n scriptPromise = null\n reject(new Error('Failed to load Twitter widgets'))\n }\n document.head.appendChild(script)\n })\n return scriptPromise\n}\n\nconst clearContainer = (el: HTMLElement) => {\n while (el.firstChild) el.removeChild(el.firstChild)\n}\n\ninterface TwitterEmbedProps {\n tweetId: string\n theme?: 'light' | 'dark'\n}\n\nconst TwitterEmbed = ({ tweetId, theme = 'dark' }: TwitterEmbedProps) => {\n const ref = useRef<HTMLDivElement>(null)\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n let cancelled = false\n\n loadTwitterWidgets()\n .then(() => {\n if (cancelled || !ref.current) return\n clearContainer(ref.current)\n const widgets = (window as unknown as { twttr?: TwitterGlobal }).twttr?.widgets\n if (!widgets) return\n return widgets.createTweet(tweetId, ref.current, { theme })\n })\n .finally(() => {\n if (!cancelled) setLoading(false)\n })\n\n return () => {\n cancelled = true\n }\n }, [tweetId, theme])\n\n return (\n <div ref={ref} aria-busy={loading ? true : undefined}>\n {loading ? 'Loading tweet…' : null}\n </div>\n )\n}\n\nexport { TwitterEmbed }\n"],"names":["WIDGETS_SRC","scriptPromise","loadTwitterWidgets","resolve","reject","script","clearContainer","el","TwitterEmbed","tweetId","theme","ref","useRef","loading","setLoading","useState","useEffect","cancelled","widgets","jsx"],"mappings":"uQAEA,MAAMA,EAAc,0CASpB,IAAIC,EAAsC,KAE1C,MAAMC,EAAqB,IACrBD,IACA,OAAO,OAAW,KAEJ,OAAgD,OACpD,QAAgB,QAAQ,QAAA,GAEtCA,EAAgB,IAAI,QAAQ,CAACE,EAASC,IAAW,CAC/C,MAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAML,EACbK,EAAO,MAAQ,GACfA,EAAO,OAAS,IAAMF,EAAA,EACtBE,EAAO,QAAU,IAAM,CACrBJ,EAAgB,KAChBG,EAAO,IAAI,MAAM,gCAAgC,CAAC,CACpD,EACA,SAAS,KAAK,YAAYC,CAAM,CAClC,CAAC,EACMJ,IAGHK,EAAkBC,GAAoB,CAC1C,KAAOA,EAAG,YAAYA,EAAG,YAAYA,EAAG,UAAU,CACpD,EAOMC,EAAe,CAAC,CAAE,QAAAC,EAAS,MAAAC,EAAQ,UAAgC,CACvE,MAAMC,EAAMC,EAAAA,OAAuB,IAAI,EACjC,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAI,EAE3CC,OAAAA,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAY,GAEhB,OAAAf,EAAA,EACG,KAAK,IAAM,CACV,GAAIe,GAAa,CAACN,EAAI,QAAS,OAC/BL,EAAeK,EAAI,OAAO,EAC1B,MAAMO,EAAW,OAAgD,OAAO,QACxE,GAAKA,EACL,OAAOA,EAAQ,YAAYT,EAASE,EAAI,QAAS,CAAE,MAAAD,EAAO,CAC5D,CAAC,EACA,QAAQ,IAAM,CACRO,GAAWH,EAAW,EAAK,CAClC,CAAC,EAEI,IAAM,CACXG,EAAY,EACd,CACF,EAAG,CAACR,EAASC,CAAK,CAAC,EAGjBS,EAAAA,IAAC,OAAI,IAAAR,EAAU,YAAWE,EAAU,GAAO,OACxC,SAAAA,EAAU,iBAAmB,IAAA,CAChC,CAEJ"}
1
+ {"version":3,"file":"TwitterEmbed-CD3AmHIQ.js","sources":["../../src/components/blog/RichText/TwitterEmbed.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\n\nconst WIDGETS_SRC = 'https://platform.twitter.com/widgets.js'\n\ntype TwitterWidgets = {\n createTweet: (tweetId: string, element: HTMLElement, options?: { theme?: 'light' | 'dark' }) => Promise<HTMLElement | undefined>\n}\n\ntype TwitterGlobal = { widgets?: TwitterWidgets }\n\n// Hoisted so concurrent callers share a single script load.\nlet scriptPromise: Promise<void> | null = null\n\nconst loadTwitterWidgets = (): Promise<void> => {\n if (scriptPromise) return scriptPromise\n if (typeof window === 'undefined') return Promise.resolve()\n\n const existing = (window as unknown as { twttr?: TwitterGlobal }).twttr\n if (existing?.widgets) return Promise.resolve()\n\n scriptPromise = new Promise((resolve, reject) => {\n const script = document.createElement('script')\n script.src = WIDGETS_SRC\n script.async = true\n script.onload = () => resolve()\n script.onerror = () => {\n scriptPromise = null\n reject(new Error('Failed to load Twitter widgets'))\n }\n document.head.appendChild(script)\n })\n return scriptPromise\n}\n\nconst clearContainer = (el: HTMLElement) => {\n while (el.firstChild) el.removeChild(el.firstChild)\n}\n\ninterface TwitterEmbedProps {\n tweetId: string\n theme?: 'light' | 'dark'\n}\n\nconst TwitterEmbed = ({ tweetId, theme = 'dark' }: TwitterEmbedProps) => {\n const ref = useRef<HTMLDivElement>(null)\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n let cancelled = false\n\n loadTwitterWidgets()\n .then(() => {\n if (cancelled || !ref.current) return\n clearContainer(ref.current)\n const widgets = (window as unknown as { twttr?: TwitterGlobal }).twttr?.widgets\n if (!widgets) return\n return widgets.createTweet(tweetId, ref.current, { theme })\n })\n .finally(() => {\n if (!cancelled) setLoading(false)\n })\n\n return () => {\n cancelled = true\n }\n }, [tweetId, theme])\n\n return (\n <div ref={ref} aria-busy={loading ? true : undefined}>\n {loading ? 'Loading tweet…' : null}\n </div>\n )\n}\n\nexport { TwitterEmbed }\n"],"names":["WIDGETS_SRC","scriptPromise","loadTwitterWidgets","resolve","reject","script","clearContainer","el","TwitterEmbed","tweetId","theme","ref","useRef","loading","setLoading","useState","useEffect","cancelled","widgets","jsx"],"mappings":"uQAEA,MAAMA,EAAc,0CASpB,IAAIC,EAAsC,KAE1C,MAAMC,EAAqB,IACrBD,IACA,OAAO,OAAW,KAEJ,OAAgD,OACpD,QAAgB,QAAQ,QAAA,GAEtCA,EAAgB,IAAI,QAAQ,CAACE,EAASC,IAAW,CAC/C,MAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAML,EACbK,EAAO,MAAQ,GACfA,EAAO,OAAS,IAAMF,EAAA,EACtBE,EAAO,QAAU,IAAM,CACrBJ,EAAgB,KAChBG,EAAO,IAAI,MAAM,gCAAgC,CAAC,CACpD,EACA,SAAS,KAAK,YAAYC,CAAM,CAClC,CAAC,EACMJ,IAGHK,EAAkBC,GAAoB,CAC1C,KAAOA,EAAG,YAAYA,EAAG,YAAYA,EAAG,UAAU,CACpD,EAOMC,EAAe,CAAC,CAAE,QAAAC,EAAS,MAAAC,EAAQ,UAAgC,CACvE,MAAMC,EAAMC,EAAAA,OAAuB,IAAI,EACjC,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAI,EAE3CC,OAAAA,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAY,GAEhB,OAAAf,EAAA,EACG,KAAK,IAAM,CACV,GAAIe,GAAa,CAACN,EAAI,QAAS,OAC/BL,EAAeK,EAAI,OAAO,EAC1B,MAAMO,EAAW,OAAgD,OAAO,QACxE,GAAKA,EACL,OAAOA,EAAQ,YAAYT,EAASE,EAAI,QAAS,CAAE,MAAAD,EAAO,CAC5D,CAAC,EACA,QAAQ,IAAM,CACRO,GAAWH,EAAW,EAAK,CAClC,CAAC,EAEI,IAAM,CACXG,EAAY,EACd,CACF,EAAG,CAACR,EAASC,CAAK,CAAC,EAGjBS,EAAAA,IAAC,OAAI,IAAAR,EAAU,YAAWE,EAAU,GAAO,OACxC,SAAAA,EAAU,iBAAmB,IAAA,CAChC,CAEJ"}
@@ -1 +1 @@
1
- import{j as p}from"./index-DUmIu2EK.js";import{r as s}from"./vendor-router-D_36sTKu.js";const m=s.memo(c=>{const{play:e,source:a,className:i,...l}=c,o=s.useRef(null);return s.useEffect(()=>{if(!o.current||typeof e!="boolean")return;const r=o.current,n=r.currentTime>0&&!r.paused&&!r.ended&&r.readyState>r.HAVE_CURRENT_DATA;if(e){if(n)return;(async()=>{try{await r.play()}catch(t){if(t instanceof Error&&t.name==="AbortError"){r.muted=!0;try{await r.play()}catch(u){console.error("Could not play video:",u)}}else console.error("Could not play video:",t)}})()}else{if(!n)return;r.pause()}},[e,a]),p.jsx("video",{...l,ref:o,src:a,className:i})});export{m as V};
1
+ import{j as p}from"./index-_DB-noma.js";import{r as s}from"./vendor-router-D_36sTKu.js";const m=s.memo(c=>{const{play:e,source:a,className:i,...l}=c,o=s.useRef(null);return s.useEffect(()=>{if(!o.current||typeof e!="boolean")return;const r=o.current,n=r.currentTime>0&&!r.paused&&!r.ended&&r.readyState>r.HAVE_CURRENT_DATA;if(e){if(n)return;(async()=>{try{await r.play()}catch(t){if(t instanceof Error&&t.name==="AbortError"){r.muted=!0;try{await r.play()}catch(u){console.error("Could not play video:",u)}}else console.error("Could not play video:",t)}})()}else{if(!n)return;r.pause()}},[e,a]),p.jsx("video",{...l,ref:o,src:a,className:i})});export{m as V};
@@ -1 +1 @@
1
- {"version":3,"file":"Video--A0fBGqz.js","sources":["../../src/components/Video/Video.tsx"],"sourcesContent":["import { memo, useEffect, useRef } from 'react'\nimport type { VideoProps } from './Video.types'\n\nconst Video = memo((props: VideoProps) => {\n const { play, source, className, ...videoProps } = props\n const ref = useRef<HTMLVideoElement>(null)\n\n useEffect(() => {\n if (!ref.current || typeof play !== 'boolean') {\n return\n }\n\n const video = ref.current\n const isPlaying = video.currentTime > 0 && !video.paused && !video.ended && video.readyState > video.HAVE_CURRENT_DATA\n\n if (play) {\n if (isPlaying) return\n const playVideo = async () => {\n try {\n await video.play()\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n video.muted = true\n try {\n await video.play()\n } catch (retryErr) {\n console.error('Could not play video:', retryErr)\n }\n } else {\n console.error('Could not play video:', err)\n }\n }\n }\n playVideo()\n } else {\n if (!isPlaying) return\n video.pause()\n }\n }, [play, source])\n\n return <video {...videoProps} ref={ref} src={source} className={className} />\n})\n\nexport { Video }\n"],"names":["Video","memo","props","play","source","className","videoProps","ref","useRef","useEffect","video","isPlaying","err","retryErr"],"mappings":"wFAGA,MAAMA,EAAQC,EAAAA,KAAMC,GAAsB,CACxC,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,UAAAC,EAAW,GAAGC,GAAeJ,EAC7CK,EAAMC,EAAAA,OAAyB,IAAI,EAEzCC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACF,EAAI,SAAW,OAAOJ,GAAS,UAClC,OAGF,MAAMO,EAAQH,EAAI,QACZI,EAAYD,EAAM,YAAc,GAAK,CAACA,EAAM,QAAU,CAACA,EAAM,OAASA,EAAM,WAAaA,EAAM,kBAErG,GAAIP,EAAM,CACR,GAAIQ,EAAW,QACG,SAAY,CAC5B,GAAI,CACF,MAAMD,EAAM,KAAA,CACd,OAASE,EAAK,CACZ,GAAIA,aAAe,OAASA,EAAI,OAAS,aAAc,CACrDF,EAAM,MAAQ,GACd,GAAI,CACF,MAAMA,EAAM,KAAA,CACd,OAASG,EAAU,CACjB,QAAQ,MAAM,wBAAyBA,CAAQ,CACjD,CACF,MACE,QAAQ,MAAM,wBAAyBD,CAAG,CAE9C,CACF,GACA,CACF,KAAO,CACL,GAAI,CAACD,EAAW,OAChBD,EAAM,MAAA,CACR,CACF,EAAG,CAACP,EAAMC,CAAM,CAAC,QAET,QAAA,CAAO,GAAGE,EAAY,IAAAC,EAAU,IAAKH,EAAQ,UAAAC,EAAsB,CAC7E,CAAC"}
1
+ {"version":3,"file":"Video-phAvQnqc.js","sources":["../../src/components/Video/Video.tsx"],"sourcesContent":["import { memo, useEffect, useRef } from 'react'\nimport type { VideoProps } from './Video.types'\n\nconst Video = memo((props: VideoProps) => {\n const { play, source, className, ...videoProps } = props\n const ref = useRef<HTMLVideoElement>(null)\n\n useEffect(() => {\n if (!ref.current || typeof play !== 'boolean') {\n return\n }\n\n const video = ref.current\n const isPlaying = video.currentTime > 0 && !video.paused && !video.ended && video.readyState > video.HAVE_CURRENT_DATA\n\n if (play) {\n if (isPlaying) return\n const playVideo = async () => {\n try {\n await video.play()\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n video.muted = true\n try {\n await video.play()\n } catch (retryErr) {\n console.error('Could not play video:', retryErr)\n }\n } else {\n console.error('Could not play video:', err)\n }\n }\n }\n playVideo()\n } else {\n if (!isPlaying) return\n video.pause()\n }\n }, [play, source])\n\n return <video {...videoProps} ref={ref} src={source} className={className} />\n})\n\nexport { Video }\n"],"names":["Video","memo","props","play","source","className","videoProps","ref","useRef","useEffect","video","isPlaying","err","retryErr"],"mappings":"wFAGA,MAAMA,EAAQC,EAAAA,KAAMC,GAAsB,CACxC,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,UAAAC,EAAW,GAAGC,GAAeJ,EAC7CK,EAAMC,EAAAA,OAAyB,IAAI,EAEzCC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACF,EAAI,SAAW,OAAOJ,GAAS,UAClC,OAGF,MAAMO,EAAQH,EAAI,QACZI,EAAYD,EAAM,YAAc,GAAK,CAACA,EAAM,QAAU,CAACA,EAAM,OAASA,EAAM,WAAaA,EAAM,kBAErG,GAAIP,EAAM,CACR,GAAIQ,EAAW,QACG,SAAY,CAC5B,GAAI,CACF,MAAMD,EAAM,KAAA,CACd,OAASE,EAAK,CACZ,GAAIA,aAAe,OAASA,EAAI,OAAS,aAAc,CACrDF,EAAM,MAAQ,GACd,GAAI,CACF,MAAMA,EAAM,KAAA,CACd,OAASG,EAAU,CACjB,QAAQ,MAAM,wBAAyBA,CAAQ,CACjD,CACF,MACE,QAAQ,MAAM,wBAAyBD,CAAG,CAE9C,CACF,GACA,CACF,KAAO,CACL,GAAI,CAACD,EAAW,OAChBD,EAAM,MAAA,CACR,CACF,EAAG,CAACP,EAAMC,CAAM,CAAC,QAET,QAAA,CAAO,GAAGE,EAAY,IAAAC,EAAU,IAAKH,EAAQ,UAAAC,EAAsB,CAC7E,CAAC"}