oraculo-ui 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/atoms/OraculoButton/OraculoButton.tsx","../src/atoms/OraculoSectionTitle/OraculoSectionTitle.tsx","../src/atoms/OraculoCarouselDots/OraculoCarouselDots.tsx","../src/atoms/OraculoGridGroup/OraculoGridGroup.tsx","../src/atoms/OraculoLogo/OraculoLogoMediosPago.tsx","../src/atoms/OraculoEvent/OraculoEventTitle.tsx","../src/atoms/OraculoEvent/OraculoEventStatusBadge.tsx","../src/atoms/OraculoEvent/OraculoEventStatus.tsx","../src/atoms/OraculoEvent/OraculoEventHeader.tsx","../src/atoms/OraculoEvent/OraculoEventLabel.tsx","../src/atoms/OraculoEvent/OraculoEventLeague.tsx","../src/atoms/OraculoEvent/OraculoEventScore.tsx","../src/atoms/OraculoEvent/OraculoTeamPolo.tsx","../src/atoms/OraculoEvent/OraculoEventTeamInfo.tsx","../src/molecules/OraculoCarousel/useHorizontalWheelSplide.tsx","../src/molecules/OraculoCarousel/OraculoCarousel.tsx","../src/molecules/OraculoGameCard/OraculoGameCard.tsx","../src/molecules/OraculoGameRankCard/OraculoGameRankCard.tsx","../src/molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard.tsx","../src/molecules/OraculoGameSlide/OraculoGameSlide.tsx","../src/molecules/OraculoWelcomeBanner/OraculoWelcomeBanner.tsx","../src/molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual.tsx","../src/atoms/OraculoEvent/KambiOpenBet.tsx","../src/contexts/DocIdContext.tsx","../src/molecules/OraculoEventCard/OraculoEventCombinadasCard.tsx","../src/atoms/OraculoButtonBet/OraculoButtonBet.tsx","../src/atoms/OraculoEvent/KambiJersey.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCard.tsx","../src/atoms/OraculoEvent/OraculoEventDate.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCard.tsx","../src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx","../src/utils/openMachineRegistry.ts","../src/organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos.tsx","../src/organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx","../src/hooks/usePersonalizeCasinoItems.ts","../src/organisms/OraculoSeccionCasino/OraculoSeccionCasino.tsx","../src/organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales.tsx","../src/organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida.tsx","../src/organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.tsx","../src/organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCardSkeleton.tsx","../src/molecules/OraculoEventCard/FadeItemWrapper.tsx","../src/organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCardSkeleton.tsx","../src/organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana.tsx","../src/organisms/OraculoSeccionBanners/OraculoSeccionBanners.tsx","../src/organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago.tsx","../src/theme/OraculoThemeProvider.tsx","../src/templates/OraculoSectionHost.tsx","../src/templates/landingRegistry.ts","../src/config/json_configuration.ts","../src/templates/OraculoPageLandingPreview.tsx"],"sourcesContent":["import React from \"react\";\nimport \"./OraculoButton.css\";\nimport { Link as MuiLink } from \"@mui/material\";\n\nexport interface OraculoButtonProps {\n children?: React.ReactNode;\n onClick?: any;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n rel?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n disabled?: boolean;\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n fullHeight?: boolean;\n className?: string;\n ariaLabel?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n}\n\nexport default function OraculoButton({\n children,\n onClick,\n href,\n target,\n rel,\n type = \"button\",\n disabled = false,\n variant = \"primary\",\n size,\n fullWidth = false,\n fullHeight = false,\n className = \"\",\n ariaLabel,\n leftIcon,\n rightIcon,\n iconOnly,\n}: OraculoButtonProps) {\n const hasText = !!children && children !== true;\n const hasLeft = !!leftIcon;\n const hasRight = !!rightIcon;\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\n\n const cls = [\n \"orc-btn\",\n variant === \"secondary\"\n ? \"orc-btn--secondary\"\n : variant === \"tertiary\"\n ? \"orc-btn--tertiary\"\n : \"orc-btn--primary\",\n size ? `orc-btn--${size}` : \"\",\n fullWidth ? \"orc-btn--full\" : \"\",\n fullHeight ? \"orc-btn--fullHeight\" : \"\",\n isIconOnly ? \"orc-btn--iconOnly\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const content = (\n <>\n {leftIcon && <span className=\"orc-btn__icon\">{leftIcon}</span>}\n {!isIconOnly && <span className=\"orc-btn__label\">{children}</span>}\n {rightIcon && <span className=\"orc-btn__icon\">{rightIcon}</span>}\n </>\n );\n\n const ariaDisabled = disabled ? true : undefined;\n\n if (href) {\n return (\n <MuiLink\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n aria-disabled={ariaDisabled}\n tabIndex={ariaDisabled ? -1 : undefined}\n className={cls}\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\n >\n {content}\n </MuiLink>\n );\n }\n\n return (\n <button\n type={type}\n onClick={onClick}\n disabled={!!ariaDisabled}\n aria-label={ariaLabel}\n className={cls}\n >\n {content}\n </button>\n );\n}\n","import React from \"react\";\nimport \"./OraculoSectionTitle.css\";\n\nexport interface OraculoSectionTitleProps {\n title: string;\n iconUrl?: string;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport default function OraculoSectionTitle({\n title,\n iconUrl,\n size = \"md\",\n className = \"\",\n}: OraculoSectionTitleProps) {\n const sizeClass = size ? `orc-section-title--${size}` : \"\";\n\n const wrapperClass = [\n \"orc-section-title\",\n sizeClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={wrapperClass}>\n {iconUrl && (\n <img\n src={iconUrl}\n alt=\"\"\n className=\"orc-section-title__icon\"\n />\n )}\n <h2 className=\"orc-section-title__title\">{title}</h2>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport \"./OraculoCarouselDots.css\";\n\nexport interface OraculoCarouselDotsProps {\n total: number;\n active: number;\n onSelect?: (index: number) => void;\n className?: string;\n\n /** tiempo del autoplay/progreso (ms) */\n durationMs?: number;\n}\n\nconst OraculoCarouselDots: React.FC<OraculoCarouselDotsProps> = ({\n total,\n active,\n onSelect,\n className = \"\",\n durationMs = 5000,\n}) => {\n if (total <= 1) return null;\n\n const rootClass = [\"orc-dots\", className].filter(Boolean).join(\" \");\n\n const [seed, setSeed] = useState(0);\n useEffect(() => {\n setSeed((s) => s + 1);\n }, [active, durationMs]);\n\n return (\n <div className={rootClass} role=\"tablist\" aria-label=\"Carousel pagination\">\n {Array.from({ length: total }).map((_, i) => {\n const isActive = i === active;\n\n return (\n <span key={i} className=\"orc-dots__cell\">\n <button\n key={isActive ? `a-${i}-${seed}` : `i-${i}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={`Ir al slide ${i + 1}`}\n className={\n \"orc-dots__dot\" + (isActive ? \" orc-dots__dot--active\" : \"\")\n }\n style={\n isActive\n ? ({\n [\"--dot-progress-ms\" as any]: `${durationMs}ms`,\n } as React.CSSProperties)\n : undefined\n }\n onClick={() => {\n if (isActive) setSeed((s) => s + 1);\n onSelect?.(i);\n }}\n />\n </span>\n );\n })}\n </div>\n );\n};\n\nexport default OraculoCarouselDots;\n","import React, { ReactNode } from \"react\";\r\n\r\nexport interface OraculoGridGroupProps {\r\n /** Children inside the grid */\r\n children: ReactNode;\r\n\r\n /** Minimum width (in px) for auto-fit columns */\r\n minWidth?: number;\r\n\r\n /** Gap spacing: number → multiplier of 8px, or string → custom CSS value */\r\n spacing?: number | string;\r\n\r\n /** Horizontal alignment of grid items */\r\n justify?: \"start\" | \"center\" | \"end\" | \"stretch\";\r\n\r\n /** Custom grid template definition (overrides auto-fit/minmax behavior) */\r\n columns?: string | null;\r\n}\r\n\r\nexport default function OraculoGridGroup({\r\n children,\r\n minWidth = 32,\r\n spacing = 2,\r\n justify = \"stretch\",\r\n columns = null,\r\n}: OraculoGridGroupProps) {\r\n const gridTemplate = columns\r\n ? columns\r\n : `repeat(auto-fit, minmax(${minWidth}px, 1fr))`;\r\n\r\n const gap = typeof spacing === \"number\" ? `${spacing * 8}px` : spacing;\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: gridTemplate,\r\n justifyItems: justify,\r\n gap,\r\n height: \"inherit\",\r\n }}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import { Box } from \"@mui/material\";\nimport React from \"react\";\n\n\nexport type Logo = { src: string; alt: string };\n\nexport default function OraculoLogoMediosPago({ src, alt }: Logo) {\n return (\n <Box\n sx={{\n position: \"relative\",\n width: { xs: 65, sm: 80, md: 120, lg: 160 }, // 65 en móvil, 80 en desktop\n height: { xs: 48, md: 96 }, // 48 en móvil, 96 en desktop\n display: \"inline-block\",\n }}\n >\n <Box\n component=\"img\"\n src={src}\n alt={alt}\n sx={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n }}\n />\n </Box>\n );\n}\n","import React from \"react\";\r\nimport styles from \"./OraculoEventTitle.module.css\";\r\n\r\ninterface OraculoEventTitleProps {\r\n title: string;\r\n subtitle?: string;\r\n}\r\n\r\nexport default function OraculoEventTitle({ title, subtitle }: OraculoEventTitleProps) {\r\n return (\r\n <div\r\n className={styles.contenedor}\r\n >\r\n <span\r\n style={{\r\n fontWeight: 700,\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n }}\r\n >\r\n {title}\r\n </span>\r\n\r\n {subtitle && (\r\n <div\r\n className={styles.flexGroup}\r\n >\r\n <svg width=\"4\"height=\"4\"viewBox=\"0 0 5 5\"xmlns=\"http://www.w3.org/2000/svg\"style={{ flexShrink: 0 }}> <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"white\" /> </svg>\r\n <span className={styles.subtitle}>\r\n {subtitle}\r\n </span>\r\n <div></div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n\r\n","import React from \"react\";\r\n\r\nexport interface OraculoEventStatusBadgeProps {\r\n /** Text inside the badge */\r\n text: string;\r\n\r\n /** Background color of the badge */\r\n color?: string;\r\n\r\n /** Text color */\r\n textColor?: string;\r\n}\r\n\r\nexport default function OraculoEventStatusBadge({ text, color = \"#ff3b3b\", textColor = \"#fff\" } : OraculoEventStatusBadgeProps) {\r\n return (\r\n <span\r\n className=\"oli-font\"\r\n style={{\r\n backgroundColor: color,\r\n color: textColor,\r\n borderRadius: \"8px\",\r\n padding: \"4px 8px\",\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n fontWeight: 700,\r\n width : '42px',\r\n height : '16px',\r\n textAlign: 'center',\r\n }}\r\n >\r\n {text}\r\n </span>\r\n );\r\n}","import React from \"react\";\r\nimport OraculoEventStatusBadge from \"./OraculoEventStatusBadge\";\r\n\r\nexport interface OraculoEventStatusProps {\r\n live?: boolean;\r\n time?: string;\r\n}\r\n\r\nexport default function OraculoEventStatus({ live, time } : OraculoEventStatusProps) {\r\n return (\r\n <div className=\"oli-font\" style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\r\n {live && <OraculoEventStatusBadge text=\"En vivo\" />}\r\n {time && <span style={{ fontSize: \"14px\", fontWeight: 400, lineHeight: '18px', paddingTop: '4px' }}>{time}</span>}\r\n </div>\r\n );\r\n}","import React from \"react\";\r\nimport OraculoEventTitle from \"./OraculoEventTitle\";\r\nimport OraculoEventStatus from \"./OraculoEventStatus\";\r\n\r\nexport interface OraculoMatchHeaderProps {\r\n title: string;\r\n subtitle?: string;\r\n live?: boolean;\r\n time?: string;\r\n}\r\n\r\nexport default function OraculoMatchHeader({ title, subtitle, live = false, time = \"\" } : OraculoMatchHeaderProps) {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n color: '#FFFFFF'\r\n }}\r\n >\r\n <OraculoEventTitle title={title} subtitle={subtitle} />\r\n <OraculoEventStatus live={live} time={time} />\r\n </div>\r\n );\r\n}","import React from \"react\";\r\nimport styles from \"./OraculoEventLabel.module.css\";\r\ninterface OraculoEventLabelProps {\r\n text: string;\r\n}\r\nexport default function OraculoEventLabel({ text } : OraculoEventLabelProps) {\r\n return <span className={styles.label}>{text}</span>;\r\n}","import React from \"react\";\r\nimport styles from \"./OraculoEventLeague.module.css\";\r\ninterface EventLeague {\r\n title: string;\r\n}\r\nexport default function OraculoEventLeague({ title } : EventLeague) {\r\n return (\r\n <div className={styles.container}>\r\n {title.toUpperCase()}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./OraculoEventScore.module.css\";\r\n\r\nexport interface OraculoEventScoreProps {\r\n text: string | number;\r\n\r\n name?: string;\r\n\r\n size?: \"normal\" | \"small\";\r\n}\r\n\r\nexport default function OraculoEventScore({ text, name, size = \"normal\" } : OraculoEventScoreProps) {\r\n return (\r\n <div\r\n className={`${styles.scoreWrapper} ${styles[size]}`}\r\n >\r\n <div className={`${styles.score} ${styles[size]}`}>{text}</div>\r\n {name && <span className={`${styles.name} ${styles[size]}`}>{name}</span>}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./OraculoTeamPolo.module.css\";\r\n\r\ninterface JerseyPlayer {\r\n base: string;\r\n sleeve?: string; // optional\r\n stripes?: string;\r\n sleevelong?: string;\r\n real?: boolean;\r\n}\r\n\r\nexport default function OraculoTeamPolo({ jersey, className }: { jersey: JerseyPlayer, className?:string }) {\r\nconst base = `#${jersey.base}`;\r\nconst sleeve = jersey.sleeve ? `#${jersey.sleeve}` : base;\r\nconst stripes = jersey.stripes ? `#${jersey.stripes}` : null;\r\nconst sleevelong = jersey.sleevelong ? `#${jersey.sleevelong}` : null;\r\n\r\n return (\r\n <div className={`${styles.polo} ${className ?? \"\"}`}>\r\n {/* BODY */}\r\n <div className={styles.svgWrapper}>\r\n <svg viewBox=\"0 0 656 656\" aria-hidden>\r\n {/* BASE / BODY */}\r\n <path\r\n fill={base}\r\n d=\"m62 265 5.8-17c-.4-.7-.6-1.5-.4-2 .2-.7.8-1.2 1.2-1.4l1.2-4 9-21.6c.2-1 1-3.5 2.4-6.4a69.9 69.9 0 0 1 4.1-17.2l2.9-7 2.9-11.4c1.7-5.8 5.2-18.4 5.8-22 .6-3.6 6.8-19 9.8-26.2.4-.9 2.4-4.7 7.2-12.8 5.4-12.2 23.5-27.2 32-33.1l6.6-3.7 7.9-3.6 17.3-6.2 16.6-7.1L215 52c7-4.1 21.8-12.5 24.1-13.2 2.3-.8 5-3.5 6-4.7 1.2-1.2 4.2-3.8 6.6-4.7 2.3-1 8.2-6.8 10.8-9.6 1.6-1.4 3.8-4.7 9.2-7.5 5.3-2.9 20.4-4 27.2-4.3h25.6l16.7.3 14.1.6 10.3.7 9.5 1.7c6.4.6 12.6 4.3 15.4 8l2.7 3.1 8.9 8 1.8.7 4.9 3 2.7 3.5c4.2 2.2 13.1 7.1 15.2 8.7 2 1.6 30.1 15.4 44 22 8 3.2 39 12.3 55.3 30 5.2 4.3 7 7.8 11.4 12.4 5.1 5.3 15.1 29 16.9 32 1.4 2.6 5 17 6.8 24l4.8 20.5 8.4 29 8.9 22.7 2.3 5.4.6 1.5c.5.6 1.4 2 1 2.6-.2.6 0 2 .2 2.7l1 2.6 2 5.8 2.2 5.9c.3 1.3-4.3 4-6.6 5.2l-11.1 5-12.6 4.7-15 5-14.6 4.6-10.9 2.4a66 66 0 0 1-8.6 1.4c-3.4.3-4.7-.4-4.9-.8l-5-12.3-1.9-3.8-1.8-1.6.1-.8v-1l-.4-1.8-1.3-4.1-3.3-9-1.3-2-2.2-5.7-2.5-.3-1 .8v2l-2.7 13.1-8.7 58-.9 6.4-.2 7.9c0 3-1 16-1.7 18.3l-2.5 9-.2 7.6-.3 8.7-.3 7.5.3 4 .5 15c.3 1.9-.6 7-1.1 9.3-.6 2.4-1.6 7.5-1.4 8.8.3 1.4-.2 4.4-.5 5.8l-1.3 8.9c-.2 1.4-.8 5-1.3 7.2.7 1.6 4.7 14.6 5.9 17.8 1.2 3.3 4.8 19.4 5 20.7.3 1 1.1 7.8 1.5 11 .1 2.5.3 8 .2 10 0 2-.8 6.6-1.1 8.6-.2 1.7-.7 5.5-1.2 7s-1.2 8.5-1.4 11.8A81.1 81.1 0 0 1 477 552l.3 7.1.2 6.5 1.4 17.7.5 6 1.5 7.7.4 4.6c.3 2.1.7 7 .7 10.1.3 3-2.5 6-4 7 0 .2-1.2 1-4.6 3-6.4 5-26.3 11.6-35.5 14.3a379.2 379.2 0 0 1-58.6 11.2c-2.3.8-27 2.2-39 2.7-8.3 0-27 0-34.5-.4-11.5.9-47.4-4.8-63.9-7.7-6.3-.9-42.1-10.4-48-14.4-3.7-2.4-14.3-8-16.9-9.7a10.7 10.7 0 0 1-4.1-5.4c-.3-1 .1-8.6.4-12.3l.6-5 1.4-9.6 1-8 .3-4.3-.4-7.7-1-10.8v-13.8l.7-10 1.1-7.7 1.8-8 2.8-9.5 3.3-9.3a78 78 0 0 1-2.5-20.8 1112.2 1112.2 0 0 1 .6-14.1c-.1-.7 2.1-10.2 3.3-15l1-3.8-.1-.8c-1.4-8.3-1.5-14-1.9-15.4a78 78 0 0 1 .4-10.9l2-6.7.4-2-.4-1.5a67.6 67.6 0 0 1-7.3-27l-.2-7.7.5-5.4.3-1.5.4-3.9.7-5 .2-2.2-.2-.4-.3-6-1-3.1-.3-4-.7-7.6-1.5-8.3-.8-4.2-1.4-9.2-.4-4.3L172 279l-2.2-14.6a545 545 0 0 1-1.7-8.5c-.1-1-2-2.1-3-2.6 0 .6-.6 1.5-1.7 2-1.2.7-2.4 1.3-2.7 2.2l-.8 4.7a15 15 0 0 1-2.5 4.1 16.4 16.4 0 0 0-2.6 6.3l-.3 2.4v1.3l-1.4 1.1-.3.3-6 14.5c-.7 2.3-1.3 1.8-1.9 1.5l-10.5-3.1-9-3-18.3-6-20-6.8-13-4.8c-2.1-1-7-3-9.4-3.8-2.5-.8-3-1.3-2.8-1.4Z\"\r\n />\r\n\r\n {stripes && (\r\n <>\r\n <path fill={stripes} d=\"m153 277.8-5.8 14.5c-1 2.8-2.5 1.4-4.6.7l-2-.5-7.8-2.4-15.6-5-19-6.5-16-5.7-12-4.4-5.5-2.2c-3.5-1.1-3.1-1.2-1.9-4l1.8-4.9 3.2-9.3c-1.1-1.9 0-3.1.8-3.5l.2-.7.5-2 4.3-10.3 2.4-6 2.6-6.2.8-2.6 1.7-4.1v-.4l.3-2.6.6-3.4 1-3.5 1-3.8c.1-.9 2-5.6 3-7.8l.7-1.5.7-2 .9-3.6 3.4-12.6 2.4-8.6 2.7-11.2 3.5-9.6 3.6-9.4 3-6 2-4.1 3.6-5.8 2.2-4.3 3-4.4 3.2-3.9 1.7-1.9 3.6-3.6 3-2.9a109.3 109.3 0 0 1 13.3-11.2l1.2-.8a79.3 79.3 0 0 1 18-9l11.4-4.2 4-1.4 6.3-2.7 3.3-1.4 2.8-1.2 4-1.6 3.9-2.1 10.1-5 4.8-2.4 5.7-3.2 13.8-7.7c1.5-.8 4.7-2.7 6-3a8.5 8.5 0 0 0 3-1.8c3.4-2.5 4.5-4.8 6-5.3.4-.4 2-1.6 5.2-3.2-4.4 3.3-3.2 11-2.1 14.6a77 77 0 0 0 8.7 18.8l-.6.4-3.9 2-9 5-6.6 3.7-10 3.2c-4.3.8-13.2 2.4-14.4 2.8-1.2.3-10.2 4-14.5 5.8l-11.8 5.6-8.8 3.2-12 3.4-19 8.7c-5.8 1.4-19.3 14.2-25.3 20.4L122 128l.3.4 6.6 16.6 10.5 22.6 6.2 10.8c2.9 3 8.7 9.7 9.1 11.7.5 2 4.3 5.1 6.1 6.5.2.8.8 3.1 1.7 5.4-3.2 4.8-.4 10.6 1.4 12.9l1 4.6.3 6.5-.5 1c-1.4 1.4-.3 4 .4 5l.1 3c.5 1.4 1.3 4.2.8 5.2s0 2.7.3 3.4v4.9c-3.1.5-2 3.7-1 5.2-.5.7-1.8 2.2-3.2 2.7-1.4.5-1.8 3.6-1.8 5.2a9 9 0 0 1-2.7 4.7c-1.8 1.6-2.8 7.4-3 10.1l-1.6 1.5ZM403.8 31.1l-1.6-.7c1.2 1 2 2.2 2.8 4 1.8 2.8.6 8-.7 12.2a78 78 0 0 1-7.6 17l.5.2 3.3 1.5 5.4 3.3 5.9 3 7.2 3 8.2 2.2c.7.2 3.3 1 8.4 2 5.5.1 21.1 8 28.2 11.8l14 4.5a517 517 0 0 1 23.8 9.3c6.3.5 24.7 17 33.1 25.2l-4.6 11.6-8.2 19.3-3.8 9-5.2 8.6c-2.2 3.2-7.3 10.2-9.4 12.4-1.3-.3-5.6 4.4-7.6 6.7.3 2 .6 6.7-1.4 9.1-2 2.5-1.8 6.9-1.4 8.7.3.8.5 3-1 5.3-1.4 2.4-1 4-.5 4.5-.2.8-.7 2.5-1.4 3.4-.8.8-.4 3.3 0 4.5l.1 3-.1 2.2c-.2.6-.6 2.6-1.1 6.2 3.6 3.3 1.3 5.7-.3 6.5l2.2.3 1.3 2.7 1.5 3.8 1.1 2.3 2.7 7.1 1.6 4.8.3 2.1v1.6l1.9 1.9 4 8.9 1.8 4.5c.5 4 5.5 3.6 8 3l5.9-1.1 7.3-1.7 5.2-1.2 7.3-2.1 8.3-2.7 7.5-2.5 9.8-3.6 8-3 6.3-2.8 3.4-1.6 3-1.3 2.5-1.6 1-.8c1.9-1 2-2.1 1.6-2.9l-.6-1.7-1-2.7-1.6-4.2-1.4-4-.5-1.4-.1-.7v-1.2c.7-1-.4-2.5-1-3v-.2l-1-2-2.4-6-3.3-8.3-2.3-6a3896.4 3896.4 0 0 0-3.1-8.4l-2.2-7.1-1.5-5.7-2.5-8.9-1-3.1-1.2-4.5-2-8.2-2.2-9.3-2.8-11.4-2.6-9.1-.9-3c0-.3-.6-1.5-1-2l-2.5-5.6-3-6.6-5.7-11.3-2.5-4.3-2.3-3.3-.7-.7-4.3-5-3-3.8a73 73 0 0 0-4.2-3.8c-1.1-2-7.6-7-10.8-9.4-6.2-5-23.4-12.8-34-16.7l-11-4-16-7.9-20.1-10-7.1-3.8-2.4-1.5-13-7.3-2.6-3.4-5-3Z\" />\r\n <path fill={stripes} d=\"M292.1 648.8c-15.7-1.4-37.7-5-49.7-7.1-4.3-.6-22.6-5.3-35.5-9.5 1.5-10 3-21 4.3-32.7 7-60.5 4.8-132.8 3.1-185.6l-.9-32c-1-49-2.4-83.5-3.6-112-1.2-29-2.1-51.7-2.1-77 0-29 2.9-77.3 5.3-112.9l2.6-1c1.3-.3 10.1-2 14.4-2.7l10-3.2 6.6-3.7 9-5 4-2 .5-.3c1.2 2 2.6 4.1 3.4 4.8l6.1 7.8 15 14.6 4.8 4c-.6 26.4-1.1 60.6-1.1 100.1 0 59.3 1.1 82.6 2.7 114.6.9 18.8 2 40.7 3 74.9 1.5 48.3.8 98.4 0 148.6l-.8 68.3c0 13-.6 32.8-1.1 49Zm157.5-16.4-11.2 3.6a379.2 379.2 0 0 1-67 12c.2-11 .3-25.6.3-44.6 0-49.2-1.2-74.9-2.4-99.5-1.3-27.2-2.5-53-2-107.5.6-50.4 1.7-81.5 2.6-109.3 1-29.3 1.8-54.9 1.8-95.6 0-35.5-.6-70.6-1.2-98.6l3.6-3 5.3-5.1 3.5-3.6 3.5-3.4 4-5 4.2-5.3 2.7-4 .5.3 3.2 1.5 5.5 3.3 5.8 3 7.3 3 8.1 2.2c.7.2 3.3 1 8.4 2 2.4 0 6.5 1.5 11 3.4 2.6 29 5.2 68 5.2 107.8 0 41.5-1.6 70.2-3.2 102-1.6 28.7-3.3 60-4 105.6-.7 41.1.4 82.5 1.4 124.4.7 25.7 1.4 51.6 1.6 77.8a435 435 0 0 0 1.5 32.6Z\" />\r\n </>\r\n )}\r\n\r\n {sleevelong && (\r\n <>\r\n <path fill={sleevelong} d=\"m153 277.8-5.8 14.5c-1 2.8-2.5 1.4-4.6.7l-2-.5-7.8-2.4-15.6-5-19-6.5-16-5.7-12-4.4-5.5-2.2c-3.5-1.1-3.1-1.2-1.9-4l1.8-4.9 3.2-9.3c-1.1-1.9 0-3.1.8-3.5l.2-.7.5-2 4.3-10.3 2.4-6 2.6-6.2.8-2.6 1.7-4.1v-.4l.3-2.6.6-3.4 1-3.5 1-3.8c.1-.9 2-5.6 3-7.8l.7-1.5.7-2 .9-3.6 3.4-12.6 2.4-8.6 2.7-11.2 3.5-9.6 3.6-9.4 3-6 2-4.1 3.6-5.8 2.2-4.3 3-4.4 3.2-3.9 1.7-1.9 3.6-3.6 3-2.9a109.3 109.3 0 0 1 13.3-11.2l1.2-.8a79.3 79.3 0 0 1 18-9l11.4-4.2 4-1.4 6.3-2.7 3.3-1.4 2.8-1.2 4-1.6 3.9-2.1 10.1-5 4.8-2.4 5.7-3.2 13.8-7.7c1.5-.8 4.7-2.7 6-3a8.5 8.5 0 0 0 3-1.8c3.4-2.5 4.5-4.8 6-5.3.4-.4 2-1.6 5.2-3.2-4.4 3.3-3.2 11-2.1 14.6a77 77 0 0 0 8.7 18.8l-.6.4-3.9 2-9 5-6.6 3.7-10 3.2c-4.3.8-13.2 2.4-14.4 2.8-1.2.3-10.2 4-14.5 5.8l-11.8 5.6-8.8 3.2-12 3.4-19 8.7c-5.8 1.4-19.3 14.2-25.3 20.4L122 128l.3.4 6.6 16.6 10.5 22.6 6.2 10.8c2.9 3 8.7 9.7 9.1 11.7.5 2 4.3 5.1 6.1 6.5.2.8.8 3.1 1.7 5.4-3.2 4.8-.4 10.6 1.4 12.9l1 4.6.3 6.5-.5 1c-1.4 1.4-.3 4 .4 5l.1 3c.5 1.4 1.3 4.2.8 5.2s0 2.7.3 3.4v4.9c-3.1.5-2 3.7-1 5.2-.5.7-1.8 2.2-3.2 2.7-1.4.5-1.8 3.6-1.8 5.2a9 9 0 0 1-2.7 4.7c-1.8 1.6-2.8 7.4-3 10.1l-1.6 1.5ZM403.8 31.1l-1.6-.7c1.2 1 2 2.2 2.8 4 1.8 2.8.6 8-.7 12.2a78 78 0 0 1-7.6 17l.5.2 3.3 1.5 5.4 3.3 5.9 3 7.2 3 8.2 2.2c.7.2 3.3 1 8.4 2 5.5.1 21.1 8 28.2 11.8l14 4.5a517 517 0 0 1 23.8 9.3c6.3.5 24.7 17 33.1 25.2l-4.6 11.6-8.2 19.3-3.8 9-5.2 8.6c-2.2 3.2-7.3 10.2-9.4 12.4-1.3-.3-5.6 4.4-7.6 6.7.3 2 .6 6.7-1.4 9.1-2 2.5-1.8 6.9-1.4 8.7.3.8.5 3-1 5.3-1.4 2.4-1 4-.5 4.5-.2.8-.7 2.5-1.4 3.4-.8.8-.4 3.3 0 4.5l.1 3-.1 2.2c-.2.6-.6 2.6-1.1 6.2 3.6 3.3 1.3 5.7-.3 6.5l2.2.3 1.3 2.7 1.5 3.8 1.1 2.3 2.7 7.1 1.6 4.8.3 2.1v1.6l1.9 1.9 4 8.9 1.8 4.5c.5 4 5.5 3.6 8 3l5.9-1.1 7.3-1.7 5.2-1.2 7.3-2.1 8.3-2.7 7.5-2.5 9.8-3.6 8-3 6.3-2.8 3.4-1.6 3-1.3 2.5-1.6 1-.8c1.9-1 2-2.1 1.6-2.9l-.6-1.7-1-2.7-1.6-4.2-1.4-4-.5-1.4-.1-.7v-1.2c.7-1-.4-2.5-1-3v-.2l-1-2-2.4-6-3.3-8.3-2.3-6a3896.4 3896.4 0 0 0-3.1-8.4l-2.2-7.1-1.5-5.7-2.5-8.9-1-3.1-1.2-4.5-2-8.2-2.2-9.3-2.8-11.4-2.6-9.1-.9-3c0-.3-.6-1.5-1-2l-2.5-5.6-3-6.6-5.7-11.3-2.5-4.3-2.3-3.3-.7-.7-4.3-5-3-3.8a73 73 0 0 0-4.2-3.8c-1.1-2-7.6-7-10.8-9.4-6.2-5-23.4-12.8-34-16.7l-11-4-16-7.9-20.1-10-7.1-3.8-2.4-1.5-13-7.3-2.6-3.4-5-3Z\" />\r\n </>\r\n )}\r\n\r\n {/* COLLAR */}\r\n <path\r\n fill={sleeve}\r\n fillRule=\"evenodd\"\r\n d=\"m262.9 19.6-3.7 3.8-3.5 3.3-2.7 2.1c-2 1.6-5 5.7-1 17.1 4 9.8 5.2 12 5.3 11.9 1.4 2.5 4.4 7.9 5.9 9.1l6 7.8 15 14.6 10.5 8.7 12.6 11.3 8.3 6.2 7.6.6 17 .8 9.2-6.6 7-5.6 10.3-9 7-5.7 5.3-5.2 3.6-3.6 3.4-3.4 4.2-5 4-5.3 2.7-4C403.5 53 407 40 406 37.3c0-1.3-.9-4.6-3.9-7.2A129 129 0 0 1 391.2 20c-.8-1.1-4.2-4.3-7.3-6a52 52 0 0 0-15.3-3.9L353.5 9l-10.2-.4-15.4-.4H301.6c-4.6.2-14.6.6-17.2 1.2l-3.4.6c-3.2.5-6.9 1-8.4 2l-1.4.8c-1.5.7-2.8 1.4-5 3.7l-3.3 3.2Zm4.3 14 1.9 5.5 4.6 8.2 5 6.7 5.3 6.6 11 10.7 10.8 9.8 12.8 11.7 7.4 7 3 3 15-13.3 16.7-15.7 6.7-6.2 6-6.6a104.1 104.1 0 0 0 13.8-19.6c1-1.9 1.8-4.5 2-5.6 2.7-7.9 1.4-13.8-1.5-17.8-4-5.2-14.9-6.6-18.5-7.1h-.7c-13.8-1.9-39.8-2-46-1.9-9-.2-28.1.2-32.5.7-.6 0-1.2 0-1.9.2-6.8.6-19.9 1.9-22.6 10.6a22.6 22.6 0 0 0 .9 10.3l.8 2.9Z\"\r\n />\r\n\r\n {/* LEFT SLEEVE */}\r\n <path\r\n fill={sleeve}\r\n d=\"m74.8 250.8-6.8-2.7-.3.7-3 8.7-2 5.7c-1 2.2-.5 1.9.1 2.3l2.2 1 8.8 3.3 10.4 3.8 10.7 3.8 14.3 4.8 13 4.3 7 2.3 13.8 4.3c2.2.7 3 1.4 3.8 0l6.3-15.6-4.6-1.8a88 88 0 0 1-9.4-3c-.8-.6-11.8-3.7-17.3-5.4l-7-2.4-13-4.3c-3.2-1.3-9.9-3.8-11-4-1.2-.2-11-3.8-16-5.8Z\"\r\n />\r\n\r\n {/* RIGHT SLEEVE */}\r\n <path\r\n fill={sleeve}\r\n d=\"m505 284.5-3.5-7.5c.2-.2 1.2-.4 3 0 1.6.4 11.3-1.7 16-2.7l22.5-6.6 13.7-4.5 16.8-6.7a90 90 0 0 0 13.7-7.7v1l.6 2 1.9 5.5 2.9 7.8c.6 1.6-5.5 4.8-8.6 6.3l-17 7.2-15.3 5.4-13 4.2-13 3.3-9.9 2c-6.8 1.2-7.2-.4-8-2l-2.7-7Z\"\r\n />\r\n\r\n </svg>\r\n\r\n \r\n </div>\r\n\r\n {/* SHADOW */}\r\n <img\r\n src=\"https://widgets.sir.sportradar.com/assets/media/shadow.7a42eb6e.png\"\r\n className={styles.shadow}\r\n alt=\"\"\r\n aria-hidden\r\n />\r\n\r\n {/* HIGHLIGHT */}\r\n <img\r\n src=\"https://widgets.sir.sportradar.com/assets/media/highlight.b1ac6c3e.png\"\r\n className={styles.highlight}\r\n alt=\"\"\r\n aria-hidden\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./OraculoEventTeamInfo.module.css\";\r\nimport OraculoTeamPolo from \"./OraculoTeamPolo\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport { Jersey } from \"../../atoms/OraculoEvent/KambiJersey\";\r\n\r\nexport interface OraculoEventTeamInfoProps {\r\n name: string;\r\n jersey?: Jersey | null; \r\n size?: \"regular\" | \"compact\";\r\n}\r\n\r\n\r\nexport default function OraculoEventTeamInfo({ name, jersey , size = \"regular\" } : OraculoEventTeamInfoProps) {\r\n return (\r\n <div className={`oli-font ${styles.team} ${styles[size]}`}>\r\n {jersey?.base ? (\r\n <OraculoTeamPolo\r\n jersey={jersey} className={`${styles.logo}`}\r\n />\r\n ) : (\r\n <Skeleton variant=\"circular\" className={`${styles.logo} ${styles.skeleton}`} />\r\n )}\r\n <span className={styles.name}>{name}</span>\r\n </div>\r\n );\r\n}","import { useEffect, useRef } from \"react\";\r\n\r\nexport function useHorizontalWheelSplide(\r\n hostRef: React.RefObject<HTMLElement>,\r\n splideRef: React.RefObject<any>,\r\n {\r\n enabled = true,\r\n threshold = 60,\r\n cooldownMs = 500,\r\n }: { enabled?: boolean; threshold?: number; cooldownMs?: number } = {}\r\n) {\r\n const accRef = useRef(0);\r\n const lastNavRef = useRef(0);\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const host = hostRef.current;\r\n if (!host) return;\r\n\r\n const onWheel = (e: WheelEvent) => {\r\n const splide = splideRef.current;\r\n if (!splide || !splide.go) return;\r\n\r\n const { deltaX, deltaY } = e;\r\n\r\n if (Math.abs(deltaX) <= Math.abs(deltaY)) return;\r\n\r\n e.preventDefault();\r\n\r\n accRef.current += deltaX;\r\n\r\n const now = Date.now();\r\n if (now - lastNavRef.current < cooldownMs) return;\r\n\r\n if (Math.abs(accRef.current) < threshold) return;\r\n\r\n const direction = accRef.current > 0 ? \">\" : \"<\";\r\n\r\n // reset acumulador y navega 1 vez\r\n accRef.current = 0;\r\n lastNavRef.current = now;\r\n\r\n splide.go(direction);\r\n };\r\n\r\n host.addEventListener(\"wheel\", onWheel, { passive: false });\r\n\r\n return () => {\r\n host.removeEventListener(\"wheel\", onWheel);\r\n accRef.current = 0;\r\n };\r\n }, [enabled, threshold, cooldownMs, hostRef, splideRef]);\r\n}\r\n","// src/molecules/OraculoCarousel/OraculoCarousel.tsx\nimport React, {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n ReactNode,\n} from \"react\";\nimport {\n Splide as SplideRaw,\n SplideSlide as SplideSlideRaw,\n} from \"@splidejs/react-splide\";\n\nimport { useHorizontalWheelSplide } from \"./useHorizontalWheelSplide\";\nimport styles from \"./OraculoCarousel.module.css\";\n\nexport interface OraculoCarouselOptions {\n type?: string;\n perPage?: number;\n gap?: string;\n pagination?: boolean;\n arrows?: boolean;\n drag?: boolean;\n focus?: string | \"center\";\n autoWidth?: boolean;\n trimSpace?: any;\n rewind?: boolean;\n padding?: { left?: string; right?: string };\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\n [key: string]: any;\n}\n\nexport interface OraculoCarouselRef {\n next: () => void;\n prev: () => void;\n go: (index: number | string) => void;\n}\n\nexport interface OraculoCarouselProps<T = any> {\n items: T[];\n renderItem: (item: T, index: number) => ReactNode;\n perPage?: number;\n gap?: string;\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\n options?: OraculoCarouselOptions;\n className?: string;\n useIndexAsKey?: boolean;\n onMove?: (info: {\n index: number;\n isStart: boolean;\n isEnd: boolean;\n total: number;\n visibleEnd: number;\n visibleStart: number;\n }) => void;\n enableHorizontalWheel?: boolean;\n showRightGradient?: boolean;\n}\n\n// 👇 Aislamos tipos de Splide: internamente es any, hacia afuera tu API está tipada\nconst Splide: any = SplideRaw;\nconst SplideSlide: any = SplideSlideRaw;\n\nconst OraculoCarousel = forwardRef<OraculoCarouselRef, OraculoCarouselProps<any>>(\n (\n {\n items = [],\n renderItem,\n perPage = 1,\n gap = \"0px\",\n breakpoints,\n options = {},\n className = \"\",\n onMove,\n useIndexAsKey = false,\n enableHorizontalWheel = true,\n showRightGradient = false,\n },\n ref\n ) => {\n const splideRef = useRef<any>(null);\n const wheelHostRef = useRef<HTMLDivElement>(null);\n const prevLengthRef = useRef(items.length);\n const gradientLeftRef = useRef<HTMLDivElement>(null);\n const gradientRightRef = useRef<HTMLDivElement>(null);\n useHorizontalWheelSplide(wheelHostRef, splideRef, {\n enabled: enableHorizontalWheel,\n });\n useImperativeHandle(ref, () => ({\n next: () => splideRef.current?.go(\">\"),\n prev: () => splideRef.current?.go(\"<\"),\n go: (index) => splideRef.current?.go(index),\n }));\n\n const getVisibleRange = (splide: any) => {\n const Slides = splide.Components.Slides;\n const Controller = splide.Components.Controller;\n const track = splide.root.querySelector(\".splide__track\");\n\n const trackWidth = track?.clientWidth ?? 0;\n const visibleStart = Controller.getIndex();\n const total = Slides.getLength();\n\n let currentWidth = 0;\n let visibleEnd = visibleStart;\n\n for (let i = visibleStart; i < total; i++) {\n const slide = Slides.getAt(i);\n if (!slide) break;\n\n // use offsetWidth (cheaper than getBoundingClientRect)\n currentWidth += slide.slide.offsetWidth;\n\n if (currentWidth > trackWidth) break;\n visibleEnd = i;\n }\n\n return { visibleStart, visibleEnd };\n };\n const hasOverflow = (splide: any) => {\n const track = splide.root.querySelector(\".splide__track\");\n const list = splide.root.querySelector(\".splide__list\");\n\n if (!track || !list) return false;\n\n return list.scrollWidth > track.clientWidth + 1;\n };\n\n const handleMove = useCallback((splide: any) => {\n const slides = splide.Components.Slides;\n const total = slides.getLength();\n\n // NO SCROLL POSSIBLE\n if (!hasOverflow(splide)) {\n onMove?.({\n index: 0,\n isStart: true,\n isEnd: true,\n total,\n visibleStart: 0,\n visibleEnd: total - 1,\n });\n return;\n }\n\n const { visibleStart, visibleEnd } = getVisibleRange(splide);\n\n const isStart = visibleStart === 0;\n const isEnd = visibleEnd === total - 1;\n\n if (showRightGradient) {\n gradientLeftRef.current?.style.setProperty(\"--gradient-opacity\", isStart ? \"0\" : \"1\");\n gradientRightRef.current?.style.setProperty(\"--gradient-opacity\", isEnd ? \"0\" : \"1\");\n }\n const index = splide.Components.Controller.getIndex();\n\n onMove?.({\n index,\n isStart,\n isEnd,\n total,\n visibleStart,\n visibleEnd,\n });\n }, [onMove]);\n React.useEffect(() => {\n const splide = splideRef.current?.splide;\n if (!splide) return;\n\n const lengthChanged = prevLengthRef.current !== items.length;\n prevLengthRef.current = items.length;\n\n if (!lengthChanged) return;\n\n // let React commit DOM first\n requestAnimationFrame(() => {\n splide.refresh();\n handleMove(splide);\n });\n }, [items.length, handleMove]);\n const handleResize = useCallback(() => {\n const splide = splideRef.current?.splide;\n if (!splide) return;\n\n splide.go(0, false);\n handleMove(splide);\n }, [handleMove]);\n const handleMounted = useCallback(\n (splide: any) => {\n handleMove(splide);\n },\n [handleMove]\n );\n\n const mergedOptions: OraculoCarouselOptions = {\n type: \"slide\",\n trimSpace: false,\n drag: true,\n pagination: false,\n arrows: false,\n rewind: false,\n focus: \"start\",\n autoWidth: false,\n perPage,\n gap,\n breakpoints,\n ...options,\n\n ...(enableHorizontalWheel ? { wheel: false } : {}),\n\n };\n\n return (\n <div\n ref={wheelHostRef}\n className={className}\n style={{ width: \"100%\", position: \"relative\", height: \"100%\" }}\n >\n <Splide\n ref={splideRef}\n options={mergedOptions}\n onMove={handleMove}\n onMounted={handleMounted}\n onResize={handleResize}\n >\n {items.map((item, index) => (\n <SplideSlide key={useIndexAsKey ? index : (item as any).id ?? index}>\n {renderItem(item, index)}\n </SplideSlide>\n ))}\n </Splide>\n {showRightGradient && (\n <>\n {/* IZQUIERDA */}\n <div\n ref={gradientLeftRef}\n className={`${styles.gradientOverlay} ${styles.left}`}\n style={{ \"--gradient-opacity\": \"0\" } as React.CSSProperties}\n >\n <svg\n className={styles.svg}\n viewBox=\"0 0 152 184\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M0 0H152V184H0V0Z\" fill=\"url(#paint_left)\" />\n <defs>\n <linearGradient id=\"paint_left\" x1=\"0\" y1=\"92\" x2=\"152\" y2=\"92\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.59737\" stopColor=\"#121212\" stopOpacity=\"0\" />\n <stop offset=\"1\" stopColor=\"#121212\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n\n {/* DERECHA */}\n <div\n ref={gradientRightRef}\n className={`${styles.gradientOverlay} ${styles.right}`}\n style={{ \"--gradient-opacity\": \"1\" } as React.CSSProperties}\n >\n <svg\n className={styles.svg}\n viewBox=\"0 0 152 184\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M0 0H152V184H0V0Z\" fill=\"url(#paint_right)\" />\n <defs>\n <linearGradient id=\"paint_right\" x1=\"0\" y1=\"92\" x2=\"152\" y2=\"92\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.59737\" stopColor=\"#121212\" stopOpacity=\"0\" />\n <stop offset=\"1\" stopColor=\"#121212\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </>\n )}\n </div>\n );\n }\n);\n\nexport default OraculoCarousel;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport { OraculoButton } from \"../..\";\n\nexport interface OraculoGameCardProps {\n imageUrl: string;\n onClick?: () => void;\n size?: \"lg\" | \"sm\";\n fillParent?: boolean;\n}\n\nconst OraculoGameCard: React.FC<OraculoGameCardProps> = ({\n imageUrl,\n onClick,\n size = \"sm\",\n fillParent = false,\n}) => {\n const dim =\n size === \"lg\"\n ? { w: 280, h: 352 }\n : { w: 152, h: 168 };\n\n const handleButtonClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.stopPropagation();\n onClick?.();\n };\n\n const sizeStyles = fillParent\n ? { width: \"100%\", height: \"100%\" }\n : { width: `${dim.w}px`, height: `${dim.h}px` };\n\n return (\n <Box\n onClick={onClick}\n role=\"button\"\n sx={{\n position: \"relative\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n boxSizing: \"border-box\",\n transition: \"transform .15s ease, box-shadow .15s ease\",\n ...sizeStyles,\n \"&:hover\": {\n transform: \"translateY(-2px)\",\n boxShadow: 8,\n cursor: \"pointer\",\n },\n \"&:hover .oraculo-game-card-overlay\": {\n opacity: 1,\n },\n \"&:hover .oraculo-game-card-btn\": {\n opacity: 1,\n transform: \"translate(-50%, -50%) scale(1)\",\n pointerEvents: \"auto\",\n },\n }}\n >\n <img\n src={imageUrl}\n alt=\"Juego de casino\"\n loading=\"lazy\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n borderRadius: \"inherit\",\n }}\n />\n\n <Box\n className=\"oraculo-game-card-overlay\"\n sx={{\n position: \"absolute\",\n inset: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.45)\",\n opacity: 0,\n transition: \"opacity .15s ease\",\n pointerEvents: \"none\",\n zIndex: 1,\n }}\n />\n\n <Box\n className=\"oraculo-game-card-btn\"\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n zIndex: 2,\n transform: \"translate(-50%, -50%) scale(0.95)\",\n opacity: 0,\n transition: \"opacity .15s ease, transform .15s ease\",\n pointerEvents: \"none\",\n }}\n >\n <OraculoButton variant=\"primary\" size=\"md\" onClick={handleButtonClick}>\n Jugar\n </OraculoButton>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoGameCard;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Skeleton from \"@mui/material/Skeleton\";\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\n\ntype SizeOpt = { w: number; h: number; r?: number; font?: number };\n\nexport interface OraculoGameRankCardSizes {\n xs: SizeOpt;\n md: SizeOpt;\n}\n\nexport interface OraculoGameRankCardProps {\n imageUrl: string;\n orden?: number;\n onClick?: () => void;\n sizes?: OraculoGameRankCardSizes;\n\n /** si true, muestra skeleton en vez de la card */\n loading?: boolean;\n}\n\nexport default function OraculoGameRankCard({\n imageUrl,\n orden = 1,\n onClick,\n loading = false,\n sizes = {\n xs: { w: 104, h: 112, r: 18, font: 48 },\n md: { w: 186, h: 264, r: 22.6, font: 64 },\n },\n}: OraculoGameRankCardProps) {\n const getVal = <K extends keyof SizeOpt>(k: K, def: number) => ({\n xs: sizes.xs?.[k] ?? def,\n md: sizes.md?.[k] ?? def,\n });\n\n const W = getVal(\"w\", 186);\n const H = getVal(\"h\", 264);\n const R = getVal(\"r\", 22.6);\n const F = getVal(\"font\", 64);\n\n const hang = {\n xs: Math.round((sizes.xs?.font ?? 64) * 0.28),\n md: Math.round((sizes.md?.font ?? 64) * 0.28),\n };\n\n return (\n <Box\n sx={{\n position: \"relative\",\n width: \"100%\",\n maxWidth: { xs: `${W.xs}px`, md: `${W.md}px` },\n aspectRatio: {\n xs: `${W.xs}/${H.xs}`,\n md: `${W.md}/${H.md}`,\n },\n borderRadius: { xs: `${R.xs}px`, md: `${R.md}px` },\n boxSizing: \"border-box\",\n overflow: \"visible\",\n pb: { xs: `${hang.xs}px`, md: `${hang.md}px` },\n\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n pointerEvents: \"none\",\n zIndex: 2,\n background:\n \"linear-gradient(21.29deg, #0B0D1B -1.16%, rgba(255,255,255,0) 51.92%, rgba(255,255,255,0) 127.62%)\",\n backgroundBlendMode: \"multiply\",\n },\n }}\n >\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n overflow: \"hidden\",\n }}\n >\n {loading ? (\n <Skeleton\n variant=\"rectangular\"\n width=\"100%\"\n height=\"100%\"\n sx={{\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro visible en fondo oscuro\n \"&::after\": {\n background:\n \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\n },\n }}\n />\n ) : (\n <OraculoGameCard\n imageUrl={imageUrl}\n onClick={onClick}\n size=\"lg\"\n fillParent\n />\n )}\n </Box>\n\n <Box\n component=\"span\"\n sx={{\n position: \"absolute\",\n left: 8,\n bottom: {\n xs: `-${hang.xs}px`,\n md: `-${hang.md}px`,\n },\n fontFamily: '\"secondary\", sans-serif',\n fontSize: {\n xs: `${F.xs}px`,\n md: `${F.md}px`,\n },\n lineHeight: 1,\n color: \"#3CC666\",\n WebkitTextStroke: \"1px #9ee86e\",\n zIndex: 3,\n userSelect: \"none\",\n }}\n >\n {orden}\n </Box>\n </Box>\n );\n}\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\n\nexport interface OraculoLiveCasinoCardProps {\n logo: string;\n provider?: string;\n providerName?: string;\n machine?: number | string;\n onClick?: () => void;\n}\n\nconst OraculoLiveCasinoCard: React.FC<OraculoLiveCasinoCardProps> = ({\n logo,\n provider,\n providerName,\n machine,\n onClick,\n}) => {\n return (\n <Box\n onClick={onClick}\n sx={{\n flex: \"0 0 auto\",\n position: \"relative\",\n borderRadius: \"20px\",\n overflow: \"hidden\",\n width: { xs: 100, md: 180 },\n height: { xs: 200, md: 380 },\n transition: \"width .50s ease, transform .28s ease\",\n willChange: \"width, transform\",\n cursor: \"pointer\",\n zIndex: 0,\n \"&:hover\": {\n zIndex: 2,\n width: { md: 260, xs: 110 },\n },\n \"&:hover .orc-live-provider-label\": {\n opacity: 1,\n },\n }}\n >\n {/* Imagen de fondo */}\n <Box\n component=\"img\"\n src={logo}\n alt={`Juego ${machine ?? \"\"}`}\n sx={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n />\n\n {/* Label del provider */}\n <Box\n className=\"orc-live-provider-label\"\n sx={{\n position: \"absolute\",\n left: \"50%\",\n top: { xs: \"75%\", md: \"80%\" },\n transform: \"translate(-50%, -50%)\",\n zIndex: 3,\n opacity: 0,\n transition: \"opacity .25s ease\",\n pointerEvents: \"none\",\n }}\n >\n <Typography\n sx={{\n color: \"#fff\",\n fontWeight: 700,\n fontSize: { xs: 11, md: 14 },\n textTransform: \"capitalize\",\n }}\n >\n {provider ?? providerName ?? \"\"}\n </Typography>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoLiveCasinoCard;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Skeleton from \"@mui/material/Skeleton\";\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\n\nexport interface OraculoGameSlideItem {\n id: string | number;\n imageUrl: string;\n background?: string;\n}\n\nexport interface OraculoGameSlideProps {\n items: OraculoGameSlideItem[];\n layout?: \"mosaic\" | \"grid\";\n onClick?: (item: OraculoGameSlideItem, index: number) => void;\n\n /** si true, renderiza skeletons en vez de cards */\n loading?: boolean;\n\n /** cuantos skeletons en grid (default 4) */\n gridSkeletonCount?: number;\n}\n\nconst GAP = 12; // px\n\nconst SkCard = ({ r = 16 }: { r?: number }) => (\n <Box sx={{ width: \"100%\", height: \"100%\", borderRadius: r, overflow: \"hidden\" }}>\n <Skeleton\n variant=\"rectangular\"\n width=\"100%\"\n height=\"100%\"\n sx={{\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro sobre fondo oscuro\n \"&::after\": {\n // opcional: brillo un poquito más visible\n background: \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\n },\n }}\n />\n </Box>\n);\n\n\nconst OraculoGameSlide: React.FC<OraculoGameSlideProps> = ({\n items,\n layout = \"grid\",\n onClick,\n loading = false,\n gridSkeletonCount = 4,\n}) => {\n // =========================\n // MOSAIC: 1 grande + 4 chicas\n // =========================\n if (layout === \"mosaic\") {\n const big = items[0];\n // console.log(\"big: \", big);\n \n const smalls = items.slice(1, 5);\n\n return (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateRows: {\n xs: `repeat(2, 112px)`,\n md: `repeat(2, 168px)`,\n },\n gridTemplateColumns: {\n xs: `184px`,\n md: `280px`,\n },\n gridAutoFlow: \"column\",\n gridAutoColumns: {\n xs: `104px`,\n md: `152px`,\n },\n columnGap: `${GAP}px`,\n rowGap: `${GAP}px`,\n alignItems: \"stretch\",\n justifyItems: \"stretch\",\n }}\n >\n {/* BIG */}\n <Box\n sx={{\n width: { xs: 184, md: 280 },\n height: { xs: 234, md: 352 },\n gridRow: \"1 / span 2\",\n overflow: \"hidden\",\n borderRadius: 2,\n }}\n >\n {loading ? (\n <SkCard />\n ) : (\n big && (\n <OraculoGameCard\n imageUrl={`https://olimpo.bet${big.background ?? big.imageUrl ?? \"\"}`}\n size=\"lg\"\n fillParent\n onClick={() => onClick?.(big, 0)}\n />\n )\n )}\n </Box>\n\n {/* SMALLS */}\n {(loading ? Array.from({ length: 4 }) : smalls).map((it: any, index: number) => (\n <Box\n key={loading ? `sk-${index}` : it.id}\n sx={{\n width: { xs: 104, md: 152 },\n height: { xs: 112, md: 168 },\n overflow: \"hidden\",\n borderRadius: 2,\n }}\n >\n {loading ? (\n <SkCard />\n ) : (\n <OraculoGameCard\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\n size=\"sm\"\n fillParent\n onClick={() => onClick?.(it, index + 1)}\n />\n )}\n </Box>\n ))}\n </Box>\n );\n }\n\n // =========================\n // GRID 2x2\n // =========================\n return (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: {\n xs: `repeat(2, 104px)`,\n md: `repeat(2, 152px)`,\n },\n gridTemplateRows: {\n xs: `repeat(2, 112px)`,\n md: `repeat(2, 168px)`,\n },\n gap: `${GAP}px`,\n gridAutoFlow: \"column\",\n }}\n >\n {(loading ? Array.from({ length: gridSkeletonCount }) : items).map((it: any, index: number) => (\n <Box\n key={loading ? `sk-${index}` : it.id ?? index}\n sx={{ overflow: \"hidden\", borderRadius: 2 }}\n >\n {loading ? (\n <SkCard />\n ) : (\n <OraculoGameCard\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\n size=\"sm\"\n fillParent\n onClick={() => onClick?.(it, index)}\n />\n )}\n </Box>\n ))}\n </Box>\n );\n};\n\nexport default OraculoGameSlide;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\n\nexport interface OraculoWelcomeBannerProps {\n title?: string;\n amount?: string; // ej: \"S/40\"\n subtitle?: string;\n buttonText?: string;\n onButtonClick?: () => void;\n backgroundImage?: string;\n alt?: string;\n className?: string;\n /** Tamaño en desktop: \"small\" (456x272) o \"large\" (618x346) */\n variant?: \"small\" | \"large\";\n}\n\nconst OraculoWelcomeBanner: React.FC<OraculoWelcomeBannerProps> = ({\n title,\n amount,\n subtitle,\n buttonText,\n onButtonClick,\n backgroundImage,\n alt,\n className = \"\",\n variant = \"small\",\n}) => {\n const symbol = amount ? amount.slice(0, 2) : \"\";\n const value = amount ? amount.slice(2) : \"\";\n const isLarge = variant === \"large\";\n\n return (\n <Box\n className={className}\n sx={{\n position: \"relative\",\n width: \"100%\",\n maxWidth: {\n xs: 328,\n md: isLarge ? 618 : 456,\n },\n mx: \"auto\",\n }}\n >\n {backgroundImage && (\n <Box\n sx={{\n position: \"relative\",\n width: \"100%\",\n aspectRatio: {\n xs: \"328 / 188\",\n md: isLarge ? \"618 / 346\" : \"456 / 272\",\n },\n borderRadius: \"14px\",\n overflow: \"hidden\",\n }}\n >\n <Box\n component=\"img\"\n src={backgroundImage}\n alt={alt ?? \"Fondo promocional\"}\n sx={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: {\n xs: \"50% 0%\",\n md: \"45% 0%\",\n },\n display: \"block\",\n }}\n />\n </Box>\n )}\n\n {/* Capa de contenido */}\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n color: \"#e7f8ff\",\n textAlign: \"center\",\n pl: \"14%\",\n pr: { xs: \"14%\", lg: \"15%\" },\n }}\n >\n <Box\n sx={{\n maxWidth: \"60%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n {/* Título superior */}\n {title && (\n <Typography\n sx={{\n fontSize: { xs: 12, md: 20 },\n fontWeight: 400,\n color: \"#e7f8ff\",\n }}\n >\n {title}\n </Typography>\n )}\n\n {/* Monto */}\n {amount && (\n <Box\n component=\"p\"\n sx={{\n fontFamily: '\"secondary\", sans-serif',\n lineHeight: { xs: 0.9, lg: 0.87 },\n m: \"4px 0\",\n background:\n \"linear-gradient(175deg, #EDC421 -12.56%, #FFFABF 17.99%, #EDC421 49.74%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n WebkitTextStroke: \"0.5px #fff8c1\",\n filter:\n \"drop-shadow(0px 4px 0px #8D4406) drop-shadow(0px 4px 4px rgba(28, 28, 28, 0.4))\",\n display: \"flex\",\n alignItems: \"baseline\",\n justifyContent: \"center\",\n }}\n >\n <Box\n component=\"span\"\n sx={{ fontSize: { xs: 35, md: 48 }, mr: 0.5 }}\n >\n {symbol}\n </Box>\n <Box\n component=\"span\"\n sx={{ fontSize: { xs: 52, md: 77 } }}\n >\n {value}\n </Box>\n </Box>\n )}\n\n {/* Subtítulo */}\n {subtitle && (\n <Typography\n sx={{\n pb: \"20px\",\n fontSize: 14,\n fontWeight: 600,\n color: \"#e7f8ff\",\n }}\n >\n {subtitle}\n </Typography>\n )}\n\n {/* Botón */}\n {buttonText && (\n <OraculoButton onClick={onButtonClick}>\n {buttonText}\n </OraculoButton>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoWelcomeBanner;\n","import React from \"react\";\nimport \"../../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.css\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\n\nexport interface OraculoClubOlimpoVisualProps {\n text: string;\n buttonLabel?: string;\n onClick?: () => void;\n\n // MOBILE\n imgAlt?: string;\n imgSrcMobile: string;\n\n // DESKTOP\n imgSrcDesktopBg?: string;\n imgSrcDesktopLogo?: string;\n}\n\nconst OraculoClubOlimpoVisual: React.FC<OraculoClubOlimpoVisualProps> = ({\n text,\n buttonLabel = \"Conoce más\",\n onClick,\n imgAlt = \"Club Olimpo\",\n imgSrcMobile,\n imgSrcDesktopBg,\n imgSrcDesktopLogo,\n}) => {\n return (\n <>\n {/* MOBILE */}\n <div className=\"orc-co-bgMobile\">\n <img\n src={imgSrcMobile}\n alt={imgAlt}\n className=\"orc-co-bgMobileImg\"\n />\n </div>\n\n {/* DESKTOP */}\n <div className=\"orc-co-bgDesktop\">\n {imgSrcDesktopBg && (\n <div className=\"orc-co-fillHost\">\n <img\n src={imgSrcDesktopBg}\n alt={`${imgAlt} fondo`}\n className=\"orc-co-bgDesktopImg\"\n />\n </div>\n )}\n\n {/* Bloque izquierdo: LOGO + TEXTO + BOTÓN */}\n <div className=\"orc-co-desktopContent\">\n {imgSrcDesktopLogo && (\n <img\n src={imgSrcDesktopLogo}\n alt={`${imgAlt} logo`}\n className=\"orc-co-logoImg\"\n />\n )}\n\n <p className=\"orc-co-captionDesktop\">{text}</p>\n\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\n {buttonLabel}\n </OraculoButton>\n </div>\n </div>\n\n {/* MOBILE: barra inferior */}\n <div className=\"orc-co-bottom\">\n <p className=\"orc-co-caption\">{text}</p>\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\n {buttonLabel}\n </OraculoButton>\n </div>\n </>\n );\n};\n\nexport default OraculoClubOlimpoVisual;\n","import { useState, useEffect} from \"react\";\r\n\r\nexport function redirectHomeWithOutcomes(url : any, outcomes: number | number[]) {\r\n const arr = Array.isArray(outcomes) ? outcomes : [outcomes];\r\n sessionStorage.setItem(\"landingOutcomes\", JSON.stringify(arr));\r\n window.location.href = url;\r\n}\r\n\r\nexport function verMasSeccionEnVivo() {\r\n window.location.href = \"/deportes#in-play\";\r\n}\r\n\r\nexport function verMasSeccionSemana() {\r\n window.location.href = \"/deportes#sports-hub/football\";\r\n}\r\n\r\n\r\nexport function verMasSeccionCombinadas() {\r\n window.location.href = \"/deportes#specials\";\r\n}\r\n\r\nexport async function fetchJerseys(eventIds: number[]) {\r\n const res = await fetch(\"https://api.mktolimpo.com/api/jerseys/search\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n events: eventIds,\r\n }),\r\n });\r\n\r\n return await res.json();\r\n }\r\n\r\n\r\nexport function useDebouncedValue<T>(value: T, delay = 250): T {\r\n const [debounced, setDebounced] = useState(value);\r\n\r\n useEffect(() => {\r\n const id = setTimeout(() => setDebounced(value), delay);\r\n return () => clearTimeout(id);\r\n }, [value, delay]);\r\n\r\n return debounced;\r\n}","import React, { createContext, useContext } from \"react\";\n\ninterface DocIdContextType {\n docId: string;\n}\n\nconst DocIdContext = createContext<DocIdContextType | undefined>(undefined);\n\nexport const DocIdProvider: React.FC<{\n children: React.ReactNode;\n docId: string;\n}> = ({ children, docId }) => {\n const value = React.useMemo(() => ({ docId }), [docId]);\n return (\n <DocIdContext.Provider value={value}>{children}</DocIdContext.Provider>\n );\n};\n\nexport const useDocId = () => {\n const context = useContext(DocIdContext);\n if (!context) {\n throw new Error(\"useDocId debe usarse dentro de DocIdProvider\");\n }\n return context.docId;\n};\n","import React from \"react\";\r\nimport styles from \"./OraculoEventCombinadasCard.module.css\";\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport { redirectHomeWithOutcomes } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nexport default function OraculoEventCombinadosCard({ coupon }: any) {\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n\r\n function processCoupon(coupon: any) {\r\n const allOutcomes: any[] = [];\r\n\r\n // ✅ DEDUPE EVENTS BY ID\r\n const uniqueEvents = Array.from(\r\n new Map(\r\n (coupon?.events ?? [])\r\n .filter(Boolean)\r\n .map((e: any) => [e.id, e])\r\n ).values()\r\n );\r\n\r\n uniqueEvents.forEach((event: any) => {\r\n const apuestas = event.betoffers ?? [];\r\n const homeName = event.homeName;\r\n const awayName = event.awayName;\r\n\r\n apuestas.forEach((a: any) => {\r\n if (!a?.outcomes?.length) return;\r\n\r\n const best = a.outcomes[0];\r\n if (!best) return;\r\n\r\n let value = \"\";\r\n const line = best?.line ? best.line / 1000 : \"\";\r\n\r\n // ----- OVER / UNDER -----\r\n if ([\"Más de\", \"Mas de\", \"Over\"].includes(best.label)) {\r\n value = `Más de ${line}`;\r\n if (best.participant) value = `${best.participant} - ${value}`;\r\n }\r\n\r\n // ----- UNDER -----\r\n else if ([\"Menos de\", \"Menos\", \"Under\"].includes(best.label)) {\r\n value = `Menos de ${line}`;\r\n if (best.participant) value = `${best.participant} - ${value}`;\r\n }\r\n\r\n // ----- YES / NO -----\r\n else if ([\"Sí\", \"No\"].includes(best.label)) {\r\n value = best.label;\r\n if (best.participant) value = `${best.participant} - ${value}`;\r\n }\r\n\r\n // ----- DOUBLE CHANCE -----\r\n else if ([\"1X\", \"12\", \"X2\"].includes(best.label)) {\r\n if (best.label === \"1X\") value = `${homeName} o Empate`;\r\n if (best.label === \"12\") value = `${homeName} o ${awayName}`;\r\n if (best.label === \"X2\") value = `${awayName} o Empate`;\r\n }\r\n\r\n // ----- DEFAULT -----\r\n else {\r\n value = best.participant ?? best.label ?? \"\";\r\n if (line !== \"\" && value === best.label) {\r\n value = `${best.label} ${line}`;\r\n }\r\n }\r\n\r\n allOutcomes.push({\r\n id: best.id,\r\n value,\r\n label: a.criterion?.label ?? \"\",\r\n odds: best.odds ?? 0,\r\n position: best.position ?? 0,\r\n eventId: event.id\r\n });\r\n });\r\n });\r\n\r\n return {\r\n outcomes: allOutcomes.sort((a, b) => a.position - b.position),\r\n total: Number(coupon?.combinadoTotal ?? 0).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n}),\r\n events: uniqueEvents\r\n };\r\n }\r\n\r\n \r\n function buildUrlFromCoupon(coupon) {\r\n if (!coupon || !Array.isArray(coupon.events) || coupon.events.length === 0) {\r\n return '/deportes#home';\r\n }\r\n\r\n const events = coupon.events;\r\n\r\n if (events.length === 1) {\r\n return `/deportes#event/${events[0].id}`;\r\n }\r\n\r\n const firstGroupId = events[0].groupId;\r\n const allSameGroup = events.every(e => e.groupId === firstGroupId);\r\n\r\n if (allSameGroup) {\r\n const path = events[0].path;\r\n\r\n if (Array.isArray(path) && path.length > 0) {\r\n const termKeys = path.map(p => p.termKey).filter(Boolean);\r\n return `/deportes#sports-hub/${termKeys.join('/')}`;\r\n }\r\n }\r\n\r\n\r\n return '/deportes#home';\r\n}\r\n\r\n const handleOutcomeClick = (\r\n outcomes: number | number[],\r\n totalOdds?: string,\r\n ) => {\r\n const arr = Array.isArray(outcomes) ? outcomes : [outcomes];\r\n\r\n // Obtener nombres únicos de eventos\r\n const eventNames = Array.from(\r\n new Set(\r\n couponData.outcomes.map((o) => {\r\n const event = eventMap.get(Number(o.eventId));\r\n return event?.name ?? \"\";\r\n }),\r\n ),\r\n ).filter(Boolean);\r\n\r\n const resultTitle =\r\n eventNames.length > 0 ? eventNames.join(\" + \") : JSON.stringify(arr);\r\n\r\n const label = totalOdds\r\n ? `${resultTitle} - Cuota: ${totalOdds}`\r\n : resultTitle;\r\n\r\n captureInteraction({\r\n element: \"evento_semana_outcome\",\r\n label: `Landing: ${docId} - OraculoEventCombinadasCard - Click: ${label}`,\r\n target: \"/deportes#in-play\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoEventCombinadasCard\", outcomes: label },\r\n });\r\n\r\n redirectHomeWithOutcomes(buildUrlFromCoupon(coupon),outcomes);\r\n };\r\n\r\n if (!coupon?.events?.length) return null;\r\n\r\n const couponData = processCoupon(coupon);\r\n const outcomesByEvent = couponData.outcomes.reduce((acc: any, o: any) => {\r\n if (!acc[o.eventId]) acc[o.eventId] = [];\r\n acc[o.eventId].push(o);\r\n return acc;\r\n }, {});\r\n\r\n const eventMap = new Map(\r\n couponData.events.map((e: any) => [e.id, e])\r\n );\r\n\r\n return (\r\n <div className={styles.card}>\r\n <div className={styles.combinadas}>\r\n <div className={styles.combinadasScroll} >\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap >\r\n {Object.entries(outcomesByEvent)\r\n .reverse()\r\n .map(([eventId, outcomes]: any) => {\r\n const event = eventMap.get(Number(eventId));\r\n if (!event) return null;\r\n\r\n return (\r\n <Stack\r\n key={eventId}\r\n direction=\"column\"\r\n spacing={0.5} // 🔹 inner spacing (4px)\r\n useFlexGap\r\n >\r\n {/* 🔹 EVENT TITLE */}\r\n <OraculoSectionTitle\r\n title={event.name}\r\n iconUrl=\"/assets/img/home/Combinadas/pelota.png\"\r\n size=\"xs\"\r\n />\r\n\r\n <img\r\n loading=\"lazy\"\r\n src=\"/assets/img/home/Combinadas/line.png\"\r\n />\r\n\r\n {/* 🔹 EVENT OUTCOMES */}\r\n {(outcomes as any[]).map((a: any, i: number) => (\r\n <div className={styles.apuestaItem} key={`${eventId}-${i}`}>\r\n <div className={styles.lineContainer}>\r\n <div className={styles.circle} />\r\n {i < outcomes.length - 1 && (\r\n <div className={styles.line} />\r\n )}\r\n </div>\r\n\r\n <div className={styles.apuestaText}>\r\n <strong>{a.value}</strong> | {a.label}\r\n </div>\r\n </div>\r\n ))}\r\n </Stack>\r\n );\r\n })}\r\n</Stack>\r\n </div>\r\n </div>\r\n\r\n <button\r\n onClick={() =>\r\n handleOutcomeClick(\r\n couponData.outcomes.map((o) => o.id),\r\n couponData.total,\r\n )\r\n }\r\n className={styles.cuotaTotal}\r\n >\r\n <span>\r\n Cuota total: <strong>{couponData.total}</strong>\r\n </span>\r\n <img\r\n loading=\"lazy\"\r\n src=\"/assets/img/home/Combinadas/cuotaTotal.svg\"\r\n alt=\"cuota total\"\r\n />\r\n </button>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\nimport styles from \"./OraculoButtonBet.module.css\";\nimport { Link as MuiLink } from \"@mui/material\";\n\nexport interface OraculoButtonProps {\n children?: React.ReactNode;\n onClick?: any;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n rel?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n disabled?: boolean;\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n fullHeight?: boolean;\n className?: string;\n ariaLabel?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n}\n\nexport default function OraculoButtonBet({\n children,\n onClick,\n href,\n target,\n rel,\n type = \"button\",\n disabled = false,\n variant = \"primary\",\n size,\n fullWidth = false,\n fullHeight = false,\n className = \"\",\n ariaLabel,\n leftIcon,\n rightIcon,\n iconOnly,\n}: OraculoButtonProps) {\n const hasText = !!children && children !== true;\n const hasLeft = !!leftIcon;\n const hasRight = !!rightIcon;\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\n\n const cls = [\n styles[\"orc-btn\"], // base\n styles[`orc-btn--${variant}`], // variant primary/secondary/tertiary\n size ? styles[`orc-btn--${size}`] : \"\", // sm / md / lg\n fullWidth ? styles[\"orc-btn--full\"] : \"\",\n fullHeight ? styles[\"orc-btn--fullHeight\"] : \"\",\n isIconOnly ? styles[\"orc-btn--iconOnly\"] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const content = (\n <>\n {leftIcon && <span className={styles[\"orc-btn__icon\"]}>{leftIcon}</span>}\n {!isIconOnly && (\n <span className={styles[\"orc-btn__label\"]}>{children}</span>\n )}\n {rightIcon && <span className={styles[\"orc-btn__icon\"]}>{rightIcon}</span>}\n </>\n );\n\n const ariaDisabled = disabled ? true : undefined;\n\n if (href) {\n return (\n <MuiLink\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n aria-disabled={ariaDisabled}\n tabIndex={ariaDisabled ? -1 : undefined}\n className={cls}\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\n >\n {content}\n </MuiLink>\n );\n }\n\n return (\n <button\n type={type}\n onClick={onClick}\n disabled={!!ariaDisabled}\n aria-label={ariaLabel}\n className={cls}\n >\n {content}\n </button>\n );\n}\n","export type Jersey = {\r\n base: string;\r\n sleeve: string;\r\n number: string;\r\n real: boolean;\r\n type: string;\r\n};\r\n\r\nexport type TeamSide = \"home\" | \"away\";\r\nexport type JerseyRole = \"player\" | \"GK\";\r\n\r\n\r\n const DEFAULT_HOME_JERSEY = {\r\n base: \"FFFFFF\",\r\n sleeve: \"FFFFFF\",\r\n number: \"000000\",\r\n real: false,\r\n type: \"short_sleeves\",\r\n};\r\n\r\nconst DEFAULT_AWAY_JERSEY = {\r\n base: \"000000\",\r\n sleeve: \"000000\",\r\n number: \"FFFFFF\",\r\n real: false,\r\n type: \"short_sleeves\",\r\n};\r\n\r\nexport type JerseyEvent =\r\n | {\r\n externalId?: number;\r\n jerseys?: {\r\n home?: {\r\n player?: Jersey;\r\n GK?: Jersey;\r\n };\r\n away?: {\r\n player?: Jersey;\r\n GK?: Jersey;\r\n };\r\n };\r\n }\r\n | null\r\n | undefined;\r\n\r\nexport const getTeamJersey = (\r\n jerseyEvent: JerseyEvent,\r\n side: TeamSide,\r\n role: JerseyRole = \"player\"\r\n): Jersey | null => {\r\n\r\n if (jerseyEvent === undefined) {\r\n return null;\r\n }\r\n\r\n if (jerseyEvent === null) {\r\n return side === \"home\"\r\n ? DEFAULT_HOME_JERSEY\r\n : DEFAULT_AWAY_JERSEY;\r\n }\r\n\r\n const jersey = jerseyEvent?.jerseys?.[side]?.[role];\r\n\r\n if (jersey) return jersey;\r\n\r\n return side === \"home\"\r\n ? DEFAULT_HOME_JERSEY\r\n : DEFAULT_AWAY_JERSEY;\r\n};","import React from \"react\";\r\nimport OraculoButtonBet from \"../../atoms/OraculoButtonBet/OraculoButtonBet\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventLabel from \"../../atoms/OraculoEvent/OraculoEventLabel\";\r\nimport OraculoEventTeamInfo from \"../../atoms/OraculoEvent/OraculoEventTeamInfo\";\r\nimport OraculoEventScore from \"../../atoms/OraculoEvent/OraculoEventScore\";\r\nimport OraculoEventHeader from \"../../atoms/OraculoEvent/OraculoEventHeader\";\r\nimport Stack from '@mui/material/Stack';\r\nimport {redirectHomeWithOutcomes} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { EnVivoEventProps, Outcome } from \"../../interfaces/oraculo/InterfaceKambi\";\r\nimport styles from \"./OraculoEventEnVivoCard.module.css\";\r\nimport {getTeamJersey} from \"../../atoms/OraculoEvent/KambiJersey\";\r\n\r\n\r\nexport default function OraculoEventEnVivoCard({ event, liveData , betOffers ,jersey } : EnVivoEventProps) {\r\n const selectedOffer = betOffers?.find(\r\n (offer) => offer.betOfferType?.id === 2\r\n );\r\nconst defaultOutcomeBase = {\r\n englishLabel: \"\",\r\n type: \"\",\r\n betOfferId: 0,\r\n changedDate: \"\",\r\n oddsFractional: \"\",\r\n oddsAmerican: \"\",\r\n status: \"INACTIVE\",\r\n cashOutStatus: \"SUSPENDED\",\r\n};\r\n\r\nconst defaultOutcomes: Outcome[] = [\r\n { ...defaultOutcomeBase, id: -1, label: \"1\", odds: undefined as any },\r\n { ...defaultOutcomeBase, id: -2, label: \"X\", odds: undefined as any },\r\n { ...defaultOutcomeBase, id: -3, label: \"2\", odds: undefined as any },\r\n];\r\n\r\n return (\r\n <div className={styles.cardWrapper} >\r\n \r\n <Stack direction=\"column\" spacing={1} useFlexGap>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <OraculoEventHeader\r\n title={event?.path?.[0]?.name ?? ''}\r\n subtitle={event?.group ?? ''}\r\n live={true}\r\n time={liveData?.matchClock?.minute != null ? `${liveData.matchClock.minute}'` : ''}\r\n />\r\n\r\n <div style={{ padding: \"0 4px\" }}>\r\n\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto 1fr\">\r\n <OraculoEventTeamInfo name={event?.homeName} jersey={getTeamJersey(jersey, \"home\")}/>\r\n <OraculoEventScore text={(liveData?.score?.home ?? 0) + \":\"+ (liveData?.score?.away ?? 0)} name=\"En vivo\" />\r\n <OraculoEventTeamInfo name={event?.awayName} jersey={getTeamJersey(jersey, \"away\")} />\r\n </OraculoGridGroup>\r\n </div>\r\n </Stack>\r\n\r\n <Stack direction=\"column\" spacing={1} useFlexGap>\r\n\r\n <OraculoGridGroup spacing={1}>\r\n {(selectedOffer?.outcomes ?? defaultOutcomes).map((item : Outcome, index : number) => (\r\n <OraculoEventLabel key={index} text={item.label.toUpperCase()} />\r\n ))}\r\n </OraculoGridGroup>\r\n\r\n <OraculoGridGroup spacing={2}>\r\n {(selectedOffer?.outcomes ?? defaultOutcomes).map((item : Outcome, index : number) => (\r\n <OraculoButtonBet key={index} variant=\"primary\" disabled={item.odds == undefined || selectedOffer?.cashOutStatus == 'SUSPENDED'} onClick={()=>{redirectHomeWithOutcomes('/deportes#event/live/'+event.id ,item.id);}} className={styles.customButtonDisabled}>\r\n <span className={styles.customButtonLabel}>{item.odds === undefined ? \"\" : (item.odds / 1000).toFixed(2)}</span>\r\n </OraculoButtonBet>\r\n ))}\r\n </OraculoGridGroup>\r\n </Stack>\r\n </Stack>\r\n </div>\r\n\r\n );\r\n}","import React from \"react\";\r\nimport styles from \"./OraculoEventDate.module.css\";\r\n\r\ninterface OraculoEventDateProps {\r\n text: string;\r\n}\r\n\r\nexport default function OraculoEventDate({ text }: OraculoEventDateProps) {\r\n return <div className={`oli-font ${styles.date}`}>{text}</div>;\r\n}","import React from \"react\";\r\nimport Stack from '@mui/material/Stack';\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventLabel from \"../../atoms/OraculoEvent/OraculoEventLabel\";\r\nimport OraculoEventTeamInfo from \"../../atoms/OraculoEvent/OraculoEventTeamInfo\";\r\nimport OraculoEventScore from \"../../atoms/OraculoEvent/OraculoEventScore\";\r\nimport OraculoEventLeague from \"../../atoms/OraculoEvent/OraculoEventLeague\";\r\nimport OraculoEventDate from \"../../atoms/OraculoEvent/OraculoEventDate\";\r\nimport {redirectHomeWithOutcomes} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport styles from \"./OraculoEventSemanaCard.module.css\";\r\nimport { SemanaEventProps } from \"../../interfaces/oraculo/InterfaceKambi\";\r\nimport {getTeamJersey} from \"../../atoms/OraculoEvent/KambiJersey\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nexport default function OraculoEventSemanaCard({event, jersey} : SemanaEventProps ) {\r\n\tconst captureInteraction = useCaptureInteraction();\r\n\tconst docId = useDocId();\r\n\r\n\tfunction formatDate(dateString : string): string {\r\n\t\tconst date = new Date(dateString);\r\n\r\n\t\tconst dayShort = date.toLocaleDateString(\"es-ES\", { weekday: \"short\" }).toUpperCase();\r\n\r\n\t\tconst day = date.getDate().toString().padStart(2, \"0\");\r\n\t\tconst month = (date.getMonth() + 1).toString().padStart(2, \"0\");\r\n\r\n\t\tlet time = date.toLocaleTimeString(\"es-PE\", { hour: \"numeric\", minute: \"2-digit\", hour12: true }).toUpperCase();\r\n\r\n\t\ttime = time.replace(/\\./g, \"\").replace(/A\\s*M/i, \"AM\").replace(/P\\s*M/i, \"PM\");\r\n\r\n\t\treturn `${dayShort} ${day}/${month} | ${time}`;\r\n\t}\r\n\r\n const handleOutcomeClick = (outcomes: number | number[], odds?: number) => {\r\n const matchTitle = `${event.homeName} vs ${event.awayName}`;\r\n const cuota = odds ? (odds / 1000).toFixed(2) : \"\";\r\n const label = cuota ? `${matchTitle} - Cuota: ${cuota}` : matchTitle;\r\n\r\n captureInteraction({\r\n element: \"evento_semana_outcome\",\r\n label: `Landing: ${docId} - OraculoEventSemanaCard - Click: ${label}`,\r\n target: \"/deportes#in-play\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoEventSemanaCard\", outcomes: label },\r\n });\r\n\r\n redirectHomeWithOutcomes('/deportes#event/'+event.id ,outcomes);\r\n };\r\n\r\n\treturn (\r\n\t\t<div className={styles.cardContainer}>\r\n\t\t\t<OraculoEventLeague title={event?.group ?? ''} />\r\n\t\t\t<div className={styles.cardBackground} >\r\n\t\t\t\t\r\n\t\t\t\t<Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n\r\n\t\t\t\t<Stack direction=\"column\" spacing={1} useFlexGap> \r\n\t\t\t\t\t\r\n\t\t\t\t\t<div className={styles.equipos}>\r\n\t\t\t\t\t\t<OraculoEventTeamInfo name={event.homeName} size=\"compact\" jersey={getTeamJersey(jersey, \"home\")} />\r\n\t\t\t\t\t\t<OraculoEventScore text={'vs.'} name=\"\" size=\"small\"/>\r\n\t\t\t\t\t\t<OraculoEventTeamInfo name={event.awayName} size=\"compact\" jersey={getTeamJersey(jersey, \"away\")} />\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<OraculoEventDate text={formatDate(event.start)} />\r\n\r\n\t\t\t\t</Stack>\r\n\r\n\t\t\t\t<Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap> \r\n\t\t\t\t\t<OraculoGridGroup spacing={1}>\r\n\t\t\t\t\t\t{(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n\t\t\t\t\t\t\t<OraculoEventLabel key={index} text={item.label.toUpperCase()} />\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</OraculoGridGroup>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div className={styles.jugadas}>\r\n\t\t\t\t\t<OraculoGridGroup spacing={1}>\r\n\t\t\t\t\t\t{(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n\t\t\t\t\t\t\t<OraculoButton key={index} variant=\"primary\" fullHeight onClick={()=>{handleOutcomeClick(item.id, item.odds);}} >{(item.odds / 1000).toFixed(2)}</OraculoButton>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</OraculoGridGroup>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Stack>\r\n\t\t\t\t</Stack>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t);\r\n}","import React, { useRef, useState } from \"react\";\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\nimport {\n OraculoSeccionDestacadosItem,\n OraculoSeccionDestacadosProps,\n} from \"../../interfaces/oraculo/InterfaceDestacados\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nexport default function OraculoSeccionDestacados({\n items,\n title = \"Destacados\",\n iconUrl,\n onViewMore,\n className = \"\",\n}: OraculoSeccionDestacadosProps) {\n const carouselRef = useRef<any>(null);\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n const isLoading = !items || items.length === 0;\n\n const handlePrev = () => {\n captureInteraction({\n element: \"destacados_carousel_prev\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Anterior`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n carouselRef.current?.prev();\n };\n\n const handleNext = () => {\n captureInteraction({\n element: \"destacados_carousel_next\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Siguiente`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n carouselRef.current?.next();\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"destacados_view_more\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Ver más`,\n target: \"https://www.olimpo.bet/promociones\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/promociones\");\n }\n };\n\n const redirectToPromotion = (promotion?: string) => {\n if (!promotion) return;\n\n const slug = encodeURIComponent(promotion);\n const url = `https://www.olimpo.bet/promociones/${slug}`;\n\n captureInteraction({\n element: \"destacados_card\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Click: ${String(promotion)}`,\n target: url,\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n section: \"OraculoSeccionDestacados\",\n promotion: String(promotion),\n },\n });\n\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(url);\n }\n };\n\n const sectionClassName = className || undefined;\n\n return (\n <section className={sectionClassName} style={{ width: \"100%\" }}>\n <header\n style={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto auto\",\n alignItems: \"center\",\n columnGap: 12,\n rowGap: 8,\n marginBottom: 16,\n paddingLeft: 16,\n paddingRight: 16,\n }}\n >\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <div style={{ display: \"flex\", gap: 8 }}>\n <OraculoButton\n ariaLabel=\"Anterior\"\n variant=\"secondary\"\n iconOnly\n leftIcon={<ChevronLeftRounded />}\n onClick={handlePrev}\n disabled={navState.isStart || isLoading}\n />\n <OraculoButton\n ariaLabel=\"Siguiente\"\n variant=\"secondary\"\n iconOnly\n rightIcon={<ChevronRightRounded />}\n onClick={handleNext}\n disabled={navState.isEnd || isLoading}\n />\n </div>\n\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\n Ver más\n </OraculoButton>\n </header>\n\n <OraculoCarousel\n ref={carouselRef}\n items={items}\n perPage={undefined}\n gap=\"16px\"\n enableHorizontalWheel\n showRightGradient\n options={{ autoWidth: true, trimSpace: 'move'}}\n breakpoints={{\n 768: { perPage: 2, focus: \"start\", padding: { left: \"24px\", right: \"24px\" } },\n 1024: { perPage: 2.5, focus: \"start\", padding: { left: \"24px\", right: \"24px\" } },\n }}\n renderItem={(item: OraculoSeccionDestacadosItem) => (\n <div\n key={`${item.title}-${item.image}`}\n style={{\n textAlign: \"center\",\n marginTop: 16,\n cursor: \"pointer\",\n }}\n onClick={() => redirectToPromotion(item.promotion)}\n >\n <img\n src={`https://olimpo.bet${item.image !== \"\" ? item.image : item.summary_image}`}\n alt={item.title}\n style={{\n width: \"100%\",\n height:\n typeof window !== \"undefined\" && window.innerWidth < 768\n ? \"80px\"\n : \"137px\",\n borderRadius: 8,\n display: \"block\",\n objectFit: \"cover\",\n }}\n />\n </div>\n )}\n onMove={({ isStart, isEnd }) => {\n setNavState({ isStart, isEnd });\n captureInteraction({\n element: \"destacados_carousel_slide\",\n label: \"OraculoSeccionDestacados - Slide Carousel\",\n target: \"carousel\",\n event_type: \"slide\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n isStart,\n isEnd,\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n }}\n />\n </section>\n );\n}\n","\nconst KEY = \"__ORACULO_EXTRAS__\" as const;\n\ntype Store = {\n extras?: Record<string, unknown>;\n};\n\nfunction getStore(): Store {\n const g = globalThis as any;\n if (!g[KEY]) g[KEY] = {};\n return g[KEY] as Store;\n}\n\nexport function setOraculoExtras(extrasObj: Record<string, unknown>) {\n getStore().extras = extrasObj;\n}\nexport function getOraculoExtra<T = unknown>(key: string): T | undefined {\n return getStore().extras?.[key] as T | undefined;\n}\nexport function clearOraculoExtras() {\n delete (globalThis as any)[KEY];\n}\n","import React, { useMemo } from \"react\";\nimport Stack from \"@mui/material/Stack\";\nimport Box from \"@mui/material/Box\";\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\nimport OraculoGameRankCard from \"../../molecules/OraculoGameRankCard/OraculoGameRankCard\";\nimport { OraculoSeccionTopJuegosProps } from \"../../interfaces/oraculo/InterfaceTopJuegos\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\nexport default function OraculoSeccionTopJuegos({\n items,\n title = \"Top Juegos\",\n iconUrl,\n onCardClick,\n}: OraculoSeccionTopJuegosProps) {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n \n const normalizedItems = useMemo(\n () =>\n (items ?? [])\n .map((item, index) => ({\n ...item,\n orden: item.orden ?? index + 1,\n _originalIndex: index,\n }))\n .sort((a, b) => {\n if (a.orden != null && b.orden != null) return a.orden - b.orden;\n return a._originalIndex - b._originalIndex;\n }),\n [items]\n );\n\n const isLoading = !items || items.length === 0;\n const top6 = isLoading ? Array.from({ length: 6 }) : normalizedItems.slice(0, 6);\n\n const handleOpen = (juego: any) => {\n captureInteraction({\n element: \"top_juegos_card\",\n label: `Landing: ${docId} - OraculoSeccionTopJuegos - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(juego.machine || \"unknown\"),\n section: \"OraculoSeccionTopJuegos\",\n },\n });\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n showIframe?.();\n\n requestAnimationFrame(() => {\n loadMachine?.(juego, false, \"CASINO\");\n });\n };\n\n return (\n <section style={{ width: \"100%\" }}>\n <Stack direction=\"column\" spacing={2} useFlexGap>\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: {\n xs: \"repeat(3, minmax(0, 1fr))\",\n md: \"repeat(6, minmax(0, 1fr))\",\n },\n gap: { xs: 1.5, md: 2 },\n justifyItems: \"center\",\n width: \"100%\",\n }}\n >\n {top6.map((juego: any, index: number) => (\n <OraculoGameRankCard\n key={isLoading ? `sk-${index}` : (juego.machine ?? `${index}`)}\n imageUrl={isLoading ? \"\" : juego.background ? `https://olimpo.bet${juego.background}` : `https://olimpo.bet${juego.logo ?? \"\"}`}\n orden={isLoading ? index + 1 : juego.orden}\n loading={isLoading}\n onClick={\n isLoading\n ? undefined\n : () => {\n onCardClick?.(juego);\n handleOpen(juego);\n }\n }\n />\n ))}\n </Box>\n </Stack>\n </section>\n );\n}\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Stack from \"@mui/material/Stack\";\nimport Typography from \"@mui/material/Typography\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\nimport OraculoLiveCasinoCard from \"../../molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard\";\nimport { OraculoSeccionCasinoEnVivoProps } from \"../../interfaces/oraculo/InterfaceCasinoEnVivo\";\nimport { OraculoGameItem } from \"../..\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\nconst getGameId = (g: OraculoGameItem, idx: number) =>\n g.orden ?? g.machine ?? idx;\n\nconst OraculoSeccionCasinoEnVivo: React.FC<OraculoSeccionCasinoEnVivoProps> = ({\n items,\n title = \"Casino en vivo\",\n subtitle = \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\",\n backgroundMobileUrl = \"\",\n onCardClick,\n backgroundDesktopUrl = \"\",\n onViewMore,\n className,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const handleOpenLive = (juego: any) => {\n captureInteraction({\n element: \"live_casino_card\",\n label: `Landing: ${docId} - OraculoSeccionCasinoEnVivo - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(juego.machine || \"unknown\"),\n provider: juego.provider || \"unknown\",\n section: \"OraculoSeccionCasinoEnVivo\",\n },\n });\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n if (!loadMachine) {\n if (onCardClick) {\n onCardClick(juego);\n return;\n }\n console.warn(\n \"[OraculoSeccionCasinoEnVivo] No existe loadMachine en extras ni onCardClick. No se puede abrir el juego.\",\n { machine: juego?.machine, provider: juego?.provider }\n );\n return;\n }\n\n // 1) Mostrar contenedor del iframe\n showIframe?.();\n\n // 2) Subir arriba (para que el iframe no aparezca “desde donde estabas”)\n if (typeof window !== \"undefined\") {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n }\n\n // 3) Abrir juego con el flujo del host (mismo que casino/virtuales)\n // Espera 1 frame por si el DOM del iframe se monta/actualiza al mostrarlo\n requestAnimationFrame(() => {\n loadMachine?.(juego, false, \"casino_en_vivo\");\n });\n };\n\n \n const handleViewMore = () => {\n captureInteraction({\n element: \"casino_en_vivo_view_more\",\n label: `Landing: ${docId} - OraculoSeccionCasinoEnVivo - Ver más`,\n target: \"https://www.olimpo.bet/casino-en-vivo\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasinoEnVivo\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n if (onViewMore) {\n onViewMore();\n } else {\n globalThis.location.assign(\"https://www.olimpo.bet/casino-en-vivo\");\n }\n }\n };\n\n return (\n <Box\n className={className}\n sx={{\n position: \"relative\",\n color: \"white\",\n overflow: \"hidden\",\n }}\n >\n {/* Fondo */}\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n mt:{ xs: 0, md: 4 },\n backgroundImage: {\n xs: `\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\n url('${backgroundMobileUrl}')\n `,\n md: `\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\n url('${backgroundDesktopUrl}')\n `,\n },\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n zIndex: 0,\n }}\n />\n\n {/* Contenido */}\n <Box\n sx={{\n position: \"relative\",\n zIndex: 1,\n maxWidth: 1200,\n height: { xs: \"450px\", md: \"590px\" },\n mx: \"auto\",\n px: { xs: 2.5, md: 6 },\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: { xs: \"center\", md: \"center\" },\n justifyContent: \"center\",\n gap: { xs: 0, md: 15 },\n textAlign: { xs: \"center\", md: \"left\" },\n }}\n >\n {/* Columna izquierda */}\n <Stack spacing={3} sx={{ maxWidth: { md: 280 } }}>\n <Typography\n variant=\"h4\"\n sx={{\n fontWeight: 800,\n fontSize: { xs: 24, md: 40 },\n WebkitTextStroke: \"0.5px rgba(255, 255, 255, .5)\",\n textShadow:\n \"0 0 2px rgba(255, 255, 255, .95),\" +\n \"0 0 4px rgba(255, 255, 255, .6),\" +\n \"0 1px 0 #898989\",\n }}\n >\n {title}\n </Typography>\n\n <Typography\n sx={{\n fontSize: { xs: 14, md: 18 },\n color: \"rgba(255,255,255,0.9)\",\n marginX: { xs: 4, md: 0 },\n lineHeight: 1.5,\n }}\n >\n {subtitle}\n </Typography>\n\n <Box sx={{ display: { xs: \"none\", md: \"block\" } }}>\n <OraculoButton\n variant=\"primary\"\n size=\"md\"\n onClick={handleViewMore}\n >\n Ver más\n </OraculoButton>\n </Box>\n </Stack>\n\n {/* Lista de tarjetas */}\n <Box\n sx={{\n display: \"flex\",\n gap: { xs: 2, md: 3 },\n justifyContent: \"center\",\n overflowX: { xs: \"auto\", md: \"visible\" },\n py: { xs: 3, md: 0 },\n alignItems: \"center\",\n }}\n >\n {(items ?? []).slice(0, 3).map((juego, idx) => (\n <OraculoLiveCasinoCard\n key={getGameId(juego, idx)}\n logo={`https://olimpo.bet${juego.background ? juego.background : (juego.logo ?? \"\")}`}\n provider={juego.provider}\n providerName={juego.web_name}\n machine={juego.machine}\n onClick={() => handleOpenLive(juego)}\n />\n ))}\n </Box>\n\n {/* Botón mobile */}\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\n <OraculoButton\n variant=\"primary\"\n size=\"lg\"\n onClick={handleViewMore}\n >\n Ver más\n </OraculoButton>\n </Box>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoSeccionCasinoEnVivo;\n","import { useEffect, useState } from \"react\";\nimport { OraculoGameItem } from \"../interfaces/oraculo/InterfaceGameItem\";\nimport { getOraculoExtra } from \"../utils/openMachineRegistry\";\n\nconst RECOMMENDATIONS_URL =\n \"https://1v5raznji6.execute-api.us-east-1.amazonaws.com/dev/recommendations\";\n\n\nconst mapMachineToGameItem = (\n machine: any,\n index: number\n): OraculoGameItem => {\n return {\n ...machine,\n id: machine.id ?? index,\n orden: machine.id ?? index,\n machine: String(\n machine.id ?? machine.machine ?? machine.external_id ?? index\n ),\n logo: machine.logo,\n background: machine.background,\n room_name: machine.room_name ?? \"\",\n product: machine.product ?? \"\",\n service: machine.service ?? \"\",\n provider: machine.provider ?? \"\",\n game_type: machine.game_type ?? null,\n external_id: machine.external_id ?? \"\",\n } as OraculoGameItem;\n};\n\nconst extractMachineIds = (payload: any): string[] => {\n if (!payload) return [];\n\n if (!Array.isArray(payload) && Array.isArray(payload.recommendations)) {\n return payload.recommendations\n .filter(Boolean)\n .map((id: any) => String(id));\n }\n\n return [];\n};\n\nconst getPersonalizeUserId = () => {\n const user = getOraculoExtra<any>(\"user\");\n\n // AJUSTA AQUÍ si el backend espera otro campo\n return user?.userId ?? user?.user ?? user?.id ?? null;\n};\n\nconst fetchRecommendations = async () => {\n const userId = getPersonalizeUserId();\n\n const qs = new URLSearchParams({\n userId: String(userId),\n productType: \"Casino\",\n filter: \"high-payout\",\n });\n\n const url = `${RECOMMENDATIONS_URL}?${qs.toString()}`;\n const res = await fetch(url);\n\n if (!res.ok) {\n throw new Error(\n `No se pudo obtener recomendaciones. HTTP ${res.status} ${res.statusText}`\n );\n }\n\n return res.json();\n};\n\nexport const usePersonalizeCasinoItems = (\n items: OraculoGameItem[],\n isPersonalize = false\n) => {\n const [resolvedItems, setResolvedItems] = useState<OraculoGameItem[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n\n const run = async () => {\n // flujo normal\n if (!isPersonalize) {\n setResolvedItems(Array.isArray(items) ? items : []);\n setLoading(false);\n return;\n }\n\n // flujo personalize\n setLoading(true);\n\n try {\n const recommendationsPayload = await fetchRecommendations();\n const machineIds = extractMachineIds(recommendationsPayload);\n\n if (!machineIds.length) {\n if (!cancelled) {\n setResolvedItems([]);\n }\n return;\n }\n\n const machineResults = await Promise.allSettled(\n machineIds.map(async (machineId: string, index: number) => {\n const res = await fetch(\n `https://api.mktolimpo.com/api/machine/${machineId}`\n );\n\n if (!res.ok) {\n throw new Error(`No se pudo obtener machine ${machineId}`);\n }\n\n const data = await res.json();\n return mapMachineToGameItem(data, index);\n })\n );\n\n if (cancelled) return;\n\n const parsedItems = machineResults\n .filter(\n (result): result is PromiseFulfilledResult<OraculoGameItem> =>\n result.status === \"fulfilled\"\n )\n .map((result) => result.value);\n\n setResolvedItems(parsedItems);\n } catch (error) {\n console.error(\"[usePersonalizeCasinoItems] error:\", error);\n if (!cancelled) {\n setResolvedItems([]);\n }\n } finally {\n if (!cancelled) {\n setLoading(false);\n }\n }\n };\n\n run();\n\n return () => {\n cancelled = true;\n };\n }, [items, isPersonalize]);\n\n return {\n resolvedItems,\n loading,\n };\n};","import React, { useMemo, useRef, useState } from \"react\";\nimport Stack from \"@mui/material/Stack\";\nimport Box from \"@mui/material/Box\";\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\n\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\nimport OraculoCarousel, {\n OraculoCarouselRef,\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport OraculoGameSlide, {\n OraculoGameSlideItem,\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\nimport { OraculoSeccionCasinoProps } from \"../../interfaces/oraculo/InterfaceCasino\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeCasinoItems } from \"../../hooks/usePersonalizeCasinoItems\";\n\ntype SlideKind = \"mosaic\" | \"grid\";\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\ninterface CasinoSlide {\n id: string;\n kind: SlideKind;\n items: OraculoGameSlideItem[];\n}\n\nconst parseBooleanValue = (input: any): boolean => {\n if (typeof input === \"boolean\") return input;\n\n if (typeof input === \"string\") {\n return input.toLowerCase() === \"true\";\n }\n\n if (input && typeof input === \"object\") {\n if (typeof input.value === \"boolean\") return input.value;\n\n if (typeof input.value === \"string\") {\n return input.value.toLowerCase() === \"true\";\n }\n }\n\n return false;\n};\n\nconst getGameId = (g: OraculoGameItem, idx: number) =>\n g.orden ?? g.machine ?? idx;\n\nconst buildCasinoSlides = (\n games: OraculoGameItem[],\n mosaicFirst = true,\n gridSize = 1,\n): CasinoSlide[] => {\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\n id: getGameId(g, idx),\n imageUrl: g.logo ?? \"\",\n ...(g.background ? { background: g.background } : {}),\n }));\n\n if (!baseItems.length) return [];\n\n const slides: CasinoSlide[] = [];\n let start = 0;\n\n if (mosaicFirst) {\n const take = Math.min(baseItems.length, 1);\n slides.push({\n id: \"mosaic-0\",\n kind: \"mosaic\",\n items: baseItems.slice(0, take),\n });\n start = take;\n }\n\n while (start < baseItems.length) {\n const end = Math.min(start + gridSize, baseItems.length);\n slides.push({\n id: `grid-${start}`,\n kind: \"grid\",\n items: baseItems.slice(start, end),\n });\n start = end;\n }\n\n return slides;\n};\n\nconst buildLoadingSlides = (\n mosaicFirst = true,\n gridSize = 4,\n): CasinoSlide[] => {\n const mkItems = (n: number) =>\n Array.from({ length: n }, (_, i) => ({\n id: `sk-${n}-${i}`,\n imageUrl: \"\",\n }));\n\n const slides: CasinoSlide[] = [];\n\n if (mosaicFirst) {\n slides.push({\n id: \"mosaic-loading\",\n kind: \"mosaic\",\n items: mkItems(5),\n });\n }\n\n slides.push({\n id: \"grid-loading\",\n kind: \"grid\",\n items: mkItems(gridSize),\n });\n\n return slides;\n};\n\nconst OraculoSeccionCasino: React.FC<OraculoSeccionCasinoProps> = ({\n items,\n title = \"Casino\",\n iconUrl = \"/assets/img/home/Casino/diamante.svg\",\n onItemClick,\n onViewMore,\n mosaicFirst = true,\n gridSize = 1,\n isPersonalize = false,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n\n const personalizeEnabled = parseBooleanValue(isPersonalize);\n\n const { resolvedItems, loading } = usePersonalizeCasinoItems(\n items,\n personalizeEnabled\n );\n\n const currentItems = personalizeEnabled\n ? resolvedItems\n : Array.isArray(items)\n ? items\n : [];\n\n const isLoading = personalizeEnabled\n ? loading\n : currentItems.length === 0;\n\n const slides = useMemo(() => {\n if (isLoading) {\n return buildLoadingSlides(mosaicFirst, gridSize);\n }\n\n return buildCasinoSlides(currentItems, mosaicFirst, gridSize);\n }, [isLoading, mosaicFirst, gridSize, currentItems]);\n\n const handlePrev = () => {\n captureInteraction({\n element: \"casino_prev\",\n label: `Landing: ${docId} - OraculoSeccionCasino - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasino\" },\n });\n\n carouselRef.current?.prev();\n };\n\n const handleNext = () => {\n captureInteraction({\n element: \"casino_next\",\n label: `Landing: ${docId} - OraculoSeccionCasino - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasino\" },\n });\n\n carouselRef.current?.next();\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"casino_view_more\",\n label: `Landing: ${docId} - OraculoSeccionCasino - Ver más`,\n target: \"https://www.olimpo.bet/casino\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasino\" },\n });\n\n if (onViewMore) {\n onViewMore();\n return;\n }\n\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/casino\");\n }\n };\n\n return (\n <section>\n <Stack direction=\"column\" spacing={2} useFlexGap>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto auto\",\n alignItems: \"center\",\n columnGap: 1.5,\n rowGap: 1,\n px: { xs: 2, sm: 0 },\n }}\n >\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\n <OraculoButton\n ariaLabel=\"Anterior\"\n variant=\"secondary\"\n iconOnly\n leftIcon={<ChevronLeftRounded />}\n onClick={handlePrev}\n disabled={navState.isStart}\n />\n <OraculoButton\n ariaLabel=\"Siguiente\"\n variant=\"secondary\"\n iconOnly\n rightIcon={<ChevronRightRounded />}\n onClick={handleNext}\n disabled={navState.isEnd}\n />\n </Box>\n\n <Box sx={{ justifySelf: \"end\" }}>\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\n Ver más\n </OraculoButton>\n </Box>\n </Box>\n\n <OraculoCarousel\n ref={carouselRef}\n items={slides}\n perPage={undefined}\n gap=\"16px\"\n enableHorizontalWheel\n showRightGradient\n options={{ autoWidth: true, trimSpace: \"move\" }}\n breakpoints={{\n 400: {\n gap: \"4px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n 768: {\n gap: \"8px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n 1024: {\n gap: \"10px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n }}\n renderItem={(slide) => (\n <div style={{ alignSelf: \"start\" }}>\n <OraculoGameSlide\n items={slide.items}\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\n loading={isLoading}\n onClick={(itm) => {\n if (isLoading) return;\n\n const game = currentItems.find(\n (g, idx) => String(getGameId(g, idx)) === String(itm.id),\n );\n\n if (!game) return;\n\n onItemClick?.(game);\n\n captureInteraction({\n element: \"casino_game_card\",\n label: `Landing: ${docId} - OraculoSeccionCasino - Open game: ${String(game.machine) || \"unknown\"}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(game.machine || \"unknown\"),\n section: title || \"Casino\",\n },\n });\n\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine =\n getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n showIframe?.();\n loadMachine?.(game, false, \"CASINO\");\n }}\n />\n </div>\n )}\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\n />\n </Stack>\n </section>\n );\n};\n\nexport default OraculoSeccionCasino;","import React, { useEffect, useRef, useState } from \"react\";\nimport Stack from \"@mui/material/Stack\";\nimport Box from \"@mui/material/Box\";\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\n\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\nimport OraculoCarousel, {\n OraculoCarouselRef,\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport OraculoGameSlide, {\n OraculoGameSlideItem,\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\nimport { OraculoSeccionVirtualesProps } from \"../../interfaces/oraculo/InterfaceVirtuales\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\ntype SlideKind = \"mosaic\" | \"grid\";\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\ninterface VirtualSlide {\n id: string;\n kind: SlideKind;\n items: OraculoGameSlideItem[];\n}\n\nconst getGameId = (g: OraculoGameItem, idx: number) =>\n g.orden ?? g.machine ?? idx;\n\nconst buildVirtualSlides = (\n games: OraculoGameItem[],\n mosaicFirst = true,\n gridSize = 1,\n): VirtualSlide[] => {\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\n id: getGameId(g, idx),\n imageUrl: g.logo ?? \"\",\n ...(g.background ? { background: g.background } : {}),\n }));\n\n if (!baseItems.length) return [];\n\n const slides: VirtualSlide[] = [];\n let start = 0;\n\n if (mosaicFirst) {\n const take = Math.min(baseItems.length, 1);\n slides.push({\n id: \"mosaic-0\",\n kind: \"mosaic\",\n items: baseItems.slice(0, take),\n });\n start = take;\n }\n\n while (start < baseItems.length) {\n const end = Math.min(start + gridSize, baseItems.length);\n slides.push({\n id: `grid-${start}`,\n kind: \"grid\",\n items: baseItems.slice(start, end),\n });\n start = end;\n }\n\n return slides;\n};\n\nconst buildLoadingVirtualSlides = (\n mosaicFirst = true,\n gridSize = 4,\n): VirtualSlide[] => {\n const mkItems = (n: number) =>\n Array.from({ length: n }, (_, i) => ({ id: `sk-${n}-${i}`, imageUrl: \"\" }));\n\n const slides: VirtualSlide[] = [];\n if (mosaicFirst)\n slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\n return slides;\n};\n\nconst OraculoSeccionVirtuales: React.FC<OraculoSeccionVirtualesProps> = ({\n items,\n title = \"Virtuales\",\n iconUrl = \"/assets/img/home/Virtuales/virtuales.svg\",\n onItemClick,\n onViewMore,\n mosaicFirst = true,\n gridSize = 1,\n}) => {\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n const handlePrev = () => {\n captureInteraction({\n element: \"virtuales_prev\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionVirtuales\" },\n });\n carouselRef.current?.prev();\n };\n const handleNext = () => {\n captureInteraction({\n element: \"virtuales_next\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionVirtuales\" },\n });\n carouselRef.current?.next();\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"virtuales_view_more\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales - Ver más`,\n target: \"https://www.olimpo.bet/juegos-virtuales\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionVirtuales\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/juegos-virtuales\");\n }\n };\n\n const isLoading = !items || items.length === 0;\n\n const slides = isLoading\n ? buildLoadingVirtualSlides(mosaicFirst, gridSize)\n : buildVirtualSlides(items, mosaicFirst, gridSize);\n\n return (\n <section>\n <Stack direction=\"column\" spacing={2} useFlexGap>\n {/* Header */}\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto auto\",\n alignItems: \"center\",\n columnGap: 1.5,\n rowGap: 1,\n px: { xs: 2, sm: 0 },\n }}\n >\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\n <OraculoButton\n ariaLabel=\"Anterior\"\n variant=\"secondary\"\n iconOnly\n leftIcon={<ChevronLeftRounded />}\n onClick={handlePrev}\n disabled={navState.isStart}\n />\n <OraculoButton\n ariaLabel=\"Siguiente\"\n variant=\"secondary\"\n iconOnly\n rightIcon={<ChevronRightRounded />}\n onClick={handleNext}\n disabled={navState.isEnd}\n />\n </Box>\n\n <Box sx={{ justifySelf: \"end\" }}>\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\n Ver más\n </OraculoButton>\n </Box>\n </Box>\n\n <OraculoCarousel\n ref={carouselRef}\n items={slides}\n perPage={undefined}\n gap=\"16px\"\n breakpoints={{\n 400: { gap: \"4px\", focus: \"center\", padding: { left: \"24px\", right: \"24px\" } },\n 768: { gap: \"8px\", focus: \"center\", padding: { left: \"24px\", right: \"24px\" } },\n 1024: { gap: \"10px\", focus: \"center\", padding: { left: \"24px\", right: \"24px\" } },\n }}\n enableHorizontalWheel\n showRightGradient\n options={{ autoWidth: true, trimSpace: 'move'}}\n renderItem={(slide) => (\n <div style={{ alignSelf: \"start\" }}>\n <OraculoGameSlide\n items={slide.items}\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\n loading={isLoading}\n onClick={(itm) => {\n if (isLoading) return;\n\n const game = items.find(\n (g, idx) => String(getGameId(g, idx)) === String(itm.id),\n );\n if (!game) {\n console.warn(\n \"[virtuales] no se encontró game para id:\",\n itm.id,\n );\n return;\n }\n\n captureInteraction({\n element: \"virtuales_game_card\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales - Open game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(game.machine || \"unknown\"),\n section: \"OraculoSeccionVirtuales\",\n },\n });\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine =\n getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n showIframe?.();\n loadMachine?.(game, false, \"VIRTUALES\");\n }}\n />\n </div>\n )}\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\n />\n </Stack>\n </section>\n );\n};\n\nexport default OraculoSeccionVirtuales;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\n\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport OraculoWelcomeBanner from \"../../molecules/OraculoWelcomeBanner/OraculoWelcomeBanner\";\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\nimport { OraculoSeccionBonoProps, OraculoBonosItem } from \"../../interfaces/oraculo/InterfaceBonos\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nconst buildSectionSx = (bgUrl: string) => ({\n position: \"relative\" as const,\n py: 8,\n color: \"#fff\",\n backgroundImage: `\n linear-gradient(to bottom,#121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to left, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to right, #121212 0%, rgba(18,18,18,0) 10%),\n url(\"${bgUrl}\")\n `,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n backgroundSize: \"cover\",\n});\n\nconst headlineBaseSx = {\n textAlign: \"center\" as const,\n lineHeight: 1.1,\n mb: 1.5,\n};\n\nconst hlTopSx = {\n display: \"inline-block\",\n fontWeight: 600,\n fontSize: 24,\n};\n\nconst hlBottomSx = {\n display: \"inline-block\",\n fontSize: 24,\n lineHeight: 1.1,\n WebkitTextStroke: \"0.3px rgba(255, 255, 255, .5)\",\n textShadow: `\n 0 0 2px rgba(255, 255, 255, .95),\n 0 0 6px rgba(255, 255, 255, .6),\n 0 1px 0 rgba(137, 137, 137, .85)\n `,\n};\n\nconst OraculoSeccionBonoBienvenida: React.FC<OraculoSeccionBonoProps> = ({\n headline,\n headline2,\n items,\n backgroundImageUrl,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\n const showDots = items.length > 1;\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const wheelHostRef = useRef<HTMLDivElement | null>(null);\n const isMounted = useRef(false);\n const isAutoplayRef = useRef(false);\n\n const [activeIndex, setActiveIndex] = useState(0);\n\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n\n // ✅ Marcar el componente como montado después del primer render\n useEffect(() => {\n const timer = setTimeout(() => {\n isMounted.current = true;\n }, 500);\n return () => clearTimeout(timer);\n }, []);\n const navRef = useRef(navState);\n useEffect(() => {\n navRef.current = navState;\n }, [navState]);\n\n const wheelLockRef = useRef(false);\n const wheelUnlockTimerRef = useRef<number | null>(null);\n\n const activeSlide = items?.[activeIndex];\n\n const bgUrl = useMemo(\n () => activeSlide?.backgroundImageUrl ?? backgroundImageUrl ?? \"\",\n [activeSlide, backgroundImageUrl]\n );\n\n const sectionSx = buildSectionSx(bgUrl);\n\n const isLoading = !items || items.length === 0;\n\n // ✅ Capturar clicks en botones de banners\n const handleBannerButtonClick = (item: OraculoBonosItem, index: number) => {\n captureInteraction({\n element: \"welcome_banner_button\",\n label: `OraculoSeccionBonoBienvenida - Banner button click: ${item.title || \"OraculoSeccionBonoBienvenida - Banner \" + (index + 1)}`,\n target: \"action\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n banner_position: index + 1,\n banner_total: items?.length || 0,\n },\n tags: {\n banner_title: item.title || \"no_title\",\n button_text: item.buttonText || \"no_text\",\n },\n });\n\n // Ejecutar callback original\n if (item.onButtonClick) {\n item.onButtonClick();\n }\n };\n\n // ✅ Capturar cambios de slide\n const handleSlideChange = (index: number) => {\n if (!isMounted.current) return;\n if (isAutoplayRef.current) {\n isAutoplayRef.current = false;\n return;\n }\n\n const item = items?.[index];\n captureInteraction({\n element: \"welcome_banner_carousel\",\n label: `Landing: ${docId} - OraculoSeccionBonoBienvenida - Banner view: ${item?.title || \"OraculoSeccionBonoBienvenida - Banner \" + (index + 1)}`,\n target: \"no_url\",\n event_type: \"view\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n slide_index: index + 1,\n total_slides: items?.length || 0,\n interaction_type: \"manual_slide\",\n },\n tags: {\n banner_position: String(index + 1),\n banner_title: item?.title || \"no_title\",\n },\n });\n };\n\n useEffect(() => {\n const el = wheelHostRef.current;\n if (!el) return;\n\n const THRESHOLD = 6;\n const INVERT = false;\n const LOCK_MS = 380;\n\n const onWheel = (e: WheelEvent) => {\n if (isLoading) return;\n if (e.ctrlKey) return;\n\n if (wheelLockRef.current) return;\n\n const dx = e.deltaX;\n const dy = e.deltaY;\n\n // solo horizontal\n if (Math.abs(dx) <= Math.abs(dy)) return;\n if (Math.abs(dx) < THRESHOLD) return;\n\n const dirNext = INVERT ? dx < 0 : dx > 0;\n\n // si no es loop, evitamos “rebotar” en bordes\n if (dirNext && navRef.current.isEnd) return;\n if (!dirNext && navRef.current.isStart) return;\n\n e.preventDefault();\n\n wheelLockRef.current = true;\n if (dirNext) carouselRef.current?.next();\n else carouselRef.current?.prev();\n\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\n wheelUnlockTimerRef.current = window.setTimeout(() => {\n wheelLockRef.current = false;\n }, LOCK_MS);\n };\n\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n el.removeEventListener(\"wheel\", onWheel as any);\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\n };\n }, [isLoading]);\n\n const renderSlide = (it: OraculoBonosItem, desktop: boolean, index: number) => {\n const hl1 = it.headline ?? headline;\n const hl2 = it.headline2 ?? headline2;\n\n if (!desktop) {\n return (\n <Box sx={{ textAlign: \"center\" }}>\n {(hl1 || hl2) && (\n <Box sx={headlineBaseSx}>\n {hl1 && (\n <Typography component=\"span\" sx={hlTopSx}>\n {hl1}\n </Typography>\n )}\n {hl2 && (\n <>\n <br />\n <Typography component=\"span\" sx={hlBottomSx}>\n {hl2}\n </Typography>\n </>\n )}\n </Box>\n )}\n\n <Box sx={{ display: \"flex\", justifyContent: \"center\" }}>\n <OraculoWelcomeBanner\n {...it}\n onButtonClick={() => handleBannerButtonClick(it, index)}\n variant=\"small\"\n />\n </Box>\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n maxWidth: 1200,\n mx: \"auto\",\n px: 15,\n display: \"grid\",\n gridTemplateColumns: \"260px minmax(0, 1fr)\",\n alignItems: \"center\",\n columnGap: 6,\n }}\n >\n {(hl1 || hl2) && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n minHeight: \"100%\",\n }}\n >\n <Box sx={{ ...headlineBaseSx, textAlign: \"left\", mb: 0 }}>\n {hl1 && (\n <Typography component=\"span\" sx={hlTopSx}>\n {hl1}\n </Typography>\n )}\n {hl2 && (\n <>\n <br />\n <Typography component=\"span\" sx={hlBottomSx}>\n {hl2}\n </Typography>\n </>\n )}\n </Box>\n </Box>\n )}\n\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\n <Box sx={{ width: \"100%\", maxWidth: 600, mx: \"auto\" }}>\n <OraculoWelcomeBanner\n {...it}\n onButtonClick={() => handleBannerButtonClick(it, index)}\n variant=\"large\"\n />\n </Box>\n </Box>\n </Box>\n );\n };\n\n return (\n <Box component=\"section\" sx={sectionSx}>\n <div ref={wheelHostRef} style={{ width: \"100%\" }}>\n <OraculoCarousel\n ref={carouselRef}\n items={items}\n perPage={1}\n gap={\"0px\"}\n options={{\n autoWidth: false,\n // si quieres, puedes activar loop acá:\n // type: \"loop\",\n // perMove: 1,\n // focus: \"center\",\n // pagination: false,\n // arrows: false,\n // drag: true,\n }}\n renderItem={(it, idx) => (\n <Box sx={{ width: \"100%\" }}>\n {renderSlide(it, !isMobile, idx)}\n </Box>\n )}\n onMove={({ index, isStart, isEnd }: any) => {\n setActiveIndex(index);\n if (typeof isStart === \"boolean\" && typeof isEnd === \"boolean\") {\n setNavState({ isStart, isEnd });\n }\n handleSlideChange(index);\n }}\n />\n </div>\n\n {showDots && (\n <Box sx={{ mt: 2, display: \"flex\", justifyContent: \"center\" }}>\n <OraculoCarouselDots\n total={items.length}\n active={activeIndex}\n onSelect={(i) => {\n captureInteraction({\n element: \"welcome_banner_dots\",\n label: `Landing: ${docId} - OraculoSeccionBonoBienvenida - Dot navigation: Banner ${i + 1}`,\n target: \"no_url\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n dot_index: i + 1,\n total_dots: items.length,\n },\n tags: {\n navigation_type: \"dot_click\",\n },\n });\n setActiveIndex(i);\n carouselRef.current?.go(i);\n }}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default OraculoSeccionBonoBienvenida;\n","import React, { useLayoutEffect, useRef } from \"react\";\nimport \"./OraculoSeccionClubOlimpo.css\";\nimport OraculoClubOlimpoVisual from \"../../molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual\";\nimport { OraculoSeccionClubOlimpoItem } from \"../../interfaces/oraculo/InterfaceClubOlimpo\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nexport interface OraculoSeccionClubOlimpoItems {\n className?: string;\n /** Si true, hace el efecto full-bleed (100vw centrado) */\n fullBleed?: boolean;\n /** Lista de variantes (puedes pasar 1 o varias). */\n items: OraculoSeccionClubOlimpoItem;\n /** Índice del item a mostrar si pasas varios. */\n selectedIndex?: number;\n /** aria-label de la sección (fallback al imgAlt del item seleccionado). */\n ariaLabel?: string;\n}\n\nconst OraculoSeccionClubOlimpo: React.FC<OraculoSeccionClubOlimpoItems> = ({\n className = \"\",\n fullBleed = true,\n items,\n selectedIndex = 0,\n ariaLabel,\n}) => {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const bottomRef = useRef<HTMLDivElement | null>(null);\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n if (!items) return null;\n\n const onClick = () => {\n captureInteraction({\n element: \"club_olimpo_button\",\n label: `Landing: ${docId} - OraculoSeccionClubOlimpo - Click: Club Olimpo`,\n target: \"https://www.olimpo.bet/conoce-club-olimpo\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionClubOlimpo\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/conoce-club-olimpo\");\n }\n };\n\n const item = Array.isArray(items) ? items[selectedIndex] : items;\n\n useLayoutEffect(() => {\n if (!rootRef.current || !bottomRef.current) return;\n if (typeof ResizeObserver === \"undefined\") return;\n\n const root = rootRef.current;\n const bottom = bottomRef.current;\n\n const update = () => {\n root.style.setProperty(\n \"--orc-co-bottomH\",\n `${bottom.offsetHeight + 16}px`,\n );\n };\n\n const ro = new ResizeObserver(update);\n ro.observe(bottom);\n update();\n\n return () => ro.disconnect();\n }, []);\n\n const rootClass = [\n \"orc-co-wrap\",\n fullBleed ? \"orc-co-fullBleed\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <section\n ref={rootRef}\n className={rootClass}\n aria-label={ariaLabel || item.imgAlt || \"Club Olimpo\"}\n >\n <div ref={bottomRef}>\n <OraculoClubOlimpoVisual\n text={item.text}\n // onClick={item.onClick}\n onClick={onClick}\n imgAlt={item.imgAlt}\n buttonLabel={item.buttonLabel}\n imgSrcMobile={item.imgMobile}\n imgSrcDesktopBg={item.imgDesktopBg}\n imgSrcDesktopLogo={item.imgDesktopLogo}\n />\n </div>\n </section>\n );\n};\n\nexport default OraculoSeccionClubOlimpo;\n","import { useRef, useState, useEffect, useMemo } from \"react\";\r\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventCombinadasCard from \"../../molecules/OraculoEventCard/OraculoEventCombinadasCard\";\r\nimport styles from \"./OraculoSeccionEventoCombinadas.module.css\";\r\nimport Stack from '@mui/material/Stack';\r\nimport React from \"react\";\r\nimport { verMasSeccionCombinadas } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nconst extractRowOutcomes = (row: any): number[] => {\r\n if (row.outcome?.id) return [row.outcome.id];\r\n if (row.type === \"BET_BUILDER\" && row.group?.groups) {\r\n return row.group.groups.flatMap((g: any) => g.outcomes?.map((o: any) => o.id) ?? []);\r\n }\r\n return [];\r\n};\r\n\r\nfunction mergeEventOffers(eventos: any[], betOffers: any[], prePackCoupons: any[]) {\r\n if (!prePackCoupons) return [];\r\n return prePackCoupons.map(coupon => {\r\n const rows = coupon.prePackCouponRows.flatMap((row: any) => {\r\n return extractRowOutcomes(row).map(outcomeId => ({ eventId: row.eventId, outcomeId }));\r\n });\r\n\r\n const eventIds = new Set(rows.map((r: any) => r.eventId));\r\n const outcomeIds = new Set(rows.map((r: any) => r.outcomeId));\r\n const rowIndexByOutcomeId = new Map(rows.map((r: any, idx: number) => [r.outcomeId, idx]));\r\n const betOffersByEvent: Record<number, any[]> = {};\r\n\r\n for (const offer of betOffers) {\r\n if (!eventIds.has(offer.eventId)) continue;\r\n const filteredOutcomes = offer.outcomes\r\n .filter((o: any) => outcomeIds.has(o.id))\r\n .map((o: any) => ({ ...o, position: rowIndexByOutcomeId.get(o.id) }));\r\n\r\n if (!filteredOutcomes.length) continue;\r\n betOffersByEvent[offer.eventId] ??= [];\r\n betOffersByEvent[offer.eventId].push({ ...offer, outcomes: filteredOutcomes });\r\n }\r\n\r\n const mergedEvents = eventos\r\n .filter(e => eventIds.has(e.id))\r\n .map(evento => ({ ...evento, betoffers: betOffersByEvent[evento.id] ?? [] }));\r\n return {\r\n couponId: coupon.id,\r\n status: coupon.status,\r\n combinadoTotal: kambiDisplayComboFromRows(coupon.prePackCouponRows),\r\n events: mergedEvents,\r\n };\r\n });\r\n}\r\n\r\nfunction kambiDisplayComboFromRows(rows: any[]): number {\r\n \r\n if (!Array.isArray(rows) || rows.length === 0) return 0;\r\n\r\n let product = 1;\r\n\r\n for (const row of rows) {\r\n const raw = row.odds.decimal / 1000;\r\n\r\n const normalized = Math.round(raw * 100) / 100;\r\n\r\n product *= normalized;\r\n }\r\n\r\n return Math.floor(product * 100) / 100;\r\n}\r\n\r\nconst MemoizedCombinadaCard = React.memo(OraculoEventCombinadasCard);\r\n\r\nexport default function OraculoSeccionEventoCombinadas({\r\n items,\r\n title = \"Combinadas del Olimpo\",\r\n iconUrl = \"https://stg-www.contodobet.com/static/img/landing/EventoCombinada/rayoIcon.svg\",\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[]>([]);\r\n const SPECIALS_GROUPS_URL = 'https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group/prepackcoupon.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764284658793&prePackCouponTags=CUSTOM'\r\n\r\n const handlePrev = () => {\r\n captureInteraction({\r\n element: \"evento_combinadas_prev\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoCombinadas - Click: Anterior`,\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoCombinadas\" },\r\n });\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n captureInteraction({\r\n element: \"evento_combinadas_next\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoCombinadas - Click: Siguiente`,\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoCombinadas\" },\r\n });\r\n carouselRef.current?.next();\r\n \r\n };\r\n\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_combinadas_ver_mas\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoCombinadas - Click: Ver más`,\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoCombinadas\" },\r\n });\r\n verMasSeccionCombinadas();\r\n };\r\n const carouselItems = useMemo(() => {\r\n return events.filter(event => event.combinadoTotal !== null);\r\n }, [events]);\r\n async function loadDataEventSpecial() {\r\n try {\r\n const listRes = await fetch(SPECIALS_GROUPS_URL);\r\n const listData = await listRes.json();\r\n\r\n const groupId = listData?.group?.groups?.[0]?.id;\r\n\r\n if (!groupId) {\r\n console.error(\"Could not extract group ID\");\r\n return;\r\n }\r\n\r\n const SPECIALS_URL = `https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/prepackcoupon/eventgroup/${groupId}.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764283566783&prePackCouponTags=CUSTOM`;\r\n\r\n const response = await fetch(SPECIALS_URL);\r\n const data = await response.json();\r\n setEvents(mergeEventOffers(data.events, data.betOffers, data.prePackCoupons));\r\n } catch (e) {\r\n console.error(\"loadDataEventSpecial error:\", e);\r\n }\r\n}\r\n\r\n\r\nuseEffect(() => {\r\n loadDataEventSpecial();\r\n}, []);\r\n\r\n const sectionClassName = className || undefined;\r\n\r\nif (carouselItems.length === 0) return null;\r\n\r\n return (\r\n <section className={sectionClassName} style={{ \r\n // paddingLeft: 16,\r\n // paddingRight: 16,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",}}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <div className={styles.padding}>\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto \" justify=\"start\">\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <div className={styles.controls}>\r\n <OraculoGridGroup spacing={1} columns=\"auto auto\">\r\n <OraculoButton\r\n ariaLabel=\"Anterior\"\r\n variant=\"secondary\"\r\n iconOnly\r\n leftIcon={<ChevronLeftRounded />}\r\n onClick={handlePrev}\r\n disabled={navState.isStart}\r\n />\r\n <OraculoButton\r\n ariaLabel=\"Siguiente\"\r\n variant=\"secondary\"\r\n iconOnly\r\n rightIcon={<ChevronRightRounded />}\r\n onClick={handleNext}\r\n disabled={navState.isEnd}\r\n />\r\n </OraculoGridGroup>\r\n\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </div>\r\n </OraculoGridGroup>\r\n</div>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={carouselItems}\r\n perPage={undefined}\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move' }}\r\n useIndexAsKey\r\n enableHorizontalWheel\r\n showRightGradient\r\n breakpoints={{\r\n 768: { perPage: 1.2,gap: \"12px\", padding: { left: \"24px\", right: \"24px\" }, }, \r\n }}\r\n renderItem={(p) => <MemoizedCombinadaCard coupon={p} />}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport styles from \"./OraculoEventEnVivoCard.module.css\";\r\n\r\nexport default function OraculoEventEnVivoCardSkeleton({}) {\r\n return (\r\n <div\r\n className={styles.cardWrapper}\r\n >\r\n <Stack direction=\"column\" spacing={1}>\r\n\r\n {/* Header */}\r\n <Stack spacing={1} direction=\"row\" >\r\n <Skeleton variant=\"text\" width=\"60%\" height={24} />\r\n <Skeleton variant=\"text\" width=\"39%\" height={24} />\r\n </Stack>\r\n\r\n {/* Teams + Score */}\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n <Skeleton variant=\"text\" width={40} height={40} />\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n </Stack>\r\n\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n <Skeleton variant=\"text\" width={40} height={16} />\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n </Stack>\r\n\r\n {/* Labels */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n </Stack>\r\n\r\n {/* Buttons */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n </Stack>\r\n\r\n </Stack>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./FadeItemWrapper.module.css\";\r\n\r\nexport default function FadeItemWrapper({ children }: { children: React.ReactNode }) {\r\n return <div className={styles.fadeWrapper}>{children}</div>;\r\n}\r\n","import { useRef, useState, useEffect, useCallback, useMemo } from \"react\";\r\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport { OraculoSeccionDestacadosItem, OraculoSeccionDestacadosProps } from \"../../interfaces/oraculo/InterfaceDestacados\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventEnVivoCard from \"../../molecules/OraculoEventCard/OraculoEventEnVivoCard\";\r\nimport OraculoEventEnVivoCardSkeleton from \"../../molecules/OraculoEventCard/OraculoEventEnVivoCardSkeleton\";\r\nimport FadeItemWrapper from \"../../molecules/OraculoEventCard/FadeItemWrapper\";\r\nimport styles from \"./OraculoSeccionEventoEnVivo.module.css\";\r\n\r\nimport React from \"react\";\r\nimport Stack from '@mui/material/Stack';\r\nimport { verMasSeccionEnVivo, fetchJerseys, useDebouncedValue } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\n\r\nconst filterFootballEvents = (events: any[] ) => {\r\n const blocked = [\"esports\", \"cyber\"];\r\n return events.filter(ev => {\r\n if (ev.event.sport !== \"FOOTBALL\") return false;\r\n const group = ev.event.group?.toLowerCase() || \"\";\r\n return !blocked.some(word => group.includes(word));\r\n });\r\n};\r\nconst MemoizedCard = React.memo(OraculoEventEnVivoCard);\r\nexport default function OraculoSeccionEventoEnVivo({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl = 'https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/icon.svg',\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n\r\n const LIVE_EVENTS_URL = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true\"; //cada 20s\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[] | null>(null);\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n const [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\r\n const fetchingRef = useRef(false);\r\n const [orderedEventIds, setOrderedEventIds] = useState<string[] | null>(null);\r\n const orderIdsFetchedRef = useRef(false);\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n const orderMapRef = useRef(new Map());\r\n const debouncedVisibleRange = useDebouncedValue(visibleRange, 300);\r\n const fetchedIdsRef = useRef(new Set());\r\n const handlePrev = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_prev\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoEnVivo - Anterior`,\r\n target: \"prev\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoEnVivo\" },\r\n });\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_next\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoEnVivo - Siguiente`,\r\n target: \"next\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoEnVivo\" },\r\n });\r\n carouselRef.current?.next();\r\n };\r\n\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_view_more\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoEnVivo - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoEnVivo\" },\r\n });\r\n verMasSeccionEnVivo();\r\n };\r\n\r\n const loadData = useCallback(async () => {\r\n try {\r\n if (!orderIdsFetchedRef.current) {\r\n orderIdsFetchedRef.current = true;\r\n try {\r\n const orderRes = await fetch(\"https://api.mktolimpo.com/api/kambi/eventos/orden\");\r\n const orderJson = await orderRes.json();\r\n const ids = orderJson?.data?.event_ids || [];\r\n \r\n // Build the O(1) lookup map\r\n const newMap = new Map();\r\n ids.forEach((id: any, index: any) => newMap.set(String(id), index));\r\n orderMapRef.current = newMap;\r\n } catch (err) {\r\n console.error(\"Order fetch failed, using default sorting\", err);\r\n }\r\n }\r\n\r\n const response = await fetch(LIVE_EVENTS_URL);\r\n if (!response.ok) throw new Error(\"Failed to fetch live events\");\r\n \r\n const data = await response.json();\r\n const filteredEvents = filterFootballEvents(data.events);\r\n\r\n if (orderMapRef.current.size === 0) {\r\n setEvents(filteredEvents);\r\n } else {\r\n const sortedEvents = [...filteredEvents].sort((a, b) => {\r\n const aIndex = orderMapRef.current.get(String(a.event.id));\r\n const bIndex = orderMapRef.current.get(String(b.event.id));\r\n\r\n const valA = aIndex !== undefined ? aIndex : Infinity;\r\n const valB = bIndex !== undefined ? bIndex : Infinity;\r\n return valA - valB;\r\n });\r\n setEvents(sortedEvents);\r\n }\r\n } catch (e) {\r\n console.error(\"LoadData Error:\", e);\r\n }\r\n}, []);\r\n\r\nuseEffect(() => {\r\n loadData();\r\n const interval = setInterval(loadData, 20000);\r\n return () => clearInterval(interval);\r\n}, [loadData]);\r\n\r\nuseEffect(() => {\r\n if (\r\n debouncedVisibleRange.start === null ||\r\n debouncedVisibleRange.end === null ||\r\n !events?.length ||\r\n fetchingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n const BUFFER = 3;\r\n const from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n const to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n const idsToFetch = events\r\n .slice(from, to + 1)\r\n .map(ev => ev?.event?.id)\r\n .filter(id => id && !fetchedIdsRef.current.has(id));\r\n\r\n if (idsToFetch.length === 0) return;\r\n\r\n idsToFetch.forEach(id => fetchedIdsRef.current.add(id));\r\n fetchingRef.current = true;\r\n\r\n fetchJerseys(idsToFetch)\r\n .then(res => {\r\n if (res?.events) {\r\n setJerseys(prev => ({\r\n ...prev,\r\n ...res.events,\r\n }));\r\n }\r\n })\r\n .catch(e => {\r\n console.error(\"Jersey fetch error\", e);\r\n idsToFetch.forEach(id => fetchedIdsRef.current.delete(id));\r\n })\r\n .finally(() => {\r\n fetchingRef.current = false;\r\n });\r\n\r\n}, [debouncedVisibleRange, events]);\r\n\r\n \r\n\r\n const sectionClassName = className || undefined;\r\n const isLoading = events === null;\r\n\r\nif (!isLoading && events.length === 0) {\r\n return null;\r\n}\r\n\r\nconst carouselItems = useMemo(() => {\r\n if (isLoading) return Array(4).fill({});\r\n return events?.slice(0, 20) || [];\r\n}, [isLoading, events]);\r\n\r\n return (\r\n <section className={sectionClassName} style={{ \r\n // paddingLeft: 16,\r\n // paddingRight: 16,\r\n width: \"100%\",\r\n boxSizing: \"border-box\", }}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap >\r\n\r\n <div className={styles.padding}>\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto \" justify=\"start\">\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n \r\n <div style={{ display: \"flex\", gap: 8 , alignItems:'center'}}>\r\n <OraculoGridGroup spacing={1} columns=\"auto auto\">\r\n <OraculoButton\r\n ariaLabel=\"Anterior\"\r\n variant=\"secondary\"\r\n iconOnly\r\n leftIcon={<ChevronLeftRounded />}\r\n onClick={handlePrev}\r\n disabled={navState.isStart}\r\n />\r\n <OraculoButton\r\n ariaLabel=\"Siguiente\"\r\n variant=\"secondary\"\r\n iconOnly\r\n rightIcon={<ChevronRightRounded />}\r\n onClick={handleNext}\r\n disabled={navState.isEnd}\r\n />\r\n </OraculoGridGroup>\r\n \r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </div>\r\n </OraculoGridGroup>\r\n</div>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={carouselItems}\r\n perPage={undefined}\r\n showRightGradient\r\n enableHorizontalWheel\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move'}}\r\n breakpoints={{\r\n 400: { gap: \"4px\", focus: \"center\" , padding: { left: \"24px\", right: \"24px\" }}, \r\n 768: { gap: \"8px\", focus: \"center\", padding: { left: \"24px\", right: \"24px\" } }, \r\n 1024: { gap: \"10px\" , focus: \"center\" , padding: { left: \"24px\", right: \"24px\" } },\r\n }}\r\n renderItem={(p) => {\r\n const eventId = p.event?.id || p.eventId;\r\n const jersey =\r\n eventId in jerseys ? jerseys[eventId] : undefined;\r\n return isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <MemoizedCard\r\n {...p}\r\n jersey={jersey}\r\n />\r\n </FadeItemWrapper>\r\n );\r\n}}\r\n\r\n\r\n onMove={({ isStart, isEnd, visibleStart, visibleEnd }) => {\r\n setNavState(prev => \r\n (prev.isStart === isStart && prev.isEnd === isEnd) ? prev : { isStart, isEnd }\r\n );\r\n setVisibleRange({ start: visibleStart, end: visibleEnd });\r\n}}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport styles from \"./OraculoEventSemanaCard.module.css\";\r\nimport OraculoEventLeague from \"../../atoms/OraculoEvent/OraculoEventLeague\";\r\n\r\nexport default function OraculoEventSemanaCardSkeleton() {\r\n return (\r\n <div className={styles.cardContainer}>\r\n \r\n {/* League name */}\r\n \r\n <OraculoEventLeague title={''} />\r\n <div className={styles.cardBackground}>\r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n \r\n {/* Teams + VS + Date */}\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"circular\" width={48} height={48} />\r\n <Skeleton variant=\"circular\" width={48} height={48} />\r\n\r\n </Stack>\r\n\r\n {/* Labels + Buttons */}\r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={80} height={12} />\r\n <Skeleton variant=\"text\" width={80} height={12} />\r\n </Stack>\r\n\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={160} height={12} />\r\n </Stack>\r\n\r\n {/* Labels */}\r\n <Stack direction=\"row\" spacing={1}>\r\n <Skeleton variant=\"text\" width={80} height={16} />\r\n <Skeleton variant=\"text\" width={80} height={16} />\r\n <Skeleton variant=\"text\" width={80} height={16} />\r\n </Stack>\r\n\r\n {/* Buttons */}\r\n <div className={styles.jugadas}>\r\n <Stack direction=\"row\" spacing={1}>\r\n <Skeleton variant=\"rounded\" width={80} height={32} />\r\n <Skeleton variant=\"rounded\" width={80} height={32} />\r\n <Skeleton variant=\"rounded\" width={80} height={32} />\r\n </Stack>\r\n </div>\r\n\r\n </Stack>\r\n </Stack>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useRef, useState, useEffect, useCallback, useMemo } from \"react\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport OraculoEventSemanaCard from \"../../molecules/OraculoEventCard/OraculoEventSemanaCard\";\r\nimport OraculoEventSemanaCardSkeleton from \"../../molecules/OraculoEventCard/OraculoEventSemanaCardSkeleton\";\r\nimport FadeItemWrapper from \"../../molecules/OraculoEventCard/FadeItemWrapper\";\r\nimport styles from \"./OraculoSeccionEventoSemana.module.css\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport React from \"react\";\r\nimport {\r\n verMasSeccionSemana,\r\n fetchJerseys,\r\n useDebouncedValue,\r\n} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nconst MemoizedSemanaCard = React.memo(OraculoEventSemanaCard);\r\n\r\nasync function fetchInBatches(\r\n urls: string[],\r\n batchSize = 2,\r\n signal: AbortSignal,\r\n) {\r\n const results: any[] = [];\r\n for (let i = 0; i < urls.length; i += batchSize) {\r\n if (signal.aborted) {\r\n throw new DOMException(\"Aborted\", \"AbortError\");\r\n }\r\n const batch = urls.slice(i, i + batchSize);\r\n const responses = await Promise.all(\r\n batch.map((u) => fetch(u, { signal }).then((r) => r.json())),\r\n );\r\n results.push(...responses);\r\n }\r\n return results;\r\n}\r\n\r\nfunction sortEvents(evs: any[]) {\r\n return [...evs].sort(\r\n (a, b) => new Date(a.start).getTime() - new Date(b.start).getTime(),\r\n );\r\n}\r\nfunction filterEventsWithinOneWeek(events: any[]) {\r\n const now = new Date();\r\n const oneWeekLater = new Date(now.getTime() + 20 * 24 * 60 * 60 * 1000);\r\n\r\n return events.filter((event: any) => {\r\n if (!event.start) return false;\r\n\r\n const eventDate = new Date(event.start);\r\n return eventDate >= now && eventDate <= oneWeekLater;\r\n });\r\n}\r\nfunction mergeEventOffersOutcome(eventos: any, apuestas: any) {\r\n const filtered = apuestas.filter((b: any) => b.betOfferType?.id === 2);\r\n\r\n const apuestasByEvent = filtered.reduce((acc: any, b: any) => {\r\n if (!acc[b.eventId]) acc[b.eventId] = [];\r\n acc[b.eventId].push(b);\r\n return acc;\r\n }, {});\r\n\r\n return eventos\r\n .filter((evento: any) => apuestasByEvent[evento.id])\r\n .map((evento: any) => ({\r\n ...evento,\r\n outcome: apuestasByEvent[evento.id],\r\n }));\r\n}\r\nexport default function OraculoSeccionEventoSemana({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n const WEEK_EVENTS_URL =\r\n \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group.json?channel_id=1&client_id=200&lang=es_PE&market=PE\";\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[] | null>(null);\r\n const pendingJerseysRef = useRef<Set<number>>(new Set());\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n const [visibleRange, setVisibleRange] = useState<{\r\n start: number | null;\r\n end: number | null;\r\n }>({ start: null, end: null });\r\n const COMMON_QUERY =\r\n \"channel_id=1&client_id=200&competitionId=undefined&lang=es_PE&market=PE&useCombined=true\";\r\n const debouncedVisibleRange = useDebouncedValue(visibleRange, 250);\r\n const fetchingRef = useRef(false);\r\n\r\n const carouselItems = useMemo(() => {\r\n if (events === null) return Array(6).fill({});\r\n return events.slice(0, 20);\r\n }, [events]);\r\n\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_semana_view_more\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoSemana - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoSemana\" },\r\n });\r\n verMasSeccionSemana();\r\n };\r\n\r\n async function loadDataWeekEvent(signal: AbortSignal) {\r\n let orderedGroupIds: string[] = [];\r\n let orderedEventIds: string[] = [];\r\n try {\r\n const orderResponse = await fetch(\r\n \"https://api.mktolimpo.com/api/kambi/eventos/orden\",\r\n { signal },\r\n );\r\n\r\n if (orderResponse.ok) {\r\n const orderJson = await orderResponse.json();\r\n orderedGroupIds = orderJson?.data?.group_ids || [];\r\n orderedEventIds = orderJson?.data?.event_ids || [];\r\n }\r\n } catch (e: any) {\r\n if (e.name !== \"AbortError\") {\r\n console.warn(\"Order API not available, using default group order\");\r\n }\r\n return;\r\n }\r\n try {\r\n const response = await fetch(WEEK_EVENTS_URL, { signal });\r\n const data = await response.json();\r\n const football = data.group.groups.find(\r\n (g: any) => g.englishName === \"Football\",\r\n );\r\n\r\n if (!football || !Array.isArray(football.groups)) {\r\n console.error(\"Football groups not found\");\r\n return;\r\n }\r\n\r\n let groups = [...football.groups];\r\n\r\n // 3️⃣ Apply group_ids order\r\n if (orderedGroupIds.length > 0) {\r\n const orderMap = new Map(\r\n orderedGroupIds.map((id, index) => [id, index]),\r\n );\r\n\r\n groups.sort((a: any, b: any) => {\r\n const aIndex = orderMap.get(String(a.id));\r\n const bIndex = orderMap.get(String(b.id));\r\n\r\n if (aIndex !== undefined && bIndex !== undefined) {\r\n return aIndex - bIndex;\r\n }\r\n if (aIndex !== undefined) return -1;\r\n if (bIndex !== undefined) return 1;\r\n return 0;\r\n });\r\n }\r\n\r\n const N = 5;\r\n\r\n const firstGroups = groups.slice(0, N);\r\n\r\n const buildUrls = (group: any) => {\r\n const base =\r\n \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football\";\r\n\r\n if (group.groups && group.groups.length > 0) {\r\n const sub = group.groups[0]; // ONLY FIRST child\r\n return [\r\n `${base}/${group.termKey}/${sub.termKey}/all/matches.json?${COMMON_QUERY}`,\r\n ];\r\n }\r\n\r\n return [\r\n `${base}/${group.termKey}/all/all/matches.json?${COMMON_QUERY}`,\r\n ];\r\n };\r\n\r\n const urls = firstGroups.flatMap(buildUrls);\r\n\r\n loadAllGroupEvents(urls, orderedEventIds, signal);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n async function loadAllGroupEvents(\r\n urls: any,\r\n orderEvents: any,\r\n signal: AbortSignal,\r\n ) {\r\n try {\r\n const responses = await fetchInBatches(urls, 2, signal);\r\n\r\n let allEvents: any = [];\r\n let allBetOffers: any = [];\r\n\r\n responses.forEach((data) => {\r\n if (!data.events) return;\r\n\r\n allEvents.push(...data.events.map((item: any) => item.event));\r\n allBetOffers.push(\r\n ...data.events.flatMap((item: any) => item.betOffers || []),\r\n );\r\n });\r\n\r\n const merged = mergeEventOffersOutcome(allEvents, allBetOffers);\r\n const finalEvents = sortEvents(filterEventsWithinOneWeek(merged));\r\n\r\n let orderedEvents = finalEvents;\r\n\r\n if (orderEvents.length > 0) {\r\n const orderMap = new Map<string, number>(\r\n orderEvents.map((id: number | string, index: number) => [\r\n String(id),\r\n index,\r\n ]),\r\n );\r\n orderedEvents = [...finalEvents].sort((a, b) => {\r\n const aIndex = orderMap.get(String(a.id));\r\n const bIndex = orderMap.get(String(b.id));\r\n\r\n if (aIndex !== undefined && bIndex !== undefined) {\r\n return aIndex - bIndex;\r\n }\r\n if (aIndex !== undefined) return -1;\r\n if (bIndex !== undefined) return 1;\r\n return 0;\r\n });\r\n }\r\n if (signal.aborted) return;\r\n setEvents(orderedEvents);\r\n } catch (error) {\r\n console.error(\"Error loading events:\", error);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!items) return;\r\n\r\n const controller = new AbortController();\r\n\r\n loadDataWeekEvent(controller.signal);\r\n\r\n return () => {\r\n controller.abort();\r\n };\r\n }, [items]);\r\n\r\n useEffect(() => {\r\n if (\r\n debouncedVisibleRange.start === null ||\r\n debouncedVisibleRange.end === null ||\r\n !events?.length ||\r\n fetchingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n const BUFFER = 2;\r\n const from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n const to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n const idsToFetch = events\r\n .slice(from, to + 1)\r\n .map((ev) => ev?.id)\r\n .filter(Boolean)\r\n .filter((id) => jerseys[id] === undefined);\r\n if (!idsToFetch.length) return;\r\n\r\n let cancelled = false;\r\n fetchingRef.current = true;\r\n\r\n (async () => {\r\n try {\r\n const res = await fetchJerseys(idsToFetch);\r\n\r\n if (!cancelled) {\r\n setJerseys((prev) => ({\r\n ...prev,\r\n ...res.events,\r\n }));\r\n }\r\n } catch (e) {\r\n console.error(\"Jersey fetch error\", e);\r\n } finally {\r\n fetchingRef.current = false;\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [debouncedVisibleRange, events]);\r\n const sectionClassName = className || undefined;\r\n const sectionStyle: React.CSSProperties = {\r\n paddingLeft: 0,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n };\r\n\r\n const isLoading = events === null;\r\n\r\n if (!isLoading && events.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <section className={sectionClassName} style={sectionStyle}>\r\n <div className={`${styles.wrapper} ${styles.padding}`}>\r\n <div className={styles.container}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <OraculoSectionTitle title=\"Eventos de la semana\" />\r\n <div className={styles.buttonWrapper}>\r\n <OraculoButton\r\n variant=\"secondary\"\r\n size=\"lg\"\r\n fullWidth\r\n onClick={() => {\r\n handleViewMore();\r\n }}\r\n >\r\n Ver más\r\n </OraculoButton>\r\n </div>\r\n </Stack>\r\n </div>\r\n\r\n <div style={{ minWidth: \"180px\" }}>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={\r\n isLoading\r\n ? Array(6).fill({}) // show 4 skeleton slides\r\n : events.slice(0, 20)\r\n }\r\n perPage={3.5}\r\n gap=\"16px\"\r\n enableHorizontalWheel\r\n showRightGradient\r\n options={{ autoWidth: true, trimSpace: true }}\r\n breakpoints={{\r\n 1024: {\r\n perPage: 1.4,\r\n gap: \"8px\",\r\n focus: \"center\",\r\n padding: { left: \"8px\", right: \"8px\" },\r\n },\r\n }}\r\n renderItem={(p) => {\r\n const eventId = p.id;\r\n const jersey = eventId in jerseys ? jerseys[eventId] : undefined;\r\n return isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventSemanaCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <MemoizedSemanaCard event={p} jersey={jersey} />\r\n </FadeItemWrapper>\r\n );\r\n }}\r\n onMove={({ isStart, isEnd, visibleStart, visibleEnd }) => {\r\n setNavState({ isStart, isEnd });\r\n setVisibleRange({\r\n start: visibleStart,\r\n end: visibleEnd,\r\n });\r\n\r\n captureInteraction({\r\n element: \"evento_semana_carousel_slide\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoSemana - Slide Carousel`,\r\n target: \"carousel\",\r\n event_type: \"slide\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n visibleStart,\r\n visibleEnd,\r\n isStart,\r\n isEnd,\r\n },\r\n tags: { section: \"OraculoSeccionEventoSemana\" },\r\n });\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\n\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport {\n OraculoBannerItem,\n OraculoSeccionBannersProps,\n} from \"../../interfaces/oraculo/InterfaceBanner\";\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\n\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nexport default function OraculoSeccionBanners({\n backgrounds,\n items,\n hideItems,\n}: OraculoSeccionBannersProps & { hideItems?: boolean }) {\n const [activeDot, setActiveDot] = useState(0);\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const isMounted = useRef(false);\n const isAutoplayRef = useRef(false);\n\n const totalDots = backgrounds?.length || 1;\n const isLoading = !backgrounds || backgrounds.length === 0;\n const canNavigate = !isLoading && (backgrounds?.length ?? 0) > 1;\n\n // Si no se muestran items, no se muestra el dock\n const showDock = !hideItems && (items?.length ?? 0) > 0;\n\n const isPrevDisabled = !canNavigate || activeDot === 0;\n const isNextDisabled = !canNavigate || activeDot === totalDots - 1;\n\n const ARROW_COLOR = \"#B5B5B5\";\n\n const arrowSx = {\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n zIndex: 5,\n width: 48,\n height: 40,\n borderRadius: \"12px\",\n border: `1.5px solid ${ARROW_COLOR}`,\n py: 1,\n px: 1.5,\n color: ARROW_COLOR,\n backgroundColor: \"transparent\",\n \"&:hover\": {\n backgroundColor: \"rgba(181,181,181,0.08)\",\n },\n \"&.Mui-disabled\": {\n opacity: 0.35,\n borderColor: ARROW_COLOR,\n color: ARROW_COLOR,\n backgroundColor: \"transparent\",\n cursor: \"default\",\n },\n };\n\n const carouselOptions = useMemo(\n () => ({\n type: \"loop\",\n perMove: 1,\n pagination: false,\n arrows: false,\n drag: true,\n focus: \"center\",\n }),\n []\n );\n\n useEffect(() => {\n const timer = setTimeout(() => {\n isMounted.current = true;\n }, 500);\n return () => clearTimeout(timer);\n }, []);\n\n const handleBannerClick = (bg: OraculoBannerItem, index: number) => {\n const bannerName =\n bg.href?.split(\"/\").pop()?.split(\".\")[0] || bg.label || bg.id || `banner_${index + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `Landing: ${docId} - OraculoSeccionBanners - Banner click: ${bannerName}`,\n target: bg.href || \"no_url\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n banner_position: index + 1,\n banner_total: backgrounds?.length || 0,\n },\n tags: {\n banner_type: \"carousel\",\n banner_target: \"_self\",\n banner_url: bg.href || \"no_url\",\n },\n });\n };\n\n const handleMenuItemClick = (item: OraculoBannerItem) => {\n captureInteraction({\n element: \"banner_menu_item\",\n label: `Landing: ${docId} - OraculoSeccionBanners - Menu item click: ${item.label || item.id}`,\n target: item.href || \"action\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n item_id: item.id,\n },\n tags: {\n item_label: item.label || \"no_label\",\n },\n });\n\n // Ejecutar la acción original\n if (item.onClick) {\n item.onClick();\n return;\n }\n\n if (item.href) {\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(item.href);\n }\n }\n };\n\n // --- AUTOPLAY (robusto con setTimeout encadenado) ---\n const autoplayMs = 5000;\n const autoplayTimeoutRef = useRef<number | null>(null);\n\n const canAutoplay = !isLoading && (backgrounds?.length ?? 0) > 1;\n\n const stopAutoplay = () => {\n if (autoplayTimeoutRef.current != null) {\n window.clearTimeout(autoplayTimeoutRef.current);\n autoplayTimeoutRef.current = null;\n }\n };\n\n const scheduleAutoplay = () => {\n stopAutoplay();\n if (!canAutoplay) return;\n\n autoplayTimeoutRef.current = window.setTimeout(() => {\n isAutoplayRef.current = true; // ✅ marcamos que el próximo move es autoplay\n carouselRef.current?.next();\n }, autoplayMs);\n };\n\n useEffect(() => {\n scheduleAutoplay();\n return () => stopAutoplay();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [canAutoplay, autoplayMs]);\n\n const handlePrev = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n stopAutoplay();\n carouselRef.current?.prev();\n };\n\n const handleNext = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n stopAutoplay();\n carouselRef.current?.next();\n };\n\n // tracking solo de \"view\" manual (como tu lógica original)\n const handleSlideChangeTracking = (index: number) => {\n const safe = ((index % totalDots) + totalDots) % totalDots;\n\n if (!isMounted.current) return;\n\n const bannerName = backgrounds?.[safe]?.href\n ? backgrounds[safe].href?.split(\"/\").pop()?.split(\".\")[0] || `banner_${safe + 1}`\n : `banner_${safe + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `Landing: ${docId} - OraculoSeccionBanners - Banner view: Slide ${safe + 1} - ${bannerName}`,\n target: backgrounds?.[safe]?.href || \"no_url\",\n event_type: \"view\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n slide_index: safe + 1,\n total_slides: totalDots,\n interaction_type: \"manual_slide\",\n },\n tags: { banner_position: String(safe + 1) },\n });\n };\n\n return (\n <Box\n component=\"section\"\n sx={{\n position: \"relative\",\n overflow: \"visible\",\n }}\n >\n {/* Carrusel de backgrounds */}\n <Box\n sx={{\n position: \"relative\",\n borderRadius: 0,\n overflow: \"hidden\",\n width: \"100%\",\n\n height: { xs: 300, sm: 360 },\n\n \"@media (min-width:800px)\": {\n height: \"auto\",\n aspectRatio: \"1920 / 460\", // <-- estándar 1920 / 460\n },\n }}\n >\n <Box\n sx={{\n height: \"100%\",\n \"& .splide, & .splide__track, & .splide__list\": { height: \"100%\" },\n \"& .splide__slide\": { height: \"100%\", position: \"relative\" },\n }}\n >\n <OraculoCarousel\n ref={carouselRef}\n items={backgrounds}\n perPage={1}\n gap=\"0px\"\n enableHorizontalWheel\n options={carouselOptions}\n onMove={({ index }) => {\n const safe = ((index % totalDots) + totalDots) % totalDots;\n setActiveDot(safe);\n const wasAutoplay = isAutoplayRef.current;\n isAutoplayRef.current = false;\n scheduleAutoplay();\n if (!wasAutoplay) {\n handleSlideChangeTracking(index);\n }\n }}\n renderItem={(bg, idx) => (\n <Box\n component=\"a\"\n href={bg.href}\n target={bg.target ?? \"_self\"}\n rel={bg.target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n onClick={() => handleBannerClick(bg, idx)}\n sx={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n }}\n >\n <Box component=\"picture\" sx={{ position: \"absolute\", inset: 0, lineHeight: 0 }}>\n <source srcSet={bg.desktopSrc} media=\"(min-width:800px)\" />\n <source srcSet={bg.mobileSrc} media=\"(max-width:799px)\" />\n <Box\n component=\"img\"\n src={bg.fallbackSrc ?? bg.desktopSrc}\n alt=\"\"\n aria-hidden\n loading=\"lazy\"\n sx={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n />\n </Box>\n\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n top: \"80%\",\n background:\n \"linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(18,18,18,0.85) 80%, #121212 100%)\",\n },\n }}\n />\n </Box>\n )}\n />\n </Box>\n\n {canNavigate && (\n <>\n <IconButton\n aria-label=\"Anterior\"\n onClick={handlePrev}\n sx={{\n ...arrowSx,\n left: \"120px\",\n \"@media (max-width:1024px)\": { left: 24 },\n \"@media (max-width:786px)\": { display: \"none\" },\n }}\n // disabled={isPrevDisabled}\n >\n <ChevronLeftRounded />\n </IconButton>\n\n <IconButton\n aria-label=\"Siguiente\"\n onClick={handleNext}\n sx={{\n ...arrowSx,\n right: \"120px\",\n \"@media (max-width:1024px)\": { right: 24 },\n \"@media (max-width:786px)\": { display: \"none\" },\n }}\n // disabled={isNextDisabled}\n >\n <ChevronRightRounded />\n </IconButton>\n </>\n )}\n\n <Box\n sx={{\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 72,\n display: \"flex\",\n justifyContent: \"center\",\n zIndex: 2,\n }}\n >\n <OraculoCarouselDots\n key={`${activeDot}-${totalDots}`}\n total={totalDots}\n active={activeDot}\n durationMs={autoplayMs}\n />\n </Box>\n </Box>\n\n {/* Dock de items */}\n {showDock && (\n <Box\n sx={{\n position: \"absolute\",\n bottom: { xs: -12, sm: 0 },\n left: 120,\n right: 120,\n \"@media (max-width:1024px)\": { left: 24, right: 24 },\n backgroundColor: \"#363636\",\n borderRadius: 2,\n p: 1.5,\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n boxShadow: \"0 10px 24px rgba(0,0,0,.35)\",\n zIndex: 3,\n }}\n >\n {items?.map((item: OraculoBannerItem) => (\n <Box\n key={item.id}\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: { xs: 0.5, md: 1 },\n color: \"#FFFFFF\",\n minWidth: 0,\n cursor: item.onClick || item.href ? \"pointer\" : \"default\",\n whiteSpace: \"nowrap\",\n }}\n onClick={() => handleMenuItemClick(item)}\n >\n {item.icon && (\n <Box\n component=\"img\"\n src={item.icon}\n alt={item.label || `icon-${item.id}`}\n sx={{\n width: { xs: 20, sm: 22, md: 24 },\n height: { xs: 20, sm: 22, md: 24 },\n objectFit: \"contain\",\n }}\n />\n )}\n\n <Typography\n sx={{\n fontSize: { xs: 10, sm: 11, md: 12 },\n fontWeight: 600,\n color: \"#E0E0E0\",\n textAlign: \"center\",\n }}\n >\n {item.label}\n </Typography>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n );\n}","import { Box, Stack, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport OraculoLogoMediosPago from \"../../atoms/OraculoLogo/OraculoLogoMediosPago\";\n\ntype LogoType = {\n src: string;\n alt: string;\n};\n\ntype Props = {\n title?: string;\n items?: LogoType[]; // <-- ahora solo 1 arreglo\n};\n\n// 7 items (ejemplo)\nconst DEFAULT_ITEMS: LogoType[] = [\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/IBK.svg\", alt: \"Interbank\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/Yape.svg\", alt: \"Yape\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/BCP.png\", alt: \"BCP\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/pagoEfectivo.png\", alt: \"PagoEfectivo\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/tupay.svg\", alt: \"Tupay\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/monnet.svg\", alt: \"Monnet\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/niubiz.svg\", alt: \"Niubiz\" },\n];\n\nexport default function OraculoSeccionMediosPago({\n title = \"Medios de pago\",\n items = DEFAULT_ITEMS,\n}: Props) {\n // 4/3 cuando son 7\n const split = Math.ceil(items.length / 2);\n const row1 = items.slice(0, split);\n const row2 = items.slice(split);\n\n return (\n <Box component=\"section\" aria-labelledby=\"mp-title\" sx={{ color: \"#fff\" }}>\n <Typography\n id=\"mp-title\"\n variant=\"h6\"\n sx={{\n fontWeight: 800,\n fontSize: { xs: 20, md: 32 },\n textAlign: \"center\",\n mb: 1.5,\n }}\n >\n {title}\n </Typography>\n\n <Box\n sx={{\n width: \"288px\",\n height: \"2px\",\n mx: \"auto\",\n mb: 3,\n opacity: 0.95,\n filter: \"blur(0.2px)\",\n background:\n \"linear-gradient(90deg, rgba(0,0,0,0) 0%, #1dd75b 18%, #23d46b 50%, #1dd75b 82%, rgba(0,0,0,0) 100%)\",\n }}\n />\n\n {/* 2 filas SIEMPRE (móvil y desktop) */}\n <Stack spacing={{ xs: 2, md: 3 }} alignItems=\"center\">\n <Stack\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n gap={{ xs: 2, md: 3 }}\n flexWrap=\"wrap\"\n >\n {row1.map((l, idx) => (\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\n ))}\n </Stack>\n\n <Stack\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n gap={{ xs: 2, md: 3 }}\n flexWrap=\"wrap\"\n >\n {row2.map((l, idx) => (\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\n ))}\n </Stack>\n </Stack>\n </Box>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport { ThemeProvider, createTheme, useTheme } from \"@mui/material/styles\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\n\nexport default function OraculoThemeProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const outer = useTheme();\n\n const merged = React.useMemo(\n () =>\n createTheme(outer, {\n typography: { fontFamily: \"var(--orc-font)\" },\n components: {\n MuiTypography: {\n styleOverrides: {\n root: { fontFamily: \"var(--orc-font)\" },\n },\n },\n },\n }),\n [outer]\n );\n\n return (\n <ThemeProvider theme={merged}>\n <CssBaseline />\n {children}\n </ThemeProvider>\n );\n}\n","// oraculo-ui/src/templates/OraculoSectionHost.tsx\n\"use client\";\nimport React from \"react\";\nimport OraculoThemeProvider from \"../theme/OraculoThemeProvider\";\nimport { DocIdProvider } from \"../contexts/DocIdContext\";\n\nexport default function OraculoSectionHost({\n docId = \"home\",\n children,\n}: {\n docId?: string;\n children: React.ReactNode;\n}) {\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId}>{children}</DocIdProvider>\n </OraculoThemeProvider>\n );\n}","import OraculoSeccionBonoBienvenida from \"../organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida\";\nimport OraculoSeccionTopJuegos from \"../organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos\";\nimport OraculoSeccionCasino from \"../organisms/OraculoSeccionCasino/OraculoSeccionCasino\";\nimport OraculoSeccionCasinoEnVivo from \"../organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo\";\nimport OraculoSeccionVirtuales from \"../organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales\";\nimport OraculoSeccionClubOlimpo from \"../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo\";\nimport OraculoSeccionDestacados from \"../organisms/OraculoSeccionDestacados/OraculoSeccionDestacados\";\nimport OraculoSeccionBanners from \"../organisms/OraculoSeccionBanners/OraculoSeccionBanners\";\nimport OraculoSeccionMediosPago from \"../organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago\";\nimport OraculoSeccionEventoCombinadas from \"../organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas\";\nimport OraculoSeccionEventoEnVivo from \"../organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo\";\nimport OraculoSeccionEventoSemana from \"../organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana\";\n\nimport React from \"react\";\n\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\n\nexport const Landing: LandingComponentMap = {\n OraculoSeccionDestacados,\n OraculoSeccionTopJuegos,\n OraculoSeccionCasinoEnVivo,\n OraculoSeccionCasino,\n OraculoSeccionVirtuales,\n OraculoSeccionClubOlimpo,\n OraculoSeccionBonoBienvenida,\n OraculoSeccionBanners,\n OraculoSeccionMediosPago,\n OraculoSeccionEventoEnVivo,\n OraculoSeccionEventoSemana,\n OraculoSeccionEventoCombinadas,\n};","export const LANDING_FALLBACK_JSON = {\n sections:\n[\n {\n \"variableName2\": \"backgrounds\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"variableName\": \"items\",\n \"dataMode\": \"manual\",\n \"title\": \"Banners\",\n \"visible\": true,\n \"id\": 9,\n \"manualItems\": [\n {\n \"id\": \"724a1dc0-d55b-4443-a580-cad22e328536\",\n \"fields\": [\n {\n \"type\": \"string\",\n \"id\": \"abb2c3d6-d5c5-47ee-8ffa-c764a8bc731e\",\n \"isImage\": false,\n \"required\": true,\n \"value\": \"1\",\n \"name\": \"id\"\n },\n {\n \"name\": \"label\",\n \"isImage\": false,\n \"value\": \"POR INICIAR\",\n \"required\": false,\n \"id\": \"549c02bf-56b5-4652-93d9-46b9451bac39\",\n \"type\": \"string\"\n },\n {\n \"type\": \"string\",\n \"id\": \"c6538242-1974-4bed-aed3-703a111987b5\",\n \"maxSizeMB\": 0.2,\n \"required\": true,\n \"isImage\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/clock.svg\",\n \"name\": \"icon\"\n },\n {\n \"id\": \"7d564f31-69ff-4f32-983b-46d28ced4a18\",\n \"type\": \"string\",\n \"required\": false,\n \"value\": \"https://www.olimpo.bet/deportes#starting-soon\",\n \"isImage\": false,\n \"name\": \"href\"\n }\n ]\n },\n {\n \"fields\": [\n {\n \"type\": \"string\",\n \"isImage\": false,\n \"id\": \"45c50e08-560e-42cb-8be1-e9722f69c8a0\",\n \"required\": true,\n \"name\": \"id\",\n \"value\": \"2\"\n },\n {\n \"type\": \"string\",\n \"name\": \"label\",\n \"isImage\": false,\n \"value\": \"EXPLORAR\",\n \"required\": false,\n \"id\": \"2eec0f3d-0126-4960-8ec0-17cc92b5eb43\"\n },\n {\n \"maxSizeMB\": 0.2,\n \"isImage\": true,\n \"required\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/icon2.svg\",\n \"id\": \"5530e6bd-d2b2-4045-9371-722e23d96e14\",\n \"type\": \"string\",\n \"name\": \"icon\"\n },\n {\n \"id\": \"7e5375ad-ecbb-4354-868a-b9323bcfd053\",\n \"required\": false,\n \"name\": \"href\",\n \"isImage\": false,\n \"type\": \"string\",\n \"value\": \"https://www.olimpo.bet/deportes#sports/a-z\"\n }\n ],\n \"id\": \"ad0df0e2-c8ce-4524-b05a-2a29578aba11\"\n },\n {\n \"id\": \"966bc1fc-0b1a-4a50-a4a2-964262922c3d\",\n \"fields\": [\n {\n \"isImage\": false,\n \"required\": true,\n \"id\": \"fc35f393-6692-4d25-a534-d51f4bd6d9a2\",\n \"value\": \"3\",\n \"name\": \"id\",\n \"type\": \"string\"\n },\n {\n \"isImage\": false,\n \"name\": \"label\",\n \"value\": \"TOP JUEGOS\",\n \"id\": \"a323e324-cf04-4178-b2c2-596d51564123\",\n \"type\": \"string\",\n \"required\": false\n },\n {\n \"type\": \"string\",\n \"name\": \"icon\",\n \"maxSizeMB\": 0.2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765981473501-icon3.svg\",\n \"id\": \"6ede5815-7336-40fa-99f2-57ac6cb938cd\",\n \"required\": true,\n \"isImage\": true\n },\n {\n \"required\": false,\n \"id\": \"26a486fd-31e6-4ed4-ab83-0f9a7bf6adc4\",\n \"value\": \"https://www.olimpo.bet/casino\",\n \"isImage\": false,\n \"name\": \"href\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"id\": \"31e00ff9-f2dd-4942-bff3-919902fde880\",\n \"fields\": [\n {\n \"id\": \"fbec2c21-cf32-426f-910b-9c78a6cd714c\",\n \"required\": true,\n \"isImage\": false,\n \"value\": \"4\",\n \"name\": \"id\",\n \"type\": \"string\"\n },\n {\n \"isImage\": false,\n \"name\": \"label\",\n \"type\": \"string\",\n \"value\": \"MISIONES\",\n \"required\": false,\n \"id\": \"2de80dbf-998b-4bc7-8383-4b69746ef155\"\n },\n {\n \"type\": \"string\",\n \"id\": \"686c62bd-ea86-4aeb-97b7-6f1488912066\",\n \"required\": true,\n \"isImage\": true,\n \"maxSizeMB\": 0.2,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/icon3.svg\",\n \"name\": \"icon\"\n },\n {\n \"id\": \"4b72f490-75e4-458e-a4b5-68f0736a25d4\",\n \"isImage\": false,\n \"required\": false,\n \"type\": \"string\",\n \"value\": \"https://www.olimpo.bet/private/misiones\",\n \"name\": \"href\"\n }\n ]\n }\n ],\n \"manualScalarFields\": [\n {\n \"id\": \"7ee165a0-1268-4825-82df-9fef9857f535\",\n \"type\": \"string\",\n \"isImage\": false,\n \"value\": \"\",\n \"required\": false,\n \"name\": \"groups\"\n }\n ],\n \"order\": 1,\n \"manualItems2\": [\n {\n \"id\": \"13b35362-5695-4687-b6a8-645f8effd264\",\n \"fields\": [\n {\n \"isImage\": true,\n \"name\": \"desktopSrc\",\n \"id\": \"eea41214-3c26-41e9-a908-d87327147396\",\n \"maxSizeMB\": 2,\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768333229541-banner032.webp\",\n \"required\": false\n },\n {\n \"maxSizeMB\": 2,\n \"isImage\": true,\n \"type\": \"string\",\n \"name\": \"mobileSrc\",\n \"id\": \"b393dfd3-c085-43e0-b68a-97cc04c06b6a\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\n \"required\": false\n },\n {\n \"maxSizeMB\": 2,\n \"id\": \"2616b944-7cd1-4919-bc56-38ddb1a3093b\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\n \"isImage\": true,\n \"name\": \"fallbackSrc\",\n \"type\": \"string\",\n \"required\": false\n },\n {\n \"name\": \"href\",\n \"id\": \"54689f0e-f698-48a1-9d84-d13a397e24ea\",\n \"required\": false,\n \"value\": \"\",\n \"type\": \"string\",\n \"isImage\": false\n }\n ]\n },\n {\n \"id\": \"024f8130-91e1-4296-b826-cffa32ab1a96\",\n \"fields\": [\n {\n \"maxSizeMB\": 2,\n \"isImage\": true,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852295069-ftd_web_captacion60.jpg\",\n \"name\": \"desktopSrc\",\n \"type\": \"string\",\n \"required\": false,\n \"id\": \"1ebab59e-f706-4795-81cb-7accfc9f33d7\"\n },\n {\n \"id\": \"bdebd1b0-d633-4b9e-9247-8e769cdc5b3b\",\n \"type\": \"string\",\n \"isImage\": true,\n \"required\": false,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852302781-ftd_mobile_captacion60.jpg\",\n \"maxSizeMB\": 2,\n \"name\": \"mobileSrc\"\n },\n {\n \"isImage\": true,\n \"maxSizeMB\": 2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852309554-ftd_web_captacion60.jpg\",\n \"id\": \"4bc20da7-b769-43dd-ba2e-ee9261ec73d7\",\n \"name\": \"fallbackSrc\",\n \"type\": \"string\",\n \"required\": false\n },\n {\n \"id\": \"b85e737d-97ec-430c-b819-ba6e91a25372\",\n \"type\": \"string\",\n \"isImage\": false,\n \"required\": false,\n \"value\": \"\",\n \"name\": \"href\"\n }\n ]\n },\n {\n \"id\": \"cbd24716-9770-418f-aa87-ae60e7e9e0ee\",\n \"fields\": [\n {\n \"maxSizeMB\": 2,\n \"required\": false,\n \"name\": \"desktopSrc\",\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831142801-ftd_web_tenismasters.jpg\",\n \"id\": \"fa31486e-ec9b-4c99-b870-396d25bc66d6\",\n \"isImage\": true\n },\n {\n \"isImage\": true,\n \"name\": \"mobileSrc\",\n \"id\": \"954a4363-1373-44f2-b677-1bea66882838\",\n \"maxSizeMB\": 2,\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831155101-ftd_mobile_tenismasters.jpg\",\n \"required\": false\n },\n {\n \"required\": false,\n \"type\": \"string\",\n \"id\": \"be8789e8-cbf6-49c1-9ae5-ebc958404369\",\n \"maxSizeMB\": 2,\n \"name\": \"fallbackSrc\",\n \"isImage\": true,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831198671-ftd_web_tenismasters.jpg\"\n },\n {\n \"value\": \"https://www.olimpo.bet/torneos/Torneo_Olimpo_Tennis\",\n \"type\": \"string\",\n \"required\": false,\n \"isImage\": false,\n \"id\": \"142b0cb2-e255-4240-aea1-807a67321e34\",\n \"name\": \"href\"\n }\n ]\n },\n {\n \"fields\": [\n {\n \"required\": false,\n \"isImage\": true,\n \"id\": \"4414dbe4-67b3-428c-9d9d-920fff30956a\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831210432-ftd_web_verano.jpg\",\n \"type\": \"string\",\n \"maxSizeMB\": 2,\n \"name\": \"desktopSrc\"\n },\n {\n \"required\": false,\n \"isImage\": true,\n \"id\": \"b74d7582-94be-4608-8cdc-e6f8cab3e115\",\n \"name\": \"mobileSrc\",\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831218073-ftd_mobile_verano.jpg\",\n \"maxSizeMB\": 2\n },\n {\n \"id\": \"ada12745-3851-4a86-912c-2c9ec7c3e5de\",\n \"maxSizeMB\": 2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831228250-ftd_web_verano.jpg\",\n \"name\": \"fallbackSrc\",\n \"type\": \"string\",\n \"required\": false,\n \"isImage\": true\n },\n {\n \"value\": \"https://www.olimpo.bet/torneos/Endorphina_09012026_Casino\",\n \"isImage\": false,\n \"required\": false,\n \"name\": \"href\",\n \"type\": \"string\",\n \"id\": \"e23e8b63-0ca4-436f-b53a-1bdf8d6442a6\"\n }\n ],\n \"id\": \"0d5ffdb1-d55f-47b6-9e61-e6b571bf2db2\"\n },\n {\n \"id\": \"cf073698-ff54-4a9e-9c4f-c34b6987e8b5\",\n \"fields\": [\n {\n \"type\": \"string\",\n \"isImage\": true,\n \"required\": false,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831260900-ftd_web_virtuales.jpg\",\n \"maxSizeMB\": 2,\n \"name\": \"desktopSrc\",\n \"id\": \"1a1ef092-aff6-49c5-81be-7d76c6ac94e1\"\n },\n {\n \"required\": false,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831267161-ftd_mobile_virtuales.jpg\",\n \"isImage\": true,\n \"type\": \"string\",\n \"maxSizeMB\": 2,\n \"name\": \"mobileSrc\",\n \"id\": \"901cc080-4907-47a8-8b2e-73a7b9fc27a3\"\n },\n {\n \"type\": \"string\",\n \"name\": \"fallbackSrc\",\n \"isImage\": true,\n \"id\": \"8f97418b-6f27-4231-b6f8-e01e1d3c94f8\",\n \"maxSizeMB\": 2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831274473-ftd_web_virtuales.jpg\",\n \"required\": false\n },\n {\n \"type\": \"string\",\n \"value\": \"https://www.olimpo.bet/torneos/Torneo_Lo_Mejor_De_Virtuales\",\n \"required\": false,\n \"name\": \"href\",\n \"isImage\": false,\n \"id\": \"a140f16d-8af9-474a-a77c-6ddc1651b3e5\"\n }\n ]\n }\n ],\n \"componentKey\": \"OraculoSeccionBanners\"\n },\n {\n \"visible\": true,\n \"dataMode\": \"url\",\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true%22\",\n \"variableName\": \"items\",\n \"apiParams\": [],\n \"id\": 2,\n \"componentKey\": \"OraculoSeccionEventoEnVivo\",\n \"order\": 2,\n \"manualScalarFields\": [\n {\n \"isUrl\": false,\n \"id\": \"7fc591db-555b-49b2-a3ad-30aa66eff17b\",\n \"required\": true,\n \"name\": \"title\",\n \"type\": \"string\",\n \"value\": \"En vivo\"\n },\n {\n \"type\": \"string\",\n \"value\": \"https://stg-www.contodobet.com/assets/img/home/EnVivo/icon.svg\",\n \"name\": \"iconUrl\",\n \"isUrl\": true,\n \"required\": false,\n \"id\": \"db4b6355-ed6c-4265-ad78-d8fffb660997\"\n },\n {\n \"required\": false,\n \"value\": \"\",\n \"type\": \"function\",\n \"id\": \"e4647a65-2e60-4243-bab4-25b7ba8461f8\",\n \"isUrl\": false,\n \"name\": \"onViewMore\"\n },\n {\n \"id\": \"a16ab6c6-321c-4ebe-bd36-a85ad49edf3e\",\n \"type\": \"string\",\n \"isUrl\": false,\n \"required\": false,\n \"value\": \"\",\n \"name\": \"className\"\n }\n ],\n \"title\": \"Eventos en vivo\",\n \"apiMethod\": \"GET\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\"\n },\n {\n \"visible\": true,\n \"manualScalarFields\": [\n {\n \"name\": \"title\",\n \"required\": true,\n \"value\": \"Casino\",\n \"id\": \"c2046b5a-4d30-46ff-9513-e15a6e0b0a7e\",\n \"isImage\": false,\n \"type\": \"string\"\n },\n {\n \"required\": true,\n \"type\": \"string\",\n \"maxSizeMB\": 0.2,\n \"name\": \"iconUrl\",\n \"isImage\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Casino/diamante.svg\",\n \"id\": \"9c5964ca-ce84-4c47-86ec-b34d7f3a5793\"\n },\n {\n \"id\": \"1c32ea69-598b-4f80-81e4-709d887c12c1\",\n \"value\": \"true\",\n \"name\": \"mosaicFirst\",\n \"required\": false,\n \"type\": \"boolean\",\n \"isImage\": false\n },\n {\n \"value\": \"4\",\n \"type\": \"number\",\n \"required\": false,\n \"name\": \"gridSize\",\n \"id\": \"5c3c60eb-cf49-4083-ab83-67d65f829554\",\n \"isImage\": false\n },\n {\n \"value\": \"\",\n \"name\": \"groups\",\n \"isImage\": false,\n \"id\": \"c4d4c4b9-0c93-4aca-a61f-042e52fd9254\",\n \"required\": false,\n \"type\": \"string\"\n }\n ],\n \"variableName\": \"items\",\n \"componentKey\": \"OraculoSeccionCasino\",\n \"order\": 3,\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n \"apiParams\": [\n {\n \"value\": \"OLI\",\n \"key\": \"company\",\n \"id\": \"2af22a50-07e2-4a48-8569-90c79827f3e7\"\n },\n {\n \"key\": \"lobby\",\n \"id\": \"efa2def8-eeb4-4fcc-80f6-32c24e7804e6\",\n \"value\": \"HOME_CASINO\"\n }\n ],\n \"id\": 4,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiMethod\": \"GET\",\n \"dataMode\": \"url\",\n \"title\": \"Casino\"\n },\n {\n \"title\": \"Eventos Combinadas\",\n \"id\": 1,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiParams\": [],\n \"apiMethod\": \"GET\",\n \"order\": 4,\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group/prepackcoupon.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764284658793&prePackCouponTags=CUSTOM\",\n \"manualScalarFields\": [\n {\n \"required\": true,\n \"id\": \"33e5944d-b5be-4971-8c10-65aa6b71051c\",\n \"name\": \"title\",\n \"type\": \"string\",\n \"value\": \"Combinadas\",\n \"isImage\": false\n },\n {\n \"id\": \"95cd1489-206c-4a72-b4bd-b65161089f73\",\n \"isImage\": true,\n \"name\": \"iconUrl\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765894618836-frame181009.svg\",\n \"type\": \"string\",\n \"dimensions\": \"40x40\",\n \"required\": false,\n \"maxSizeMB\": 0.2\n },\n {\n \"name\": \"className\",\n \"value\": \"\",\n \"id\": \"af234a92-41ad-4ff1-bfbb-ac63a9af19f7\",\n \"type\": \"string\",\n \"isImage\": false,\n \"required\": false\n },\n {\n \"value\": \"\",\n \"required\": false,\n \"name\": \"groups\",\n \"isImage\": false,\n \"id\": \"52f226c8-6456-4395-b72d-d140af6fa46d\",\n \"type\": \"string\"\n }\n ],\n \"dataMode\": \"url\",\n \"variableName\": \"items\",\n \"visible\": true,\n \"componentKey\": \"OraculoSeccionEventoCombinadas\"\n },\n {\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764401676636&startTime=2025-11-29T06:00:00.000Z&endTime=2026-06-25T15:00:00.000Z&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions\",\n \"dataMode\": \"url\",\n \"title\": \"Eventos de la semana\",\n \"order\": 5,\n \"apiParams\": [],\n \"variableName\": \"items\",\n \"apiMethod\": \"GET\",\n \"visible\": true,\n \"id\": 3,\n \"componentKey\": \"OraculoSeccionEventoSemana\",\n \"manualScalarFields\": [\n {\n \"id\": \"7a3de844-5727-4043-be42-7f965e2aa249\",\n \"isUrl\": false,\n \"value\": \"Eventos esta semana\",\n \"required\": false,\n \"name\": \"title\",\n \"type\": \"string\"\n },\n {\n \"value\": \"\",\n \"isUrl\": true,\n \"required\": false,\n \"id\": \"2895f65f-e75b-4116-958d-04d4c34f16fe\",\n \"name\": \"iconUrl\",\n \"type\": \"string\"\n },\n {\n \"type\": \"function\",\n \"required\": false,\n \"value\": \"\",\n \"id\": \"d973d3ee-721e-4d76-888c-6ad8b7bb3414\",\n \"isUrl\": false,\n \"name\": \"onViewMore\"\n },\n {\n \"required\": false,\n \"type\": \"string\",\n \"value\": \"\",\n \"name\": \"className\",\n \"id\": \"c062fe02-c069-49fb-aae6-d39aa3fde89c\",\n \"isUrl\": false\n }\n ]\n },\n {\n \"componentKey\": \"OraculoSeccionBonoBienvenida\",\n \"visible\": false,\n \"order\": 6,\n \"manualScalarFields\": [\n {\n \"id\": \"fec2252c-2c2d-448d-8775-9d073bd8def9\",\n \"value\": \"Te damos la\",\n \"name\": \"headline\",\n \"type\": \"string\",\n \"required\": false,\n \"isUrl\": false\n },\n {\n \"name\": \"headline2\",\n \"required\": false,\n \"id\": \"17e045d1-8ddb-46bc-b3ae-ae0c7ffc5952\",\n \"isUrl\": false,\n \"value\": \"bienvenida al club\",\n \"type\": \"string\"\n },\n {\n \"type\": \"string\",\n \"required\": false,\n \"isUrl\": true,\n \"name\": \"backgroundImageUrl\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondobg.png\",\n \"id\": \"cae601b0-ed5d-4b97-9e1f-1816d7986c6b\"\n }\n ],\n \"variableName\": \"items\",\n \"title\": \"Bono Bienvenida\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"manualItems\": [\n {\n \"id\": \"8677b338-7d12-4ba9-a95f-d34ed71d92b0\",\n \"fields\": [\n {\n \"value\": \"Recibe\",\n \"type\": \"string\",\n \"name\": \"title\",\n \"isUrl\": false,\n \"required\": true,\n \"id\": \"e015fc5e-983e-4096-b82e-6d5ed9957dd5\"\n },\n {\n \"value\": \"S/60\",\n \"required\": false,\n \"name\": \"amount\",\n \"type\": \"string\",\n \"id\": \"00b69888-d8ee-4bae-943c-be4e0dead26b\",\n \"isUrl\": false\n },\n {\n \"name\": \"subtitle\",\n \"required\": false,\n \"isUrl\": false,\n \"id\": \"376cd731-4a20-4435-a5ee-351ac55d4351\",\n \"value\": \"SIN ROLLOVER\",\n \"type\": \"string\"\n },\n {\n \"value\": \"Hazlo aquí\",\n \"name\": \"buttonText\",\n \"required\": true,\n \"id\": \"3b73cff5-cb30-4b00-9b41-305455334e56\",\n \"type\": \"string\",\n \"isUrl\": false\n },\n {\n \"isUrl\": true,\n \"type\": \"string\",\n \"required\": true,\n \"name\": \"backgroundImage\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n \"id\": \"89710b59-2a6a-4de8-be9a-7d9274bad84b\"\n },\n {\n \"isUrl\": false,\n \"name\": \"onButtonClick\",\n \"value\": \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\n \"type\": \"function\",\n \"required\": false,\n \"id\": \"e7ceaadc-b203-4587-856b-b9015201a43f\"\n }\n ]\n },\n {\n \"fields\": [\n {\n \"id\": \"81e1730c-0f9b-4ab9-a4df-f36c974ae99d\",\n \"required\": true,\n \"type\": \"string\",\n \"name\": \"title\",\n \"value\": \"Regístrate y recibe\",\n \"isUrl\": false\n },\n {\n \"required\": false,\n \"value\": \"S/40\",\n \"name\": \"amount\",\n \"type\": \"string\",\n \"isUrl\": false,\n \"id\": \"c1e96d9b-e7c7-4bb7-a8db-b67c32dcae32\"\n },\n {\n \"required\": false,\n \"isUrl\": false,\n \"name\": \"subtitle\",\n \"value\": \"SIN ROLLOVER\",\n \"type\": \"string\",\n \"id\": \"93242ead-5f09-4966-9484-471b27859c31\"\n },\n {\n \"id\": \"0d97802b-7aaf-4ae3-b513-8a5a469e5d5d\",\n \"value\": \"Hazlo aquí\",\n \"name\": \"buttonText\",\n \"type\": \"string\",\n \"isUrl\": false,\n \"required\": true\n },\n {\n \"required\": true,\n \"isUrl\": true,\n \"id\": \"541fcdc8-07a7-47b8-9a33-d22cb865823c\",\n \"name\": \"backgroundImage\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n \"type\": \"string\"\n },\n {\n \"isUrl\": false,\n \"name\": \"onButtonClick\",\n \"id\": \"b8c4b96c-0807-4040-8c3e-8392fb278aab\",\n \"required\": false,\n \"type\": \"function\",\n \"value\": \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\"\n }\n ],\n \"id\": \"6707ce1d-064a-43af-8679-712c7235873a\"\n }\n ],\n \"id\": 11,\n \"dataMode\": \"manual\"\n },\n {\n \"dataMode\": \"url\",\n \"componentKey\": \"OraculoSeccionCasinoEnVivo\",\n \"order\": 7,\n \"title\": \"Casino en vivo\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"id\": 12,\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n \"apiMethod\": \"POST\",\n \"manualScalarFields\": [\n {\n \"isImage\": false,\n \"value\": \"Casino en vivo\",\n \"type\": \"string\",\n \"name\": \"title\",\n \"id\": \"52e655b4-7259-4f7f-9017-dafe24247810\",\n \"required\": true\n },\n {\n \"required\": false,\n \"isImage\": false,\n \"id\": \"e299d500-abdc-4577-bb38-1943b6f02dfd\",\n \"name\": \"subtitle\",\n \"type\": \"string\",\n \"value\": \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\"\n },\n {\n \"isImage\": true,\n \"dimensions\": \"1080x1920\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoMobile.png\",\n \"name\": \"backgroundMobileUrl\",\n \"required\": false,\n \"id\": \"6dcfd666-c2db-4a19-9fbf-08167bf56ae0\",\n \"type\": \"string\",\n \"maxSizeMB\": 2\n },\n {\n \"type\": \"string\",\n \"maxSizeMB\": 2,\n \"name\": \"backgroundDesktopUrl\",\n \"isImage\": true,\n \"id\": \"2aa55855-0865-4cf1-a1ee-e52db864c6b4\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoDesktop.png\",\n \"dimensions\": \"1920x1080\",\n \"required\": false\n },\n {\n \"isImage\": false,\n \"name\": \"groups\",\n \"type\": \"string\",\n \"value\": \"\",\n \"id\": \"e1599845-59d4-4320-903b-3857453b4322\",\n \"required\": false\n }\n ],\n \"variableName\": \"items\",\n \"apiParams\": [\n {\n \"key\": \"company\",\n \"value\": \"OLI\",\n \"id\": \"2822fa64-0e89-43ea-9c80-ee77076c95bd\"\n },\n {\n \"key\": \"lobby\",\n \"value\": \"HOME_CASINOENVIVO\",\n \"id\": \"2d6f8267-0468-4320-976d-b01df40e8ca3\"\n }\n ],\n \"visible\": true\n },\n {\n \"order\": 8,\n \"title\": \"Oraculo Seccion Top Juegos\",\n \"visible\": true,\n \"dataMode\": \"url\",\n \"apiMethod\": \"GET\",\n \"componentKey\": \"OraculoSeccionTopJuegos\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"manualScalarFields\": [\n {\n \"isImage\": false,\n \"value\": \"Top juegos\",\n \"type\": \"string\",\n \"required\": true,\n \"name\": \"title\",\n \"id\": \"a01c36e7-a551-4c92-89e0-e9eabcdbe344\"\n },\n {\n \"required\": true,\n \"type\": \"string\",\n \"id\": \"1960df1d-b07e-4461-b55f-39834ac30d8e\",\n \"maxSizeMB\": 0.2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768597100868-virtuales.webp\",\n \"isImage\": true,\n \"name\": \"iconUrl\"\n },\n {\n \"value\": \"\",\n \"name\": \"groups\",\n \"isImage\": false,\n \"type\": \"string\",\n \"id\": \"63dab0f6-b4d1-47af-b1e7-d3dcf4c69c4e\",\n \"required\": false\n }\n ],\n \"apiParams\": [\n {\n \"id\": \"2bcfd8cd-8f1f-474f-beb4-170477acf9bd\",\n \"value\": \"OLI\",\n \"key\": \"company\"\n },\n {\n \"id\": \"dac0b2d9-f00d-4979-9deb-31c6f66b1899\",\n \"key\": \"lobby\",\n \"value\": \"HOME_TOPJUEGOS\"\n }\n ],\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n \"id\": 13,\n \"variableName\": \"items\"\n },\n {\n \"apiMethod\": \"GET\",\n \"componentKey\": \"OraculoSeccionDestacados\",\n \"id\": 6,\n \"variableName\": \"items\",\n \"title\": \"Promociones \\\"Lo nuevo\\\"\",\n \"order\": 9,\n \"apiParams\": [\n {\n \"id\": \"a2ee1b32-dc39-434f-9358-920e6c7bba0b\",\n \"value\": \"OLI\",\n \"key\": \"company\"\n },\n {\n \"id\": \"16715513-30a1-4955-8e94-a4deee4722ba\",\n \"value\": \"DESTACADOS\",\n \"key\": \"lobby\"\n }\n ],\n \"dataMode\": \"url\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getPromotionsLobby\",\n \"manualScalarFields\": [\n {\n \"id\": \"f131acc5-a298-4583-9952-c0747dc1f1af\",\n \"name\": \"title\",\n \"type\": \"string\",\n \"value\": \"Lo nuevo\",\n \"required\": true,\n \"isImage\": false\n },\n {\n \"id\": \"8f0dadc8-ff0f-4074-870f-2bbcd9f38cab\",\n \"required\": true,\n \"name\": \"iconUrl\",\n \"type\": \"string\",\n \"maxSizeMB\": 0.2,\n \"dimensions\": \"40x40\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Destacados/starIcon.svg\",\n \"isImage\": true\n },\n {\n \"isImage\": false,\n \"type\": \"string\",\n \"name\": \"className\",\n \"value\": \"\",\n \"required\": false,\n \"id\": \"39cd368d-0003-4145-88a9-f22b1a4ef32b\"\n },\n {\n \"isImage\": false,\n \"type\": \"string\",\n \"value\": \"\",\n \"name\": \"groups\",\n \"required\": false,\n \"id\": \"a9e218fd-9cc6-432f-a7bf-c119581e6927\"\n }\n ],\n \"visible\": true\n },\n {\n \"title\": \"Club Olimpo\",\n \"componentKey\": \"OraculoSeccionClubOlimpo\",\n \"dataMode\": \"manual\",\n \"visible\": true,\n \"variableName\": \"items\",\n \"manualItems\": [\n {\n \"fields\": [\n {\n \"required\": true,\n \"id\": \"65b37bc4-f480-4409-afd7-ff8b83c722e0\",\n \"value\": \"¡Canjea bonos, productos y las mejores experiencias!\",\n \"isUrl\": false,\n \"name\": \"text\",\n \"type\": \"string\"\n },\n {\n \"id\": \"cdc8fb20-5c5a-4165-93be-4df1026cdcee\",\n \"required\": false,\n \"name\": \"buttonLabel\",\n \"value\": \"Vamos\",\n \"type\": \"string\",\n \"isUrl\": false\n },\n {\n \"value\": \"\",\n \"name\": \"imgAlt\",\n \"type\": \"string\",\n \"required\": false,\n \"id\": \"9f25442e-caeb-4fab-9bea-b91f1aef97eb\",\n \"isUrl\": false\n },\n {\n \"id\": \"259ffa74-7e4f-48e6-90da-4837f2c37fe9\",\n \"isUrl\": true,\n \"name\": \"imgMobile\",\n \"type\": \"string\",\n \"required\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/FondoMobile.png\"\n },\n {\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/FondoDesktop.png\",\n \"id\": \"e7812141-42d8-419f-9d15-b8711139e980\",\n \"required\": false,\n \"type\": \"string\",\n \"isUrl\": true,\n \"name\": \"imgDesktopBg\"\n },\n {\n \"name\": \"imgDesktopLogo\",\n \"id\": \"622d860b-9f9f-462a-a675-3768d6daf3c3\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/Logo.png\",\n \"required\": false,\n \"type\": \"string\",\n \"isUrl\": true\n },\n {\n \"name\": \"onClick\",\n \"id\": \"cc465fd9-907d-427a-b5bb-e0963bdd833a\",\n \"value\": \"\",\n \"required\": false,\n \"type\": \"function\",\n \"isUrl\": false\n }\n ],\n \"id\": \"03e20297-c0fa-4382-85b2-54eaa9325be1\"\n }\n ],\n \"id\": 8,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"order\": 10\n },\n {\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"dataMode\": \"url\",\n \"title\": \"Virtuales\",\n \"order\": 11,\n \"variableName\": \"items\",\n \"componentKey\": \"OraculoSeccionVirtuales\",\n \"id\": 7,\n \"apiParams\": [\n {\n \"value\": \"OLI\",\n \"key\": \"company\",\n \"id\": \"de915e1d-1742-4383-bd83-ed96fda1145a\"\n },\n {\n \"key\": \"lobby\",\n \"value\": \"HOME_VIRTUALES\",\n \"id\": \"039b41a3-4e94-4a52-8798-e78d8651c090\"\n }\n ],\n \"apiMethod\": \"GET\",\n \"manualScalarFields\": [\n {\n \"required\": true,\n \"name\": \"title\",\n \"id\": \"f6b16510-51db-4124-864d-2d12a0bb1b23\",\n \"value\": \"Virtuales\",\n \"type\": \"string\",\n \"isImage\": false\n },\n {\n \"type\": \"string\",\n \"id\": \"f9686ddc-f673-4784-8025-df26f48cc04f\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Virtuales/virtuales.svg\",\n \"maxSizeMB\": 0.2,\n \"required\": true,\n \"isImage\": true,\n \"name\": \"iconUrl\"\n },\n {\n \"type\": \"boolean\",\n \"id\": \"4c4f348c-cb17-4fd6-bc4d-f816a42da249\",\n \"name\": \"mosaicFirst\",\n \"isImage\": false,\n \"value\": \"true\",\n \"required\": false\n },\n {\n \"id\": \"c264c9c3-7178-4961-b366-163d9b818800\",\n \"type\": \"number\",\n \"name\": \"gridSize\",\n \"value\": \"4\",\n \"required\": false,\n \"isImage\": false\n },\n {\n \"id\": \"2310900e-68ce-4a64-89da-e0976d172fee\",\n \"required\": false,\n \"type\": \"string\",\n \"value\": \"\",\n \"isImage\": false,\n \"name\": \"groups\"\n }\n ],\n \"visible\": true,\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\"\n },\n {\n \"title\": \"Medios de Pago\",\n \"id\": 10,\n \"order\": 12,\n \"componentKey\": \"OraculoSeccionMediosPago\",\n \"visible\": true,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\"\n }\n],\n}","\"use client\";\nimport \"../index.css\";\nimport React, { useEffect, useState, useMemo } from \"react\";\nimport { Container, Stack, useMediaQuery } from \"@mui/material\";\nimport { doc, onSnapshot, Firestore } from \"firebase/firestore\";\n// import \"@splidejs/react-splide/css\";\n\nimport { Landing } from \"./landingRegistry\";\nimport { clearOraculoExtras, setOraculoExtras } from \"../utils/openMachineRegistry\";\n// import \"../index.css\"\nimport { DocIdProvider } from \"../contexts/DocIdContext\";\nimport { LANDING_FALLBACK_JSON } from \"../config/json_configuration\";\nimport OraculoThemeProvider from \"../theme/OraculoThemeProvider\";\n// Para testear captura\n// import { OlimpoErrorClient, type SessionProvider } from \"@olimpo/capture-client\";\n\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\n\n// Es componente React si es función o componente objeto (MUI, etc.)\nconst isComponent = (val: any) =>\n typeof val === \"function\" ||\n (val && typeof val === \"object\" && \"$$typeof\" in val);\n\n// En oraculo-ui los organismos de landing se llaman OraculoSeccionXXX\nconst isSectionName = (key: string) => /^OraculoSeccion[A-Z]/.test(key);\n\nfunction normalizeLandingJsonToSections(rawJson: any): OraculoPageLandingPreviewSection[] {\n // Caso 1: tu JSON ya trae sections como array\n if (rawJson && Array.isArray(rawJson.sections)) {\n return rawJson.sections\n .slice()\n .sort((a: any, b: any) => (a.order ?? 0) - (b.order ?? 0))\n .map((s: any, i: number) => ({ ...s, order: i + 1 }));\n }\n\n // Caso 2: tu JSON NO trae sections, sino keys/otra estructura:\n // EJEMPLO: rawJson.components = [{componentKey, visible, ...}]\n if (rawJson && Array.isArray(rawJson.components)) {\n return rawJson.components.map((c: any, i: number) => ({\n id: c.id ?? i + 1,\n title: c.title ?? \"\",\n componentKey: c.componentKey,\n visible: c.visible ?? true,\n order: i + 1,\n props: c.props ?? {},\n apiUrl: c.apiUrl ?? \"\",\n dataMode: c.dataMode,\n variableName: c.variableName,\n manualItems: c.manualItems,\n apiMethod: c.apiMethod,\n apiParams: c.apiParams,\n }));\n }\n\n // Si no matchea nada, retorna vacío\n return [];\n}\n\nexport const LandingComponents: LandingComponentMap = Object.fromEntries(\n Object.entries(Landing).filter(\n ([key, val]) => isSectionName(key) && isComponent(val)\n )\n) as LandingComponentMap;\n\n// Section item model mirrors Firestore persisted structure\nexport type OraculoPageLandingPreviewSection = {\n id: number;\n title: string;\n componentKey: string;\n visible: boolean;\n order: number;\n props?: Record<string, unknown>;\n apiUrl?: string;\n dataMode?: \"url\" | \"manual\";\n variableName?: string;\n manualItems?: { fields: { name: string; type: string; value: string }[] }[];\n variableName2?: string;\n manualItems2?: { fields: { name: string; type: string; value: string }[] }[];\n manualScalarFields?: { name: string; type: string; value: string }[];\n apiMethod?: \"GET\" | \"POST\";\n apiParams?: { id: string; key: string; value: string }[];\n};\n\nexport type OpenMachineFn = (\n machine_name: string,\n provider: any,\n machine: any,\n external_id: any,\n type: any,\n demo: any,\n source: string\n) => void;\n\nexport type OraculoExtras = Array<[string, unknown]>;\n\nconst extrasToObject = (extras?: OraculoExtras): Record<string, unknown> => {\n try {\n return Object.fromEntries(extras ?? []);\n } catch (e) {\n console.warn(\"[oraculo] extras inválidos. Debe ser Array<[string, unknown]>\", extras);\n return {};\n }\n};\n\nconst asComponent = <T,>(val: unknown): T | undefined =>\n typeof val === \"function\" ? (val as T) : undefined;\n\nconst asFn = <T extends Function>(val: unknown): T | undefined =>\n typeof val === \"function\" ? (val as T) : undefined;\n\n/** Payload bruto obtenido por fetch o construido manualmente */\ntype SectionPayload =\n | Record<string, unknown>\n | Array<unknown>\n | null\n | undefined;\n\nexport interface OraculoPageLandingPreviewProps {\n /** Optional override: if provided, renders these sections instead of fetching Firestore */\n sectionsOverride?: OraculoPageLandingPreviewSection[];\n /** Firestore document id (default 'home') */\n docId?: string;\n /** Instancia de Firestore proporcionada por la app que consume el paquete */\n db: Firestore;\n /** Componente que se renderizará mientras carga */\n loader?: React.ComponentType<any>;\n // Optional extras\n extras?: OraculoExtras;\n disableWrapper?: boolean;\n}\n\nclass HttpError extends Error {\n constructor(\n public status: number,\n public url: string,\n public statusText: string\n ) {\n super(`HTTP ${status} ${statusText}`);\n this.name = \"HttpError\";\n }\n}\n\ntype ComponentMap = Record<\n string,\n React.ComponentType<Record<string, unknown>>\n>;\n\nconst noMostrarSinItems = [\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n];\n\nconst OraculoPageLandingPreview: React.FC<OraculoPageLandingPreviewProps> = ({\n sectionsOverride,\n docId = \"home\",\n db,\n extras,\n loader,\n disableWrapper = false,\n}) => {\n const extrasObj = useMemo(() => extrasToObject(extras), [extras]);\n\n const Loader = loader || extrasObj[\"loader\"] as React.ComponentType<any> | undefined;\n\n\n const [sections, setSections] = useState<OraculoPageLandingPreviewSection[]>([]);\n const [loading, setLoading] = useState(false);\n const [sectionDataMap, setSectionDataMap] = useState<\n Record<number, SectionPayload>\n >({});\n const [sectionLoadingMap, setSectionLoadingMap] = useState<\n Record<number, boolean>\n >({});\n const [sectionErrorMap, setSectionErrorMap] = useState<\n Record<number, string>\n >({});\n\n const isDesktop = useMediaQuery(\"(min-width:1024px)\");\n\n // Fetch sections from Firestore unless override provided\n useEffect(() => {\n if (sectionsOverride) return;\n if (!db) {\n console.warn(\"[landing] sin db -> fallback json\");\n setSections(normalizeLandingJsonToSections(LANDING_FALLBACK_JSON));\n return;\n }\n\n const applyFallback = (reason: string, extra?: unknown) => {\n console.warn(\"[landing] FALLBACK:\", reason, extra ?? \"\");\n setSections(normalizeLandingJsonToSections(LANDING_FALLBACK_JSON));\n setLoading(false);\n };\n\n // ✅ prueba rápida sin romper nada:\n if (process.env.NEXT_PUBLIC_LANDING_FORCE_FALLBACK === \"1\") {\n setLoading(true);\n applyFallback(\"forzado por env\");\n return;\n }\n\n setLoading(true);\n\n const unsubscribe = onSnapshot(\n doc(db, \"landings\", docId),\n (snap) => {\n try {\n if (!snap.exists()) {\n applyFallback(`doc landings/${docId} no existe`);\n return;\n }\n\n const rawJson = snap.data();\n const normalized = normalizeLandingJsonToSections(rawJson);\n\n if (!normalized.length) {\n applyFallback(\"JSON inválido o sin secciones normalizables\", rawJson);\n return;\n }\n\n console.log(\"[landing] Firestore OK (json grande):\", rawJson);\n setSections(normalized);\n } catch (e) {\n applyFallback(\"error procesando snapshot\", e);\n } finally {\n setLoading(false);\n }\n },\n (error) => {\n applyFallback(\"error onSnapshot\", error);\n }\n );\n\n return () => unsubscribe();\n }, [sectionsOverride, docId, db]);\n\n useEffect(() => {\n setOraculoExtras(extrasObj);\n return () => clearOraculoExtras();\n }, [extrasObj]);\n\n useEffect(() => {\n // preload all components used in sections\n const effectiveSections = sectionsOverride\n ? sectionsOverride.slice()\n : sections.slice();\n const toLoad = effectiveSections\n .map((s) => s.componentKey)\n .filter((key) => !!key);\n\n if (toLoad.length === 0) return;\n\n }, [sectionsOverride, sections]);\n\n const fetchSectionData = async (\n section: OraculoPageLandingPreviewSection\n ): Promise<SectionPayload> => {\n\n if (noMostrarSinItems.includes(section.componentKey)) {\n return {\n // whatever empty structure your UI expects\n items: [],\n events: [],\n data: {},\n } as SectionPayload;\n }\n\n const rawUrl = (section.apiUrl || \"\").trim();\n if (!rawUrl) return undefined;\n\n const method = section.apiMethod || \"GET\";\n const params = section.apiParams || [];\n\n let url = rawUrl;\n let body: BodyInit | undefined;\n let headers: HeadersInit | undefined;\n\n if (method === \"GET\") {\n const u = new URL(\n rawUrl,\n typeof window == \"undefined\"\n ? \"http://localhost\"\n : window.location.origin\n );\n for (const p of params) {\n if (!p.key) continue;\n u.searchParams.append(p.key, p.value);\n }\n url = u.toString();\n } else {\n // application/x-www-form-urlencoded\n const encoded = new URLSearchParams();\n for (const p of params) {\n if (!p.key) continue;\n // el value se manda tal cual; URLSearchParams se encarga del %7B%22...%7D\n encoded.append(p.key, p.value);\n }\n body = encoded.toString();\n headers = {\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n };\n }\n\n const res = await fetch(url, {\n method,\n headers,\n body,\n });\n\n if (!res.ok) throw new HttpError(res.status, url, res.statusText);\n return res.json();\n };\n\n // Use override if provided\n const effectiveSections = useMemo(\n () => (sectionsOverride ? sectionsOverride.slice() : sections.slice()),\n [sectionsOverride, sections]\n );\n\n const fetchedKeysRef = React.useRef<Set<string>>(new Set());\n\n useEffect(() => {\n const fetchables = effectiveSections\n .map((s) => ({ s, url: (s.apiUrl || \"\").trim() }))\n .filter(({ url }) => !!url);\n\n if (!fetchables.length) return;\n\n for (const { s, url } of fetchables) {\n const key = `${s.id}|${url}`;\n if (fetchedKeysRef.current.has(key)) continue;\n fetchedKeysRef.current.add(key);\n\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: true }));\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: \"\" }));\n\n (async () => {\n try {\n const json = await fetchSectionData(s);\n setSectionDataMap((prev) => ({ ...prev, [s.id]: json }));\n } catch (err: unknown) {\n let message = \"Error desconocido\";\n if (err instanceof HttpError) {\n message = `Error HTTP ${err.status} (${err.statusText}) en ${err.url}`;\n } else if (err instanceof SyntaxError) {\n message = \"Respuesta no es JSON válido\";\n } else if (err instanceof TypeError) {\n message = \"Fallo de red / CORS / conexión\";\n } else if (typeof err === \"string\") {\n message = err.toString();\n }\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: message }));\n } finally {\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: false }));\n }\n })();\n }\n }, [effectiveSections]);\n\n const orderedVisible = useMemo(\n () =>\n effectiveSections\n .filter((s) => s.visible)\n .sort((a, b) => a.order - b.order),\n [effectiveSections]\n );\n\n const toManualArray = (\n items:\n | { fields: { name: string; type: string; value: string }[] }[]\n | undefined\n ): Array<Record<string, unknown>> => {\n if (!Array.isArray(items)) return [];\n return items.map((it) => {\n const obj: Record<string, unknown> = {};\n for (const f of it.fields || []) {\n const t = (f.type || \"string\").toLowerCase();\n if (t === \"number\") {\n const val = String(f.value || \"\").trim();\n if (val !== \"\") {\n const num = Number(val);\n if (!Number.isNaN(num)) {\n obj[f.name] = num;\n }\n }\n } else if (t === \"boolean\")\n obj[f.name] = String(f.value).toLowerCase() === \"true\";\n else if (t === \"function\") {\n const body = String(f.value || \"\").trim();\n if (body) {\n try {\n // ✅ Explicit function type\n const fn = new Function(body) as () => unknown;\n obj[f.name] = fn;\n } catch (e) {\n console.error(`❌ Error creando función en item '${f.name}':`, e);\n }\n }\n } else obj[f.name] = f.value;\n }\n return obj;\n });\n };\n\n const toManualScalars = (\n fields: { name: string; type: string; value: string }[] | undefined\n ): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n if (!Array.isArray(fields)) return out;\n for (const f of fields) {\n if (!f.name) continue;\n const t = (f.type || \"string\").toLowerCase();\n if (t === \"number\") {\n // Si el valor está vacío o es inválido, NO agregar el prop (usar default del componente)\n const val = String(f.value || \"\").trim();\n if (val !== \"\") {\n const num = Number(val);\n if (!Number.isNaN(num)) {\n out[f.name] = num;\n }\n }\n } else if (t === \"boolean\")\n out[f.name] = String(f.value).toLowerCase() === \"true\";\n else if (t === \"function\") {\n const body = String(f.value || \"\").trim();\n if (body) {\n try {\n // ✅ Explicit function type\n const fn = new Function(body) as () => unknown;\n out[f.name] = fn;\n } catch (e) {\n console.error(`❌ Error creando función en item '${f.name}':`, e);\n }\n }\n } else out[f.name] = f.value;\n }\n return out;\n };\n\n const mapPayloadToProps = (\n payload: SectionPayload,\n manual: { arr?: unknown[]; variableName?: string } | null,\n base?: Record<string, unknown>,\n variableName?: string\n ): Record<string, unknown> => {\n const merged: Record<string, unknown> = base ? { ...base } : {};\n const propName = (variableName || \"items\").trim() || \"items\";\n\n if (manual) {\n merged[propName] = manual.arr || [];\n return merged;\n }\n\n const pl = payload;\n\n if (Array.isArray(pl)) {\n merged[propName] = pl;\n return merged;\n }\n\n if (pl && typeof pl === \"object\") {\n const obj = pl as any;\n\n if (Array.isArray(obj.lobby)) {\n merged[propName] = obj.lobby;\n return merged;\n }\n\n if (Array.isArray(obj.items)) {\n merged[propName] = obj.items;\n return merged;\n }\n\n // IMPORTANTE:\n // si no es array y no trae items/lobby, mandar el objeto completo\n // esto permite que personalize reciba { recommendations: [...] }\n merged[propName] = pl;\n return merged;\n }\n\n merged[propName] = [];\n return merged;\n };\n\n const buildCompProps = (\n s: OraculoPageLandingPreviewSection\n ): Record<string, unknown> => {\n const hasUrl = !!s.apiUrl?.trim();\n const payload: SectionPayload = hasUrl ? sectionDataMap[s.id] : undefined;\n let compProps: Record<string, unknown> = s.props ? { ...s.props } : {};\n const scalars = toManualScalars(s.manualScalarFields);\n if (\n noMostrarSinItems.includes(s.componentKey)\n ) {\n //console.log(payload);\n return { items: payload, ...compProps, ...scalars };\n }\n\n compProps = { ...compProps, ...scalars };\n if (hasUrl) compProps = mapPayloadToProps(payload, null, compProps);\n else if (s.dataMode === \"manual\") {\n const arr = toManualArray(s.manualItems);\n compProps = mapPayloadToProps(\n null,\n { arr, variableName: s.variableName },\n compProps\n );\n\n // Si existe variableName2 y manualItems2, agregar también ese prop\n if (s.variableName2 && s.manualItems2) {\n const arr2 = toManualArray(s.manualItems2);\n const varName2 = (s.variableName2 || \"items2\").trim() || \"items2\";\n compProps[varName2] = arr2;\n }\n }\n\n return compProps;\n };\n\n const renderStatusBox = (\n key: number,\n type: \"loading\" | \"error\" | \"component\",\n message: string\n ) => {\n const colorMap: Record<string, string> = {\n loading: \"bg-blue-100 text-blue-800\",\n error: \"bg-red-100 text-red-800\",\n component: \"bg-yellow-100 text-yellow-800\",\n };\n return (\n <div key={key} className={`mx-4 p-4 rounded ${colorMap[type]}`}>\n {message}\n </div>\n );\n };\n\n const renderSingleSection = (s: OraculoPageLandingPreviewSection) => {\n const rawKey = s.componentKey;\n\n const Comp = LandingComponents[rawKey];\n\n if (!Comp) {\n console.warn(`No hay componente registrado para \"${rawKey}\"`);\n return renderStatusBox(\n s.id,\n \"component\",\n `Componente \"${rawKey}\" no encontrado`\n );\n }\n\n const hasUrl = !!s.apiUrl?.trim();\n const payload = hasUrl ? sectionDataMap[s.id] : undefined;\n const loadingSec = hasUrl ? !!sectionLoadingMap[s.id] : false;\n const errorSec = hasUrl ? sectionErrorMap[s.id] : \"\";\n\n if (hasUrl) {\n if (loadingSec && !payload)\n return renderStatusBox(\n s.id,\n \"loading\",\n `Cargando datos desde ${s.apiUrl}...`\n );\n if (errorSec && !payload)\n return renderStatusBox(\n s.id,\n \"error\",\n `Error cargando ${s.apiUrl}: ${errorSec}`\n );\n }\n\n const compProps = buildCompProps(s);\n const fullBleedComponents = new Set([\n \"OraculoSeccionBanners\",\n \"OraculoSeccionBonoBienvenida\",\n \"OraculoSeccionCasinoEnVivo\",\n ...(!isDesktop\n ? [\n \"OraculoSeccionClubOlimpo\",\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n \"OraculoSeccionVirtuales\",\n \"OraculoSeccionDestacados\",\n \"OraculoSeccionCasino\",\n ]\n : []),\n ]);\n const isFullBleed = fullBleedComponents.has(s.componentKey);\n\n const paddingX = isDesktop ? 120 : 24;\n\n const stackGapPx = (isDesktop ? 8 : 5) * 8;\n const isNoStackSpacing = s.componentKey === \"OraculoSeccionCasinoEnVivo\";\n\n const wrapperStyle: React.CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n ...(isFullBleed\n ? {}\n : { paddingLeft: paddingX, paddingRight: paddingX }),\n\n ...(isNoStackSpacing\n ? {\n marginTop: -stackGapPx,\n marginBottom: -stackGapPx,\n }\n : {}),\n };\n\n // if (\n // noMostrarSinItems.includes(s.componentKey)\n // ) {\n // //console.log(payload);\n // return (<Comp key={s.id}{...compProps} />);\n // }\n return (\n <div key={s.id} style={wrapperStyle} className=\"oraculo-section-wrapper\">\n <Comp {...compProps} />\n </div>\n );\n };\n\n /**\n * para testear captura\n useEffect(() => {\n // ✅ Inicializar OlimpoErrorClient con la API configurada\n const sessionProvider: SessionProvider = {\n getUser: () => ({\n user: \"test\",\n email: \"test@latinka.com.pe\",\n alias: \"test\",\n groups: [\n 3,\n 5,\n ]\n })\n };\n \n if (!OlimpoErrorClient.isInitialized()) {\n OlimpoErrorClient.init({\n apiUrl: process.env.NEXT_PUBLIC_OLIMPO_API,\n projectSlug: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_PROJECT_SLUG,\n environmentName: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_ENVIRONMENT_NAME,\n token: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_TOKEN,\n country: process.env.NEXT_PUBLIC_COUNTRY,\n sessionProvider: sessionProvider\n });\n }\n }, []);\n */\n\n if (loading && !sectionsOverride)\n return Loader ? <Loader /> : <div>Cargando...</div>;\n\n if (!loading && !sectionsOverride && sections.length === 0) {\n return (\n <div className=\"text-xs text-gray-500\">Sin secciones (Firestore)</div>\n );\n }\n if (disableWrapper) {\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId}>\n <>\n {orderedVisible.map(renderSingleSection)}\n </>\n </DocIdProvider>\n </OraculoThemeProvider>\n );\n }\n\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId}>\n <Container\n className=\"oli-font\"\n maxWidth={false}\n disableGutters\n sx={{\n backgroundColor: \"#121212\",\n position: \"relative\",\n pb: 5,\n // pt: 5,\n width: \"100%\",\n maxWidth: \"100%\",\n overflowX: \"hidden\",\n }}\n >\n <Stack direction=\"column\" spacing={isDesktop ? 8 : 5} useFlexGap>\n {orderedVisible.map(renderSingleSection)}\n </Stack>\n </Container>\n </DocIdProvider>\n </OraculoThemeProvider>\n );\n};\n\nexport default OraculoPageLandingPreview;\n"],"names":["OraculoButton","children","onClick","href","target","rel","type","disabled","variant","size","fullWidth","fullHeight","className","ariaLabel","leftIcon","rightIcon","iconOnly","hasText","onlyOneIcon","isIconOnly","cls","content","jsxs","Fragment","jsx","ariaDisabled","MuiLink","e","OraculoSectionTitle","title","iconUrl","wrapperClass","OraculoCarouselDots","total","active","onSelect","durationMs","rootClass","seed","setSeed","useState","useEffect","s","_","i","isActive","OraculoGridGroup","minWidth","spacing","justify","columns","gridTemplate","gap","OraculoLogoMediosPago","src","alt","Box","OraculoEventTitle","subtitle","styles","OraculoEventStatusBadge","text","color","textColor","OraculoEventStatus","live","time","OraculoMatchHeader","OraculoEventLabel","OraculoEventLeague","OraculoEventScore","name","OraculoTeamPolo","jersey","base","sleeve","stripes","sleevelong","OraculoEventTeamInfo","Skeleton","useHorizontalWheelSplide","hostRef","splideRef","enabled","threshold","cooldownMs","accRef","useRef","lastNavRef","host","onWheel","splide","deltaX","deltaY","now","direction","Splide","SplideRaw","SplideSlide","SplideSlideRaw","OraculoCarousel","forwardRef","items","renderItem","perPage","breakpoints","options","onMove","useIndexAsKey","enableHorizontalWheel","showRightGradient","ref","wheelHostRef","prevLengthRef","gradientLeftRef","gradientRightRef","useImperativeHandle","_a","index","getVisibleRange","Slides","Controller","track","trackWidth","visibleStart","currentWidth","visibleEnd","slide","hasOverflow","list","handleMove","useCallback","isStart","isEnd","_b","React","lengthChanged","handleResize","handleMounted","mergedOptions","item","OraculoGameCard","imageUrl","fillParent","dim","handleButtonClick","sizeStyles","OraculoGameRankCard","orden","loading","sizes","getVal","k","def","_d","_c","W","H","R","F","hang","OraculoLiveCasinoCard","logo","provider","providerName","machine","Typography","GAP","SkCard","r","OraculoGameSlide","layout","gridSkeletonCount","big","smalls","it","OraculoWelcomeBanner","amount","buttonText","onButtonClick","backgroundImage","symbol","value","isLarge","OraculoClubOlimpoVisual","buttonLabel","imgAlt","imgSrcMobile","imgSrcDesktopBg","imgSrcDesktopLogo","redirectHomeWithOutcomes","url","outcomes","arr","verMasSeccionEnVivo","verMasSeccionSemana","verMasSeccionCombinadas","fetchJerseys","eventIds","useDebouncedValue","delay","debounced","setDebounced","id","DocIdContext","createContext","DocIdProvider","docId","useDocId","context","useContext","OraculoEventCombinadosCard","coupon","captureInteraction","useCaptureInteraction","processCoupon","allOutcomes","uniqueEvents","event","apuestas","homeName","awayName","a","best","line","_e","_f","_g","b","buildUrlFromCoupon","events","firstGroupId","path","p","handleOutcomeClick","totalOdds","eventNames","couponData","o","eventMap","resultTitle","label","outcomesByEvent","acc","Stack","eventId","OraculoButtonBet","DEFAULT_HOME_JERSEY","DEFAULT_AWAY_JERSEY","getTeamJersey","jerseyEvent","side","role","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","defaultOutcomeBase","defaultOutcomes","OraculoEventHeader","_i","_h","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","odds","matchTitle","cuota","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","isLoading","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","sectionClassName","ChevronLeftRounded","ChevronRightRounded","KEY","getStore","g","setOraculoExtras","extrasObj","getOraculoExtra","key","clearOraculoExtras","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","top6","handleOpen","juego","showIframe","loadMachine","getGameId","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","handleOpenLive","RECOMMENDATIONS_URL","mapMachineToGameItem","_j","_k","extractMachineIds","payload","getPersonalizeUserId","user","fetchRecommendations","userId","qs","res","usePersonalizeCasinoItems","isPersonalize","resolvedItems","setResolvedItems","setLoading","cancelled","recommendationsPayload","machineIds","machineResults","machineId","data","parsedItems","result","error","parseBooleanValue","input","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","end","buildLoadingSlides","mkItems","n","OraculoSeccionCasino","onItemClick","personalizeEnabled","currentItems","itm","game","buildVirtualSlides","buildLoadingVirtualSlides","OraculoSeccionVirtuales","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","isMobile","useMediaQuery","showDots","isMounted","isAutoplayRef","activeIndex","setActiveIndex","timer","navRef","wheelLockRef","wheelUnlockTimerRef","activeSlide","sectionSx","handleBannerButtonClick","handleSlideChange","el","THRESHOLD","LOCK_MS","dx","dy","dirNext","renderSlide","desktop","hl1","hl2","OraculoSeccionClubOlimpo","fullBleed","selectedIndex","rootRef","bottomRef","useLayoutEffect","root","bottom","update","ro","extractRowOutcomes","row","mergeEventOffers","eventos","prePackCoupons","rows","outcomeId","outcomeIds","rowIndexByOutcomeId","betOffersByEvent","filteredOutcomes","mergedEvents","evento","kambiDisplayComboFromRows","product","raw","normalized","MemoizedCombinadaCard","OraculoEventCombinadasCard","OraculoSeccionEventoCombinadas","setEvents","SPECIALS_GROUPS_URL","carouselItems","loadDataEventSpecial","listData","groupId","SPECIALS_URL","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","filterFootballEvents","blocked","ev","group","word","MemoizedCard","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","jerseys","setJerseys","visibleRange","setVisibleRange","fetchingRef","orderedEventIds","setOrderedEventIds","orderIdsFetchedRef","orderMapRef","debouncedVisibleRange","fetchedIdsRef","loadData","orderJson","ids","newMap","err","response","filteredEvents","sortedEvents","aIndex","bIndex","interval","BUFFER","from","to","idsToFetch","prev","OraculoEventSemanaCardSkeleton","MemoizedSemanaCard","fetchInBatches","urls","batchSize","signal","results","batch","responses","u","sortEvents","evs","filterEventsWithinOneWeek","oneWeekLater","eventDate","mergeEventOffersOutcome","apuestasByEvent","OraculoSeccionEventoSemana","WEEK_EVENTS_URL","COMMON_QUERY","loadDataWeekEvent","orderedGroupIds","orderResponse","football","groups","orderMap","firstGroups","buildUrls","sub","loadAllGroupEvents","orderEvents","allEvents","allBetOffers","merged","finalEvents","orderedEvents","controller","sectionStyle","OraculoSeccionBanners","backgrounds","hideItems","activeDot","setActiveDot","totalDots","canNavigate","showDock","ARROW_COLOR","arrowSx","carouselOptions","handleBannerClick","bg","bannerName","handleMenuItemClick","autoplayMs","autoplayTimeoutRef","canAutoplay","stopAutoplay","scheduleAutoplay","handleSlideChangeTracking","safe","wasAutoplay","IconButton","DEFAULT_ITEMS","OraculoSeccionMediosPago","split","row1","row2","l","OraculoThemeProvider","outer","useTheme","createTheme","ThemeProvider","CssBaseline","OraculoSectionHost","Landing","LANDING_FALLBACK_JSON","isComponent","val","isSectionName","normalizeLandingJsonToSections","rawJson","c","LandingComponents","extrasToObject","extras","HttpError","status","statusText","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","db","loader","disableWrapper","Loader","sections","setSections","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","applyFallback","reason","extra","unsubscribe","onSnapshot","doc","snap","fetchSectionData","section","rawUrl","method","params","body","headers","encoded","effectiveSections","fetchedKeysRef","fetchables","json","message","orderedVisible","toManualArray","obj","f","t","num","fn","toManualScalars","fields","out","mapPayloadToProps","manual","variableName","propName","pl","buildCompProps","hasUrl","compProps","scalars","arr2","varName2","renderStatusBox","colorMap","renderSingleSection","rawKey","Comp","loadingSec","errorSec","isFullBleed","paddingX","stackGapPx","isNoStackSpacing","wrapperStyle","Container"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/atoms/OraculoButton/OraculoButton.tsx","../src/atoms/OraculoSectionTitle/OraculoSectionTitle.tsx","../src/atoms/OraculoCarouselDots/OraculoCarouselDots.tsx","../src/atoms/OraculoGridGroup/OraculoGridGroup.tsx","../src/atoms/OraculoLogo/OraculoLogoMediosPago.tsx","../src/atoms/OraculoEvent/OraculoEventTitle.tsx","../src/atoms/OraculoEvent/OraculoEventStatusBadge.tsx","../src/atoms/OraculoEvent/OraculoEventStatus.tsx","../src/atoms/OraculoEvent/OraculoEventHeader.tsx","../src/atoms/OraculoEvent/OraculoEventLabel.tsx","../src/atoms/OraculoEvent/OraculoEventLeague.tsx","../src/atoms/OraculoEvent/OraculoEventScore.tsx","../src/atoms/OraculoEvent/OraculoTeamPolo.tsx","../src/atoms/OraculoEvent/OraculoEventTeamInfo.tsx","../src/molecules/OraculoCarousel/useHorizontalWheelSplide.tsx","../src/molecules/OraculoCarousel/OraculoCarousel.tsx","../src/molecules/OraculoGameCard/OraculoGameCard.tsx","../src/molecules/OraculoGameRankCard/OraculoGameRankCard.tsx","../src/molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard.tsx","../src/molecules/OraculoGameSlide/OraculoGameSlide.tsx","../src/molecules/OraculoWelcomeBanner/OraculoWelcomeBanner.tsx","../src/molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual.tsx","../src/atoms/OraculoEvent/KambiOpenBet.tsx","../src/contexts/DocIdContext.tsx","../src/molecules/OraculoEventCard/OraculoEventCombinadasCard.tsx","../src/atoms/OraculoButtonBet/OraculoButtonBet.tsx","../src/atoms/OraculoEvent/KambiJersey.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCard.tsx","../src/atoms/OraculoEvent/OraculoEventDate.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCard.tsx","../src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx","../src/utils/openMachineRegistry.ts","../src/organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos.tsx","../src/organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx","../src/hooks/usePersonalizeCasinoItems.ts","../src/organisms/OraculoSeccionCasino/OraculoSeccionCasino.tsx","../src/organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales.tsx","../src/organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida.tsx","../src/organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.tsx","../src/organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCardSkeleton.tsx","../src/molecules/OraculoEventCard/FadeItemWrapper.tsx","../src/organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCardSkeleton.tsx","../src/organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana.tsx","../src/organisms/OraculoSeccionBanners/OraculoSeccionBanners.tsx","../src/organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago.tsx","../src/theme/OraculoThemeProvider.tsx","../src/templates/OraculoSectionHost.tsx","../src/templates/landingRegistry.ts","../src/config/json_configuration.ts","../src/templates/OraculoPageLandingPreview.tsx"],"sourcesContent":["import React from \"react\";\nimport \"./OraculoButton.css\";\nimport { Link as MuiLink } from \"@mui/material\";\n\nexport interface OraculoButtonProps {\n children?: React.ReactNode;\n onClick?: any;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n rel?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n disabled?: boolean;\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n fullHeight?: boolean;\n className?: string;\n ariaLabel?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n}\n\nexport default function OraculoButton({\n children,\n onClick,\n href,\n target,\n rel,\n type = \"button\",\n disabled = false,\n variant = \"primary\",\n size,\n fullWidth = false,\n fullHeight = false,\n className = \"\",\n ariaLabel,\n leftIcon,\n rightIcon,\n iconOnly,\n}: OraculoButtonProps) {\n const hasText = !!children && children !== true;\n const hasLeft = !!leftIcon;\n const hasRight = !!rightIcon;\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\n\n const cls = [\n \"orc-btn\",\n variant === \"secondary\"\n ? \"orc-btn--secondary\"\n : variant === \"tertiary\"\n ? \"orc-btn--tertiary\"\n : \"orc-btn--primary\",\n size ? `orc-btn--${size}` : \"\",\n fullWidth ? \"orc-btn--full\" : \"\",\n fullHeight ? \"orc-btn--fullHeight\" : \"\",\n isIconOnly ? \"orc-btn--iconOnly\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const content = (\n <>\n {leftIcon && <span className=\"orc-btn__icon\">{leftIcon}</span>}\n {!isIconOnly && <span className=\"orc-btn__label\">{children}</span>}\n {rightIcon && <span className=\"orc-btn__icon\">{rightIcon}</span>}\n </>\n );\n\n const ariaDisabled = disabled ? true : undefined;\n\n if (href) {\n return (\n <MuiLink\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n aria-disabled={ariaDisabled}\n tabIndex={ariaDisabled ? -1 : undefined}\n className={cls}\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\n >\n {content}\n </MuiLink>\n );\n }\n\n return (\n <button\n type={type}\n onClick={onClick}\n disabled={!!ariaDisabled}\n aria-label={ariaLabel}\n className={cls}\n >\n {content}\n </button>\n );\n}\n","import React from \"react\";\nimport \"./OraculoSectionTitle.css\";\n\nexport interface OraculoSectionTitleProps {\n title: string;\n iconUrl?: string;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport default function OraculoSectionTitle({\n title,\n iconUrl,\n size = \"md\",\n className = \"\",\n}: OraculoSectionTitleProps) {\n const sizeClass = size ? `orc-section-title--${size}` : \"\";\n\n const wrapperClass = [\n \"orc-section-title\",\n sizeClass,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={wrapperClass}>\n {iconUrl && (\n <img\n src={iconUrl}\n alt=\"\"\n className=\"orc-section-title__icon\"\n />\n )}\n <h2 className=\"orc-section-title__title\">{title}</h2>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport \"./OraculoCarouselDots.css\";\n\nexport interface OraculoCarouselDotsProps {\n total: number;\n active: number;\n onSelect?: (index: number) => void;\n className?: string;\n\n /** tiempo del autoplay/progreso (ms) */\n durationMs?: number;\n}\n\nconst OraculoCarouselDots: React.FC<OraculoCarouselDotsProps> = ({\n total,\n active,\n onSelect,\n className = \"\",\n durationMs = 5000,\n}) => {\n if (total <= 1) return null;\n\n const rootClass = [\"orc-dots\", className].filter(Boolean).join(\" \");\n\n const [seed, setSeed] = useState(0);\n useEffect(() => {\n setSeed((s) => s + 1);\n }, [active, durationMs]);\n\n return (\n <div className={rootClass} role=\"tablist\" aria-label=\"Carousel pagination\">\n {Array.from({ length: total }).map((_, i) => {\n const isActive = i === active;\n\n return (\n <span key={i} className=\"orc-dots__cell\">\n <button\n key={isActive ? `a-${i}-${seed}` : `i-${i}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={`Ir al slide ${i + 1}`}\n className={\n \"orc-dots__dot\" + (isActive ? \" orc-dots__dot--active\" : \"\")\n }\n style={\n isActive\n ? ({\n [\"--dot-progress-ms\" as any]: `${durationMs}ms`,\n } as React.CSSProperties)\n : undefined\n }\n onClick={() => {\n if (isActive) setSeed((s) => s + 1);\n onSelect?.(i);\n }}\n />\n </span>\n );\n })}\n </div>\n );\n};\n\nexport default OraculoCarouselDots;\n","import React, { ReactNode } from \"react\";\r\n\r\nexport interface OraculoGridGroupProps {\r\n /** Children inside the grid */\r\n children: ReactNode;\r\n\r\n /** Minimum width (in px) for auto-fit columns */\r\n minWidth?: number;\r\n\r\n /** Gap spacing: number → multiplier of 8px, or string → custom CSS value */\r\n spacing?: number | string;\r\n\r\n /** Horizontal alignment of grid items */\r\n justify?: \"start\" | \"center\" | \"end\" | \"stretch\";\r\n\r\n /** Custom grid template definition (overrides auto-fit/minmax behavior) */\r\n columns?: string | null;\r\n}\r\n\r\nexport default function OraculoGridGroup({\r\n children,\r\n minWidth = 32,\r\n spacing = 2,\r\n justify = \"stretch\",\r\n columns = null,\r\n}: OraculoGridGroupProps) {\r\n const gridTemplate = columns\r\n ? columns\r\n : `repeat(auto-fit, minmax(${minWidth}px, 1fr))`;\r\n\r\n const gap = typeof spacing === \"number\" ? `${spacing * 8}px` : spacing;\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: gridTemplate,\r\n justifyItems: justify,\r\n gap,\r\n height: \"inherit\",\r\n }}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","import { Box } from \"@mui/material\";\nimport React from \"react\";\n\n\nexport type Logo = { src: string; alt: string };\n\nexport default function OraculoLogoMediosPago({ src, alt }: Logo) {\n return (\n <Box\n sx={{\n position: \"relative\",\n width: { xs: 65, sm: 80, md: 120, lg: 160 }, // 65 en móvil, 80 en desktop\n height: { xs: 48, md: 96 }, // 48 en móvil, 96 en desktop\n display: \"inline-block\",\n }}\n >\n <Box\n component=\"img\"\n src={src}\n alt={alt}\n sx={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n }}\n />\n </Box>\n );\n}\n","import React from \"react\";\r\nimport styles from \"./OraculoEventTitle.module.css\";\r\n\r\ninterface OraculoEventTitleProps {\r\n title: string;\r\n subtitle?: string;\r\n}\r\n\r\nexport default function OraculoEventTitle({ title, subtitle }: OraculoEventTitleProps) {\r\n return (\r\n <div\r\n className={styles.contenedor}\r\n >\r\n <span\r\n style={{\r\n fontWeight: 700,\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n }}\r\n >\r\n {title}\r\n </span>\r\n\r\n {subtitle && (\r\n <div\r\n className={styles.flexGroup}\r\n >\r\n <svg width=\"4\"height=\"4\"viewBox=\"0 0 5 5\"xmlns=\"http://www.w3.org/2000/svg\"style={{ flexShrink: 0 }}> <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"white\" /> </svg>\r\n <span className={styles.subtitle}>\r\n {subtitle}\r\n </span>\r\n <div></div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n\r\n","import React from \"react\";\r\n\r\nexport interface OraculoEventStatusBadgeProps {\r\n /** Text inside the badge */\r\n text: string;\r\n\r\n /** Background color of the badge */\r\n color?: string;\r\n\r\n /** Text color */\r\n textColor?: string;\r\n}\r\n\r\nexport default function OraculoEventStatusBadge({ text, color = \"#ff3b3b\", textColor = \"#fff\" } : OraculoEventStatusBadgeProps) {\r\n return (\r\n <span\r\n className=\"oli-font\"\r\n style={{\r\n backgroundColor: color,\r\n color: textColor,\r\n borderRadius: \"8px\",\r\n padding: \"4px 8px\",\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n fontWeight: 700,\r\n width : '42px',\r\n height : '16px',\r\n textAlign: 'center',\r\n }}\r\n >\r\n {text}\r\n </span>\r\n );\r\n}","import React from \"react\";\r\nimport OraculoEventStatusBadge from \"./OraculoEventStatusBadge\";\r\n\r\nexport interface OraculoEventStatusProps {\r\n live?: boolean;\r\n time?: string;\r\n}\r\n\r\nexport default function OraculoEventStatus({ live, time } : OraculoEventStatusProps) {\r\n return (\r\n <div className=\"oli-font\" style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\r\n {live && <OraculoEventStatusBadge text=\"En vivo\" />}\r\n {time && <span style={{ fontSize: \"14px\", fontWeight: 400, lineHeight: '18px', paddingTop: '4px' }}>{time}</span>}\r\n </div>\r\n );\r\n}","import React from \"react\";\r\nimport OraculoEventTitle from \"./OraculoEventTitle\";\r\nimport OraculoEventStatus from \"./OraculoEventStatus\";\r\n\r\nexport interface OraculoMatchHeaderProps {\r\n title: string;\r\n subtitle?: string;\r\n live?: boolean;\r\n time?: string;\r\n}\r\n\r\nexport default function OraculoMatchHeader({ title, subtitle, live = false, time = \"\" } : OraculoMatchHeaderProps) {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n color: '#FFFFFF'\r\n }}\r\n >\r\n <OraculoEventTitle title={title} subtitle={subtitle} />\r\n <OraculoEventStatus live={live} time={time} />\r\n </div>\r\n );\r\n}","import React from \"react\";\r\nimport styles from \"./OraculoEventLabel.module.css\";\r\ninterface OraculoEventLabelProps {\r\n text: string;\r\n}\r\nexport default function OraculoEventLabel({ text } : OraculoEventLabelProps) {\r\n return <span className={styles.label}>{text}</span>;\r\n}","import React from \"react\";\r\nimport styles from \"./OraculoEventLeague.module.css\";\r\ninterface EventLeague {\r\n title: string;\r\n}\r\nexport default function OraculoEventLeague({ title } : EventLeague) {\r\n return (\r\n <div className={styles.container}>\r\n {title.toUpperCase()}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./OraculoEventScore.module.css\";\r\n\r\nexport interface OraculoEventScoreProps {\r\n text: string | number;\r\n\r\n name?: string;\r\n\r\n size?: \"normal\" | \"small\";\r\n}\r\n\r\nexport default function OraculoEventScore({ text, name, size = \"normal\" } : OraculoEventScoreProps) {\r\n return (\r\n <div\r\n className={`${styles.scoreWrapper} ${styles[size]}`}\r\n >\r\n <div className={`${styles.score} ${styles[size]}`}>{text}</div>\r\n {name && <span className={`${styles.name} ${styles[size]}`}>{name}</span>}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./OraculoTeamPolo.module.css\";\r\n\r\ninterface JerseyPlayer {\r\n base: string;\r\n sleeve?: string; // optional\r\n stripes?: string;\r\n sleevelong?: string;\r\n real?: boolean;\r\n}\r\n\r\nexport default function OraculoTeamPolo({ jersey, className }: { jersey: JerseyPlayer, className?:string }) {\r\nconst base = `#${jersey.base}`;\r\nconst sleeve = jersey.sleeve ? `#${jersey.sleeve}` : base;\r\nconst stripes = jersey.stripes ? `#${jersey.stripes}` : null;\r\nconst sleevelong = jersey.sleevelong ? `#${jersey.sleevelong}` : null;\r\n\r\n return (\r\n <div className={`${styles.polo} ${className ?? \"\"}`}>\r\n {/* BODY */}\r\n <div className={styles.svgWrapper}>\r\n <svg viewBox=\"0 0 656 656\" aria-hidden>\r\n {/* BASE / BODY */}\r\n <path\r\n fill={base}\r\n d=\"m62 265 5.8-17c-.4-.7-.6-1.5-.4-2 .2-.7.8-1.2 1.2-1.4l1.2-4 9-21.6c.2-1 1-3.5 2.4-6.4a69.9 69.9 0 0 1 4.1-17.2l2.9-7 2.9-11.4c1.7-5.8 5.2-18.4 5.8-22 .6-3.6 6.8-19 9.8-26.2.4-.9 2.4-4.7 7.2-12.8 5.4-12.2 23.5-27.2 32-33.1l6.6-3.7 7.9-3.6 17.3-6.2 16.6-7.1L215 52c7-4.1 21.8-12.5 24.1-13.2 2.3-.8 5-3.5 6-4.7 1.2-1.2 4.2-3.8 6.6-4.7 2.3-1 8.2-6.8 10.8-9.6 1.6-1.4 3.8-4.7 9.2-7.5 5.3-2.9 20.4-4 27.2-4.3h25.6l16.7.3 14.1.6 10.3.7 9.5 1.7c6.4.6 12.6 4.3 15.4 8l2.7 3.1 8.9 8 1.8.7 4.9 3 2.7 3.5c4.2 2.2 13.1 7.1 15.2 8.7 2 1.6 30.1 15.4 44 22 8 3.2 39 12.3 55.3 30 5.2 4.3 7 7.8 11.4 12.4 5.1 5.3 15.1 29 16.9 32 1.4 2.6 5 17 6.8 24l4.8 20.5 8.4 29 8.9 22.7 2.3 5.4.6 1.5c.5.6 1.4 2 1 2.6-.2.6 0 2 .2 2.7l1 2.6 2 5.8 2.2 5.9c.3 1.3-4.3 4-6.6 5.2l-11.1 5-12.6 4.7-15 5-14.6 4.6-10.9 2.4a66 66 0 0 1-8.6 1.4c-3.4.3-4.7-.4-4.9-.8l-5-12.3-1.9-3.8-1.8-1.6.1-.8v-1l-.4-1.8-1.3-4.1-3.3-9-1.3-2-2.2-5.7-2.5-.3-1 .8v2l-2.7 13.1-8.7 58-.9 6.4-.2 7.9c0 3-1 16-1.7 18.3l-2.5 9-.2 7.6-.3 8.7-.3 7.5.3 4 .5 15c.3 1.9-.6 7-1.1 9.3-.6 2.4-1.6 7.5-1.4 8.8.3 1.4-.2 4.4-.5 5.8l-1.3 8.9c-.2 1.4-.8 5-1.3 7.2.7 1.6 4.7 14.6 5.9 17.8 1.2 3.3 4.8 19.4 5 20.7.3 1 1.1 7.8 1.5 11 .1 2.5.3 8 .2 10 0 2-.8 6.6-1.1 8.6-.2 1.7-.7 5.5-1.2 7s-1.2 8.5-1.4 11.8A81.1 81.1 0 0 1 477 552l.3 7.1.2 6.5 1.4 17.7.5 6 1.5 7.7.4 4.6c.3 2.1.7 7 .7 10.1.3 3-2.5 6-4 7 0 .2-1.2 1-4.6 3-6.4 5-26.3 11.6-35.5 14.3a379.2 379.2 0 0 1-58.6 11.2c-2.3.8-27 2.2-39 2.7-8.3 0-27 0-34.5-.4-11.5.9-47.4-4.8-63.9-7.7-6.3-.9-42.1-10.4-48-14.4-3.7-2.4-14.3-8-16.9-9.7a10.7 10.7 0 0 1-4.1-5.4c-.3-1 .1-8.6.4-12.3l.6-5 1.4-9.6 1-8 .3-4.3-.4-7.7-1-10.8v-13.8l.7-10 1.1-7.7 1.8-8 2.8-9.5 3.3-9.3a78 78 0 0 1-2.5-20.8 1112.2 1112.2 0 0 1 .6-14.1c-.1-.7 2.1-10.2 3.3-15l1-3.8-.1-.8c-1.4-8.3-1.5-14-1.9-15.4a78 78 0 0 1 .4-10.9l2-6.7.4-2-.4-1.5a67.6 67.6 0 0 1-7.3-27l-.2-7.7.5-5.4.3-1.5.4-3.9.7-5 .2-2.2-.2-.4-.3-6-1-3.1-.3-4-.7-7.6-1.5-8.3-.8-4.2-1.4-9.2-.4-4.3L172 279l-2.2-14.6a545 545 0 0 1-1.7-8.5c-.1-1-2-2.1-3-2.6 0 .6-.6 1.5-1.7 2-1.2.7-2.4 1.3-2.7 2.2l-.8 4.7a15 15 0 0 1-2.5 4.1 16.4 16.4 0 0 0-2.6 6.3l-.3 2.4v1.3l-1.4 1.1-.3.3-6 14.5c-.7 2.3-1.3 1.8-1.9 1.5l-10.5-3.1-9-3-18.3-6-20-6.8-13-4.8c-2.1-1-7-3-9.4-3.8-2.5-.8-3-1.3-2.8-1.4Z\"\r\n />\r\n\r\n {stripes && (\r\n <>\r\n <path fill={stripes} d=\"m153 277.8-5.8 14.5c-1 2.8-2.5 1.4-4.6.7l-2-.5-7.8-2.4-15.6-5-19-6.5-16-5.7-12-4.4-5.5-2.2c-3.5-1.1-3.1-1.2-1.9-4l1.8-4.9 3.2-9.3c-1.1-1.9 0-3.1.8-3.5l.2-.7.5-2 4.3-10.3 2.4-6 2.6-6.2.8-2.6 1.7-4.1v-.4l.3-2.6.6-3.4 1-3.5 1-3.8c.1-.9 2-5.6 3-7.8l.7-1.5.7-2 .9-3.6 3.4-12.6 2.4-8.6 2.7-11.2 3.5-9.6 3.6-9.4 3-6 2-4.1 3.6-5.8 2.2-4.3 3-4.4 3.2-3.9 1.7-1.9 3.6-3.6 3-2.9a109.3 109.3 0 0 1 13.3-11.2l1.2-.8a79.3 79.3 0 0 1 18-9l11.4-4.2 4-1.4 6.3-2.7 3.3-1.4 2.8-1.2 4-1.6 3.9-2.1 10.1-5 4.8-2.4 5.7-3.2 13.8-7.7c1.5-.8 4.7-2.7 6-3a8.5 8.5 0 0 0 3-1.8c3.4-2.5 4.5-4.8 6-5.3.4-.4 2-1.6 5.2-3.2-4.4 3.3-3.2 11-2.1 14.6a77 77 0 0 0 8.7 18.8l-.6.4-3.9 2-9 5-6.6 3.7-10 3.2c-4.3.8-13.2 2.4-14.4 2.8-1.2.3-10.2 4-14.5 5.8l-11.8 5.6-8.8 3.2-12 3.4-19 8.7c-5.8 1.4-19.3 14.2-25.3 20.4L122 128l.3.4 6.6 16.6 10.5 22.6 6.2 10.8c2.9 3 8.7 9.7 9.1 11.7.5 2 4.3 5.1 6.1 6.5.2.8.8 3.1 1.7 5.4-3.2 4.8-.4 10.6 1.4 12.9l1 4.6.3 6.5-.5 1c-1.4 1.4-.3 4 .4 5l.1 3c.5 1.4 1.3 4.2.8 5.2s0 2.7.3 3.4v4.9c-3.1.5-2 3.7-1 5.2-.5.7-1.8 2.2-3.2 2.7-1.4.5-1.8 3.6-1.8 5.2a9 9 0 0 1-2.7 4.7c-1.8 1.6-2.8 7.4-3 10.1l-1.6 1.5ZM403.8 31.1l-1.6-.7c1.2 1 2 2.2 2.8 4 1.8 2.8.6 8-.7 12.2a78 78 0 0 1-7.6 17l.5.2 3.3 1.5 5.4 3.3 5.9 3 7.2 3 8.2 2.2c.7.2 3.3 1 8.4 2 5.5.1 21.1 8 28.2 11.8l14 4.5a517 517 0 0 1 23.8 9.3c6.3.5 24.7 17 33.1 25.2l-4.6 11.6-8.2 19.3-3.8 9-5.2 8.6c-2.2 3.2-7.3 10.2-9.4 12.4-1.3-.3-5.6 4.4-7.6 6.7.3 2 .6 6.7-1.4 9.1-2 2.5-1.8 6.9-1.4 8.7.3.8.5 3-1 5.3-1.4 2.4-1 4-.5 4.5-.2.8-.7 2.5-1.4 3.4-.8.8-.4 3.3 0 4.5l.1 3-.1 2.2c-.2.6-.6 2.6-1.1 6.2 3.6 3.3 1.3 5.7-.3 6.5l2.2.3 1.3 2.7 1.5 3.8 1.1 2.3 2.7 7.1 1.6 4.8.3 2.1v1.6l1.9 1.9 4 8.9 1.8 4.5c.5 4 5.5 3.6 8 3l5.9-1.1 7.3-1.7 5.2-1.2 7.3-2.1 8.3-2.7 7.5-2.5 9.8-3.6 8-3 6.3-2.8 3.4-1.6 3-1.3 2.5-1.6 1-.8c1.9-1 2-2.1 1.6-2.9l-.6-1.7-1-2.7-1.6-4.2-1.4-4-.5-1.4-.1-.7v-1.2c.7-1-.4-2.5-1-3v-.2l-1-2-2.4-6-3.3-8.3-2.3-6a3896.4 3896.4 0 0 0-3.1-8.4l-2.2-7.1-1.5-5.7-2.5-8.9-1-3.1-1.2-4.5-2-8.2-2.2-9.3-2.8-11.4-2.6-9.1-.9-3c0-.3-.6-1.5-1-2l-2.5-5.6-3-6.6-5.7-11.3-2.5-4.3-2.3-3.3-.7-.7-4.3-5-3-3.8a73 73 0 0 0-4.2-3.8c-1.1-2-7.6-7-10.8-9.4-6.2-5-23.4-12.8-34-16.7l-11-4-16-7.9-20.1-10-7.1-3.8-2.4-1.5-13-7.3-2.6-3.4-5-3Z\" />\r\n <path fill={stripes} d=\"M292.1 648.8c-15.7-1.4-37.7-5-49.7-7.1-4.3-.6-22.6-5.3-35.5-9.5 1.5-10 3-21 4.3-32.7 7-60.5 4.8-132.8 3.1-185.6l-.9-32c-1-49-2.4-83.5-3.6-112-1.2-29-2.1-51.7-2.1-77 0-29 2.9-77.3 5.3-112.9l2.6-1c1.3-.3 10.1-2 14.4-2.7l10-3.2 6.6-3.7 9-5 4-2 .5-.3c1.2 2 2.6 4.1 3.4 4.8l6.1 7.8 15 14.6 4.8 4c-.6 26.4-1.1 60.6-1.1 100.1 0 59.3 1.1 82.6 2.7 114.6.9 18.8 2 40.7 3 74.9 1.5 48.3.8 98.4 0 148.6l-.8 68.3c0 13-.6 32.8-1.1 49Zm157.5-16.4-11.2 3.6a379.2 379.2 0 0 1-67 12c.2-11 .3-25.6.3-44.6 0-49.2-1.2-74.9-2.4-99.5-1.3-27.2-2.5-53-2-107.5.6-50.4 1.7-81.5 2.6-109.3 1-29.3 1.8-54.9 1.8-95.6 0-35.5-.6-70.6-1.2-98.6l3.6-3 5.3-5.1 3.5-3.6 3.5-3.4 4-5 4.2-5.3 2.7-4 .5.3 3.2 1.5 5.5 3.3 5.8 3 7.3 3 8.1 2.2c.7.2 3.3 1 8.4 2 2.4 0 6.5 1.5 11 3.4 2.6 29 5.2 68 5.2 107.8 0 41.5-1.6 70.2-3.2 102-1.6 28.7-3.3 60-4 105.6-.7 41.1.4 82.5 1.4 124.4.7 25.7 1.4 51.6 1.6 77.8a435 435 0 0 0 1.5 32.6Z\" />\r\n </>\r\n )}\r\n\r\n {sleevelong && (\r\n <>\r\n <path fill={sleevelong} d=\"m153 277.8-5.8 14.5c-1 2.8-2.5 1.4-4.6.7l-2-.5-7.8-2.4-15.6-5-19-6.5-16-5.7-12-4.4-5.5-2.2c-3.5-1.1-3.1-1.2-1.9-4l1.8-4.9 3.2-9.3c-1.1-1.9 0-3.1.8-3.5l.2-.7.5-2 4.3-10.3 2.4-6 2.6-6.2.8-2.6 1.7-4.1v-.4l.3-2.6.6-3.4 1-3.5 1-3.8c.1-.9 2-5.6 3-7.8l.7-1.5.7-2 .9-3.6 3.4-12.6 2.4-8.6 2.7-11.2 3.5-9.6 3.6-9.4 3-6 2-4.1 3.6-5.8 2.2-4.3 3-4.4 3.2-3.9 1.7-1.9 3.6-3.6 3-2.9a109.3 109.3 0 0 1 13.3-11.2l1.2-.8a79.3 79.3 0 0 1 18-9l11.4-4.2 4-1.4 6.3-2.7 3.3-1.4 2.8-1.2 4-1.6 3.9-2.1 10.1-5 4.8-2.4 5.7-3.2 13.8-7.7c1.5-.8 4.7-2.7 6-3a8.5 8.5 0 0 0 3-1.8c3.4-2.5 4.5-4.8 6-5.3.4-.4 2-1.6 5.2-3.2-4.4 3.3-3.2 11-2.1 14.6a77 77 0 0 0 8.7 18.8l-.6.4-3.9 2-9 5-6.6 3.7-10 3.2c-4.3.8-13.2 2.4-14.4 2.8-1.2.3-10.2 4-14.5 5.8l-11.8 5.6-8.8 3.2-12 3.4-19 8.7c-5.8 1.4-19.3 14.2-25.3 20.4L122 128l.3.4 6.6 16.6 10.5 22.6 6.2 10.8c2.9 3 8.7 9.7 9.1 11.7.5 2 4.3 5.1 6.1 6.5.2.8.8 3.1 1.7 5.4-3.2 4.8-.4 10.6 1.4 12.9l1 4.6.3 6.5-.5 1c-1.4 1.4-.3 4 .4 5l.1 3c.5 1.4 1.3 4.2.8 5.2s0 2.7.3 3.4v4.9c-3.1.5-2 3.7-1 5.2-.5.7-1.8 2.2-3.2 2.7-1.4.5-1.8 3.6-1.8 5.2a9 9 0 0 1-2.7 4.7c-1.8 1.6-2.8 7.4-3 10.1l-1.6 1.5ZM403.8 31.1l-1.6-.7c1.2 1 2 2.2 2.8 4 1.8 2.8.6 8-.7 12.2a78 78 0 0 1-7.6 17l.5.2 3.3 1.5 5.4 3.3 5.9 3 7.2 3 8.2 2.2c.7.2 3.3 1 8.4 2 5.5.1 21.1 8 28.2 11.8l14 4.5a517 517 0 0 1 23.8 9.3c6.3.5 24.7 17 33.1 25.2l-4.6 11.6-8.2 19.3-3.8 9-5.2 8.6c-2.2 3.2-7.3 10.2-9.4 12.4-1.3-.3-5.6 4.4-7.6 6.7.3 2 .6 6.7-1.4 9.1-2 2.5-1.8 6.9-1.4 8.7.3.8.5 3-1 5.3-1.4 2.4-1 4-.5 4.5-.2.8-.7 2.5-1.4 3.4-.8.8-.4 3.3 0 4.5l.1 3-.1 2.2c-.2.6-.6 2.6-1.1 6.2 3.6 3.3 1.3 5.7-.3 6.5l2.2.3 1.3 2.7 1.5 3.8 1.1 2.3 2.7 7.1 1.6 4.8.3 2.1v1.6l1.9 1.9 4 8.9 1.8 4.5c.5 4 5.5 3.6 8 3l5.9-1.1 7.3-1.7 5.2-1.2 7.3-2.1 8.3-2.7 7.5-2.5 9.8-3.6 8-3 6.3-2.8 3.4-1.6 3-1.3 2.5-1.6 1-.8c1.9-1 2-2.1 1.6-2.9l-.6-1.7-1-2.7-1.6-4.2-1.4-4-.5-1.4-.1-.7v-1.2c.7-1-.4-2.5-1-3v-.2l-1-2-2.4-6-3.3-8.3-2.3-6a3896.4 3896.4 0 0 0-3.1-8.4l-2.2-7.1-1.5-5.7-2.5-8.9-1-3.1-1.2-4.5-2-8.2-2.2-9.3-2.8-11.4-2.6-9.1-.9-3c0-.3-.6-1.5-1-2l-2.5-5.6-3-6.6-5.7-11.3-2.5-4.3-2.3-3.3-.7-.7-4.3-5-3-3.8a73 73 0 0 0-4.2-3.8c-1.1-2-7.6-7-10.8-9.4-6.2-5-23.4-12.8-34-16.7l-11-4-16-7.9-20.1-10-7.1-3.8-2.4-1.5-13-7.3-2.6-3.4-5-3Z\" />\r\n </>\r\n )}\r\n\r\n {/* COLLAR */}\r\n <path\r\n fill={sleeve}\r\n fillRule=\"evenodd\"\r\n d=\"m262.9 19.6-3.7 3.8-3.5 3.3-2.7 2.1c-2 1.6-5 5.7-1 17.1 4 9.8 5.2 12 5.3 11.9 1.4 2.5 4.4 7.9 5.9 9.1l6 7.8 15 14.6 10.5 8.7 12.6 11.3 8.3 6.2 7.6.6 17 .8 9.2-6.6 7-5.6 10.3-9 7-5.7 5.3-5.2 3.6-3.6 3.4-3.4 4.2-5 4-5.3 2.7-4C403.5 53 407 40 406 37.3c0-1.3-.9-4.6-3.9-7.2A129 129 0 0 1 391.2 20c-.8-1.1-4.2-4.3-7.3-6a52 52 0 0 0-15.3-3.9L353.5 9l-10.2-.4-15.4-.4H301.6c-4.6.2-14.6.6-17.2 1.2l-3.4.6c-3.2.5-6.9 1-8.4 2l-1.4.8c-1.5.7-2.8 1.4-5 3.7l-3.3 3.2Zm4.3 14 1.9 5.5 4.6 8.2 5 6.7 5.3 6.6 11 10.7 10.8 9.8 12.8 11.7 7.4 7 3 3 15-13.3 16.7-15.7 6.7-6.2 6-6.6a104.1 104.1 0 0 0 13.8-19.6c1-1.9 1.8-4.5 2-5.6 2.7-7.9 1.4-13.8-1.5-17.8-4-5.2-14.9-6.6-18.5-7.1h-.7c-13.8-1.9-39.8-2-46-1.9-9-.2-28.1.2-32.5.7-.6 0-1.2 0-1.9.2-6.8.6-19.9 1.9-22.6 10.6a22.6 22.6 0 0 0 .9 10.3l.8 2.9Z\"\r\n />\r\n\r\n {/* LEFT SLEEVE */}\r\n <path\r\n fill={sleeve}\r\n d=\"m74.8 250.8-6.8-2.7-.3.7-3 8.7-2 5.7c-1 2.2-.5 1.9.1 2.3l2.2 1 8.8 3.3 10.4 3.8 10.7 3.8 14.3 4.8 13 4.3 7 2.3 13.8 4.3c2.2.7 3 1.4 3.8 0l6.3-15.6-4.6-1.8a88 88 0 0 1-9.4-3c-.8-.6-11.8-3.7-17.3-5.4l-7-2.4-13-4.3c-3.2-1.3-9.9-3.8-11-4-1.2-.2-11-3.8-16-5.8Z\"\r\n />\r\n\r\n {/* RIGHT SLEEVE */}\r\n <path\r\n fill={sleeve}\r\n d=\"m505 284.5-3.5-7.5c.2-.2 1.2-.4 3 0 1.6.4 11.3-1.7 16-2.7l22.5-6.6 13.7-4.5 16.8-6.7a90 90 0 0 0 13.7-7.7v1l.6 2 1.9 5.5 2.9 7.8c.6 1.6-5.5 4.8-8.6 6.3l-17 7.2-15.3 5.4-13 4.2-13 3.3-9.9 2c-6.8 1.2-7.2-.4-8-2l-2.7-7Z\"\r\n />\r\n\r\n </svg>\r\n\r\n \r\n </div>\r\n\r\n {/* SHADOW */}\r\n <img\r\n src=\"https://widgets.sir.sportradar.com/assets/media/shadow.7a42eb6e.png\"\r\n className={styles.shadow}\r\n alt=\"\"\r\n aria-hidden\r\n />\r\n\r\n {/* HIGHLIGHT */}\r\n <img\r\n src=\"https://widgets.sir.sportradar.com/assets/media/highlight.b1ac6c3e.png\"\r\n className={styles.highlight}\r\n alt=\"\"\r\n aria-hidden\r\n />\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./OraculoEventTeamInfo.module.css\";\r\nimport OraculoTeamPolo from \"./OraculoTeamPolo\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport { Jersey } from \"../../atoms/OraculoEvent/KambiJersey\";\r\n\r\nexport interface OraculoEventTeamInfoProps {\r\n name: string;\r\n jersey?: Jersey | null; \r\n size?: \"regular\" | \"compact\";\r\n}\r\n\r\n\r\nexport default function OraculoEventTeamInfo({ name, jersey , size = \"regular\" } : OraculoEventTeamInfoProps) {\r\n return (\r\n <div className={`oli-font ${styles.team} ${styles[size]}`}>\r\n {jersey?.base ? (\r\n <OraculoTeamPolo\r\n jersey={jersey} className={`${styles.logo}`}\r\n />\r\n ) : (\r\n <Skeleton variant=\"circular\" className={`${styles.logo} ${styles.skeleton}`} />\r\n )}\r\n <span className={styles.name}>{name}</span>\r\n </div>\r\n );\r\n}","import { useEffect, useRef } from \"react\";\r\n\r\nexport function useHorizontalWheelSplide(\r\n hostRef: React.RefObject<HTMLElement>,\r\n splideRef: React.RefObject<any>,\r\n {\r\n enabled = true,\r\n threshold = 60,\r\n cooldownMs = 500,\r\n }: { enabled?: boolean; threshold?: number; cooldownMs?: number } = {}\r\n) {\r\n const accRef = useRef(0);\r\n const lastNavRef = useRef(0);\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const host = hostRef.current;\r\n if (!host) return;\r\n\r\n const onWheel = (e: WheelEvent) => {\r\n const splide = splideRef.current;\r\n if (!splide || !splide.go) return;\r\n\r\n const { deltaX, deltaY } = e;\r\n\r\n if (Math.abs(deltaX) <= Math.abs(deltaY)) return;\r\n\r\n e.preventDefault();\r\n\r\n accRef.current += deltaX;\r\n\r\n const now = Date.now();\r\n if (now - lastNavRef.current < cooldownMs) return;\r\n\r\n if (Math.abs(accRef.current) < threshold) return;\r\n\r\n const direction = accRef.current > 0 ? \">\" : \"<\";\r\n\r\n // reset acumulador y navega 1 vez\r\n accRef.current = 0;\r\n lastNavRef.current = now;\r\n\r\n splide.go(direction);\r\n };\r\n\r\n host.addEventListener(\"wheel\", onWheel, { passive: false });\r\n\r\n return () => {\r\n host.removeEventListener(\"wheel\", onWheel);\r\n accRef.current = 0;\r\n };\r\n }, [enabled, threshold, cooldownMs, hostRef, splideRef]);\r\n}\r\n","// src/molecules/OraculoCarousel/OraculoCarousel.tsx\nimport React, {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n ReactNode,\n} from \"react\";\nimport {\n Splide as SplideRaw,\n SplideSlide as SplideSlideRaw,\n} from \"@splidejs/react-splide\";\n\nimport { useHorizontalWheelSplide } from \"./useHorizontalWheelSplide\";\nimport styles from \"./OraculoCarousel.module.css\";\n\nexport interface OraculoCarouselOptions {\n type?: string;\n perPage?: number;\n gap?: string;\n pagination?: boolean;\n arrows?: boolean;\n drag?: boolean;\n focus?: string | \"center\";\n autoWidth?: boolean;\n trimSpace?: any;\n rewind?: boolean;\n padding?: { left?: string; right?: string };\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\n [key: string]: any;\n}\n\nexport interface OraculoCarouselRef {\n next: () => void;\n prev: () => void;\n go: (index: number | string) => void;\n}\n\nexport interface OraculoCarouselProps<T = any> {\n items: T[];\n renderItem: (item: T, index: number) => ReactNode;\n perPage?: number;\n gap?: string;\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\n options?: OraculoCarouselOptions;\n className?: string;\n useIndexAsKey?: boolean;\n onMove?: (info: {\n index: number;\n isStart: boolean;\n isEnd: boolean;\n total: number;\n visibleEnd: number;\n visibleStart: number;\n }) => void;\n enableHorizontalWheel?: boolean;\n showRightGradient?: boolean;\n}\n\n// 👇 Aislamos tipos de Splide: internamente es any, hacia afuera tu API está tipada\nconst Splide: any = SplideRaw;\nconst SplideSlide: any = SplideSlideRaw;\n\nconst OraculoCarousel = forwardRef<OraculoCarouselRef, OraculoCarouselProps<any>>(\n (\n {\n items = [],\n renderItem,\n perPage = 1,\n gap = \"0px\",\n breakpoints,\n options = {},\n className = \"\",\n onMove,\n useIndexAsKey = false,\n enableHorizontalWheel = true,\n showRightGradient = false,\n },\n ref\n ) => {\n const splideRef = useRef<any>(null);\n const wheelHostRef = useRef<HTMLDivElement>(null);\n const prevLengthRef = useRef(items.length);\n const gradientLeftRef = useRef<HTMLDivElement>(null);\n const gradientRightRef = useRef<HTMLDivElement>(null);\n useHorizontalWheelSplide(wheelHostRef, splideRef, {\n enabled: enableHorizontalWheel,\n });\n useImperativeHandle(ref, () => ({\n next: () => splideRef.current?.go(\">\"),\n prev: () => splideRef.current?.go(\"<\"),\n go: (index) => splideRef.current?.go(index),\n }));\n\n const getVisibleRange = (splide: any) => {\n const Slides = splide.Components.Slides;\n const Controller = splide.Components.Controller;\n const track = splide.root.querySelector(\".splide__track\");\n\n const trackWidth = track?.clientWidth ?? 0;\n const visibleStart = Controller.getIndex();\n const total = Slides.getLength();\n\n let currentWidth = 0;\n let visibleEnd = visibleStart;\n\n for (let i = visibleStart; i < total; i++) {\n const slide = Slides.getAt(i);\n if (!slide) break;\n\n // use offsetWidth (cheaper than getBoundingClientRect)\n currentWidth += slide.slide.offsetWidth;\n\n if (currentWidth > trackWidth) break;\n visibleEnd = i;\n }\n\n return { visibleStart, visibleEnd };\n };\n const hasOverflow = (splide: any) => {\n const track = splide.root.querySelector(\".splide__track\");\n const list = splide.root.querySelector(\".splide__list\");\n\n if (!track || !list) return false;\n\n return list.scrollWidth > track.clientWidth + 1;\n };\n\n const handleMove = useCallback((splide: any) => {\n const slides = splide.Components.Slides;\n const total = slides.getLength();\n\n // NO SCROLL POSSIBLE\n if (!hasOverflow(splide)) {\n onMove?.({\n index: 0,\n isStart: true,\n isEnd: true,\n total,\n visibleStart: 0,\n visibleEnd: total - 1,\n });\n return;\n }\n\n const { visibleStart, visibleEnd } = getVisibleRange(splide);\n\n const isStart = visibleStart === 0;\n const isEnd = visibleEnd === total - 1;\n\n if (showRightGradient) {\n gradientLeftRef.current?.style.setProperty(\"--gradient-opacity\", isStart ? \"0\" : \"1\");\n gradientRightRef.current?.style.setProperty(\"--gradient-opacity\", isEnd ? \"0\" : \"1\");\n }\n const index = splide.Components.Controller.getIndex();\n\n onMove?.({\n index,\n isStart,\n isEnd,\n total,\n visibleStart,\n visibleEnd,\n });\n }, [onMove]);\n React.useEffect(() => {\n const splide = splideRef.current?.splide;\n if (!splide) return;\n\n const lengthChanged = prevLengthRef.current !== items.length;\n prevLengthRef.current = items.length;\n\n if (!lengthChanged) return;\n\n // let React commit DOM first\n requestAnimationFrame(() => {\n splide.refresh();\n handleMove(splide);\n });\n }, [items.length, handleMove]);\n const handleResize = useCallback(() => {\n const splide = splideRef.current?.splide;\n if (!splide) return;\n\n splide.go(0, false);\n handleMove(splide);\n }, [handleMove]);\n const handleMounted = useCallback(\n (splide: any) => {\n handleMove(splide);\n },\n [handleMove]\n );\n\n const mergedOptions: OraculoCarouselOptions = {\n type: \"slide\",\n trimSpace: false,\n drag: true,\n pagination: false,\n arrows: false,\n rewind: false,\n focus: \"start\",\n autoWidth: false,\n perPage,\n gap,\n breakpoints,\n ...options,\n\n ...(enableHorizontalWheel ? { wheel: false } : {}),\n\n };\n\n return (\n <div\n ref={wheelHostRef}\n className={className}\n style={{ width: \"100%\", position: \"relative\", height: \"100%\" }}\n >\n <Splide\n ref={splideRef}\n options={mergedOptions}\n onMove={handleMove}\n onMounted={handleMounted}\n onResize={handleResize}\n >\n {items.map((item, index) => (\n <SplideSlide key={useIndexAsKey ? index : (item as any).id ?? index}>\n {renderItem(item, index)}\n </SplideSlide>\n ))}\n </Splide>\n {showRightGradient && (\n <>\n {/* IZQUIERDA */}\n <div\n ref={gradientLeftRef}\n className={`${styles.gradientOverlay} ${styles.left}`}\n style={{ \"--gradient-opacity\": \"0\" } as React.CSSProperties}\n >\n <svg\n className={styles.svg}\n viewBox=\"0 0 152 184\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M0 0H152V184H0V0Z\" fill=\"url(#paint_left)\" />\n <defs>\n <linearGradient id=\"paint_left\" x1=\"0\" y1=\"92\" x2=\"152\" y2=\"92\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.59737\" stopColor=\"#121212\" stopOpacity=\"0\" />\n <stop offset=\"1\" stopColor=\"#121212\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n\n {/* DERECHA */}\n <div\n ref={gradientRightRef}\n className={`${styles.gradientOverlay} ${styles.right}`}\n style={{ \"--gradient-opacity\": \"1\" } as React.CSSProperties}\n >\n <svg\n className={styles.svg}\n viewBox=\"0 0 152 184\"\n preserveAspectRatio=\"none\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M0 0H152V184H0V0Z\" fill=\"url(#paint_right)\" />\n <defs>\n <linearGradient id=\"paint_right\" x1=\"0\" y1=\"92\" x2=\"152\" y2=\"92\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.59737\" stopColor=\"#121212\" stopOpacity=\"0\" />\n <stop offset=\"1\" stopColor=\"#121212\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </>\n )}\n </div>\n );\n }\n);\n\nexport default OraculoCarousel;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport { OraculoButton } from \"../..\";\n\nexport interface OraculoGameCardProps {\n imageUrl: string;\n onClick?: () => void;\n size?: \"lg\" | \"sm\";\n fillParent?: boolean;\n}\n\nconst OraculoGameCard: React.FC<OraculoGameCardProps> = ({\n imageUrl,\n onClick,\n size = \"sm\",\n fillParent = false,\n}) => {\n const dim =\n size === \"lg\"\n ? { w: 280, h: 352 }\n : { w: 152, h: 168 };\n\n const handleButtonClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.stopPropagation();\n onClick?.();\n };\n\n const sizeStyles = fillParent\n ? { width: \"100%\", height: \"100%\" }\n : { width: `${dim.w}px`, height: `${dim.h}px` };\n\n return (\n <Box\n onClick={onClick}\n role=\"button\"\n sx={{\n position: \"relative\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n boxSizing: \"border-box\",\n transition: \"transform .15s ease, box-shadow .15s ease\",\n ...sizeStyles,\n \"&:hover\": {\n transform: \"translateY(-2px)\",\n boxShadow: 8,\n cursor: \"pointer\",\n },\n \"&:hover .oraculo-game-card-overlay\": {\n opacity: 1,\n },\n \"&:hover .oraculo-game-card-btn\": {\n opacity: 1,\n transform: \"translate(-50%, -50%) scale(1)\",\n pointerEvents: \"auto\",\n },\n }}\n >\n <img\n src={imageUrl}\n alt=\"Juego de casino\"\n loading=\"lazy\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n borderRadius: \"inherit\",\n }}\n />\n\n <Box\n className=\"oraculo-game-card-overlay\"\n sx={{\n position: \"absolute\",\n inset: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.45)\",\n opacity: 0,\n transition: \"opacity .15s ease\",\n pointerEvents: \"none\",\n zIndex: 1,\n }}\n />\n\n <Box\n className=\"oraculo-game-card-btn\"\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n zIndex: 2,\n transform: \"translate(-50%, -50%) scale(0.95)\",\n opacity: 0,\n transition: \"opacity .15s ease, transform .15s ease\",\n pointerEvents: \"none\",\n }}\n >\n <OraculoButton variant=\"primary\" size=\"md\" onClick={handleButtonClick}>\n Jugar\n </OraculoButton>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoGameCard;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Skeleton from \"@mui/material/Skeleton\";\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\n\ntype SizeOpt = { w: number; h: number; r?: number; font?: number };\n\nexport interface OraculoGameRankCardSizes {\n xs: SizeOpt;\n md: SizeOpt;\n}\n\nexport interface OraculoGameRankCardProps {\n imageUrl: string;\n orden?: number;\n onClick?: () => void;\n sizes?: OraculoGameRankCardSizes;\n\n /** si true, muestra skeleton en vez de la card */\n loading?: boolean;\n}\n\nexport default function OraculoGameRankCard({\n imageUrl,\n orden = 1,\n onClick,\n loading = false,\n sizes = {\n xs: { w: 104, h: 112, r: 18, font: 48 },\n md: { w: 186, h: 264, r: 22.6, font: 64 },\n },\n}: OraculoGameRankCardProps) {\n const getVal = <K extends keyof SizeOpt>(k: K, def: number) => ({\n xs: sizes.xs?.[k] ?? def,\n md: sizes.md?.[k] ?? def,\n });\n\n const W = getVal(\"w\", 186);\n const H = getVal(\"h\", 264);\n const R = getVal(\"r\", 22.6);\n const F = getVal(\"font\", 64);\n\n const hang = {\n xs: Math.round((sizes.xs?.font ?? 64) * 0.28),\n md: Math.round((sizes.md?.font ?? 64) * 0.28),\n };\n\n return (\n <Box\n sx={{\n position: \"relative\",\n width: \"100%\",\n maxWidth: { xs: `${W.xs}px`, md: `${W.md}px` },\n aspectRatio: {\n xs: `${W.xs}/${H.xs}`,\n md: `${W.md}/${H.md}`,\n },\n borderRadius: { xs: `${R.xs}px`, md: `${R.md}px` },\n boxSizing: \"border-box\",\n overflow: \"visible\",\n pb: { xs: `${hang.xs}px`, md: `${hang.md}px` },\n\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n pointerEvents: \"none\",\n zIndex: 2,\n background:\n \"linear-gradient(21.29deg, #0B0D1B -1.16%, rgba(255,255,255,0) 51.92%, rgba(255,255,255,0) 127.62%)\",\n backgroundBlendMode: \"multiply\",\n },\n }}\n >\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n overflow: \"hidden\",\n }}\n >\n {loading ? (\n <Skeleton\n variant=\"rectangular\"\n width=\"100%\"\n height=\"100%\"\n sx={{\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro visible en fondo oscuro\n \"&::after\": {\n background:\n \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\n },\n }}\n />\n ) : (\n <OraculoGameCard\n imageUrl={imageUrl}\n onClick={onClick}\n size=\"lg\"\n fillParent\n />\n )}\n </Box>\n\n <Box\n component=\"span\"\n sx={{\n position: \"absolute\",\n left: 8,\n bottom: {\n xs: `-${hang.xs}px`,\n md: `-${hang.md}px`,\n },\n fontFamily: '\"secondary\", sans-serif',\n fontSize: {\n xs: `${F.xs}px`,\n md: `${F.md}px`,\n },\n lineHeight: 1,\n color: \"#3CC666\",\n WebkitTextStroke: \"1px #9ee86e\",\n zIndex: 3,\n userSelect: \"none\",\n }}\n >\n {orden}\n </Box>\n </Box>\n );\n}\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\n\nexport interface OraculoLiveCasinoCardProps {\n logo: string;\n provider?: string;\n providerName?: string;\n machine?: number | string;\n onClick?: () => void;\n}\n\nconst OraculoLiveCasinoCard: React.FC<OraculoLiveCasinoCardProps> = ({\n logo,\n provider,\n providerName,\n machine,\n onClick,\n}) => {\n return (\n <Box\n onClick={onClick}\n sx={{\n flex: \"0 0 auto\",\n position: \"relative\",\n borderRadius: \"20px\",\n overflow: \"hidden\",\n width: { xs: 100, md: 180 },\n height: { xs: 200, md: 380 },\n transition: \"width .50s ease, transform .28s ease\",\n willChange: \"width, transform\",\n cursor: \"pointer\",\n zIndex: 0,\n \"&:hover\": {\n zIndex: 2,\n width: { md: 260, xs: 110 },\n },\n \"&:hover .orc-live-provider-label\": {\n opacity: 1,\n },\n }}\n >\n {/* Imagen de fondo */}\n <Box\n component=\"img\"\n src={logo}\n alt={`Juego ${machine ?? \"\"}`}\n sx={{\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n />\n\n {/* Label del provider */}\n <Box\n className=\"orc-live-provider-label\"\n sx={{\n position: \"absolute\",\n left: \"50%\",\n top: { xs: \"75%\", md: \"80%\" },\n transform: \"translate(-50%, -50%)\",\n zIndex: 3,\n opacity: 0,\n transition: \"opacity .25s ease\",\n pointerEvents: \"none\",\n }}\n >\n <Typography\n sx={{\n color: \"#fff\",\n fontWeight: 700,\n fontSize: { xs: 11, md: 14 },\n textTransform: \"capitalize\",\n }}\n >\n {provider ?? providerName ?? \"\"}\n </Typography>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoLiveCasinoCard;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Skeleton from \"@mui/material/Skeleton\";\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\n\nexport interface OraculoGameSlideItem {\n id: string | number;\n imageUrl: string;\n background?: string;\n}\n\nexport interface OraculoGameSlideProps {\n items: OraculoGameSlideItem[];\n layout?: \"mosaic\" | \"grid\";\n onClick?: (item: OraculoGameSlideItem, index: number) => void;\n\n /** si true, renderiza skeletons en vez de cards */\n loading?: boolean;\n\n /** cuantos skeletons en grid (default 4) */\n gridSkeletonCount?: number;\n}\n\nconst GAP = 12; // px\n\nconst SkCard = ({ r = 16 }: { r?: number }) => (\n <Box sx={{ width: \"100%\", height: \"100%\", borderRadius: r, overflow: \"hidden\" }}>\n <Skeleton\n variant=\"rectangular\"\n width=\"100%\"\n height=\"100%\"\n sx={{\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro sobre fondo oscuro\n \"&::after\": {\n // opcional: brillo un poquito más visible\n background: \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\n },\n }}\n />\n </Box>\n);\n\n\nconst OraculoGameSlide: React.FC<OraculoGameSlideProps> = ({\n items,\n layout = \"grid\",\n onClick,\n loading = false,\n gridSkeletonCount = 4,\n}) => {\n // =========================\n // MOSAIC: 1 grande + 4 chicas\n // =========================\n if (layout === \"mosaic\") {\n const big = items[0];\n // console.log(\"big: \", big);\n \n const smalls = items.slice(1, 5);\n\n return (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateRows: {\n xs: `repeat(2, 112px)`,\n md: `repeat(2, 168px)`,\n },\n gridTemplateColumns: {\n xs: `184px`,\n md: `280px`,\n },\n gridAutoFlow: \"column\",\n gridAutoColumns: {\n xs: `104px`,\n md: `152px`,\n },\n columnGap: `${GAP}px`,\n rowGap: `${GAP}px`,\n alignItems: \"stretch\",\n justifyItems: \"stretch\",\n }}\n >\n {/* BIG */}\n <Box\n sx={{\n width: { xs: 184, md: 280 },\n height: { xs: 234, md: 352 },\n gridRow: \"1 / span 2\",\n overflow: \"hidden\",\n borderRadius: 2,\n }}\n >\n {loading ? (\n <SkCard />\n ) : (\n big && (\n <OraculoGameCard\n imageUrl={`https://olimpo.bet${big.background ?? big.imageUrl ?? \"\"}`}\n size=\"lg\"\n fillParent\n onClick={() => onClick?.(big, 0)}\n />\n )\n )}\n </Box>\n\n {/* SMALLS */}\n {(loading ? Array.from({ length: 4 }) : smalls).map((it: any, index: number) => (\n <Box\n key={loading ? `sk-${index}` : it.id}\n sx={{\n width: { xs: 104, md: 152 },\n height: { xs: 112, md: 168 },\n overflow: \"hidden\",\n borderRadius: 2,\n }}\n >\n {loading ? (\n <SkCard />\n ) : (\n <OraculoGameCard\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\n size=\"sm\"\n fillParent\n onClick={() => onClick?.(it, index + 1)}\n />\n )}\n </Box>\n ))}\n </Box>\n );\n }\n\n // =========================\n // GRID 2x2\n // =========================\n return (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: {\n xs: `repeat(2, 104px)`,\n md: `repeat(2, 152px)`,\n },\n gridTemplateRows: {\n xs: `repeat(2, 112px)`,\n md: `repeat(2, 168px)`,\n },\n gap: `${GAP}px`,\n gridAutoFlow: \"column\",\n }}\n >\n {(loading ? Array.from({ length: gridSkeletonCount }) : items).map((it: any, index: number) => (\n <Box\n key={loading ? `sk-${index}` : it.id ?? index}\n sx={{ overflow: \"hidden\", borderRadius: 2 }}\n >\n {loading ? (\n <SkCard />\n ) : (\n <OraculoGameCard\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\n size=\"sm\"\n fillParent\n onClick={() => onClick?.(it, index)}\n />\n )}\n </Box>\n ))}\n </Box>\n );\n};\n\nexport default OraculoGameSlide;\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\n\nexport interface OraculoWelcomeBannerProps {\n title?: string;\n amount?: string; // ej: \"S/40\"\n subtitle?: string;\n buttonText?: string;\n onButtonClick?: () => void;\n backgroundImage?: string;\n alt?: string;\n className?: string;\n /** Tamaño en desktop: \"small\" (456x272) o \"large\" (618x346) */\n variant?: \"small\" | \"large\";\n}\n\nconst OraculoWelcomeBanner: React.FC<OraculoWelcomeBannerProps> = ({\n title,\n amount,\n subtitle,\n buttonText,\n onButtonClick,\n backgroundImage,\n alt,\n className = \"\",\n variant = \"small\",\n}) => {\n const symbol = amount ? amount.slice(0, 2) : \"\";\n const value = amount ? amount.slice(2) : \"\";\n const isLarge = variant === \"large\";\n\n return (\n <Box\n className={className}\n sx={{\n position: \"relative\",\n width: \"100%\",\n maxWidth: {\n xs: 328,\n md: isLarge ? 618 : 456,\n },\n mx: \"auto\",\n }}\n >\n {backgroundImage && (\n <Box\n sx={{\n position: \"relative\",\n width: \"100%\",\n aspectRatio: {\n xs: \"328 / 188\",\n md: isLarge ? \"618 / 346\" : \"456 / 272\",\n },\n borderRadius: \"14px\",\n overflow: \"hidden\",\n }}\n >\n <Box\n component=\"img\"\n src={backgroundImage}\n alt={alt ?? \"Fondo promocional\"}\n sx={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: {\n xs: \"50% 0%\",\n md: \"45% 0%\",\n },\n display: \"block\",\n }}\n />\n </Box>\n )}\n\n {/* Capa de contenido */}\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n color: \"#e7f8ff\",\n textAlign: \"center\",\n pl: \"14%\",\n pr: { xs: \"14%\", lg: \"15%\" },\n }}\n >\n <Box\n sx={{\n maxWidth: \"60%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n {/* Título superior */}\n {title && (\n <Typography\n sx={{\n fontSize: { xs: 12, md: 20 },\n fontWeight: 400,\n color: \"#e7f8ff\",\n }}\n >\n {title}\n </Typography>\n )}\n\n {/* Monto */}\n {amount && (\n <Box\n component=\"p\"\n sx={{\n fontFamily: '\"secondary\", sans-serif',\n lineHeight: { xs: 0.9, lg: 0.87 },\n m: \"4px 0\",\n background:\n \"linear-gradient(175deg, #EDC421 -12.56%, #FFFABF 17.99%, #EDC421 49.74%)\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n WebkitTextStroke: \"0.5px #fff8c1\",\n filter:\n \"drop-shadow(0px 4px 0px #8D4406) drop-shadow(0px 4px 4px rgba(28, 28, 28, 0.4))\",\n display: \"flex\",\n alignItems: \"baseline\",\n justifyContent: \"center\",\n }}\n >\n <Box\n component=\"span\"\n sx={{ fontSize: { xs: 35, md: 48 }, mr: 0.5 }}\n >\n {symbol}\n </Box>\n <Box\n component=\"span\"\n sx={{ fontSize: { xs: 52, md: 77 } }}\n >\n {value}\n </Box>\n </Box>\n )}\n\n {/* Subtítulo */}\n {subtitle && (\n <Typography\n sx={{\n pb: \"20px\",\n fontSize: 14,\n fontWeight: 600,\n color: \"#e7f8ff\",\n }}\n >\n {subtitle}\n </Typography>\n )}\n\n {/* Botón */}\n {buttonText && (\n <OraculoButton onClick={onButtonClick}>\n {buttonText}\n </OraculoButton>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoWelcomeBanner;\n","import React from \"react\";\nimport \"../../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.css\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\n\nexport interface OraculoClubOlimpoVisualProps {\n text: string;\n buttonLabel?: string;\n onClick?: () => void;\n\n // MOBILE\n imgAlt?: string;\n imgSrcMobile: string;\n\n // DESKTOP\n imgSrcDesktopBg?: string;\n imgSrcDesktopLogo?: string;\n}\n\nconst OraculoClubOlimpoVisual: React.FC<OraculoClubOlimpoVisualProps> = ({\n text,\n buttonLabel = \"Conoce más\",\n onClick,\n imgAlt = \"Club Olimpo\",\n imgSrcMobile,\n imgSrcDesktopBg,\n imgSrcDesktopLogo,\n}) => {\n return (\n <>\n {/* MOBILE */}\n <div className=\"orc-co-bgMobile\">\n <img\n src={imgSrcMobile}\n alt={imgAlt}\n className=\"orc-co-bgMobileImg\"\n />\n </div>\n\n {/* DESKTOP */}\n <div className=\"orc-co-bgDesktop\">\n {imgSrcDesktopBg && (\n <div className=\"orc-co-fillHost\">\n <img\n src={imgSrcDesktopBg}\n alt={`${imgAlt} fondo`}\n className=\"orc-co-bgDesktopImg\"\n />\n </div>\n )}\n\n {/* Bloque izquierdo: LOGO + TEXTO + BOTÓN */}\n <div className=\"orc-co-desktopContent\">\n {imgSrcDesktopLogo && (\n <img\n src={imgSrcDesktopLogo}\n alt={`${imgAlt} logo`}\n className=\"orc-co-logoImg\"\n />\n )}\n\n <p className=\"orc-co-captionDesktop\">{text}</p>\n\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\n {buttonLabel}\n </OraculoButton>\n </div>\n </div>\n\n {/* MOBILE: barra inferior */}\n <div className=\"orc-co-bottom\">\n <p className=\"orc-co-caption\">{text}</p>\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\n {buttonLabel}\n </OraculoButton>\n </div>\n </>\n );\n};\n\nexport default OraculoClubOlimpoVisual;\n","import { useState, useEffect} from \"react\";\r\n\r\nexport function redirectHomeWithOutcomes(url : any, outcomes: number | number[]) {\r\n const arr = Array.isArray(outcomes) ? outcomes : [outcomes];\r\n sessionStorage.setItem(\"landingOutcomes\", JSON.stringify(arr));\r\n window.location.href = url;\r\n}\r\n\r\nexport function verMasSeccionEnVivo() {\r\n window.location.href = \"/deportes#in-play\";\r\n}\r\n\r\nexport function verMasSeccionSemana() {\r\n window.location.href = \"/deportes#sports-hub/football\";\r\n}\r\n\r\n\r\nexport function verMasSeccionCombinadas() {\r\n window.location.href = \"/deportes#specials\";\r\n}\r\n\r\nexport async function fetchJerseys(eventIds: number[]) {\r\n const res = await fetch(\"https://api.mktolimpo.com/api/jerseys/search\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n events: eventIds,\r\n }),\r\n });\r\n\r\n return await res.json();\r\n }\r\n\r\n\r\nexport function useDebouncedValue<T>(value: T, delay = 250): T {\r\n const [debounced, setDebounced] = useState(value);\r\n\r\n useEffect(() => {\r\n const id = setTimeout(() => setDebounced(value), delay);\r\n return () => clearTimeout(id);\r\n }, [value, delay]);\r\n\r\n return debounced;\r\n}","import React, { createContext, useContext } from \"react\";\n\ninterface DocIdContextType {\n docId: string;\n}\n\nconst DocIdContext = createContext<DocIdContextType | undefined>(undefined);\n\nexport const DocIdProvider: React.FC<{\n children: React.ReactNode;\n docId: string;\n}> = ({ children, docId }) => {\n const value = React.useMemo(() => ({ docId }), [docId]);\n return (\n <DocIdContext.Provider value={value}>{children}</DocIdContext.Provider>\n );\n};\n\nexport const useDocId = () => {\n const context = useContext(DocIdContext);\n if (!context) {\n throw new Error(\"useDocId debe usarse dentro de DocIdProvider\");\n }\n return context.docId;\n};\n","import React from \"react\";\r\nimport styles from \"./OraculoEventCombinadasCard.module.css\";\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport { redirectHomeWithOutcomes } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nexport default function OraculoEventCombinadosCard({ coupon }: any) {\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n\r\n function processCoupon(coupon: any) {\r\n const allOutcomes: any[] = [];\r\n\r\n // ✅ DEDUPE EVENTS BY ID\r\n const uniqueEvents = Array.from(\r\n new Map(\r\n (coupon?.events ?? [])\r\n .filter(Boolean)\r\n .map((e: any) => [e.id, e])\r\n ).values()\r\n );\r\n\r\n uniqueEvents.forEach((event: any) => {\r\n const apuestas = event.betoffers ?? [];\r\n const homeName = event.homeName;\r\n const awayName = event.awayName;\r\n\r\n apuestas.forEach((a: any) => {\r\n if (!a?.outcomes?.length) return;\r\n\r\n const best = a.outcomes[0];\r\n if (!best) return;\r\n\r\n let value = \"\";\r\n const line = best?.line ? best.line / 1000 : \"\";\r\n\r\n // ----- OVER / UNDER -----\r\n if ([\"Más de\", \"Mas de\", \"Over\"].includes(best.label)) {\r\n value = `Más de ${line}`;\r\n if (best.participant) value = `${best.participant} - ${value}`;\r\n }\r\n\r\n // ----- UNDER -----\r\n else if ([\"Menos de\", \"Menos\", \"Under\"].includes(best.label)) {\r\n value = `Menos de ${line}`;\r\n if (best.participant) value = `${best.participant} - ${value}`;\r\n }\r\n\r\n // ----- YES / NO -----\r\n else if ([\"Sí\", \"No\"].includes(best.label)) {\r\n value = best.label;\r\n if (best.participant) value = `${best.participant} - ${value}`;\r\n }\r\n\r\n // ----- DOUBLE CHANCE -----\r\n else if ([\"1X\", \"12\", \"X2\"].includes(best.label)) {\r\n if (best.label === \"1X\") value = `${homeName} o Empate`;\r\n if (best.label === \"12\") value = `${homeName} o ${awayName}`;\r\n if (best.label === \"X2\") value = `${awayName} o Empate`;\r\n }\r\n\r\n // ----- DEFAULT -----\r\n else {\r\n value = best.participant ?? best.label ?? \"\";\r\n if (line !== \"\" && value === best.label) {\r\n value = `${best.label} ${line}`;\r\n }\r\n }\r\n\r\n allOutcomes.push({\r\n id: best.id,\r\n value,\r\n label: a.criterion?.label ?? \"\",\r\n odds: best.odds ?? 0,\r\n position: best.position ?? 0,\r\n eventId: event.id\r\n });\r\n });\r\n });\r\n\r\n return {\r\n outcomes: allOutcomes.sort((a, b) => a.position - b.position),\r\n total: Number(coupon?.combinadoTotal ?? 0).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n}),\r\n events: uniqueEvents\r\n };\r\n }\r\n\r\n \r\n function buildUrlFromCoupon(coupon) {\r\n if (!coupon || !Array.isArray(coupon.events) || coupon.events.length === 0) {\r\n return '/deportes#home';\r\n }\r\n\r\n const events = coupon.events;\r\n\r\n if (events.length === 1) {\r\n return `/deportes#event/${events[0].id}`;\r\n }\r\n\r\n const firstGroupId = events[0].groupId;\r\n const allSameGroup = events.every(e => e.groupId === firstGroupId);\r\n\r\n if (allSameGroup) {\r\n const path = events[0].path;\r\n\r\n if (Array.isArray(path) && path.length > 0) {\r\n const termKeys = path.map(p => p.termKey).filter(Boolean);\r\n return `/deportes#sports-hub/${termKeys.join('/')}`;\r\n }\r\n }\r\n\r\n\r\n return '/deportes#home';\r\n}\r\n\r\n const handleOutcomeClick = (\r\n outcomes: number | number[],\r\n totalOdds?: string,\r\n ) => {\r\n const arr = Array.isArray(outcomes) ? outcomes : [outcomes];\r\n\r\n // Obtener nombres únicos de eventos\r\n const eventNames = Array.from(\r\n new Set(\r\n couponData.outcomes.map((o) => {\r\n const event = eventMap.get(Number(o.eventId));\r\n return event?.name ?? \"\";\r\n }),\r\n ),\r\n ).filter(Boolean);\r\n\r\n const resultTitle =\r\n eventNames.length > 0 ? eventNames.join(\" + \") : JSON.stringify(arr);\r\n\r\n const label = totalOdds\r\n ? `${resultTitle} - Cuota: ${totalOdds}`\r\n : resultTitle;\r\n\r\n captureInteraction({\r\n element: \"evento_semana_outcome\",\r\n label: `Landing: ${docId} - OraculoEventCombinadasCard - Click: ${label}`,\r\n target: \"/deportes#in-play\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoEventCombinadasCard\", outcomes: label },\r\n });\r\n\r\n redirectHomeWithOutcomes(buildUrlFromCoupon(coupon),outcomes);\r\n };\r\n\r\n if (!coupon?.events?.length) return null;\r\n\r\n const couponData = processCoupon(coupon);\r\n const outcomesByEvent = couponData.outcomes.reduce((acc: any, o: any) => {\r\n if (!acc[o.eventId]) acc[o.eventId] = [];\r\n acc[o.eventId].push(o);\r\n return acc;\r\n }, {});\r\n\r\n const eventMap = new Map(\r\n couponData.events.map((e: any) => [e.id, e])\r\n );\r\n\r\n return (\r\n <div className={styles.card}>\r\n <div className={styles.combinadas}>\r\n <div className={styles.combinadasScroll} >\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap >\r\n {Object.entries(outcomesByEvent)\r\n .reverse()\r\n .map(([eventId, outcomes]: any) => {\r\n const event = eventMap.get(Number(eventId));\r\n if (!event) return null;\r\n\r\n return (\r\n <Stack\r\n key={eventId}\r\n direction=\"column\"\r\n spacing={0.5} // 🔹 inner spacing (4px)\r\n useFlexGap\r\n >\r\n {/* 🔹 EVENT TITLE */}\r\n <OraculoSectionTitle\r\n title={event.name}\r\n iconUrl=\"/assets/img/home/Combinadas/pelota.png\"\r\n size=\"xs\"\r\n />\r\n\r\n <img\r\n loading=\"lazy\"\r\n src=\"/assets/img/home/Combinadas/line.png\"\r\n />\r\n\r\n {/* 🔹 EVENT OUTCOMES */}\r\n {(outcomes as any[]).map((a: any, i: number) => (\r\n <div className={styles.apuestaItem} key={`${eventId}-${i}`}>\r\n <div className={styles.lineContainer}>\r\n <div className={styles.circle} />\r\n {i < outcomes.length - 1 && (\r\n <div className={styles.line} />\r\n )}\r\n </div>\r\n\r\n <div className={styles.apuestaText}>\r\n <strong>{a.value}</strong> | {a.label}\r\n </div>\r\n </div>\r\n ))}\r\n </Stack>\r\n );\r\n })}\r\n</Stack>\r\n </div>\r\n </div>\r\n\r\n <button\r\n onClick={() =>\r\n handleOutcomeClick(\r\n couponData.outcomes.map((o) => o.id),\r\n couponData.total,\r\n )\r\n }\r\n className={styles.cuotaTotal}\r\n >\r\n <span>\r\n Cuota total: <strong>{couponData.total}</strong>\r\n </span>\r\n <img\r\n loading=\"lazy\"\r\n src=\"/assets/img/home/Combinadas/cuotaTotal.svg\"\r\n alt=\"cuota total\"\r\n />\r\n </button>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\nimport styles from \"./OraculoButtonBet.module.css\";\nimport { Link as MuiLink } from \"@mui/material\";\n\nexport interface OraculoButtonProps {\n children?: React.ReactNode;\n onClick?: any;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n rel?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n disabled?: boolean;\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n fullHeight?: boolean;\n className?: string;\n ariaLabel?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n iconOnly?: boolean;\n}\n\nexport default function OraculoButtonBet({\n children,\n onClick,\n href,\n target,\n rel,\n type = \"button\",\n disabled = false,\n variant = \"primary\",\n size,\n fullWidth = false,\n fullHeight = false,\n className = \"\",\n ariaLabel,\n leftIcon,\n rightIcon,\n iconOnly,\n}: OraculoButtonProps) {\n const hasText = !!children && children !== true;\n const hasLeft = !!leftIcon;\n const hasRight = !!rightIcon;\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\n\n const cls = [\n styles[\"orc-btn\"], // base\n styles[`orc-btn--${variant}`], // variant primary/secondary/tertiary\n size ? styles[`orc-btn--${size}`] : \"\", // sm / md / lg\n fullWidth ? styles[\"orc-btn--full\"] : \"\",\n fullHeight ? styles[\"orc-btn--fullHeight\"] : \"\",\n isIconOnly ? styles[\"orc-btn--iconOnly\"] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const content = (\n <>\n {leftIcon && <span className={styles[\"orc-btn__icon\"]}>{leftIcon}</span>}\n {!isIconOnly && (\n <span className={styles[\"orc-btn__label\"]}>{children}</span>\n )}\n {rightIcon && <span className={styles[\"orc-btn__icon\"]}>{rightIcon}</span>}\n </>\n );\n\n const ariaDisabled = disabled ? true : undefined;\n\n if (href) {\n return (\n <MuiLink\n href={href}\n target={target}\n rel={rel}\n aria-label={ariaLabel}\n aria-disabled={ariaDisabled}\n tabIndex={ariaDisabled ? -1 : undefined}\n className={cls}\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\n >\n {content}\n </MuiLink>\n );\n }\n\n return (\n <button\n type={type}\n onClick={onClick}\n disabled={!!ariaDisabled}\n aria-label={ariaLabel}\n className={cls}\n >\n {content}\n </button>\n );\n}\n","export type Jersey = {\r\n base: string;\r\n sleeve: string;\r\n number: string;\r\n real: boolean;\r\n type: string;\r\n};\r\n\r\nexport type TeamSide = \"home\" | \"away\";\r\nexport type JerseyRole = \"player\" | \"GK\";\r\n\r\n\r\n const DEFAULT_HOME_JERSEY = {\r\n base: \"FFFFFF\",\r\n sleeve: \"FFFFFF\",\r\n number: \"000000\",\r\n real: false,\r\n type: \"short_sleeves\",\r\n};\r\n\r\nconst DEFAULT_AWAY_JERSEY = {\r\n base: \"000000\",\r\n sleeve: \"000000\",\r\n number: \"FFFFFF\",\r\n real: false,\r\n type: \"short_sleeves\",\r\n};\r\n\r\nexport type JerseyEvent =\r\n | {\r\n externalId?: number;\r\n jerseys?: {\r\n home?: {\r\n player?: Jersey;\r\n GK?: Jersey;\r\n };\r\n away?: {\r\n player?: Jersey;\r\n GK?: Jersey;\r\n };\r\n };\r\n }\r\n | null\r\n | undefined;\r\n\r\nexport const getTeamJersey = (\r\n jerseyEvent: JerseyEvent,\r\n side: TeamSide,\r\n role: JerseyRole = \"player\"\r\n): Jersey | null => {\r\n\r\n if (jerseyEvent === undefined) {\r\n return null;\r\n }\r\n\r\n if (jerseyEvent === null) {\r\n return side === \"home\"\r\n ? DEFAULT_HOME_JERSEY\r\n : DEFAULT_AWAY_JERSEY;\r\n }\r\n\r\n const jersey = jerseyEvent?.jerseys?.[side]?.[role];\r\n\r\n if (jersey) return jersey;\r\n\r\n return side === \"home\"\r\n ? DEFAULT_HOME_JERSEY\r\n : DEFAULT_AWAY_JERSEY;\r\n};","import React from \"react\";\r\nimport OraculoButtonBet from \"../../atoms/OraculoButtonBet/OraculoButtonBet\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventLabel from \"../../atoms/OraculoEvent/OraculoEventLabel\";\r\nimport OraculoEventTeamInfo from \"../../atoms/OraculoEvent/OraculoEventTeamInfo\";\r\nimport OraculoEventScore from \"../../atoms/OraculoEvent/OraculoEventScore\";\r\nimport OraculoEventHeader from \"../../atoms/OraculoEvent/OraculoEventHeader\";\r\nimport Stack from '@mui/material/Stack';\r\nimport {redirectHomeWithOutcomes} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { EnVivoEventProps, Outcome } from \"../../interfaces/oraculo/InterfaceKambi\";\r\nimport styles from \"./OraculoEventEnVivoCard.module.css\";\r\nimport {getTeamJersey} from \"../../atoms/OraculoEvent/KambiJersey\";\r\n\r\n\r\nexport default function OraculoEventEnVivoCard({ event, liveData , betOffers ,jersey } : EnVivoEventProps) {\r\n const selectedOffer = betOffers?.find(\r\n (offer) => offer.betOfferType?.id === 2\r\n );\r\nconst defaultOutcomeBase = {\r\n englishLabel: \"\",\r\n type: \"\",\r\n betOfferId: 0,\r\n changedDate: \"\",\r\n oddsFractional: \"\",\r\n oddsAmerican: \"\",\r\n status: \"INACTIVE\",\r\n cashOutStatus: \"SUSPENDED\",\r\n};\r\n\r\nconst defaultOutcomes: Outcome[] = [\r\n { ...defaultOutcomeBase, id: -1, label: \"1\", odds: undefined as any },\r\n { ...defaultOutcomeBase, id: -2, label: \"X\", odds: undefined as any },\r\n { ...defaultOutcomeBase, id: -3, label: \"2\", odds: undefined as any },\r\n];\r\n\r\n return (\r\n <div className={styles.cardWrapper} >\r\n \r\n <Stack direction=\"column\" spacing={1} useFlexGap>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <OraculoEventHeader\r\n title={event?.path?.[0]?.name ?? ''}\r\n subtitle={event?.group ?? ''}\r\n live={true}\r\n time={liveData?.matchClock?.minute != null ? `${liveData.matchClock.minute}'` : ''}\r\n />\r\n\r\n <div style={{ padding: \"0 4px\" }}>\r\n\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto 1fr\">\r\n <OraculoEventTeamInfo name={event?.homeName} jersey={getTeamJersey(jersey, \"home\")}/>\r\n <OraculoEventScore text={(liveData?.score?.home ?? 0) + \":\"+ (liveData?.score?.away ?? 0)} name=\"En vivo\" />\r\n <OraculoEventTeamInfo name={event?.awayName} jersey={getTeamJersey(jersey, \"away\")} />\r\n </OraculoGridGroup>\r\n </div>\r\n </Stack>\r\n\r\n <Stack direction=\"column\" spacing={1} useFlexGap>\r\n\r\n <OraculoGridGroup spacing={1}>\r\n {(selectedOffer?.outcomes ?? defaultOutcomes).map((item : Outcome, index : number) => (\r\n <OraculoEventLabel key={index} text={item.label.toUpperCase()} />\r\n ))}\r\n </OraculoGridGroup>\r\n\r\n <OraculoGridGroup spacing={2}>\r\n {(selectedOffer?.outcomes ?? defaultOutcomes).map((item : Outcome, index : number) => (\r\n <OraculoButtonBet key={index} variant=\"primary\" disabled={item.odds == undefined || selectedOffer?.cashOutStatus == 'SUSPENDED'} onClick={()=>{redirectHomeWithOutcomes('/deportes#event/live/'+event.id ,item.id);}} className={styles.customButtonDisabled}>\r\n <span className={styles.customButtonLabel}>{item.odds === undefined ? \"\" : (item.odds / 1000).toFixed(2)}</span>\r\n </OraculoButtonBet>\r\n ))}\r\n </OraculoGridGroup>\r\n </Stack>\r\n </Stack>\r\n </div>\r\n\r\n );\r\n}","import React from \"react\";\r\nimport styles from \"./OraculoEventDate.module.css\";\r\n\r\ninterface OraculoEventDateProps {\r\n text: string;\r\n}\r\n\r\nexport default function OraculoEventDate({ text }: OraculoEventDateProps) {\r\n return <div className={`oli-font ${styles.date}`}>{text}</div>;\r\n}","import React from \"react\";\r\nimport Stack from '@mui/material/Stack';\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventLabel from \"../../atoms/OraculoEvent/OraculoEventLabel\";\r\nimport OraculoEventTeamInfo from \"../../atoms/OraculoEvent/OraculoEventTeamInfo\";\r\nimport OraculoEventScore from \"../../atoms/OraculoEvent/OraculoEventScore\";\r\nimport OraculoEventLeague from \"../../atoms/OraculoEvent/OraculoEventLeague\";\r\nimport OraculoEventDate from \"../../atoms/OraculoEvent/OraculoEventDate\";\r\nimport {redirectHomeWithOutcomes} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport styles from \"./OraculoEventSemanaCard.module.css\";\r\nimport { SemanaEventProps } from \"../../interfaces/oraculo/InterfaceKambi\";\r\nimport {getTeamJersey} from \"../../atoms/OraculoEvent/KambiJersey\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nexport default function OraculoEventSemanaCard({event, jersey} : SemanaEventProps ) {\r\n\tconst captureInteraction = useCaptureInteraction();\r\n\tconst docId = useDocId();\r\n\r\n\tfunction formatDate(dateString : string): string {\r\n\t\tconst date = new Date(dateString);\r\n\r\n\t\tconst dayShort = date.toLocaleDateString(\"es-ES\", { weekday: \"short\" }).toUpperCase();\r\n\r\n\t\tconst day = date.getDate().toString().padStart(2, \"0\");\r\n\t\tconst month = (date.getMonth() + 1).toString().padStart(2, \"0\");\r\n\r\n\t\tlet time = date.toLocaleTimeString(\"es-PE\", { hour: \"numeric\", minute: \"2-digit\", hour12: true }).toUpperCase();\r\n\r\n\t\ttime = time.replace(/\\./g, \"\").replace(/A\\s*M/i, \"AM\").replace(/P\\s*M/i, \"PM\");\r\n\r\n\t\treturn `${dayShort} ${day}/${month} | ${time}`;\r\n\t}\r\n\r\n const handleOutcomeClick = (outcomes: number | number[], odds?: number) => {\r\n const matchTitle = `${event.homeName} vs ${event.awayName}`;\r\n const cuota = odds ? (odds / 1000).toFixed(2) : \"\";\r\n const label = cuota ? `${matchTitle} - Cuota: ${cuota}` : matchTitle;\r\n\r\n captureInteraction({\r\n element: \"evento_semana_outcome\",\r\n label: `Landing: ${docId} - OraculoEventSemanaCard - Click: ${label}`,\r\n target: \"/deportes#in-play\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoEventSemanaCard\", outcomes: label },\r\n });\r\n\r\n redirectHomeWithOutcomes('/deportes#event/'+event.id ,outcomes);\r\n };\r\n\r\n\treturn (\r\n\t\t<div className={styles.cardContainer}>\r\n\t\t\t<OraculoEventLeague title={event?.group ?? ''} />\r\n\t\t\t<div className={styles.cardBackground} >\r\n\t\t\t\t\r\n\t\t\t\t<Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n\r\n\t\t\t\t<Stack direction=\"column\" spacing={1} useFlexGap> \r\n\t\t\t\t\t\r\n\t\t\t\t\t<div className={styles.equipos}>\r\n\t\t\t\t\t\t<OraculoEventTeamInfo name={event.homeName} size=\"compact\" jersey={getTeamJersey(jersey, \"home\")} />\r\n\t\t\t\t\t\t<OraculoEventScore text={'vs.'} name=\"\" size=\"small\"/>\r\n\t\t\t\t\t\t<OraculoEventTeamInfo name={event.awayName} size=\"compact\" jersey={getTeamJersey(jersey, \"away\")} />\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<OraculoEventDate text={formatDate(event.start)} />\r\n\r\n\t\t\t\t</Stack>\r\n\r\n\t\t\t\t<Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap> \r\n\t\t\t\t\t<OraculoGridGroup spacing={1}>\r\n\t\t\t\t\t\t{(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n\t\t\t\t\t\t\t<OraculoEventLabel key={index} text={item.label.toUpperCase()} />\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</OraculoGridGroup>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div className={styles.jugadas}>\r\n\t\t\t\t\t<OraculoGridGroup spacing={1}>\r\n\t\t\t\t\t\t{(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n\t\t\t\t\t\t\t<OraculoButton key={index} variant=\"primary\" fullHeight onClick={()=>{handleOutcomeClick(item.id, item.odds);}} >{(item.odds / 1000).toFixed(2)}</OraculoButton>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</OraculoGridGroup>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Stack>\r\n\t\t\t\t</Stack>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t);\r\n}","import React, { useRef, useState } from \"react\";\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\nimport {\n OraculoSeccionDestacadosItem,\n OraculoSeccionDestacadosProps,\n} from \"../../interfaces/oraculo/InterfaceDestacados\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nexport default function OraculoSeccionDestacados({\n items,\n title = \"Destacados\",\n iconUrl,\n onViewMore,\n className = \"\",\n}: OraculoSeccionDestacadosProps) {\n const carouselRef = useRef<any>(null);\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n const isLoading = !items || items.length === 0;\n\n const handlePrev = () => {\n captureInteraction({\n element: \"destacados_carousel_prev\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Anterior`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n carouselRef.current?.prev();\n };\n\n const handleNext = () => {\n captureInteraction({\n element: \"destacados_carousel_next\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Siguiente`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n carouselRef.current?.next();\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"destacados_view_more\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Ver más`,\n target: \"https://www.olimpo.bet/promociones\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/promociones\");\n }\n };\n\n const redirectToPromotion = (promotion?: string) => {\n if (!promotion) return;\n\n const slug = encodeURIComponent(promotion);\n const url = `https://www.olimpo.bet/promociones/${slug}`;\n\n captureInteraction({\n element: \"destacados_card\",\n label: `Landing: ${docId} - OraculoSeccionDestacados - Click: ${String(promotion)}`,\n target: url,\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n section: \"OraculoSeccionDestacados\",\n promotion: String(promotion),\n },\n });\n\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(url);\n }\n };\n\n const sectionClassName = className || undefined;\n\n return (\n <section className={sectionClassName} style={{ width: \"100%\" }}>\n <header\n style={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto auto\",\n alignItems: \"center\",\n columnGap: 12,\n rowGap: 8,\n marginBottom: 16,\n paddingLeft: 16,\n paddingRight: 16,\n }}\n >\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <div style={{ display: \"flex\", gap: 8 }}>\n <OraculoButton\n ariaLabel=\"Anterior\"\n variant=\"secondary\"\n iconOnly\n leftIcon={<ChevronLeftRounded />}\n onClick={handlePrev}\n disabled={navState.isStart || isLoading}\n />\n <OraculoButton\n ariaLabel=\"Siguiente\"\n variant=\"secondary\"\n iconOnly\n rightIcon={<ChevronRightRounded />}\n onClick={handleNext}\n disabled={navState.isEnd || isLoading}\n />\n </div>\n\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\n Ver más\n </OraculoButton>\n </header>\n\n <OraculoCarousel\n ref={carouselRef}\n items={items}\n perPage={undefined}\n gap=\"16px\"\n enableHorizontalWheel\n showRightGradient\n options={{ autoWidth: true, trimSpace: 'move'}}\n breakpoints={{\n 768: { perPage: 2, focus: \"start\", padding: { left: \"24px\", right: \"24px\" } },\n 1024: { perPage: 2.5, focus: \"start\", padding: { left: \"24px\", right: \"24px\" } },\n }}\n renderItem={(item: OraculoSeccionDestacadosItem) => (\n <div\n key={`${item.title}-${item.image}`}\n style={{\n textAlign: \"center\",\n marginTop: 16,\n cursor: \"pointer\",\n }}\n onClick={() => redirectToPromotion(item.promotion)}\n >\n <img\n src={`https://olimpo.bet${item.image !== \"\" ? item.image : item.summary_image}`}\n alt={item.title}\n style={{\n width: \"100%\",\n height:\n typeof window !== \"undefined\" && window.innerWidth < 768\n ? \"80px\"\n : \"137px\",\n borderRadius: 8,\n display: \"block\",\n objectFit: \"cover\",\n }}\n />\n </div>\n )}\n onMove={({ isStart, isEnd }) => {\n setNavState({ isStart, isEnd });\n captureInteraction({\n element: \"destacados_carousel_slide\",\n label: \"OraculoSeccionDestacados - Slide Carousel\",\n target: \"carousel\",\n event_type: \"slide\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n isStart,\n isEnd,\n },\n tags: { section: \"OraculoSeccionDestacados\" },\n });\n }}\n />\n </section>\n );\n}\n","\nconst KEY = \"__ORACULO_EXTRAS__\" as const;\n\ntype Store = {\n extras?: Record<string, unknown>;\n};\n\nfunction getStore(): Store {\n const g = globalThis as any;\n if (!g[KEY]) g[KEY] = {};\n return g[KEY] as Store;\n}\n\nexport function setOraculoExtras(extrasObj: Record<string, unknown>) {\n getStore().extras = extrasObj;\n}\nexport function getOraculoExtra<T = unknown>(key: string): T | undefined {\n return getStore().extras?.[key] as T | undefined;\n}\nexport function clearOraculoExtras() {\n delete (globalThis as any)[KEY];\n}\n","import React, { useMemo } from \"react\";\nimport Stack from \"@mui/material/Stack\";\nimport Box from \"@mui/material/Box\";\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\nimport OraculoGameRankCard from \"../../molecules/OraculoGameRankCard/OraculoGameRankCard\";\nimport { OraculoSeccionTopJuegosProps } from \"../../interfaces/oraculo/InterfaceTopJuegos\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\nexport default function OraculoSeccionTopJuegos({\n items,\n title = \"Top Juegos\",\n iconUrl,\n onCardClick,\n}: OraculoSeccionTopJuegosProps) {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n \n const normalizedItems = useMemo(\n () =>\n (items ?? [])\n .map((item, index) => ({\n ...item,\n orden: item.orden ?? index + 1,\n _originalIndex: index,\n }))\n .sort((a, b) => {\n if (a.orden != null && b.orden != null) return a.orden - b.orden;\n return a._originalIndex - b._originalIndex;\n }),\n [items]\n );\n\n const isLoading = !items || items.length === 0;\n const top6 = isLoading ? Array.from({ length: 6 }) : normalizedItems.slice(0, 6);\n\n const handleOpen = (juego: any) => {\n captureInteraction({\n element: \"top_juegos_card\",\n label: `Landing: ${docId} - OraculoSeccionTopJuegos - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(juego.machine || \"unknown\"),\n section: \"OraculoSeccionTopJuegos\",\n },\n });\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n showIframe?.();\n\n requestAnimationFrame(() => {\n loadMachine?.(juego, false, \"CASINO\");\n });\n };\n\n return (\n <section style={{ width: \"100%\" }}>\n <Stack direction=\"column\" spacing={2} useFlexGap>\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: {\n xs: \"repeat(3, minmax(0, 1fr))\",\n md: \"repeat(6, minmax(0, 1fr))\",\n },\n gap: { xs: 1.5, md: 2 },\n justifyItems: \"center\",\n width: \"100%\",\n }}\n >\n {top6.map((juego: any, index: number) => (\n <OraculoGameRankCard\n key={isLoading ? `sk-${index}` : (juego.machine ?? `${index}`)}\n imageUrl={isLoading ? \"\" : juego.background ? `https://olimpo.bet${juego.background}` : `https://olimpo.bet${juego.logo ?? \"\"}`}\n orden={isLoading ? index + 1 : juego.orden}\n loading={isLoading}\n onClick={\n isLoading\n ? undefined\n : () => {\n onCardClick?.(juego);\n handleOpen(juego);\n }\n }\n />\n ))}\n </Box>\n </Stack>\n </section>\n );\n}\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Stack from \"@mui/material/Stack\";\nimport Typography from \"@mui/material/Typography\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\nimport OraculoLiveCasinoCard from \"../../molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard\";\nimport { OraculoSeccionCasinoEnVivoProps } from \"../../interfaces/oraculo/InterfaceCasinoEnVivo\";\nimport { OraculoGameItem } from \"../..\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\nconst getGameId = (g: OraculoGameItem, idx: number) =>\n g.orden ?? g.machine ?? idx;\n\nconst OraculoSeccionCasinoEnVivo: React.FC<OraculoSeccionCasinoEnVivoProps> = ({\n items,\n title = \"Casino en vivo\",\n subtitle = \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\",\n backgroundMobileUrl = \"\",\n onCardClick,\n backgroundDesktopUrl = \"\",\n onViewMore,\n className,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const handleOpenLive = (juego: any) => {\n captureInteraction({\n element: \"live_casino_card\",\n label: `Landing: ${docId} - OraculoSeccionCasinoEnVivo - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(juego.machine || \"unknown\"),\n provider: juego.provider || \"unknown\",\n section: \"OraculoSeccionCasinoEnVivo\",\n },\n });\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n if (!loadMachine) {\n if (onCardClick) {\n onCardClick(juego);\n return;\n }\n console.warn(\n \"[OraculoSeccionCasinoEnVivo] No existe loadMachine en extras ni onCardClick. No se puede abrir el juego.\",\n { machine: juego?.machine, provider: juego?.provider }\n );\n return;\n }\n\n // 1) Mostrar contenedor del iframe\n showIframe?.();\n\n // 2) Subir arriba (para que el iframe no aparezca “desde donde estabas”)\n if (typeof window !== \"undefined\") {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n }\n\n // 3) Abrir juego con el flujo del host (mismo que casino/virtuales)\n // Espera 1 frame por si el DOM del iframe se monta/actualiza al mostrarlo\n requestAnimationFrame(() => {\n loadMachine?.(juego, false, \"casino_en_vivo\");\n });\n };\n\n \n const handleViewMore = () => {\n captureInteraction({\n element: \"casino_en_vivo_view_more\",\n label: `Landing: ${docId} - OraculoSeccionCasinoEnVivo - Ver más`,\n target: \"https://www.olimpo.bet/casino-en-vivo\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasinoEnVivo\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n if (onViewMore) {\n onViewMore();\n } else {\n globalThis.location.assign(\"https://www.olimpo.bet/casino-en-vivo\");\n }\n }\n };\n\n return (\n <Box\n className={className}\n sx={{\n position: \"relative\",\n color: \"white\",\n overflow: \"hidden\",\n }}\n >\n {/* Fondo */}\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n mt:{ xs: 0, md: 4 },\n backgroundImage: {\n xs: `\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\n url('${backgroundMobileUrl}')\n `,\n md: `\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\n url('${backgroundDesktopUrl}')\n `,\n },\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n zIndex: 0,\n }}\n />\n\n {/* Contenido */}\n <Box\n sx={{\n position: \"relative\",\n zIndex: 1,\n maxWidth: 1200,\n height: { xs: \"450px\", md: \"590px\" },\n mx: \"auto\",\n px: { xs: 2.5, md: 6 },\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: { xs: \"center\", md: \"center\" },\n justifyContent: \"center\",\n gap: { xs: 0, md: 15 },\n textAlign: { xs: \"center\", md: \"left\" },\n }}\n >\n {/* Columna izquierda */}\n <Stack spacing={3} sx={{ maxWidth: { md: 280 } }}>\n <Typography\n variant=\"h4\"\n sx={{\n fontWeight: 800,\n fontSize: { xs: 24, md: 40 },\n WebkitTextStroke: \"0.5px rgba(255, 255, 255, .5)\",\n textShadow:\n \"0 0 2px rgba(255, 255, 255, .95),\" +\n \"0 0 4px rgba(255, 255, 255, .6),\" +\n \"0 1px 0 #898989\",\n }}\n >\n {title}\n </Typography>\n\n <Typography\n sx={{\n fontSize: { xs: 14, md: 18 },\n color: \"rgba(255,255,255,0.9)\",\n marginX: { xs: 4, md: 0 },\n lineHeight: 1.5,\n }}\n >\n {subtitle}\n </Typography>\n\n <Box sx={{ display: { xs: \"none\", md: \"block\" } }}>\n <OraculoButton\n variant=\"primary\"\n size=\"md\"\n onClick={handleViewMore}\n >\n Ver más\n </OraculoButton>\n </Box>\n </Stack>\n\n {/* Lista de tarjetas */}\n <Box\n sx={{\n display: \"flex\",\n gap: { xs: 2, md: 3 },\n justifyContent: \"center\",\n overflowX: { xs: \"auto\", md: \"visible\" },\n py: { xs: 3, md: 0 },\n alignItems: \"center\",\n }}\n >\n {(items ?? []).slice(0, 3).map((juego, idx) => (\n <OraculoLiveCasinoCard\n key={getGameId(juego, idx)}\n logo={`https://olimpo.bet${juego.background ? juego.background : (juego.logo ?? \"\")}`}\n provider={juego.provider}\n providerName={juego.web_name}\n machine={juego.machine}\n onClick={() => handleOpenLive(juego)}\n />\n ))}\n </Box>\n\n {/* Botón mobile */}\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\n <OraculoButton\n variant=\"primary\"\n size=\"lg\"\n onClick={handleViewMore}\n >\n Ver más\n </OraculoButton>\n </Box>\n </Box>\n </Box>\n );\n};\n\nexport default OraculoSeccionCasinoEnVivo;\n","import { useEffect, useState } from \"react\";\nimport { OraculoGameItem } from \"../interfaces/oraculo/InterfaceGameItem\";\nimport { getOraculoExtra } from \"../utils/openMachineRegistry\";\n\nconst RECOMMENDATIONS_URL =\n \"https://1v5raznji6.execute-api.us-east-1.amazonaws.com/dev/recommendations\";\n\nconst mapMachineToGameItem = (\n machine: any,\n index: number\n): OraculoGameItem => {\n return {\n ...machine,\n id: machine.id ?? index,\n orden: machine.id ?? index,\n machine: String(\n machine.id ?? machine.machine ?? machine.external_id ?? index\n ),\n logo: machine.logo,\n background: machine.background,\n room_name: machine.room_name ?? \"\",\n product: machine.product ?? \"\",\n service: machine.service ?? \"\",\n provider: machine.provider ?? \"\",\n game_type: machine.game_type ?? null,\n external_id: machine.external_id ?? \"\",\n } as OraculoGameItem;\n};\n\nconst extractMachineIds = (payload: any): string[] => {\n if (!payload) return [];\n\n if (!Array.isArray(payload) && Array.isArray(payload.recommendations)) {\n return payload.recommendations\n .filter(Boolean)\n .map((id: any) => String(id));\n }\n\n return [];\n};\n\nconst getPersonalizeUserId = () => {\n const user = getOraculoExtra<any>(\"user\");\n return user?.userId ?? user?.user ?? user?.id ?? null;\n};\n\nconst fetchRecommendations = async (productType:any) => {\n const userId = getPersonalizeUserId();\n\n const qs = new URLSearchParams({\n userId: String(userId),\n productType,\n filter: \"high-payout\",\n });\n\n const url = `${RECOMMENDATIONS_URL}?${qs.toString()}`;\n const res = await fetch(url);\n\n if (!res.ok) {\n throw new Error(\n `No se pudo obtener recomendaciones. HTTP ${res.status} ${res.statusText}`\n );\n }\n\n return res.json();\n};\n\nexport const usePersonalizeGameItems = (\n items: OraculoGameItem[],\n isPersonalize = false,\n productType = \"Casino\"\n) => {\n const [resolvedItems, setResolvedItems] = useState<OraculoGameItem[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n\n const run = async () => {\n if (!isPersonalize) {\n setResolvedItems(Array.isArray(items) ? items : []);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n\n try {\n const recommendationsPayload = await fetchRecommendations(productType);\n const machineIds = extractMachineIds(recommendationsPayload);\n\n if (!machineIds.length) {\n if (!cancelled) {\n setResolvedItems([]);\n }\n return;\n }\n\n const machineResults = await Promise.allSettled(\n machineIds.map(async (machineId: string, index: number) => {\n const res = await fetch(\n `https://api.mktolimpo.com/api/machine/${machineId}`\n );\n\n if (!res.ok) {\n throw new Error(`No se pudo obtener machine ${machineId}`);\n }\n\n const data = await res.json();\n return mapMachineToGameItem(data, index);\n })\n );\n\n if (cancelled) return;\n\n const parsedItems = machineResults\n .filter(\n (result): result is PromiseFulfilledResult<OraculoGameItem> =>\n result.status === \"fulfilled\"\n )\n .map((result) => result.value);\n\n setResolvedItems(parsedItems);\n } catch (error) {\n console.error(`[usePersonalizeGameItems:${productType}] error:`, error);\n if (!cancelled) {\n setResolvedItems([]);\n }\n } finally {\n if (!cancelled) {\n setLoading(false);\n }\n }\n };\n\n run();\n\n return () => {\n cancelled = true;\n };\n }, [items, isPersonalize, productType]);\n\n return {\n resolvedItems,\n loading,\n };\n};\n\nexport const usePersonalizeCasinoItems = (\n items: OraculoGameItem[],\n isPersonalize = false\n) => usePersonalizeGameItems(items, isPersonalize, \"Casino\");\n\nexport const usePersonalizeVirtualesItems = (\n items: OraculoGameItem[],\n isPersonalize = false\n) => usePersonalizeGameItems(items, isPersonalize, \"Deportes Virtuales\");","import React, { useMemo, useRef, useState } from \"react\";\nimport Stack from \"@mui/material/Stack\";\nimport Box from \"@mui/material/Box\";\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\n\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\nimport OraculoCarousel, {\n OraculoCarouselRef,\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport OraculoGameSlide, {\n OraculoGameSlideItem,\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\nimport { OraculoSeccionCasinoProps } from \"../../interfaces/oraculo/InterfaceCasino\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeCasinoItems } from \"../../hooks/usePersonalizeCasinoItems\";\n\ntype SlideKind = \"mosaic\" | \"grid\";\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\ninterface CasinoSlide {\n id: string;\n kind: SlideKind;\n items: OraculoGameSlideItem[];\n}\n\nconst parseBooleanValue = (input: any): boolean => {\n if (typeof input === \"boolean\") return input;\n\n if (typeof input === \"string\") {\n return input.toLowerCase() === \"true\";\n }\n\n if (input && typeof input === \"object\") {\n if (typeof input.value === \"boolean\") return input.value;\n\n if (typeof input.value === \"string\") {\n return input.value.toLowerCase() === \"true\";\n }\n }\n\n return false;\n};\n\nconst getGameId = (g: OraculoGameItem, idx: number) =>\n g.orden ?? g.machine ?? idx;\n\nconst buildCasinoSlides = (\n games: OraculoGameItem[],\n mosaicFirst = true,\n gridSize = 1,\n): CasinoSlide[] => {\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\n id: getGameId(g, idx),\n imageUrl: g.logo ?? \"\",\n ...(g.background ? { background: g.background } : {}),\n }));\n\n if (!baseItems.length) return [];\n\n const slides: CasinoSlide[] = [];\n let start = 0;\n\n if (mosaicFirst) {\n const take = Math.min(baseItems.length, 1);\n slides.push({\n id: \"mosaic-0\",\n kind: \"mosaic\",\n items: baseItems.slice(0, take),\n });\n start = take;\n }\n\n while (start < baseItems.length) {\n const end = Math.min(start + gridSize, baseItems.length);\n slides.push({\n id: `grid-${start}`,\n kind: \"grid\",\n items: baseItems.slice(start, end),\n });\n start = end;\n }\n\n return slides;\n};\n\nconst buildLoadingSlides = (\n mosaicFirst = true,\n gridSize = 4,\n): CasinoSlide[] => {\n const mkItems = (n: number) =>\n Array.from({ length: n }, (_, i) => ({\n id: `sk-${n}-${i}`,\n imageUrl: \"\",\n }));\n\n const slides: CasinoSlide[] = [];\n\n if (mosaicFirst) {\n slides.push({\n id: \"mosaic-loading\",\n kind: \"mosaic\",\n items: mkItems(5),\n });\n }\n\n slides.push({\n id: \"grid-loading\",\n kind: \"grid\",\n items: mkItems(gridSize),\n });\n\n return slides;\n};\n\nconst OraculoSeccionCasino: React.FC<OraculoSeccionCasinoProps> = ({\n items,\n title = \"Casino\",\n iconUrl = \"/assets/img/home/Casino/diamante.svg\",\n onItemClick,\n onViewMore,\n mosaicFirst = true,\n gridSize = 1,\n isPersonalize = false,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n\n const personalizeEnabled = parseBooleanValue(isPersonalize);\n\n const { resolvedItems, loading } = usePersonalizeCasinoItems(\n items,\n personalizeEnabled\n );\n\n const currentItems = personalizeEnabled\n ? resolvedItems\n : Array.isArray(items)\n ? items\n : [];\n\n const isLoading = personalizeEnabled\n ? loading\n : currentItems.length === 0;\n\n const slides = useMemo(() => {\n if (isLoading) {\n return buildLoadingSlides(mosaicFirst, gridSize);\n }\n\n return buildCasinoSlides(currentItems, mosaicFirst, gridSize);\n }, [isLoading, mosaicFirst, gridSize, currentItems]);\n\n const handlePrev = () => {\n captureInteraction({\n element: \"casino_prev\",\n label: `Landing: ${docId} - OraculoSeccionCasino ${isPersonalize? \" - personalize\" : \"\"} - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasino\" },\n });\n\n carouselRef.current?.prev();\n };\n\n const handleNext = () => {\n captureInteraction({\n element: \"casino_next\",\n label: `Landing: ${docId} - OraculoSeccionCasino ${isPersonalize? \" - personalize\" : \"\"} - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasino\" },\n });\n\n carouselRef.current?.next();\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"casino_view_more\",\n label: `Landing: ${docId} - OraculoSeccionCasino ${isPersonalize? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/casino\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasino\" },\n });\n\n if (onViewMore) {\n onViewMore();\n return;\n }\n\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/casino\");\n }\n };\n\n return (\n <section>\n <Stack direction=\"column\" spacing={2} useFlexGap>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto auto\",\n alignItems: \"center\",\n columnGap: 1.5,\n rowGap: 1,\n px: { xs: 2, sm: 0 },\n }}\n >\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\n <OraculoButton\n ariaLabel=\"Anterior\"\n variant=\"secondary\"\n iconOnly\n leftIcon={<ChevronLeftRounded />}\n onClick={handlePrev}\n disabled={navState.isStart}\n />\n <OraculoButton\n ariaLabel=\"Siguiente\"\n variant=\"secondary\"\n iconOnly\n rightIcon={<ChevronRightRounded />}\n onClick={handleNext}\n disabled={navState.isEnd}\n />\n </Box>\n\n <Box sx={{ justifySelf: \"end\" }}>\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\n Ver más\n </OraculoButton>\n </Box>\n </Box>\n\n <OraculoCarousel\n ref={carouselRef}\n items={slides}\n perPage={undefined}\n gap=\"16px\"\n enableHorizontalWheel\n showRightGradient\n options={{ autoWidth: true, trimSpace: \"move\" }}\n breakpoints={{\n 400: {\n gap: \"4px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n 768: {\n gap: \"8px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n 1024: {\n gap: \"10px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n }}\n renderItem={(slide) => (\n <div style={{ alignSelf: \"start\" }}>\n <OraculoGameSlide\n items={slide.items}\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\n loading={isLoading}\n onClick={(itm) => {\n if (isLoading) return;\n\n const game = currentItems.find(\n (g, idx) => String(getGameId(g, idx)) === String(itm.id),\n );\n\n if (!game) return;\n\n onItemClick?.(game);\n\n captureInteraction({\n element: \"casino_game_card\",\n label: `Landing: ${docId} - OraculoSeccionCasino ${isPersonalize? \" - personalize\" : \"\"} - Game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(game.machine || \"unknown\"),\n section: title || \"Casino\",\n },\n });\n\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine =\n getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n showIframe?.();\n loadMachine?.(game, false, \"CASINO\");\n }}\n />\n </div>\n )}\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\n />\n </Stack>\n </section>\n );\n};\n\nexport default OraculoSeccionCasino;","import React, { useMemo, useRef, useState } from \"react\";\nimport Stack from \"@mui/material/Stack\";\nimport Box from \"@mui/material/Box\";\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\n\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\nimport OraculoCarousel, {\n OraculoCarouselRef,\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport OraculoGameSlide, {\n OraculoGameSlideItem,\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\nimport { OraculoSeccionVirtualesProps } from \"../../interfaces/oraculo/InterfaceVirtuales\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeVirtualesItems } from \"../../hooks/usePersonalizeCasinoItems\";\n\ntype SlideKind = \"mosaic\" | \"grid\";\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\n\ninterface VirtualSlide {\n id: string;\n kind: SlideKind;\n items: OraculoGameSlideItem[];\n}\n\nconst parseBooleanValue = (input: any): boolean => {\n if (typeof input === \"boolean\") return input;\n\n if (typeof input === \"string\") {\n return input.toLowerCase() === \"true\";\n }\n\n if (input && typeof input === \"object\") {\n if (typeof input.value === \"boolean\") return input.value;\n\n if (typeof input.value === \"string\") {\n return input.value.toLowerCase() === \"true\";\n }\n }\n\n return false;\n};\n\nconst getGameId = (g: OraculoGameItem, idx: number) =>\n g.orden ?? g.machine ?? idx;\n\nconst buildVirtualSlides = (\n games: OraculoGameItem[],\n mosaicFirst = true,\n gridSize = 1,\n): VirtualSlide[] => {\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\n id: getGameId(g, idx),\n imageUrl: g.logo ?? \"\",\n ...(g.background ? { background: g.background } : {}),\n }));\n\n if (!baseItems.length) return [];\n\n const slides: VirtualSlide[] = [];\n let start = 0;\n\n if (mosaicFirst) {\n const take = Math.min(baseItems.length, 1);\n slides.push({\n id: \"mosaic-0\",\n kind: \"mosaic\",\n items: baseItems.slice(0, take),\n });\n start = take;\n }\n\n while (start < baseItems.length) {\n const end = Math.min(start + gridSize, baseItems.length);\n slides.push({\n id: `grid-${start}`,\n kind: \"grid\",\n items: baseItems.slice(start, end),\n });\n start = end;\n }\n\n return slides;\n};\n\nconst buildLoadingVirtualSlides = (\n mosaicFirst = true,\n gridSize = 4,\n): VirtualSlide[] => {\n const mkItems = (n: number) =>\n Array.from({ length: n }, (_, i) => ({\n id: `sk-${n}-${i}`,\n imageUrl: \"\",\n }));\n\n const slides: VirtualSlide[] = [];\n\n if (mosaicFirst) {\n slides.push({\n id: \"mosaic-loading\",\n kind: \"mosaic\",\n items: mkItems(5),\n });\n }\n\n slides.push({\n id: \"grid-loading\",\n kind: \"grid\",\n items: mkItems(gridSize),\n });\n\n return slides;\n};\n\nconst OraculoSeccionVirtuales: React.FC<OraculoSeccionVirtualesProps> = ({\n items,\n title = \"Virtuales\",\n iconUrl = \"/assets/img/home/Virtuales/virtuales.svg\",\n onItemClick,\n onViewMore,\n mosaicFirst = true,\n gridSize = 1,\n isPersonalize = false,\n}) => {\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n const personalizeEnabled = parseBooleanValue(isPersonalize);\n\n const { resolvedItems, loading } = usePersonalizeVirtualesItems(\n items,\n personalizeEnabled\n );\n\n const currentItems = personalizeEnabled\n ? resolvedItems\n : Array.isArray(items)\n ? items\n : [];\n\n const isLoading = personalizeEnabled\n ? loading\n : currentItems.length === 0;\n\n const slides = useMemo(() => {\n if (isLoading) {\n return buildLoadingVirtualSlides(mosaicFirst, gridSize);\n }\n\n return buildVirtualSlides(currentItems, mosaicFirst, gridSize);\n }, [isLoading, mosaicFirst, gridSize, currentItems]);\n\n const handlePrev = () => {\n captureInteraction({\n element: \"virtuales_prev\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionVirtuales\" },\n });\n\n carouselRef.current?.prev();\n };\n\n const handleNext = () => {\n captureInteraction({\n element: \"virtuales_next\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionVirtuales\" },\n });\n\n carouselRef.current?.next();\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"virtuales_view_more\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/juegos-virtuales\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionVirtuales\" },\n });\n\n if (onViewMore) {\n onViewMore();\n return;\n }\n\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/juegos-virtuales\");\n }\n };\n\n return (\n <section>\n <Stack direction=\"column\" spacing={2} useFlexGap>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto auto\",\n alignItems: \"center\",\n columnGap: 1.5,\n rowGap: 1,\n px: { xs: 2, sm: 0 },\n }}\n >\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\n\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\n <OraculoButton\n ariaLabel=\"Anterior\"\n variant=\"secondary\"\n iconOnly\n leftIcon={<ChevronLeftRounded />}\n onClick={handlePrev}\n disabled={navState.isStart}\n />\n <OraculoButton\n ariaLabel=\"Siguiente\"\n variant=\"secondary\"\n iconOnly\n rightIcon={<ChevronRightRounded />}\n onClick={handleNext}\n disabled={navState.isEnd}\n />\n </Box>\n\n <Box sx={{ justifySelf: \"end\" }}>\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\n Ver más\n </OraculoButton>\n </Box>\n </Box>\n\n <OraculoCarousel\n ref={carouselRef}\n items={slides}\n perPage={undefined}\n gap=\"16px\"\n breakpoints={{\n 400: {\n gap: \"4px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n 768: {\n gap: \"8px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n 1024: {\n gap: \"10px\",\n focus: \"center\",\n padding: { left: \"24px\", right: \"24px\" },\n },\n }}\n enableHorizontalWheel\n showRightGradient\n options={{ autoWidth: true, trimSpace: \"move\" }}\n renderItem={(slide) => (\n <div style={{ alignSelf: \"start\" }}>\n <OraculoGameSlide\n items={slide.items}\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\n loading={isLoading}\n onClick={(itm) => {\n if (isLoading) return;\n\n const game = currentItems.find(\n (g, idx) => String(getGameId(g, idx)) === String(itm.id),\n );\n\n if (!game) {\n console.warn(\n \"[virtuales] no se encontró game para id:\",\n itm.id,\n );\n return;\n }\n\n onItemClick?.(game);\n\n captureInteraction({\n element: \"virtuales_game_card\",\n label: `Landing: ${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: {\n game_name: String(game.machine || \"unknown\"),\n section: title || \"Virtuales\",\n },\n });\n\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\n const loadMachine =\n getOraculoExtra<LoadMachineFn>(\"loadMachine\");\n\n showIframe?.();\n loadMachine?.(\n game,\n false,\n personalizeEnabled ? \"VIRTUALES_PERSONALIZE\" : \"VIRTUALES\"\n );\n }}\n />\n </div>\n )}\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\n />\n </Stack>\n </section>\n );\n};\n\nexport default OraculoSeccionVirtuales;","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\n\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport OraculoWelcomeBanner from \"../../molecules/OraculoWelcomeBanner/OraculoWelcomeBanner\";\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\nimport { OraculoSeccionBonoProps, OraculoBonosItem } from \"../../interfaces/oraculo/InterfaceBonos\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nconst buildSectionSx = (bgUrl: string) => ({\n position: \"relative\" as const,\n py: 8,\n color: \"#fff\",\n backgroundImage: `\n linear-gradient(to bottom,#121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to left, #121212 0%, rgba(18,18,18,0) 10%),\n linear-gradient(to right, #121212 0%, rgba(18,18,18,0) 10%),\n url(\"${bgUrl}\")\n `,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n backgroundSize: \"cover\",\n});\n\nconst headlineBaseSx = {\n textAlign: \"center\" as const,\n lineHeight: 1.1,\n mb: 1.5,\n};\n\nconst hlTopSx = {\n display: \"inline-block\",\n fontWeight: 600,\n fontSize: 24,\n};\n\nconst hlBottomSx = {\n display: \"inline-block\",\n fontSize: 24,\n lineHeight: 1.1,\n WebkitTextStroke: \"0.3px rgba(255, 255, 255, .5)\",\n textShadow: `\n 0 0 2px rgba(255, 255, 255, .95),\n 0 0 6px rgba(255, 255, 255, .6),\n 0 1px 0 rgba(137, 137, 137, .85)\n `,\n};\n\nconst OraculoSeccionBonoBienvenida: React.FC<OraculoSeccionBonoProps> = ({\n headline,\n headline2,\n items,\n backgroundImageUrl,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\n const showDots = items.length > 1;\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const wheelHostRef = useRef<HTMLDivElement | null>(null);\n const isMounted = useRef(false);\n const isAutoplayRef = useRef(false);\n\n const [activeIndex, setActiveIndex] = useState(0);\n\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\n\n // ✅ Marcar el componente como montado después del primer render\n useEffect(() => {\n const timer = setTimeout(() => {\n isMounted.current = true;\n }, 500);\n return () => clearTimeout(timer);\n }, []);\n const navRef = useRef(navState);\n useEffect(() => {\n navRef.current = navState;\n }, [navState]);\n\n const wheelLockRef = useRef(false);\n const wheelUnlockTimerRef = useRef<number | null>(null);\n\n const activeSlide = items?.[activeIndex];\n\n const bgUrl = useMemo(\n () => activeSlide?.backgroundImageUrl ?? backgroundImageUrl ?? \"\",\n [activeSlide, backgroundImageUrl]\n );\n\n const sectionSx = buildSectionSx(bgUrl);\n\n const isLoading = !items || items.length === 0;\n\n // ✅ Capturar clicks en botones de banners\n const handleBannerButtonClick = (item: OraculoBonosItem, index: number) => {\n captureInteraction({\n element: \"welcome_banner_button\",\n label: `OraculoSeccionBonoBienvenida - Banner button click: ${item.title || \"OraculoSeccionBonoBienvenida - Banner \" + (index + 1)}`,\n target: \"action\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n banner_position: index + 1,\n banner_total: items?.length || 0,\n },\n tags: {\n banner_title: item.title || \"no_title\",\n button_text: item.buttonText || \"no_text\",\n },\n });\n\n // Ejecutar callback original\n if (item.onButtonClick) {\n item.onButtonClick();\n }\n };\n\n // ✅ Capturar cambios de slide\n const handleSlideChange = (index: number) => {\n if (!isMounted.current) return;\n if (isAutoplayRef.current) {\n isAutoplayRef.current = false;\n return;\n }\n\n const item = items?.[index];\n captureInteraction({\n element: \"welcome_banner_carousel\",\n label: `Landing: ${docId} - OraculoSeccionBonoBienvenida - Banner view: ${item?.title || \"OraculoSeccionBonoBienvenida - Banner \" + (index + 1)}`,\n target: \"no_url\",\n event_type: \"view\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n slide_index: index + 1,\n total_slides: items?.length || 0,\n interaction_type: \"manual_slide\",\n },\n tags: {\n banner_position: String(index + 1),\n banner_title: item?.title || \"no_title\",\n },\n });\n };\n\n useEffect(() => {\n const el = wheelHostRef.current;\n if (!el) return;\n\n const THRESHOLD = 6;\n const INVERT = false;\n const LOCK_MS = 380;\n\n const onWheel = (e: WheelEvent) => {\n if (isLoading) return;\n if (e.ctrlKey) return;\n\n if (wheelLockRef.current) return;\n\n const dx = e.deltaX;\n const dy = e.deltaY;\n\n // solo horizontal\n if (Math.abs(dx) <= Math.abs(dy)) return;\n if (Math.abs(dx) < THRESHOLD) return;\n\n const dirNext = INVERT ? dx < 0 : dx > 0;\n\n // si no es loop, evitamos “rebotar” en bordes\n if (dirNext && navRef.current.isEnd) return;\n if (!dirNext && navRef.current.isStart) return;\n\n e.preventDefault();\n\n wheelLockRef.current = true;\n if (dirNext) carouselRef.current?.next();\n else carouselRef.current?.prev();\n\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\n wheelUnlockTimerRef.current = window.setTimeout(() => {\n wheelLockRef.current = false;\n }, LOCK_MS);\n };\n\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n el.removeEventListener(\"wheel\", onWheel as any);\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\n };\n }, [isLoading]);\n\n const renderSlide = (it: OraculoBonosItem, desktop: boolean, index: number) => {\n const hl1 = it.headline ?? headline;\n const hl2 = it.headline2 ?? headline2;\n\n if (!desktop) {\n return (\n <Box sx={{ textAlign: \"center\" }}>\n {(hl1 || hl2) && (\n <Box sx={headlineBaseSx}>\n {hl1 && (\n <Typography component=\"span\" sx={hlTopSx}>\n {hl1}\n </Typography>\n )}\n {hl2 && (\n <>\n <br />\n <Typography component=\"span\" sx={hlBottomSx}>\n {hl2}\n </Typography>\n </>\n )}\n </Box>\n )}\n\n <Box sx={{ display: \"flex\", justifyContent: \"center\" }}>\n <OraculoWelcomeBanner\n {...it}\n onButtonClick={() => handleBannerButtonClick(it, index)}\n variant=\"small\"\n />\n </Box>\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n maxWidth: 1200,\n mx: \"auto\",\n px: 15,\n display: \"grid\",\n gridTemplateColumns: \"260px minmax(0, 1fr)\",\n alignItems: \"center\",\n columnGap: 6,\n }}\n >\n {(hl1 || hl2) && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n minHeight: \"100%\",\n }}\n >\n <Box sx={{ ...headlineBaseSx, textAlign: \"left\", mb: 0 }}>\n {hl1 && (\n <Typography component=\"span\" sx={hlTopSx}>\n {hl1}\n </Typography>\n )}\n {hl2 && (\n <>\n <br />\n <Typography component=\"span\" sx={hlBottomSx}>\n {hl2}\n </Typography>\n </>\n )}\n </Box>\n </Box>\n )}\n\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\n <Box sx={{ width: \"100%\", maxWidth: 600, mx: \"auto\" }}>\n <OraculoWelcomeBanner\n {...it}\n onButtonClick={() => handleBannerButtonClick(it, index)}\n variant=\"large\"\n />\n </Box>\n </Box>\n </Box>\n );\n };\n\n return (\n <Box component=\"section\" sx={sectionSx}>\n <div ref={wheelHostRef} style={{ width: \"100%\" }}>\n <OraculoCarousel\n ref={carouselRef}\n items={items}\n perPage={1}\n gap={\"0px\"}\n options={{\n autoWidth: false,\n // si quieres, puedes activar loop acá:\n // type: \"loop\",\n // perMove: 1,\n // focus: \"center\",\n // pagination: false,\n // arrows: false,\n // drag: true,\n }}\n renderItem={(it, idx) => (\n <Box sx={{ width: \"100%\" }}>\n {renderSlide(it, !isMobile, idx)}\n </Box>\n )}\n onMove={({ index, isStart, isEnd }: any) => {\n setActiveIndex(index);\n if (typeof isStart === \"boolean\" && typeof isEnd === \"boolean\") {\n setNavState({ isStart, isEnd });\n }\n handleSlideChange(index);\n }}\n />\n </div>\n\n {showDots && (\n <Box sx={{ mt: 2, display: \"flex\", justifyContent: \"center\" }}>\n <OraculoCarouselDots\n total={items.length}\n active={activeIndex}\n onSelect={(i) => {\n captureInteraction({\n element: \"welcome_banner_dots\",\n label: `Landing: ${docId} - OraculoSeccionBonoBienvenida - Dot navigation: Banner ${i + 1}`,\n target: \"no_url\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n dot_index: i + 1,\n total_dots: items.length,\n },\n tags: {\n navigation_type: \"dot_click\",\n },\n });\n setActiveIndex(i);\n carouselRef.current?.go(i);\n }}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default OraculoSeccionBonoBienvenida;\n","import React, { useLayoutEffect, useRef } from \"react\";\nimport \"./OraculoSeccionClubOlimpo.css\";\nimport OraculoClubOlimpoVisual from \"../../molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual\";\nimport { OraculoSeccionClubOlimpoItem } from \"../../interfaces/oraculo/InterfaceClubOlimpo\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nexport interface OraculoSeccionClubOlimpoItems {\n className?: string;\n /** Si true, hace el efecto full-bleed (100vw centrado) */\n fullBleed?: boolean;\n /** Lista de variantes (puedes pasar 1 o varias). */\n items: OraculoSeccionClubOlimpoItem;\n /** Índice del item a mostrar si pasas varios. */\n selectedIndex?: number;\n /** aria-label de la sección (fallback al imgAlt del item seleccionado). */\n ariaLabel?: string;\n}\n\nconst OraculoSeccionClubOlimpo: React.FC<OraculoSeccionClubOlimpoItems> = ({\n className = \"\",\n fullBleed = true,\n items,\n selectedIndex = 0,\n ariaLabel,\n}) => {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const bottomRef = useRef<HTMLDivElement | null>(null);\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n if (!items) return null;\n\n const onClick = () => {\n captureInteraction({\n element: \"club_olimpo_button\",\n label: `Landing: ${docId} - OraculoSeccionClubOlimpo - Click: Club Olimpo`,\n target: \"https://www.olimpo.bet/conoce-club-olimpo\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionClubOlimpo\" },\n });\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/conoce-club-olimpo\");\n }\n };\n\n const item = Array.isArray(items) ? items[selectedIndex] : items;\n\n useLayoutEffect(() => {\n if (!rootRef.current || !bottomRef.current) return;\n if (typeof ResizeObserver === \"undefined\") return;\n\n const root = rootRef.current;\n const bottom = bottomRef.current;\n\n const update = () => {\n root.style.setProperty(\n \"--orc-co-bottomH\",\n `${bottom.offsetHeight + 16}px`,\n );\n };\n\n const ro = new ResizeObserver(update);\n ro.observe(bottom);\n update();\n\n return () => ro.disconnect();\n }, []);\n\n const rootClass = [\n \"orc-co-wrap\",\n fullBleed ? \"orc-co-fullBleed\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <section\n ref={rootRef}\n className={rootClass}\n aria-label={ariaLabel || item.imgAlt || \"Club Olimpo\"}\n >\n <div ref={bottomRef}>\n <OraculoClubOlimpoVisual\n text={item.text}\n // onClick={item.onClick}\n onClick={onClick}\n imgAlt={item.imgAlt}\n buttonLabel={item.buttonLabel}\n imgSrcMobile={item.imgMobile}\n imgSrcDesktopBg={item.imgDesktopBg}\n imgSrcDesktopLogo={item.imgDesktopLogo}\n />\n </div>\n </section>\n );\n};\n\nexport default OraculoSeccionClubOlimpo;\n","import { useRef, useState, useEffect, useMemo } from \"react\";\r\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventCombinadasCard from \"../../molecules/OraculoEventCard/OraculoEventCombinadasCard\";\r\nimport styles from \"./OraculoSeccionEventoCombinadas.module.css\";\r\nimport Stack from '@mui/material/Stack';\r\nimport React from \"react\";\r\nimport { verMasSeccionCombinadas } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nconst extractRowOutcomes = (row: any): number[] => {\r\n if (row.outcome?.id) return [row.outcome.id];\r\n if (row.type === \"BET_BUILDER\" && row.group?.groups) {\r\n return row.group.groups.flatMap((g: any) => g.outcomes?.map((o: any) => o.id) ?? []);\r\n }\r\n return [];\r\n};\r\n\r\nfunction mergeEventOffers(eventos: any[], betOffers: any[], prePackCoupons: any[]) {\r\n if (!prePackCoupons) return [];\r\n return prePackCoupons.map(coupon => {\r\n const rows = coupon.prePackCouponRows.flatMap((row: any) => {\r\n return extractRowOutcomes(row).map(outcomeId => ({ eventId: row.eventId, outcomeId }));\r\n });\r\n\r\n const eventIds = new Set(rows.map((r: any) => r.eventId));\r\n const outcomeIds = new Set(rows.map((r: any) => r.outcomeId));\r\n const rowIndexByOutcomeId = new Map(rows.map((r: any, idx: number) => [r.outcomeId, idx]));\r\n const betOffersByEvent: Record<number, any[]> = {};\r\n\r\n for (const offer of betOffers) {\r\n if (!eventIds.has(offer.eventId)) continue;\r\n const filteredOutcomes = offer.outcomes\r\n .filter((o: any) => outcomeIds.has(o.id))\r\n .map((o: any) => ({ ...o, position: rowIndexByOutcomeId.get(o.id) }));\r\n\r\n if (!filteredOutcomes.length) continue;\r\n betOffersByEvent[offer.eventId] ??= [];\r\n betOffersByEvent[offer.eventId].push({ ...offer, outcomes: filteredOutcomes });\r\n }\r\n\r\n const mergedEvents = eventos\r\n .filter(e => eventIds.has(e.id))\r\n .map(evento => ({ ...evento, betoffers: betOffersByEvent[evento.id] ?? [] }));\r\n return {\r\n couponId: coupon.id,\r\n status: coupon.status,\r\n combinadoTotal: kambiDisplayComboFromRows(coupon.prePackCouponRows),\r\n events: mergedEvents,\r\n };\r\n });\r\n}\r\n\r\nfunction kambiDisplayComboFromRows(rows: any[]): number {\r\n \r\n if (!Array.isArray(rows) || rows.length === 0) return 0;\r\n\r\n let product = 1;\r\n\r\n for (const row of rows) {\r\n const raw = row.odds.decimal / 1000;\r\n\r\n const normalized = Math.round(raw * 100) / 100;\r\n\r\n product *= normalized;\r\n }\r\n\r\n return Math.floor(product * 100) / 100;\r\n}\r\n\r\nconst MemoizedCombinadaCard = React.memo(OraculoEventCombinadasCard);\r\n\r\nexport default function OraculoSeccionEventoCombinadas({\r\n items,\r\n title = \"Combinadas del Olimpo\",\r\n iconUrl = \"https://stg-www.contodobet.com/static/img/landing/EventoCombinada/rayoIcon.svg\",\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[]>([]);\r\n const SPECIALS_GROUPS_URL = 'https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group/prepackcoupon.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764284658793&prePackCouponTags=CUSTOM'\r\n\r\n const handlePrev = () => {\r\n captureInteraction({\r\n element: \"evento_combinadas_prev\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoCombinadas - Click: Anterior`,\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoCombinadas\" },\r\n });\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n captureInteraction({\r\n element: \"evento_combinadas_next\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoCombinadas - Click: Siguiente`,\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoCombinadas\" },\r\n });\r\n carouselRef.current?.next();\r\n \r\n };\r\n\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_combinadas_ver_mas\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoCombinadas - Click: Ver más`,\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoCombinadas\" },\r\n });\r\n verMasSeccionCombinadas();\r\n };\r\n const carouselItems = useMemo(() => {\r\n return events.filter(event => event.combinadoTotal !== null);\r\n }, [events]);\r\n async function loadDataEventSpecial() {\r\n try {\r\n const listRes = await fetch(SPECIALS_GROUPS_URL);\r\n const listData = await listRes.json();\r\n\r\n const groupId = listData?.group?.groups?.[0]?.id;\r\n\r\n if (!groupId) {\r\n console.error(\"Could not extract group ID\");\r\n return;\r\n }\r\n\r\n const SPECIALS_URL = `https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/prepackcoupon/eventgroup/${groupId}.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764283566783&prePackCouponTags=CUSTOM`;\r\n\r\n const response = await fetch(SPECIALS_URL);\r\n const data = await response.json();\r\n setEvents(mergeEventOffers(data.events, data.betOffers, data.prePackCoupons));\r\n } catch (e) {\r\n console.error(\"loadDataEventSpecial error:\", e);\r\n }\r\n}\r\n\r\n\r\nuseEffect(() => {\r\n loadDataEventSpecial();\r\n}, []);\r\n\r\n const sectionClassName = className || undefined;\r\n\r\nif (carouselItems.length === 0) return null;\r\n\r\n return (\r\n <section className={sectionClassName} style={{ \r\n // paddingLeft: 16,\r\n // paddingRight: 16,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",}}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <div className={styles.padding}>\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto \" justify=\"start\">\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <div className={styles.controls}>\r\n <OraculoGridGroup spacing={1} columns=\"auto auto\">\r\n <OraculoButton\r\n ariaLabel=\"Anterior\"\r\n variant=\"secondary\"\r\n iconOnly\r\n leftIcon={<ChevronLeftRounded />}\r\n onClick={handlePrev}\r\n disabled={navState.isStart}\r\n />\r\n <OraculoButton\r\n ariaLabel=\"Siguiente\"\r\n variant=\"secondary\"\r\n iconOnly\r\n rightIcon={<ChevronRightRounded />}\r\n onClick={handleNext}\r\n disabled={navState.isEnd}\r\n />\r\n </OraculoGridGroup>\r\n\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </div>\r\n </OraculoGridGroup>\r\n</div>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={carouselItems}\r\n perPage={undefined}\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move' }}\r\n useIndexAsKey\r\n enableHorizontalWheel\r\n showRightGradient\r\n breakpoints={{\r\n 768: { perPage: 1.2,gap: \"12px\", padding: { left: \"24px\", right: \"24px\" }, }, \r\n }}\r\n renderItem={(p) => <MemoizedCombinadaCard coupon={p} />}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport styles from \"./OraculoEventEnVivoCard.module.css\";\r\n\r\nexport default function OraculoEventEnVivoCardSkeleton({}) {\r\n return (\r\n <div\r\n className={styles.cardWrapper}\r\n >\r\n <Stack direction=\"column\" spacing={1}>\r\n\r\n {/* Header */}\r\n <Stack spacing={1} direction=\"row\" >\r\n <Skeleton variant=\"text\" width=\"60%\" height={24} />\r\n <Skeleton variant=\"text\" width=\"39%\" height={24} />\r\n </Stack>\r\n\r\n {/* Teams + Score */}\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n <Skeleton variant=\"text\" width={40} height={40} />\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n </Stack>\r\n\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n <Skeleton variant=\"text\" width={40} height={16} />\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n </Stack>\r\n\r\n {/* Labels */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n </Stack>\r\n\r\n {/* Buttons */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n </Stack>\r\n\r\n </Stack>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./FadeItemWrapper.module.css\";\r\n\r\nexport default function FadeItemWrapper({ children }: { children: React.ReactNode }) {\r\n return <div className={styles.fadeWrapper}>{children}</div>;\r\n}\r\n","import { useRef, useState, useEffect, useCallback, useMemo } from \"react\";\r\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport { OraculoSeccionDestacadosItem, OraculoSeccionDestacadosProps } from \"../../interfaces/oraculo/InterfaceDestacados\";\r\nimport OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventEnVivoCard from \"../../molecules/OraculoEventCard/OraculoEventEnVivoCard\";\r\nimport OraculoEventEnVivoCardSkeleton from \"../../molecules/OraculoEventCard/OraculoEventEnVivoCardSkeleton\";\r\nimport FadeItemWrapper from \"../../molecules/OraculoEventCard/FadeItemWrapper\";\r\nimport styles from \"./OraculoSeccionEventoEnVivo.module.css\";\r\n\r\nimport React from \"react\";\r\nimport Stack from '@mui/material/Stack';\r\nimport { verMasSeccionEnVivo, fetchJerseys, useDebouncedValue } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\n\r\nconst filterFootballEvents = (events: any[] ) => {\r\n const blocked = [\"esports\", \"cyber\"];\r\n return events.filter(ev => {\r\n if (ev.event.sport !== \"FOOTBALL\") return false;\r\n const group = ev.event.group?.toLowerCase() || \"\";\r\n return !blocked.some(word => group.includes(word));\r\n });\r\n};\r\nconst MemoizedCard = React.memo(OraculoEventEnVivoCard);\r\nexport default function OraculoSeccionEventoEnVivo({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl = 'https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/icon.svg',\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n\r\n const LIVE_EVENTS_URL = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true\"; //cada 20s\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[] | null>(null);\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n const [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\r\n const fetchingRef = useRef(false);\r\n const [orderedEventIds, setOrderedEventIds] = useState<string[] | null>(null);\r\n const orderIdsFetchedRef = useRef(false);\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n const orderMapRef = useRef(new Map());\r\n const debouncedVisibleRange = useDebouncedValue(visibleRange, 300);\r\n const fetchedIdsRef = useRef(new Set());\r\n const handlePrev = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_prev\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoEnVivo - Anterior`,\r\n target: \"prev\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoEnVivo\" },\r\n });\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_next\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoEnVivo - Siguiente`,\r\n target: \"next\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoEnVivo\" },\r\n });\r\n carouselRef.current?.next();\r\n };\r\n\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_view_more\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoEnVivo - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoEnVivo\" },\r\n });\r\n verMasSeccionEnVivo();\r\n };\r\n\r\n const loadData = useCallback(async () => {\r\n try {\r\n if (!orderIdsFetchedRef.current) {\r\n orderIdsFetchedRef.current = true;\r\n try {\r\n const orderRes = await fetch(\"https://api.mktolimpo.com/api/kambi/eventos/orden\");\r\n const orderJson = await orderRes.json();\r\n const ids = orderJson?.data?.event_ids || [];\r\n \r\n // Build the O(1) lookup map\r\n const newMap = new Map();\r\n ids.forEach((id: any, index: any) => newMap.set(String(id), index));\r\n orderMapRef.current = newMap;\r\n } catch (err) {\r\n console.error(\"Order fetch failed, using default sorting\", err);\r\n }\r\n }\r\n\r\n const response = await fetch(LIVE_EVENTS_URL);\r\n if (!response.ok) throw new Error(\"Failed to fetch live events\");\r\n \r\n const data = await response.json();\r\n const filteredEvents = filterFootballEvents(data.events);\r\n\r\n if (orderMapRef.current.size === 0) {\r\n setEvents(filteredEvents);\r\n } else {\r\n const sortedEvents = [...filteredEvents].sort((a, b) => {\r\n const aIndex = orderMapRef.current.get(String(a.event.id));\r\n const bIndex = orderMapRef.current.get(String(b.event.id));\r\n\r\n const valA = aIndex !== undefined ? aIndex : Infinity;\r\n const valB = bIndex !== undefined ? bIndex : Infinity;\r\n return valA - valB;\r\n });\r\n setEvents(sortedEvents);\r\n }\r\n } catch (e) {\r\n console.error(\"LoadData Error:\", e);\r\n }\r\n}, []);\r\n\r\nuseEffect(() => {\r\n loadData();\r\n const interval = setInterval(loadData, 20000);\r\n return () => clearInterval(interval);\r\n}, [loadData]);\r\n\r\nuseEffect(() => {\r\n if (\r\n debouncedVisibleRange.start === null ||\r\n debouncedVisibleRange.end === null ||\r\n !events?.length ||\r\n fetchingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n const BUFFER = 3;\r\n const from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n const to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n const idsToFetch = events\r\n .slice(from, to + 1)\r\n .map(ev => ev?.event?.id)\r\n .filter(id => id && !fetchedIdsRef.current.has(id));\r\n\r\n if (idsToFetch.length === 0) return;\r\n\r\n idsToFetch.forEach(id => fetchedIdsRef.current.add(id));\r\n fetchingRef.current = true;\r\n\r\n fetchJerseys(idsToFetch)\r\n .then(res => {\r\n if (res?.events) {\r\n setJerseys(prev => ({\r\n ...prev,\r\n ...res.events,\r\n }));\r\n }\r\n })\r\n .catch(e => {\r\n console.error(\"Jersey fetch error\", e);\r\n idsToFetch.forEach(id => fetchedIdsRef.current.delete(id));\r\n })\r\n .finally(() => {\r\n fetchingRef.current = false;\r\n });\r\n\r\n}, [debouncedVisibleRange, events]);\r\n\r\n \r\n\r\n const sectionClassName = className || undefined;\r\n const isLoading = events === null;\r\n\r\nif (!isLoading && events.length === 0) {\r\n return null;\r\n}\r\n\r\nconst carouselItems = useMemo(() => {\r\n if (isLoading) return Array(4).fill({});\r\n return events?.slice(0, 20) || [];\r\n}, [isLoading, events]);\r\n\r\n return (\r\n <section className={sectionClassName} style={{ \r\n // paddingLeft: 16,\r\n // paddingRight: 16,\r\n width: \"100%\",\r\n boxSizing: \"border-box\", }}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap >\r\n\r\n <div className={styles.padding}>\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto \" justify=\"start\">\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n \r\n <div style={{ display: \"flex\", gap: 8 , alignItems:'center'}}>\r\n <OraculoGridGroup spacing={1} columns=\"auto auto\">\r\n <OraculoButton\r\n ariaLabel=\"Anterior\"\r\n variant=\"secondary\"\r\n iconOnly\r\n leftIcon={<ChevronLeftRounded />}\r\n onClick={handlePrev}\r\n disabled={navState.isStart}\r\n />\r\n <OraculoButton\r\n ariaLabel=\"Siguiente\"\r\n variant=\"secondary\"\r\n iconOnly\r\n rightIcon={<ChevronRightRounded />}\r\n onClick={handleNext}\r\n disabled={navState.isEnd}\r\n />\r\n </OraculoGridGroup>\r\n \r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </div>\r\n </OraculoGridGroup>\r\n</div>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={carouselItems}\r\n perPage={undefined}\r\n showRightGradient\r\n enableHorizontalWheel\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move'}}\r\n breakpoints={{\r\n 400: { gap: \"4px\", focus: \"center\" , padding: { left: \"24px\", right: \"24px\" }}, \r\n 768: { gap: \"8px\", focus: \"center\", padding: { left: \"24px\", right: \"24px\" } }, \r\n 1024: { gap: \"10px\" , focus: \"center\" , padding: { left: \"24px\", right: \"24px\" } },\r\n }}\r\n renderItem={(p) => {\r\n const eventId = p.event?.id || p.eventId;\r\n const jersey =\r\n eventId in jerseys ? jerseys[eventId] : undefined;\r\n return isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <MemoizedCard\r\n {...p}\r\n jersey={jersey}\r\n />\r\n </FadeItemWrapper>\r\n );\r\n}}\r\n\r\n\r\n onMove={({ isStart, isEnd, visibleStart, visibleEnd }) => {\r\n setNavState(prev => \r\n (prev.isStart === isStart && prev.isEnd === isEnd) ? prev : { isStart, isEnd }\r\n );\r\n setVisibleRange({ start: visibleStart, end: visibleEnd });\r\n}}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport styles from \"./OraculoEventSemanaCard.module.css\";\r\nimport OraculoEventLeague from \"../../atoms/OraculoEvent/OraculoEventLeague\";\r\n\r\nexport default function OraculoEventSemanaCardSkeleton() {\r\n return (\r\n <div className={styles.cardContainer}>\r\n \r\n {/* League name */}\r\n \r\n <OraculoEventLeague title={''} />\r\n <div className={styles.cardBackground}>\r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n \r\n {/* Teams + VS + Date */}\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"circular\" width={48} height={48} />\r\n <Skeleton variant=\"circular\" width={48} height={48} />\r\n\r\n </Stack>\r\n\r\n {/* Labels + Buttons */}\r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={80} height={12} />\r\n <Skeleton variant=\"text\" width={80} height={12} />\r\n </Stack>\r\n\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={160} height={12} />\r\n </Stack>\r\n\r\n {/* Labels */}\r\n <Stack direction=\"row\" spacing={1}>\r\n <Skeleton variant=\"text\" width={80} height={16} />\r\n <Skeleton variant=\"text\" width={80} height={16} />\r\n <Skeleton variant=\"text\" width={80} height={16} />\r\n </Stack>\r\n\r\n {/* Buttons */}\r\n <div className={styles.jugadas}>\r\n <Stack direction=\"row\" spacing={1}>\r\n <Skeleton variant=\"rounded\" width={80} height={32} />\r\n <Skeleton variant=\"rounded\" width={80} height={32} />\r\n <Skeleton variant=\"rounded\" width={80} height={32} />\r\n </Stack>\r\n </div>\r\n\r\n </Stack>\r\n </Stack>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useRef, useState, useEffect, useCallback, useMemo } from \"react\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport OraculoEventSemanaCard from \"../../molecules/OraculoEventCard/OraculoEventSemanaCard\";\r\nimport OraculoEventSemanaCardSkeleton from \"../../molecules/OraculoEventCard/OraculoEventSemanaCardSkeleton\";\r\nimport FadeItemWrapper from \"../../molecules/OraculoEventCard/FadeItemWrapper\";\r\nimport styles from \"./OraculoSeccionEventoSemana.module.css\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport React from \"react\";\r\nimport {\r\n verMasSeccionSemana,\r\n fetchJerseys,\r\n useDebouncedValue,\r\n} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\nimport { useDocId } from \"../../contexts/DocIdContext\";\r\n\r\nconst MemoizedSemanaCard = React.memo(OraculoEventSemanaCard);\r\n\r\nasync function fetchInBatches(\r\n urls: string[],\r\n batchSize = 2,\r\n signal: AbortSignal,\r\n) {\r\n const results: any[] = [];\r\n for (let i = 0; i < urls.length; i += batchSize) {\r\n if (signal.aborted) {\r\n throw new DOMException(\"Aborted\", \"AbortError\");\r\n }\r\n const batch = urls.slice(i, i + batchSize);\r\n const responses = await Promise.all(\r\n batch.map((u) => fetch(u, { signal }).then((r) => r.json())),\r\n );\r\n results.push(...responses);\r\n }\r\n return results;\r\n}\r\n\r\nfunction sortEvents(evs: any[]) {\r\n return [...evs].sort(\r\n (a, b) => new Date(a.start).getTime() - new Date(b.start).getTime(),\r\n );\r\n}\r\nfunction filterEventsWithinOneWeek(events: any[]) {\r\n const now = new Date();\r\n const oneWeekLater = new Date(now.getTime() + 20 * 24 * 60 * 60 * 1000);\r\n\r\n return events.filter((event: any) => {\r\n if (!event.start) return false;\r\n\r\n const eventDate = new Date(event.start);\r\n return eventDate >= now && eventDate <= oneWeekLater;\r\n });\r\n}\r\nfunction mergeEventOffersOutcome(eventos: any, apuestas: any) {\r\n const filtered = apuestas.filter((b: any) => b.betOfferType?.id === 2);\r\n\r\n const apuestasByEvent = filtered.reduce((acc: any, b: any) => {\r\n if (!acc[b.eventId]) acc[b.eventId] = [];\r\n acc[b.eventId].push(b);\r\n return acc;\r\n }, {});\r\n\r\n return eventos\r\n .filter((evento: any) => apuestasByEvent[evento.id])\r\n .map((evento: any) => ({\r\n ...evento,\r\n outcome: apuestasByEvent[evento.id],\r\n }));\r\n}\r\nexport default function OraculoSeccionEventoSemana({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n const captureInteraction = useCaptureInteraction();\r\n const docId = useDocId();\r\n const WEEK_EVENTS_URL =\r\n \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group.json?channel_id=1&client_id=200&lang=es_PE&market=PE\";\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[] | null>(null);\r\n const pendingJerseysRef = useRef<Set<number>>(new Set());\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n const [visibleRange, setVisibleRange] = useState<{\r\n start: number | null;\r\n end: number | null;\r\n }>({ start: null, end: null });\r\n const COMMON_QUERY =\r\n \"channel_id=1&client_id=200&competitionId=undefined&lang=es_PE&market=PE&useCombined=true\";\r\n const debouncedVisibleRange = useDebouncedValue(visibleRange, 250);\r\n const fetchingRef = useRef(false);\r\n\r\n const carouselItems = useMemo(() => {\r\n if (events === null) return Array(6).fill({});\r\n return events.slice(0, 20);\r\n }, [events]);\r\n\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_semana_view_more\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoSemana - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n },\r\n tags: { section: \"OraculoSeccionEventoSemana\" },\r\n });\r\n verMasSeccionSemana();\r\n };\r\n\r\n async function loadDataWeekEvent(signal: AbortSignal) {\r\n let orderedGroupIds: string[] = [];\r\n let orderedEventIds: string[] = [];\r\n try {\r\n const orderResponse = await fetch(\r\n \"https://api.mktolimpo.com/api/kambi/eventos/orden\",\r\n { signal },\r\n );\r\n\r\n if (orderResponse.ok) {\r\n const orderJson = await orderResponse.json();\r\n orderedGroupIds = orderJson?.data?.group_ids || [];\r\n orderedEventIds = orderJson?.data?.event_ids || [];\r\n }\r\n } catch (e: any) {\r\n if (e.name !== \"AbortError\") {\r\n console.warn(\"Order API not available, using default group order\");\r\n }\r\n return;\r\n }\r\n try {\r\n const response = await fetch(WEEK_EVENTS_URL, { signal });\r\n const data = await response.json();\r\n const football = data.group.groups.find(\r\n (g: any) => g.englishName === \"Football\",\r\n );\r\n\r\n if (!football || !Array.isArray(football.groups)) {\r\n console.error(\"Football groups not found\");\r\n return;\r\n }\r\n\r\n let groups = [...football.groups];\r\n\r\n // 3️⃣ Apply group_ids order\r\n if (orderedGroupIds.length > 0) {\r\n const orderMap = new Map(\r\n orderedGroupIds.map((id, index) => [id, index]),\r\n );\r\n\r\n groups.sort((a: any, b: any) => {\r\n const aIndex = orderMap.get(String(a.id));\r\n const bIndex = orderMap.get(String(b.id));\r\n\r\n if (aIndex !== undefined && bIndex !== undefined) {\r\n return aIndex - bIndex;\r\n }\r\n if (aIndex !== undefined) return -1;\r\n if (bIndex !== undefined) return 1;\r\n return 0;\r\n });\r\n }\r\n\r\n const N = 5;\r\n\r\n const firstGroups = groups.slice(0, N);\r\n\r\n const buildUrls = (group: any) => {\r\n const base =\r\n \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football\";\r\n\r\n if (group.groups && group.groups.length > 0) {\r\n const sub = group.groups[0]; // ONLY FIRST child\r\n return [\r\n `${base}/${group.termKey}/${sub.termKey}/all/matches.json?${COMMON_QUERY}`,\r\n ];\r\n }\r\n\r\n return [\r\n `${base}/${group.termKey}/all/all/matches.json?${COMMON_QUERY}`,\r\n ];\r\n };\r\n\r\n const urls = firstGroups.flatMap(buildUrls);\r\n\r\n loadAllGroupEvents(urls, orderedEventIds, signal);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n async function loadAllGroupEvents(\r\n urls: any,\r\n orderEvents: any,\r\n signal: AbortSignal,\r\n ) {\r\n try {\r\n const responses = await fetchInBatches(urls, 2, signal);\r\n\r\n let allEvents: any = [];\r\n let allBetOffers: any = [];\r\n\r\n responses.forEach((data) => {\r\n if (!data.events) return;\r\n\r\n allEvents.push(...data.events.map((item: any) => item.event));\r\n allBetOffers.push(\r\n ...data.events.flatMap((item: any) => item.betOffers || []),\r\n );\r\n });\r\n\r\n const merged = mergeEventOffersOutcome(allEvents, allBetOffers);\r\n const finalEvents = sortEvents(filterEventsWithinOneWeek(merged));\r\n\r\n let orderedEvents = finalEvents;\r\n\r\n if (orderEvents.length > 0) {\r\n const orderMap = new Map<string, number>(\r\n orderEvents.map((id: number | string, index: number) => [\r\n String(id),\r\n index,\r\n ]),\r\n );\r\n orderedEvents = [...finalEvents].sort((a, b) => {\r\n const aIndex = orderMap.get(String(a.id));\r\n const bIndex = orderMap.get(String(b.id));\r\n\r\n if (aIndex !== undefined && bIndex !== undefined) {\r\n return aIndex - bIndex;\r\n }\r\n if (aIndex !== undefined) return -1;\r\n if (bIndex !== undefined) return 1;\r\n return 0;\r\n });\r\n }\r\n if (signal.aborted) return;\r\n setEvents(orderedEvents);\r\n } catch (error) {\r\n console.error(\"Error loading events:\", error);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!items) return;\r\n\r\n const controller = new AbortController();\r\n\r\n loadDataWeekEvent(controller.signal);\r\n\r\n return () => {\r\n controller.abort();\r\n };\r\n }, [items]);\r\n\r\n useEffect(() => {\r\n if (\r\n debouncedVisibleRange.start === null ||\r\n debouncedVisibleRange.end === null ||\r\n !events?.length ||\r\n fetchingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n const BUFFER = 2;\r\n const from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n const to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n const idsToFetch = events\r\n .slice(from, to + 1)\r\n .map((ev) => ev?.id)\r\n .filter(Boolean)\r\n .filter((id) => jerseys[id] === undefined);\r\n if (!idsToFetch.length) return;\r\n\r\n let cancelled = false;\r\n fetchingRef.current = true;\r\n\r\n (async () => {\r\n try {\r\n const res = await fetchJerseys(idsToFetch);\r\n\r\n if (!cancelled) {\r\n setJerseys((prev) => ({\r\n ...prev,\r\n ...res.events,\r\n }));\r\n }\r\n } catch (e) {\r\n console.error(\"Jersey fetch error\", e);\r\n } finally {\r\n fetchingRef.current = false;\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [debouncedVisibleRange, events]);\r\n const sectionClassName = className || undefined;\r\n const sectionStyle: React.CSSProperties = {\r\n paddingLeft: 0,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n };\r\n\r\n const isLoading = events === null;\r\n\r\n if (!isLoading && events.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <section className={sectionClassName} style={sectionStyle}>\r\n <div className={`${styles.wrapper} ${styles.padding}`}>\r\n <div className={styles.container}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <OraculoSectionTitle title=\"Eventos de la semana\" />\r\n <div className={styles.buttonWrapper}>\r\n <OraculoButton\r\n variant=\"secondary\"\r\n size=\"lg\"\r\n fullWidth\r\n onClick={() => {\r\n handleViewMore();\r\n }}\r\n >\r\n Ver más\r\n </OraculoButton>\r\n </div>\r\n </Stack>\r\n </div>\r\n\r\n <div style={{ minWidth: \"180px\" }}>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={\r\n isLoading\r\n ? Array(6).fill({}) // show 4 skeleton slides\r\n : events.slice(0, 20)\r\n }\r\n perPage={3.5}\r\n gap=\"16px\"\r\n enableHorizontalWheel\r\n showRightGradient\r\n options={{ autoWidth: true, trimSpace: true }}\r\n breakpoints={{\r\n 1024: {\r\n perPage: 1.4,\r\n gap: \"8px\",\r\n focus: \"center\",\r\n padding: { left: \"8px\", right: \"8px\" },\r\n },\r\n }}\r\n renderItem={(p) => {\r\n const eventId = p.id;\r\n const jersey = eventId in jerseys ? jerseys[eventId] : undefined;\r\n return isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventSemanaCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <MemoizedSemanaCard event={p} jersey={jersey} />\r\n </FadeItemWrapper>\r\n );\r\n }}\r\n onMove={({ isStart, isEnd, visibleStart, visibleEnd }) => {\r\n setNavState({ isStart, isEnd });\r\n setVisibleRange({\r\n start: visibleStart,\r\n end: visibleEnd,\r\n });\r\n\r\n captureInteraction({\r\n element: \"evento_semana_carousel_slide\",\r\n label: `Landing: ${docId} - OraculoSeccionEventoSemana - Slide Carousel`,\r\n target: \"carousel\",\r\n event_type: \"slide\",\r\n module_id: 301,\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n visibleStart,\r\n visibleEnd,\r\n isStart,\r\n isEnd,\r\n },\r\n tags: { section: \"OraculoSeccionEventoSemana\" },\r\n });\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\n\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\nimport {\n OraculoBannerItem,\n OraculoSeccionBannersProps,\n} from \"../../interfaces/oraculo/InterfaceBanner\";\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\n\nimport { useDocId } from \"../../contexts/DocIdContext\";\n\nexport default function OraculoSeccionBanners({\n backgrounds,\n items,\n hideItems,\n}: OraculoSeccionBannersProps & { hideItems?: boolean }) {\n const [activeDot, setActiveDot] = useState(0);\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const isMounted = useRef(false);\n const isAutoplayRef = useRef(false);\n\n const totalDots = backgrounds?.length || 1;\n const isLoading = !backgrounds || backgrounds.length === 0;\n const canNavigate = !isLoading && (backgrounds?.length ?? 0) > 1;\n\n // Si no se muestran items, no se muestra el dock\n const showDock = !hideItems && (items?.length ?? 0) > 0;\n\n const isPrevDisabled = !canNavigate || activeDot === 0;\n const isNextDisabled = !canNavigate || activeDot === totalDots - 1;\n\n const ARROW_COLOR = \"#B5B5B5\";\n\n const arrowSx = {\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n zIndex: 5,\n width: 48,\n height: 40,\n borderRadius: \"12px\",\n border: `1.5px solid ${ARROW_COLOR}`,\n py: 1,\n px: 1.5,\n color: ARROW_COLOR,\n backgroundColor: \"transparent\",\n \"&:hover\": {\n backgroundColor: \"rgba(181,181,181,0.08)\",\n },\n \"&.Mui-disabled\": {\n opacity: 0.35,\n borderColor: ARROW_COLOR,\n color: ARROW_COLOR,\n backgroundColor: \"transparent\",\n cursor: \"default\",\n },\n };\n\n const carouselOptions = useMemo(\n () => ({\n type: \"loop\",\n perMove: 1,\n pagination: false,\n arrows: false,\n drag: true,\n focus: \"center\",\n }),\n []\n );\n\n useEffect(() => {\n const timer = setTimeout(() => {\n isMounted.current = true;\n }, 500);\n return () => clearTimeout(timer);\n }, []);\n\n const handleBannerClick = (bg: OraculoBannerItem, index: number) => {\n const bannerName =\n bg.href?.split(\"/\").pop()?.split(\".\")[0] || bg.label || bg.id || `banner_${index + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `Landing: ${docId} - OraculoSeccionBanners - Banner click: ${bannerName}`,\n target: bg.href || \"no_url\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n banner_position: index + 1,\n banner_total: backgrounds?.length || 0,\n },\n tags: {\n banner_type: \"carousel\",\n banner_target: \"_self\",\n banner_url: bg.href || \"no_url\",\n },\n });\n };\n\n const handleMenuItemClick = (item: OraculoBannerItem) => {\n captureInteraction({\n element: \"banner_menu_item\",\n label: `Landing: ${docId} - OraculoSeccionBanners - Menu item click: ${item.label || item.id}`,\n target: item.href || \"action\",\n event_type: \"click\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n item_id: item.id,\n },\n tags: {\n item_label: item.label || \"no_label\",\n },\n });\n\n // Ejecutar la acción original\n if (item.onClick) {\n item.onClick();\n return;\n }\n\n if (item.href) {\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(item.href);\n }\n }\n };\n\n // --- AUTOPLAY (robusto con setTimeout encadenado) ---\n const autoplayMs = 5000;\n const autoplayTimeoutRef = useRef<number | null>(null);\n\n const canAutoplay = !isLoading && (backgrounds?.length ?? 0) > 1;\n\n const stopAutoplay = () => {\n if (autoplayTimeoutRef.current != null) {\n window.clearTimeout(autoplayTimeoutRef.current);\n autoplayTimeoutRef.current = null;\n }\n };\n\n const scheduleAutoplay = () => {\n stopAutoplay();\n if (!canAutoplay) return;\n\n autoplayTimeoutRef.current = window.setTimeout(() => {\n isAutoplayRef.current = true; // ✅ marcamos que el próximo move es autoplay\n carouselRef.current?.next();\n }, autoplayMs);\n };\n\n useEffect(() => {\n scheduleAutoplay();\n return () => stopAutoplay();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [canAutoplay, autoplayMs]);\n\n const handlePrev = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n stopAutoplay();\n carouselRef.current?.prev();\n };\n\n const handleNext = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n stopAutoplay();\n carouselRef.current?.next();\n };\n\n // tracking solo de \"view\" manual (como tu lógica original)\n const handleSlideChangeTracking = (index: number) => {\n const safe = ((index % totalDots) + totalDots) % totalDots;\n\n if (!isMounted.current) return;\n\n const bannerName = backgrounds?.[safe]?.href\n ? backgrounds[safe].href?.split(\"/\").pop()?.split(\".\")[0] || `banner_${safe + 1}`\n : `banner_${safe + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `Landing: ${docId} - OraculoSeccionBanners - Banner view: Slide ${safe + 1} - ${bannerName}`,\n target: backgrounds?.[safe]?.href || \"no_url\",\n event_type: \"view\",\n module_id: 301,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n slide_index: safe + 1,\n total_slides: totalDots,\n interaction_type: \"manual_slide\",\n },\n tags: { banner_position: String(safe + 1) },\n });\n };\n\n return (\n <Box\n component=\"section\"\n sx={{\n position: \"relative\",\n overflow: \"visible\",\n }}\n >\n {/* Carrusel de backgrounds */}\n <Box\n sx={{\n position: \"relative\",\n borderRadius: 0,\n overflow: \"hidden\",\n width: \"100%\",\n\n height: { xs: 300, sm: 360 },\n\n \"@media (min-width:800px)\": {\n height: \"auto\",\n aspectRatio: \"1920 / 460\", // <-- estándar 1920 / 460\n },\n }}\n >\n <Box\n sx={{\n height: \"100%\",\n \"& .splide, & .splide__track, & .splide__list\": { height: \"100%\" },\n \"& .splide__slide\": { height: \"100%\", position: \"relative\" },\n }}\n >\n <OraculoCarousel\n ref={carouselRef}\n items={backgrounds}\n perPage={1}\n gap=\"0px\"\n enableHorizontalWheel\n options={carouselOptions}\n onMove={({ index }) => {\n const safe = ((index % totalDots) + totalDots) % totalDots;\n setActiveDot(safe);\n const wasAutoplay = isAutoplayRef.current;\n isAutoplayRef.current = false;\n scheduleAutoplay();\n if (!wasAutoplay) {\n handleSlideChangeTracking(index);\n }\n }}\n renderItem={(bg, idx) => (\n <Box\n component=\"a\"\n href={bg.href}\n target={bg.target ?? \"_self\"}\n rel={bg.target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n onClick={() => handleBannerClick(bg, idx)}\n sx={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n }}\n >\n <Box component=\"picture\" sx={{ position: \"absolute\", inset: 0, lineHeight: 0 }}>\n <source srcSet={bg.desktopSrc} media=\"(min-width:800px)\" />\n <source srcSet={bg.mobileSrc} media=\"(max-width:799px)\" />\n <Box\n component=\"img\"\n src={bg.fallbackSrc ?? bg.desktopSrc}\n alt=\"\"\n aria-hidden\n loading=\"lazy\"\n sx={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n />\n </Box>\n\n <Box\n sx={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n top: \"80%\",\n background:\n \"linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(18,18,18,0.85) 80%, #121212 100%)\",\n },\n }}\n />\n </Box>\n )}\n />\n </Box>\n\n {canNavigate && (\n <>\n <IconButton\n aria-label=\"Anterior\"\n onClick={handlePrev}\n sx={{\n ...arrowSx,\n left: \"120px\",\n \"@media (max-width:1024px)\": { left: 24 },\n \"@media (max-width:786px)\": { display: \"none\" },\n }}\n // disabled={isPrevDisabled}\n >\n <ChevronLeftRounded />\n </IconButton>\n\n <IconButton\n aria-label=\"Siguiente\"\n onClick={handleNext}\n sx={{\n ...arrowSx,\n right: \"120px\",\n \"@media (max-width:1024px)\": { right: 24 },\n \"@media (max-width:786px)\": { display: \"none\" },\n }}\n // disabled={isNextDisabled}\n >\n <ChevronRightRounded />\n </IconButton>\n </>\n )}\n\n <Box\n sx={{\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 72,\n display: \"flex\",\n justifyContent: \"center\",\n zIndex: 2,\n }}\n >\n <OraculoCarouselDots\n key={`${activeDot}-${totalDots}`}\n total={totalDots}\n active={activeDot}\n durationMs={autoplayMs}\n />\n </Box>\n </Box>\n\n {/* Dock de items */}\n {showDock && (\n <Box\n sx={{\n position: \"absolute\",\n bottom: { xs: -12, sm: 0 },\n left: 120,\n right: 120,\n \"@media (max-width:1024px)\": { left: 24, right: 24 },\n backgroundColor: \"#363636\",\n borderRadius: 2,\n p: 1.5,\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n boxShadow: \"0 10px 24px rgba(0,0,0,.35)\",\n zIndex: 3,\n }}\n >\n {items?.map((item: OraculoBannerItem) => (\n <Box\n key={item.id}\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: { xs: 0.5, md: 1 },\n color: \"#FFFFFF\",\n minWidth: 0,\n cursor: item.onClick || item.href ? \"pointer\" : \"default\",\n whiteSpace: \"nowrap\",\n }}\n onClick={() => handleMenuItemClick(item)}\n >\n {item.icon && (\n <Box\n component=\"img\"\n src={item.icon}\n alt={item.label || `icon-${item.id}`}\n sx={{\n width: { xs: 20, sm: 22, md: 24 },\n height: { xs: 20, sm: 22, md: 24 },\n objectFit: \"contain\",\n }}\n />\n )}\n\n <Typography\n sx={{\n fontSize: { xs: 10, sm: 11, md: 12 },\n fontWeight: 600,\n color: \"#E0E0E0\",\n textAlign: \"center\",\n }}\n >\n {item.label}\n </Typography>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n );\n}","import { Box, Stack, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport OraculoLogoMediosPago from \"../../atoms/OraculoLogo/OraculoLogoMediosPago\";\n\ntype LogoType = {\n src: string;\n alt: string;\n};\n\ntype Props = {\n title?: string;\n items?: LogoType[]; // <-- ahora solo 1 arreglo\n};\n\n// 7 items (ejemplo)\nconst DEFAULT_ITEMS: LogoType[] = [\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/IBK.svg\", alt: \"Interbank\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/Yape.svg\", alt: \"Yape\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/BCP.png\", alt: \"BCP\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/pagoEfectivo.png\", alt: \"PagoEfectivo\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/tupay.svg\", alt: \"Tupay\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/monnet.svg\", alt: \"Monnet\" },\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/niubiz.svg\", alt: \"Niubiz\" },\n];\n\nexport default function OraculoSeccionMediosPago({\n title = \"Medios de pago\",\n items = DEFAULT_ITEMS,\n}: Props) {\n // 4/3 cuando son 7\n const split = Math.ceil(items.length / 2);\n const row1 = items.slice(0, split);\n const row2 = items.slice(split);\n\n return (\n <Box component=\"section\" aria-labelledby=\"mp-title\" sx={{ color: \"#fff\" }}>\n <Typography\n id=\"mp-title\"\n variant=\"h6\"\n sx={{\n fontWeight: 800,\n fontSize: { xs: 20, md: 32 },\n textAlign: \"center\",\n mb: 1.5,\n }}\n >\n {title}\n </Typography>\n\n <Box\n sx={{\n width: \"288px\",\n height: \"2px\",\n mx: \"auto\",\n mb: 3,\n opacity: 0.95,\n filter: \"blur(0.2px)\",\n background:\n \"linear-gradient(90deg, rgba(0,0,0,0) 0%, #1dd75b 18%, #23d46b 50%, #1dd75b 82%, rgba(0,0,0,0) 100%)\",\n }}\n />\n\n {/* 2 filas SIEMPRE (móvil y desktop) */}\n <Stack spacing={{ xs: 2, md: 3 }} alignItems=\"center\">\n <Stack\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n gap={{ xs: 2, md: 3 }}\n flexWrap=\"wrap\"\n >\n {row1.map((l, idx) => (\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\n ))}\n </Stack>\n\n <Stack\n direction=\"row\"\n justifyContent=\"center\"\n alignItems=\"center\"\n gap={{ xs: 2, md: 3 }}\n flexWrap=\"wrap\"\n >\n {row2.map((l, idx) => (\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\n ))}\n </Stack>\n </Stack>\n </Box>\n );\n}\n","\"use client\";\nimport React from \"react\";\nimport { ThemeProvider, createTheme, useTheme } from \"@mui/material/styles\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\n\nexport default function OraculoThemeProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const outer = useTheme();\n\n const merged = React.useMemo(\n () =>\n createTheme(outer, {\n typography: { fontFamily: \"var(--orc-font)\" },\n components: {\n MuiTypography: {\n styleOverrides: {\n root: { fontFamily: \"var(--orc-font)\" },\n },\n },\n },\n }),\n [outer]\n );\n\n return (\n <ThemeProvider theme={merged}>\n <CssBaseline />\n {children}\n </ThemeProvider>\n );\n}\n","// oraculo-ui/src/templates/OraculoSectionHost.tsx\n\"use client\";\nimport React from \"react\";\nimport OraculoThemeProvider from \"../theme/OraculoThemeProvider\";\nimport { DocIdProvider } from \"../contexts/DocIdContext\";\n\nexport default function OraculoSectionHost({\n docId = \"home\",\n children,\n}: {\n docId?: string;\n children: React.ReactNode;\n}) {\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId}>{children}</DocIdProvider>\n </OraculoThemeProvider>\n );\n}","import OraculoSeccionBonoBienvenida from \"../organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida\";\nimport OraculoSeccionTopJuegos from \"../organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos\";\nimport OraculoSeccionCasino from \"../organisms/OraculoSeccionCasino/OraculoSeccionCasino\";\nimport OraculoSeccionCasinoEnVivo from \"../organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo\";\nimport OraculoSeccionVirtuales from \"../organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales\";\nimport OraculoSeccionClubOlimpo from \"../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo\";\nimport OraculoSeccionDestacados from \"../organisms/OraculoSeccionDestacados/OraculoSeccionDestacados\";\nimport OraculoSeccionBanners from \"../organisms/OraculoSeccionBanners/OraculoSeccionBanners\";\nimport OraculoSeccionMediosPago from \"../organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago\";\nimport OraculoSeccionEventoCombinadas from \"../organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas\";\nimport OraculoSeccionEventoEnVivo from \"../organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo\";\nimport OraculoSeccionEventoSemana from \"../organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana\";\n\nimport React from \"react\";\n\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\n\nexport const Landing: LandingComponentMap = {\n OraculoSeccionDestacados,\n OraculoSeccionTopJuegos,\n OraculoSeccionCasinoEnVivo,\n OraculoSeccionCasino,\n OraculoSeccionVirtuales,\n OraculoSeccionClubOlimpo,\n OraculoSeccionBonoBienvenida,\n OraculoSeccionBanners,\n OraculoSeccionMediosPago,\n OraculoSeccionEventoEnVivo,\n OraculoSeccionEventoSemana,\n OraculoSeccionEventoCombinadas,\n};","export const LANDING_FALLBACK_JSON = {\n sections:\n[\n {\n \"variableName2\": \"backgrounds\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"variableName\": \"items\",\n \"dataMode\": \"manual\",\n \"title\": \"Banners\",\n \"visible\": true,\n \"id\": 9,\n \"manualItems\": [\n {\n \"id\": \"724a1dc0-d55b-4443-a580-cad22e328536\",\n \"fields\": [\n {\n \"type\": \"string\",\n \"id\": \"abb2c3d6-d5c5-47ee-8ffa-c764a8bc731e\",\n \"isImage\": false,\n \"required\": true,\n \"value\": \"1\",\n \"name\": \"id\"\n },\n {\n \"name\": \"label\",\n \"isImage\": false,\n \"value\": \"POR INICIAR\",\n \"required\": false,\n \"id\": \"549c02bf-56b5-4652-93d9-46b9451bac39\",\n \"type\": \"string\"\n },\n {\n \"type\": \"string\",\n \"id\": \"c6538242-1974-4bed-aed3-703a111987b5\",\n \"maxSizeMB\": 0.2,\n \"required\": true,\n \"isImage\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/clock.svg\",\n \"name\": \"icon\"\n },\n {\n \"id\": \"7d564f31-69ff-4f32-983b-46d28ced4a18\",\n \"type\": \"string\",\n \"required\": false,\n \"value\": \"https://www.olimpo.bet/deportes#starting-soon\",\n \"isImage\": false,\n \"name\": \"href\"\n }\n ]\n },\n {\n \"fields\": [\n {\n \"type\": \"string\",\n \"isImage\": false,\n \"id\": \"45c50e08-560e-42cb-8be1-e9722f69c8a0\",\n \"required\": true,\n \"name\": \"id\",\n \"value\": \"2\"\n },\n {\n \"type\": \"string\",\n \"name\": \"label\",\n \"isImage\": false,\n \"value\": \"EXPLORAR\",\n \"required\": false,\n \"id\": \"2eec0f3d-0126-4960-8ec0-17cc92b5eb43\"\n },\n {\n \"maxSizeMB\": 0.2,\n \"isImage\": true,\n \"required\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/icon2.svg\",\n \"id\": \"5530e6bd-d2b2-4045-9371-722e23d96e14\",\n \"type\": \"string\",\n \"name\": \"icon\"\n },\n {\n \"id\": \"7e5375ad-ecbb-4354-868a-b9323bcfd053\",\n \"required\": false,\n \"name\": \"href\",\n \"isImage\": false,\n \"type\": \"string\",\n \"value\": \"https://www.olimpo.bet/deportes#sports/a-z\"\n }\n ],\n \"id\": \"ad0df0e2-c8ce-4524-b05a-2a29578aba11\"\n },\n {\n \"id\": \"966bc1fc-0b1a-4a50-a4a2-964262922c3d\",\n \"fields\": [\n {\n \"isImage\": false,\n \"required\": true,\n \"id\": \"fc35f393-6692-4d25-a534-d51f4bd6d9a2\",\n \"value\": \"3\",\n \"name\": \"id\",\n \"type\": \"string\"\n },\n {\n \"isImage\": false,\n \"name\": \"label\",\n \"value\": \"TOP JUEGOS\",\n \"id\": \"a323e324-cf04-4178-b2c2-596d51564123\",\n \"type\": \"string\",\n \"required\": false\n },\n {\n \"type\": \"string\",\n \"name\": \"icon\",\n \"maxSizeMB\": 0.2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765981473501-icon3.svg\",\n \"id\": \"6ede5815-7336-40fa-99f2-57ac6cb938cd\",\n \"required\": true,\n \"isImage\": true\n },\n {\n \"required\": false,\n \"id\": \"26a486fd-31e6-4ed4-ab83-0f9a7bf6adc4\",\n \"value\": \"https://www.olimpo.bet/casino\",\n \"isImage\": false,\n \"name\": \"href\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"id\": \"31e00ff9-f2dd-4942-bff3-919902fde880\",\n \"fields\": [\n {\n \"id\": \"fbec2c21-cf32-426f-910b-9c78a6cd714c\",\n \"required\": true,\n \"isImage\": false,\n \"value\": \"4\",\n \"name\": \"id\",\n \"type\": \"string\"\n },\n {\n \"isImage\": false,\n \"name\": \"label\",\n \"type\": \"string\",\n \"value\": \"MISIONES\",\n \"required\": false,\n \"id\": \"2de80dbf-998b-4bc7-8383-4b69746ef155\"\n },\n {\n \"type\": \"string\",\n \"id\": \"686c62bd-ea86-4aeb-97b7-6f1488912066\",\n \"required\": true,\n \"isImage\": true,\n \"maxSizeMB\": 0.2,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/icon3.svg\",\n \"name\": \"icon\"\n },\n {\n \"id\": \"4b72f490-75e4-458e-a4b5-68f0736a25d4\",\n \"isImage\": false,\n \"required\": false,\n \"type\": \"string\",\n \"value\": \"https://www.olimpo.bet/private/misiones\",\n \"name\": \"href\"\n }\n ]\n }\n ],\n \"manualScalarFields\": [\n {\n \"id\": \"7ee165a0-1268-4825-82df-9fef9857f535\",\n \"type\": \"string\",\n \"isImage\": false,\n \"value\": \"\",\n \"required\": false,\n \"name\": \"groups\"\n }\n ],\n \"order\": 1,\n \"manualItems2\": [\n {\n \"id\": \"13b35362-5695-4687-b6a8-645f8effd264\",\n \"fields\": [\n {\n \"isImage\": true,\n \"name\": \"desktopSrc\",\n \"id\": \"eea41214-3c26-41e9-a908-d87327147396\",\n \"maxSizeMB\": 2,\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768333229541-banner032.webp\",\n \"required\": false\n },\n {\n \"maxSizeMB\": 2,\n \"isImage\": true,\n \"type\": \"string\",\n \"name\": \"mobileSrc\",\n \"id\": \"b393dfd3-c085-43e0-b68a-97cc04c06b6a\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\n \"required\": false\n },\n {\n \"maxSizeMB\": 2,\n \"id\": \"2616b944-7cd1-4919-bc56-38ddb1a3093b\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\n \"isImage\": true,\n \"name\": \"fallbackSrc\",\n \"type\": \"string\",\n \"required\": false\n },\n {\n \"name\": \"href\",\n \"id\": \"54689f0e-f698-48a1-9d84-d13a397e24ea\",\n \"required\": false,\n \"value\": \"\",\n \"type\": \"string\",\n \"isImage\": false\n }\n ]\n },\n {\n \"id\": \"024f8130-91e1-4296-b826-cffa32ab1a96\",\n \"fields\": [\n {\n \"maxSizeMB\": 2,\n \"isImage\": true,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852295069-ftd_web_captacion60.jpg\",\n \"name\": \"desktopSrc\",\n \"type\": \"string\",\n \"required\": false,\n \"id\": \"1ebab59e-f706-4795-81cb-7accfc9f33d7\"\n },\n {\n \"id\": \"bdebd1b0-d633-4b9e-9247-8e769cdc5b3b\",\n \"type\": \"string\",\n \"isImage\": true,\n \"required\": false,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852302781-ftd_mobile_captacion60.jpg\",\n \"maxSizeMB\": 2,\n \"name\": \"mobileSrc\"\n },\n {\n \"isImage\": true,\n \"maxSizeMB\": 2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852309554-ftd_web_captacion60.jpg\",\n \"id\": \"4bc20da7-b769-43dd-ba2e-ee9261ec73d7\",\n \"name\": \"fallbackSrc\",\n \"type\": \"string\",\n \"required\": false\n },\n {\n \"id\": \"b85e737d-97ec-430c-b819-ba6e91a25372\",\n \"type\": \"string\",\n \"isImage\": false,\n \"required\": false,\n \"value\": \"\",\n \"name\": \"href\"\n }\n ]\n },\n {\n \"id\": \"cbd24716-9770-418f-aa87-ae60e7e9e0ee\",\n \"fields\": [\n {\n \"maxSizeMB\": 2,\n \"required\": false,\n \"name\": \"desktopSrc\",\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831142801-ftd_web_tenismasters.jpg\",\n \"id\": \"fa31486e-ec9b-4c99-b870-396d25bc66d6\",\n \"isImage\": true\n },\n {\n \"isImage\": true,\n \"name\": \"mobileSrc\",\n \"id\": \"954a4363-1373-44f2-b677-1bea66882838\",\n \"maxSizeMB\": 2,\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831155101-ftd_mobile_tenismasters.jpg\",\n \"required\": false\n },\n {\n \"required\": false,\n \"type\": \"string\",\n \"id\": \"be8789e8-cbf6-49c1-9ae5-ebc958404369\",\n \"maxSizeMB\": 2,\n \"name\": \"fallbackSrc\",\n \"isImage\": true,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831198671-ftd_web_tenismasters.jpg\"\n },\n {\n \"value\": \"https://www.olimpo.bet/torneos/Torneo_Olimpo_Tennis\",\n \"type\": \"string\",\n \"required\": false,\n \"isImage\": false,\n \"id\": \"142b0cb2-e255-4240-aea1-807a67321e34\",\n \"name\": \"href\"\n }\n ]\n },\n {\n \"fields\": [\n {\n \"required\": false,\n \"isImage\": true,\n \"id\": \"4414dbe4-67b3-428c-9d9d-920fff30956a\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831210432-ftd_web_verano.jpg\",\n \"type\": \"string\",\n \"maxSizeMB\": 2,\n \"name\": \"desktopSrc\"\n },\n {\n \"required\": false,\n \"isImage\": true,\n \"id\": \"b74d7582-94be-4608-8cdc-e6f8cab3e115\",\n \"name\": \"mobileSrc\",\n \"type\": \"string\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831218073-ftd_mobile_verano.jpg\",\n \"maxSizeMB\": 2\n },\n {\n \"id\": \"ada12745-3851-4a86-912c-2c9ec7c3e5de\",\n \"maxSizeMB\": 2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831228250-ftd_web_verano.jpg\",\n \"name\": \"fallbackSrc\",\n \"type\": \"string\",\n \"required\": false,\n \"isImage\": true\n },\n {\n \"value\": \"https://www.olimpo.bet/torneos/Endorphina_09012026_Casino\",\n \"isImage\": false,\n \"required\": false,\n \"name\": \"href\",\n \"type\": \"string\",\n \"id\": \"e23e8b63-0ca4-436f-b53a-1bdf8d6442a6\"\n }\n ],\n \"id\": \"0d5ffdb1-d55f-47b6-9e61-e6b571bf2db2\"\n },\n {\n \"id\": \"cf073698-ff54-4a9e-9c4f-c34b6987e8b5\",\n \"fields\": [\n {\n \"type\": \"string\",\n \"isImage\": true,\n \"required\": false,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831260900-ftd_web_virtuales.jpg\",\n \"maxSizeMB\": 2,\n \"name\": \"desktopSrc\",\n \"id\": \"1a1ef092-aff6-49c5-81be-7d76c6ac94e1\"\n },\n {\n \"required\": false,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831267161-ftd_mobile_virtuales.jpg\",\n \"isImage\": true,\n \"type\": \"string\",\n \"maxSizeMB\": 2,\n \"name\": \"mobileSrc\",\n \"id\": \"901cc080-4907-47a8-8b2e-73a7b9fc27a3\"\n },\n {\n \"type\": \"string\",\n \"name\": \"fallbackSrc\",\n \"isImage\": true,\n \"id\": \"8f97418b-6f27-4231-b6f8-e01e1d3c94f8\",\n \"maxSizeMB\": 2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831274473-ftd_web_virtuales.jpg\",\n \"required\": false\n },\n {\n \"type\": \"string\",\n \"value\": \"https://www.olimpo.bet/torneos/Torneo_Lo_Mejor_De_Virtuales\",\n \"required\": false,\n \"name\": \"href\",\n \"isImage\": false,\n \"id\": \"a140f16d-8af9-474a-a77c-6ddc1651b3e5\"\n }\n ]\n }\n ],\n \"componentKey\": \"OraculoSeccionBanners\"\n },\n {\n \"visible\": true,\n \"dataMode\": \"url\",\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true%22\",\n \"variableName\": \"items\",\n \"apiParams\": [],\n \"id\": 2,\n \"componentKey\": \"OraculoSeccionEventoEnVivo\",\n \"order\": 2,\n \"manualScalarFields\": [\n {\n \"isUrl\": false,\n \"id\": \"7fc591db-555b-49b2-a3ad-30aa66eff17b\",\n \"required\": true,\n \"name\": \"title\",\n \"type\": \"string\",\n \"value\": \"En vivo\"\n },\n {\n \"type\": \"string\",\n \"value\": \"https://stg-www.contodobet.com/assets/img/home/EnVivo/icon.svg\",\n \"name\": \"iconUrl\",\n \"isUrl\": true,\n \"required\": false,\n \"id\": \"db4b6355-ed6c-4265-ad78-d8fffb660997\"\n },\n {\n \"required\": false,\n \"value\": \"\",\n \"type\": \"function\",\n \"id\": \"e4647a65-2e60-4243-bab4-25b7ba8461f8\",\n \"isUrl\": false,\n \"name\": \"onViewMore\"\n },\n {\n \"id\": \"a16ab6c6-321c-4ebe-bd36-a85ad49edf3e\",\n \"type\": \"string\",\n \"isUrl\": false,\n \"required\": false,\n \"value\": \"\",\n \"name\": \"className\"\n }\n ],\n \"title\": \"Eventos en vivo\",\n \"apiMethod\": \"GET\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\"\n },\n {\n \"visible\": true,\n \"manualScalarFields\": [\n {\n \"name\": \"title\",\n \"required\": true,\n \"value\": \"Casino\",\n \"id\": \"c2046b5a-4d30-46ff-9513-e15a6e0b0a7e\",\n \"isImage\": false,\n \"type\": \"string\"\n },\n {\n \"required\": true,\n \"type\": \"string\",\n \"maxSizeMB\": 0.2,\n \"name\": \"iconUrl\",\n \"isImage\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Casino/diamante.svg\",\n \"id\": \"9c5964ca-ce84-4c47-86ec-b34d7f3a5793\"\n },\n {\n \"id\": \"1c32ea69-598b-4f80-81e4-709d887c12c1\",\n \"value\": \"true\",\n \"name\": \"mosaicFirst\",\n \"required\": false,\n \"type\": \"boolean\",\n \"isImage\": false\n },\n {\n \"value\": \"4\",\n \"type\": \"number\",\n \"required\": false,\n \"name\": \"gridSize\",\n \"id\": \"5c3c60eb-cf49-4083-ab83-67d65f829554\",\n \"isImage\": false\n },\n {\n \"value\": \"\",\n \"name\": \"groups\",\n \"isImage\": false,\n \"id\": \"c4d4c4b9-0c93-4aca-a61f-042e52fd9254\",\n \"required\": false,\n \"type\": \"string\"\n }\n ],\n \"variableName\": \"items\",\n \"componentKey\": \"OraculoSeccionCasino\",\n \"order\": 3,\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n \"apiParams\": [\n {\n \"value\": \"OLI\",\n \"key\": \"company\",\n \"id\": \"2af22a50-07e2-4a48-8569-90c79827f3e7\"\n },\n {\n \"key\": \"lobby\",\n \"id\": \"efa2def8-eeb4-4fcc-80f6-32c24e7804e6\",\n \"value\": \"HOME_CASINO\"\n }\n ],\n \"id\": 4,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiMethod\": \"GET\",\n \"dataMode\": \"url\",\n \"title\": \"Casino\"\n },\n {\n \"title\": \"Eventos Combinadas\",\n \"id\": 1,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiParams\": [],\n \"apiMethod\": \"GET\",\n \"order\": 4,\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group/prepackcoupon.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764284658793&prePackCouponTags=CUSTOM\",\n \"manualScalarFields\": [\n {\n \"required\": true,\n \"id\": \"33e5944d-b5be-4971-8c10-65aa6b71051c\",\n \"name\": \"title\",\n \"type\": \"string\",\n \"value\": \"Combinadas\",\n \"isImage\": false\n },\n {\n \"id\": \"95cd1489-206c-4a72-b4bd-b65161089f73\",\n \"isImage\": true,\n \"name\": \"iconUrl\",\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765894618836-frame181009.svg\",\n \"type\": \"string\",\n \"dimensions\": \"40x40\",\n \"required\": false,\n \"maxSizeMB\": 0.2\n },\n {\n \"name\": \"className\",\n \"value\": \"\",\n \"id\": \"af234a92-41ad-4ff1-bfbb-ac63a9af19f7\",\n \"type\": \"string\",\n \"isImage\": false,\n \"required\": false\n },\n {\n \"value\": \"\",\n \"required\": false,\n \"name\": \"groups\",\n \"isImage\": false,\n \"id\": \"52f226c8-6456-4395-b72d-d140af6fa46d\",\n \"type\": \"string\"\n }\n ],\n \"dataMode\": \"url\",\n \"variableName\": \"items\",\n \"visible\": true,\n \"componentKey\": \"OraculoSeccionEventoCombinadas\"\n },\n {\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764401676636&startTime=2025-11-29T06:00:00.000Z&endTime=2026-06-25T15:00:00.000Z&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions\",\n \"dataMode\": \"url\",\n \"title\": \"Eventos de la semana\",\n \"order\": 5,\n \"apiParams\": [],\n \"variableName\": \"items\",\n \"apiMethod\": \"GET\",\n \"visible\": true,\n \"id\": 3,\n \"componentKey\": \"OraculoSeccionEventoSemana\",\n \"manualScalarFields\": [\n {\n \"id\": \"7a3de844-5727-4043-be42-7f965e2aa249\",\n \"isUrl\": false,\n \"value\": \"Eventos esta semana\",\n \"required\": false,\n \"name\": \"title\",\n \"type\": \"string\"\n },\n {\n \"value\": \"\",\n \"isUrl\": true,\n \"required\": false,\n \"id\": \"2895f65f-e75b-4116-958d-04d4c34f16fe\",\n \"name\": \"iconUrl\",\n \"type\": \"string\"\n },\n {\n \"type\": \"function\",\n \"required\": false,\n \"value\": \"\",\n \"id\": \"d973d3ee-721e-4d76-888c-6ad8b7bb3414\",\n \"isUrl\": false,\n \"name\": \"onViewMore\"\n },\n {\n \"required\": false,\n \"type\": \"string\",\n \"value\": \"\",\n \"name\": \"className\",\n \"id\": \"c062fe02-c069-49fb-aae6-d39aa3fde89c\",\n \"isUrl\": false\n }\n ]\n },\n {\n \"componentKey\": \"OraculoSeccionBonoBienvenida\",\n \"visible\": false,\n \"order\": 6,\n \"manualScalarFields\": [\n {\n \"id\": \"fec2252c-2c2d-448d-8775-9d073bd8def9\",\n \"value\": \"Te damos la\",\n \"name\": \"headline\",\n \"type\": \"string\",\n \"required\": false,\n \"isUrl\": false\n },\n {\n \"name\": \"headline2\",\n \"required\": false,\n \"id\": \"17e045d1-8ddb-46bc-b3ae-ae0c7ffc5952\",\n \"isUrl\": false,\n \"value\": \"bienvenida al club\",\n \"type\": \"string\"\n },\n {\n \"type\": \"string\",\n \"required\": false,\n \"isUrl\": true,\n \"name\": \"backgroundImageUrl\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondobg.png\",\n \"id\": \"cae601b0-ed5d-4b97-9e1f-1816d7986c6b\"\n }\n ],\n \"variableName\": \"items\",\n \"title\": \"Bono Bienvenida\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"manualItems\": [\n {\n \"id\": \"8677b338-7d12-4ba9-a95f-d34ed71d92b0\",\n \"fields\": [\n {\n \"value\": \"Recibe\",\n \"type\": \"string\",\n \"name\": \"title\",\n \"isUrl\": false,\n \"required\": true,\n \"id\": \"e015fc5e-983e-4096-b82e-6d5ed9957dd5\"\n },\n {\n \"value\": \"S/60\",\n \"required\": false,\n \"name\": \"amount\",\n \"type\": \"string\",\n \"id\": \"00b69888-d8ee-4bae-943c-be4e0dead26b\",\n \"isUrl\": false\n },\n {\n \"name\": \"subtitle\",\n \"required\": false,\n \"isUrl\": false,\n \"id\": \"376cd731-4a20-4435-a5ee-351ac55d4351\",\n \"value\": \"SIN ROLLOVER\",\n \"type\": \"string\"\n },\n {\n \"value\": \"Hazlo aquí\",\n \"name\": \"buttonText\",\n \"required\": true,\n \"id\": \"3b73cff5-cb30-4b00-9b41-305455334e56\",\n \"type\": \"string\",\n \"isUrl\": false\n },\n {\n \"isUrl\": true,\n \"type\": \"string\",\n \"required\": true,\n \"name\": \"backgroundImage\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n \"id\": \"89710b59-2a6a-4de8-be9a-7d9274bad84b\"\n },\n {\n \"isUrl\": false,\n \"name\": \"onButtonClick\",\n \"value\": \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\n \"type\": \"function\",\n \"required\": false,\n \"id\": \"e7ceaadc-b203-4587-856b-b9015201a43f\"\n }\n ]\n },\n {\n \"fields\": [\n {\n \"id\": \"81e1730c-0f9b-4ab9-a4df-f36c974ae99d\",\n \"required\": true,\n \"type\": \"string\",\n \"name\": \"title\",\n \"value\": \"Regístrate y recibe\",\n \"isUrl\": false\n },\n {\n \"required\": false,\n \"value\": \"S/40\",\n \"name\": \"amount\",\n \"type\": \"string\",\n \"isUrl\": false,\n \"id\": \"c1e96d9b-e7c7-4bb7-a8db-b67c32dcae32\"\n },\n {\n \"required\": false,\n \"isUrl\": false,\n \"name\": \"subtitle\",\n \"value\": \"SIN ROLLOVER\",\n \"type\": \"string\",\n \"id\": \"93242ead-5f09-4966-9484-471b27859c31\"\n },\n {\n \"id\": \"0d97802b-7aaf-4ae3-b513-8a5a469e5d5d\",\n \"value\": \"Hazlo aquí\",\n \"name\": \"buttonText\",\n \"type\": \"string\",\n \"isUrl\": false,\n \"required\": true\n },\n {\n \"required\": true,\n \"isUrl\": true,\n \"id\": \"541fcdc8-07a7-47b8-9a33-d22cb865823c\",\n \"name\": \"backgroundImage\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n \"type\": \"string\"\n },\n {\n \"isUrl\": false,\n \"name\": \"onButtonClick\",\n \"id\": \"b8c4b96c-0807-4040-8c3e-8392fb278aab\",\n \"required\": false,\n \"type\": \"function\",\n \"value\": \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\"\n }\n ],\n \"id\": \"6707ce1d-064a-43af-8679-712c7235873a\"\n }\n ],\n \"id\": 11,\n \"dataMode\": \"manual\"\n },\n {\n \"dataMode\": \"url\",\n \"componentKey\": \"OraculoSeccionCasinoEnVivo\",\n \"order\": 7,\n \"title\": \"Casino en vivo\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"id\": 12,\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n \"apiMethod\": \"POST\",\n \"manualScalarFields\": [\n {\n \"isImage\": false,\n \"value\": \"Casino en vivo\",\n \"type\": \"string\",\n \"name\": \"title\",\n \"id\": \"52e655b4-7259-4f7f-9017-dafe24247810\",\n \"required\": true\n },\n {\n \"required\": false,\n \"isImage\": false,\n \"id\": \"e299d500-abdc-4577-bb38-1943b6f02dfd\",\n \"name\": \"subtitle\",\n \"type\": \"string\",\n \"value\": \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\"\n },\n {\n \"isImage\": true,\n \"dimensions\": \"1080x1920\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoMobile.png\",\n \"name\": \"backgroundMobileUrl\",\n \"required\": false,\n \"id\": \"6dcfd666-c2db-4a19-9fbf-08167bf56ae0\",\n \"type\": \"string\",\n \"maxSizeMB\": 2\n },\n {\n \"type\": \"string\",\n \"maxSizeMB\": 2,\n \"name\": \"backgroundDesktopUrl\",\n \"isImage\": true,\n \"id\": \"2aa55855-0865-4cf1-a1ee-e52db864c6b4\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoDesktop.png\",\n \"dimensions\": \"1920x1080\",\n \"required\": false\n },\n {\n \"isImage\": false,\n \"name\": \"groups\",\n \"type\": \"string\",\n \"value\": \"\",\n \"id\": \"e1599845-59d4-4320-903b-3857453b4322\",\n \"required\": false\n }\n ],\n \"variableName\": \"items\",\n \"apiParams\": [\n {\n \"key\": \"company\",\n \"value\": \"OLI\",\n \"id\": \"2822fa64-0e89-43ea-9c80-ee77076c95bd\"\n },\n {\n \"key\": \"lobby\",\n \"value\": \"HOME_CASINOENVIVO\",\n \"id\": \"2d6f8267-0468-4320-976d-b01df40e8ca3\"\n }\n ],\n \"visible\": true\n },\n {\n \"order\": 8,\n \"title\": \"Oraculo Seccion Top Juegos\",\n \"visible\": true,\n \"dataMode\": \"url\",\n \"apiMethod\": \"GET\",\n \"componentKey\": \"OraculoSeccionTopJuegos\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"manualScalarFields\": [\n {\n \"isImage\": false,\n \"value\": \"Top juegos\",\n \"type\": \"string\",\n \"required\": true,\n \"name\": \"title\",\n \"id\": \"a01c36e7-a551-4c92-89e0-e9eabcdbe344\"\n },\n {\n \"required\": true,\n \"type\": \"string\",\n \"id\": \"1960df1d-b07e-4461-b55f-39834ac30d8e\",\n \"maxSizeMB\": 0.2,\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768597100868-virtuales.webp\",\n \"isImage\": true,\n \"name\": \"iconUrl\"\n },\n {\n \"value\": \"\",\n \"name\": \"groups\",\n \"isImage\": false,\n \"type\": \"string\",\n \"id\": \"63dab0f6-b4d1-47af-b1e7-d3dcf4c69c4e\",\n \"required\": false\n }\n ],\n \"apiParams\": [\n {\n \"id\": \"2bcfd8cd-8f1f-474f-beb4-170477acf9bd\",\n \"value\": \"OLI\",\n \"key\": \"company\"\n },\n {\n \"id\": \"dac0b2d9-f00d-4979-9deb-31c6f66b1899\",\n \"key\": \"lobby\",\n \"value\": \"HOME_TOPJUEGOS\"\n }\n ],\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n \"id\": 13,\n \"variableName\": \"items\"\n },\n {\n \"apiMethod\": \"GET\",\n \"componentKey\": \"OraculoSeccionDestacados\",\n \"id\": 6,\n \"variableName\": \"items\",\n \"title\": \"Promociones \\\"Lo nuevo\\\"\",\n \"order\": 9,\n \"apiParams\": [\n {\n \"id\": \"a2ee1b32-dc39-434f-9358-920e6c7bba0b\",\n \"value\": \"OLI\",\n \"key\": \"company\"\n },\n {\n \"id\": \"16715513-30a1-4955-8e94-a4deee4722ba\",\n \"value\": \"DESTACADOS\",\n \"key\": \"lobby\"\n }\n ],\n \"dataMode\": \"url\",\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getPromotionsLobby\",\n \"manualScalarFields\": [\n {\n \"id\": \"f131acc5-a298-4583-9952-c0747dc1f1af\",\n \"name\": \"title\",\n \"type\": \"string\",\n \"value\": \"Lo nuevo\",\n \"required\": true,\n \"isImage\": false\n },\n {\n \"id\": \"8f0dadc8-ff0f-4074-870f-2bbcd9f38cab\",\n \"required\": true,\n \"name\": \"iconUrl\",\n \"type\": \"string\",\n \"maxSizeMB\": 0.2,\n \"dimensions\": \"40x40\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Destacados/starIcon.svg\",\n \"isImage\": true\n },\n {\n \"isImage\": false,\n \"type\": \"string\",\n \"name\": \"className\",\n \"value\": \"\",\n \"required\": false,\n \"id\": \"39cd368d-0003-4145-88a9-f22b1a4ef32b\"\n },\n {\n \"isImage\": false,\n \"type\": \"string\",\n \"value\": \"\",\n \"name\": \"groups\",\n \"required\": false,\n \"id\": \"a9e218fd-9cc6-432f-a7bf-c119581e6927\"\n }\n ],\n \"visible\": true\n },\n {\n \"title\": \"Club Olimpo\",\n \"componentKey\": \"OraculoSeccionClubOlimpo\",\n \"dataMode\": \"manual\",\n \"visible\": true,\n \"variableName\": \"items\",\n \"manualItems\": [\n {\n \"fields\": [\n {\n \"required\": true,\n \"id\": \"65b37bc4-f480-4409-afd7-ff8b83c722e0\",\n \"value\": \"¡Canjea bonos, productos y las mejores experiencias!\",\n \"isUrl\": false,\n \"name\": \"text\",\n \"type\": \"string\"\n },\n {\n \"id\": \"cdc8fb20-5c5a-4165-93be-4df1026cdcee\",\n \"required\": false,\n \"name\": \"buttonLabel\",\n \"value\": \"Vamos\",\n \"type\": \"string\",\n \"isUrl\": false\n },\n {\n \"value\": \"\",\n \"name\": \"imgAlt\",\n \"type\": \"string\",\n \"required\": false,\n \"id\": \"9f25442e-caeb-4fab-9bea-b91f1aef97eb\",\n \"isUrl\": false\n },\n {\n \"id\": \"259ffa74-7e4f-48e6-90da-4837f2c37fe9\",\n \"isUrl\": true,\n \"name\": \"imgMobile\",\n \"type\": \"string\",\n \"required\": true,\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/FondoMobile.png\"\n },\n {\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/FondoDesktop.png\",\n \"id\": \"e7812141-42d8-419f-9d15-b8711139e980\",\n \"required\": false,\n \"type\": \"string\",\n \"isUrl\": true,\n \"name\": \"imgDesktopBg\"\n },\n {\n \"name\": \"imgDesktopLogo\",\n \"id\": \"622d860b-9f9f-462a-a675-3768d6daf3c3\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/Logo.png\",\n \"required\": false,\n \"type\": \"string\",\n \"isUrl\": true\n },\n {\n \"name\": \"onClick\",\n \"id\": \"cc465fd9-907d-427a-b5bb-e0963bdd833a\",\n \"value\": \"\",\n \"required\": false,\n \"type\": \"function\",\n \"isUrl\": false\n }\n ],\n \"id\": \"03e20297-c0fa-4382-85b2-54eaa9325be1\"\n }\n ],\n \"id\": 8,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"order\": 10\n },\n {\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\n \"dataMode\": \"url\",\n \"title\": \"Virtuales\",\n \"order\": 11,\n \"variableName\": \"items\",\n \"componentKey\": \"OraculoSeccionVirtuales\",\n \"id\": 7,\n \"apiParams\": [\n {\n \"value\": \"OLI\",\n \"key\": \"company\",\n \"id\": \"de915e1d-1742-4383-bd83-ed96fda1145a\"\n },\n {\n \"key\": \"lobby\",\n \"value\": \"HOME_VIRTUALES\",\n \"id\": \"039b41a3-4e94-4a52-8798-e78d8651c090\"\n }\n ],\n \"apiMethod\": \"GET\",\n \"manualScalarFields\": [\n {\n \"required\": true,\n \"name\": \"title\",\n \"id\": \"f6b16510-51db-4124-864d-2d12a0bb1b23\",\n \"value\": \"Virtuales\",\n \"type\": \"string\",\n \"isImage\": false\n },\n {\n \"type\": \"string\",\n \"id\": \"f9686ddc-f673-4784-8025-df26f48cc04f\",\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Virtuales/virtuales.svg\",\n \"maxSizeMB\": 0.2,\n \"required\": true,\n \"isImage\": true,\n \"name\": \"iconUrl\"\n },\n {\n \"type\": \"boolean\",\n \"id\": \"4c4f348c-cb17-4fd6-bc4d-f816a42da249\",\n \"name\": \"mosaicFirst\",\n \"isImage\": false,\n \"value\": \"true\",\n \"required\": false\n },\n {\n \"id\": \"c264c9c3-7178-4961-b366-163d9b818800\",\n \"type\": \"number\",\n \"name\": \"gridSize\",\n \"value\": \"4\",\n \"required\": false,\n \"isImage\": false\n },\n {\n \"id\": \"2310900e-68ce-4a64-89da-e0976d172fee\",\n \"required\": false,\n \"type\": \"string\",\n \"value\": \"\",\n \"isImage\": false,\n \"name\": \"groups\"\n }\n ],\n \"visible\": true,\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\"\n },\n {\n \"title\": \"Medios de Pago\",\n \"id\": 10,\n \"order\": 12,\n \"componentKey\": \"OraculoSeccionMediosPago\",\n \"visible\": true,\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\"\n }\n],\n}","\"use client\";\nimport \"../index.css\";\nimport React, { useEffect, useState, useMemo } from \"react\";\nimport { Container, Stack, useMediaQuery } from \"@mui/material\";\nimport { doc, onSnapshot, Firestore } from \"firebase/firestore\";\n// import \"@splidejs/react-splide/css\";\n\nimport { Landing } from \"./landingRegistry\";\nimport { clearOraculoExtras, setOraculoExtras } from \"../utils/openMachineRegistry\";\n// import \"../index.css\"\nimport { DocIdProvider } from \"../contexts/DocIdContext\";\nimport { LANDING_FALLBACK_JSON } from \"../config/json_configuration\";\nimport OraculoThemeProvider from \"../theme/OraculoThemeProvider\";\n// Para testear captura\n// import { OlimpoErrorClient, type SessionProvider } from \"@olimpo/capture-client\";\n\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\n\n// Es componente React si es función o componente objeto (MUI, etc.)\nconst isComponent = (val: any) =>\n typeof val === \"function\" ||\n (val && typeof val === \"object\" && \"$$typeof\" in val);\n\n// En oraculo-ui los organismos de landing se llaman OraculoSeccionXXX\nconst isSectionName = (key: string) => /^OraculoSeccion[A-Z]/.test(key);\n\nfunction normalizeLandingJsonToSections(rawJson: any): OraculoPageLandingPreviewSection[] {\n // Caso 1: tu JSON ya trae sections como array\n if (rawJson && Array.isArray(rawJson.sections)) {\n return rawJson.sections\n .slice()\n .sort((a: any, b: any) => (a.order ?? 0) - (b.order ?? 0))\n .map((s: any, i: number) => ({ ...s, order: i + 1 }));\n }\n\n // Caso 2: tu JSON NO trae sections, sino keys/otra estructura:\n // EJEMPLO: rawJson.components = [{componentKey, visible, ...}]\n if (rawJson && Array.isArray(rawJson.components)) {\n return rawJson.components.map((c: any, i: number) => ({\n id: c.id ?? i + 1,\n title: c.title ?? \"\",\n componentKey: c.componentKey,\n visible: c.visible ?? true,\n order: i + 1,\n props: c.props ?? {},\n apiUrl: c.apiUrl ?? \"\",\n dataMode: c.dataMode,\n variableName: c.variableName,\n manualItems: c.manualItems,\n apiMethod: c.apiMethod,\n apiParams: c.apiParams,\n }));\n }\n\n // Si no matchea nada, retorna vacío\n return [];\n}\n\nexport const LandingComponents: LandingComponentMap = Object.fromEntries(\n Object.entries(Landing).filter(\n ([key, val]) => isSectionName(key) && isComponent(val)\n )\n) as LandingComponentMap;\n\n// Section item model mirrors Firestore persisted structure\nexport type OraculoPageLandingPreviewSection = {\n id: number;\n title: string;\n componentKey: string;\n visible: boolean;\n order: number;\n props?: Record<string, unknown>;\n apiUrl?: string;\n dataMode?: \"url\" | \"manual\";\n variableName?: string;\n manualItems?: { fields: { name: string; type: string; value: string }[] }[];\n variableName2?: string;\n manualItems2?: { fields: { name: string; type: string; value: string }[] }[];\n manualScalarFields?: { name: string; type: string; value: string }[];\n apiMethod?: \"GET\" | \"POST\";\n apiParams?: { id: string; key: string; value: string }[];\n};\n\nexport type OpenMachineFn = (\n machine_name: string,\n provider: any,\n machine: any,\n external_id: any,\n type: any,\n demo: any,\n source: string\n) => void;\n\nexport type OraculoExtras = Array<[string, unknown]>;\n\nconst extrasToObject = (extras?: OraculoExtras): Record<string, unknown> => {\n try {\n return Object.fromEntries(extras ?? []);\n } catch (e) {\n console.warn(\"[oraculo] extras inválidos. Debe ser Array<[string, unknown]>\", extras);\n return {};\n }\n};\n\nconst asComponent = <T,>(val: unknown): T | undefined =>\n typeof val === \"function\" ? (val as T) : undefined;\n\nconst asFn = <T extends Function>(val: unknown): T | undefined =>\n typeof val === \"function\" ? (val as T) : undefined;\n\n/** Payload bruto obtenido por fetch o construido manualmente */\ntype SectionPayload =\n | Record<string, unknown>\n | Array<unknown>\n | null\n | undefined;\n\nexport interface OraculoPageLandingPreviewProps {\n /** Optional override: if provided, renders these sections instead of fetching Firestore */\n sectionsOverride?: OraculoPageLandingPreviewSection[];\n /** Firestore document id (default 'home') */\n docId?: string;\n /** Instancia de Firestore proporcionada por la app que consume el paquete */\n db: Firestore;\n /** Componente que se renderizará mientras carga */\n loader?: React.ComponentType<any>;\n // Optional extras\n extras?: OraculoExtras;\n disableWrapper?: boolean;\n}\n\nclass HttpError extends Error {\n constructor(\n public status: number,\n public url: string,\n public statusText: string\n ) {\n super(`HTTP ${status} ${statusText}`);\n this.name = \"HttpError\";\n }\n}\n\ntype ComponentMap = Record<\n string,\n React.ComponentType<Record<string, unknown>>\n>;\n\nconst noMostrarSinItems = [\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n];\n\nconst OraculoPageLandingPreview: React.FC<OraculoPageLandingPreviewProps> = ({\n sectionsOverride,\n docId = \"home\",\n db,\n extras,\n loader,\n disableWrapper = false,\n}) => {\n const extrasObj = useMemo(() => extrasToObject(extras), [extras]);\n\n const Loader = loader || extrasObj[\"loader\"] as React.ComponentType<any> | undefined;\n\n\n const [sections, setSections] = useState<OraculoPageLandingPreviewSection[]>([]);\n const [loading, setLoading] = useState(false);\n const [sectionDataMap, setSectionDataMap] = useState<\n Record<number, SectionPayload>\n >({});\n const [sectionLoadingMap, setSectionLoadingMap] = useState<\n Record<number, boolean>\n >({});\n const [sectionErrorMap, setSectionErrorMap] = useState<\n Record<number, string>\n >({});\n\n const isDesktop = useMediaQuery(\"(min-width:1024px)\");\n\n // Fetch sections from Firestore unless override provided\n useEffect(() => {\n if (sectionsOverride) return;\n if (!db) {\n console.warn(\"[landing] sin db -> fallback json\");\n setSections(normalizeLandingJsonToSections(LANDING_FALLBACK_JSON));\n return;\n }\n\n const applyFallback = (reason: string, extra?: unknown) => {\n console.warn(\"[landing] FALLBACK:\", reason, extra ?? \"\");\n setSections(normalizeLandingJsonToSections(LANDING_FALLBACK_JSON));\n setLoading(false);\n };\n\n // ✅ prueba rápida sin romper nada:\n if (process.env.NEXT_PUBLIC_LANDING_FORCE_FALLBACK === \"1\") {\n setLoading(true);\n applyFallback(\"forzado por env\");\n return;\n }\n\n setLoading(true);\n\n const unsubscribe = onSnapshot(\n doc(db, \"landings\", docId),\n (snap) => {\n try {\n if (!snap.exists()) {\n applyFallback(`doc landings/${docId} no existe`);\n return;\n }\n\n const rawJson = snap.data();\n const normalized = normalizeLandingJsonToSections(rawJson);\n\n if (!normalized.length) {\n applyFallback(\"JSON inválido o sin secciones normalizables\", rawJson);\n return;\n }\n\n console.log(\"[landing] Firestore OK (json grande):\", rawJson);\n setSections(normalized);\n } catch (e) {\n applyFallback(\"error procesando snapshot\", e);\n } finally {\n setLoading(false);\n }\n },\n (error) => {\n applyFallback(\"error onSnapshot\", error);\n }\n );\n\n return () => unsubscribe();\n }, [sectionsOverride, docId, db]);\n\n useEffect(() => {\n setOraculoExtras(extrasObj);\n return () => clearOraculoExtras();\n }, [extrasObj]);\n\n useEffect(() => {\n // preload all components used in sections\n const effectiveSections = sectionsOverride\n ? sectionsOverride.slice()\n : sections.slice();\n const toLoad = effectiveSections\n .map((s) => s.componentKey)\n .filter((key) => !!key);\n\n if (toLoad.length === 0) return;\n\n }, [sectionsOverride, sections]);\n\n const fetchSectionData = async (\n section: OraculoPageLandingPreviewSection\n ): Promise<SectionPayload> => {\n\n if (noMostrarSinItems.includes(section.componentKey)) {\n return {\n // whatever empty structure your UI expects\n items: [],\n events: [],\n data: {},\n } as SectionPayload;\n }\n\n const rawUrl = (section.apiUrl || \"\").trim();\n if (!rawUrl) return undefined;\n\n const method = section.apiMethod || \"GET\";\n const params = section.apiParams || [];\n\n let url = rawUrl;\n let body: BodyInit | undefined;\n let headers: HeadersInit | undefined;\n\n if (method === \"GET\") {\n const u = new URL(\n rawUrl,\n typeof window == \"undefined\"\n ? \"http://localhost\"\n : window.location.origin\n );\n for (const p of params) {\n if (!p.key) continue;\n u.searchParams.append(p.key, p.value);\n }\n url = u.toString();\n } else {\n // application/x-www-form-urlencoded\n const encoded = new URLSearchParams();\n for (const p of params) {\n if (!p.key) continue;\n // el value se manda tal cual; URLSearchParams se encarga del %7B%22...%7D\n encoded.append(p.key, p.value);\n }\n body = encoded.toString();\n headers = {\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n };\n }\n\n const res = await fetch(url, {\n method,\n headers,\n body,\n });\n\n if (!res.ok) throw new HttpError(res.status, url, res.statusText);\n return res.json();\n };\n\n // Use override if provided\n const effectiveSections = useMemo(\n () => (sectionsOverride ? sectionsOverride.slice() : sections.slice()),\n [sectionsOverride, sections]\n );\n\n const fetchedKeysRef = React.useRef<Set<string>>(new Set());\n\n useEffect(() => {\n const fetchables = effectiveSections\n .map((s) => ({ s, url: (s.apiUrl || \"\").trim() }))\n .filter(({ url }) => !!url);\n\n if (!fetchables.length) return;\n\n for (const { s, url } of fetchables) {\n const key = `${s.id}|${url}`;\n if (fetchedKeysRef.current.has(key)) continue;\n fetchedKeysRef.current.add(key);\n\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: true }));\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: \"\" }));\n\n (async () => {\n try {\n const json = await fetchSectionData(s);\n setSectionDataMap((prev) => ({ ...prev, [s.id]: json }));\n } catch (err: unknown) {\n let message = \"Error desconocido\";\n if (err instanceof HttpError) {\n message = `Error HTTP ${err.status} (${err.statusText}) en ${err.url}`;\n } else if (err instanceof SyntaxError) {\n message = \"Respuesta no es JSON válido\";\n } else if (err instanceof TypeError) {\n message = \"Fallo de red / CORS / conexión\";\n } else if (typeof err === \"string\") {\n message = err.toString();\n }\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: message }));\n } finally {\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: false }));\n }\n })();\n }\n }, [effectiveSections]);\n\n const orderedVisible = useMemo(\n () =>\n effectiveSections\n .filter((s) => s.visible)\n .sort((a, b) => a.order - b.order),\n [effectiveSections]\n );\n\n const toManualArray = (\n items:\n | { fields: { name: string; type: string; value: string }[] }[]\n | undefined\n ): Array<Record<string, unknown>> => {\n if (!Array.isArray(items)) return [];\n return items.map((it) => {\n const obj: Record<string, unknown> = {};\n for (const f of it.fields || []) {\n const t = (f.type || \"string\").toLowerCase();\n if (t === \"number\") {\n const val = String(f.value || \"\").trim();\n if (val !== \"\") {\n const num = Number(val);\n if (!Number.isNaN(num)) {\n obj[f.name] = num;\n }\n }\n } else if (t === \"boolean\")\n obj[f.name] = String(f.value).toLowerCase() === \"true\";\n else if (t === \"function\") {\n const body = String(f.value || \"\").trim();\n if (body) {\n try {\n // ✅ Explicit function type\n const fn = new Function(body) as () => unknown;\n obj[f.name] = fn;\n } catch (e) {\n console.error(`❌ Error creando función en item '${f.name}':`, e);\n }\n }\n } else obj[f.name] = f.value;\n }\n return obj;\n });\n };\n\n const toManualScalars = (\n fields: { name: string; type: string; value: string }[] | undefined\n ): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n if (!Array.isArray(fields)) return out;\n for (const f of fields) {\n if (!f.name) continue;\n const t = (f.type || \"string\").toLowerCase();\n if (t === \"number\") {\n // Si el valor está vacío o es inválido, NO agregar el prop (usar default del componente)\n const val = String(f.value || \"\").trim();\n if (val !== \"\") {\n const num = Number(val);\n if (!Number.isNaN(num)) {\n out[f.name] = num;\n }\n }\n } else if (t === \"boolean\")\n out[f.name] = String(f.value).toLowerCase() === \"true\";\n else if (t === \"function\") {\n const body = String(f.value || \"\").trim();\n if (body) {\n try {\n // ✅ Explicit function type\n const fn = new Function(body) as () => unknown;\n out[f.name] = fn;\n } catch (e) {\n console.error(`❌ Error creando función en item '${f.name}':`, e);\n }\n }\n } else out[f.name] = f.value;\n }\n return out;\n };\n\n const mapPayloadToProps = (\n payload: SectionPayload,\n manual: { arr?: unknown[]; variableName?: string } | null,\n base?: Record<string, unknown>,\n variableName?: string\n ): Record<string, unknown> => {\n const merged: Record<string, unknown> = base ? { ...base } : {};\n const propName = (variableName || \"items\").trim() || \"items\";\n\n if (manual) {\n merged[propName] = manual.arr || [];\n return merged;\n }\n\n const pl = payload;\n\n if (Array.isArray(pl)) {\n merged[propName] = pl;\n return merged;\n }\n\n if (pl && typeof pl === \"object\") {\n const obj = pl as any;\n\n if (Array.isArray(obj.lobby)) {\n merged[propName] = obj.lobby;\n return merged;\n }\n\n if (Array.isArray(obj.items)) {\n merged[propName] = obj.items;\n return merged;\n }\n\n // IMPORTANTE:\n // si no es array y no trae items/lobby, mandar el objeto completo\n // esto permite que personalize reciba { recommendations: [...] }\n merged[propName] = pl;\n return merged;\n }\n\n merged[propName] = [];\n return merged;\n };\n\n const buildCompProps = (\n s: OraculoPageLandingPreviewSection\n ): Record<string, unknown> => {\n const hasUrl = !!s.apiUrl?.trim();\n const payload: SectionPayload = hasUrl ? sectionDataMap[s.id] : undefined;\n let compProps: Record<string, unknown> = s.props ? { ...s.props } : {};\n const scalars = toManualScalars(s.manualScalarFields);\n if (\n noMostrarSinItems.includes(s.componentKey)\n ) {\n //console.log(payload);\n return { items: payload, ...compProps, ...scalars };\n }\n\n compProps = { ...compProps, ...scalars };\n if (hasUrl) compProps = mapPayloadToProps(payload, null, compProps);\n else if (s.dataMode === \"manual\") {\n const arr = toManualArray(s.manualItems);\n compProps = mapPayloadToProps(\n null,\n { arr, variableName: s.variableName },\n compProps\n );\n\n // Si existe variableName2 y manualItems2, agregar también ese prop\n if (s.variableName2 && s.manualItems2) {\n const arr2 = toManualArray(s.manualItems2);\n const varName2 = (s.variableName2 || \"items2\").trim() || \"items2\";\n compProps[varName2] = arr2;\n }\n }\n\n return compProps;\n };\n\n const renderStatusBox = (\n key: number,\n type: \"loading\" | \"error\" | \"component\",\n message: string\n ) => {\n const colorMap: Record<string, string> = {\n loading: \"bg-blue-100 text-blue-800\",\n error: \"bg-red-100 text-red-800\",\n component: \"bg-yellow-100 text-yellow-800\",\n };\n return (\n <div key={key} className={`mx-4 p-4 rounded ${colorMap[type]}`}>\n {message}\n </div>\n );\n };\n\n const renderSingleSection = (s: OraculoPageLandingPreviewSection) => {\n const rawKey = s.componentKey;\n\n const Comp = LandingComponents[rawKey];\n\n if (!Comp) {\n console.warn(`No hay componente registrado para \"${rawKey}\"`);\n return renderStatusBox(\n s.id,\n \"component\",\n `Componente \"${rawKey}\" no encontrado`\n );\n }\n\n const hasUrl = !!s.apiUrl?.trim();\n const payload = hasUrl ? sectionDataMap[s.id] : undefined;\n const loadingSec = hasUrl ? !!sectionLoadingMap[s.id] : false;\n const errorSec = hasUrl ? sectionErrorMap[s.id] : \"\";\n\n if (hasUrl) {\n if (loadingSec && !payload)\n return renderStatusBox(\n s.id,\n \"loading\",\n `Cargando datos desde ${s.apiUrl}...`\n );\n if (errorSec && !payload)\n return renderStatusBox(\n s.id,\n \"error\",\n `Error cargando ${s.apiUrl}: ${errorSec}`\n );\n }\n\n const compProps = buildCompProps(s);\n const fullBleedComponents = new Set([\n \"OraculoSeccionBanners\",\n \"OraculoSeccionBonoBienvenida\",\n \"OraculoSeccionCasinoEnVivo\",\n ...(!isDesktop\n ? [\n \"OraculoSeccionClubOlimpo\",\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n \"OraculoSeccionVirtuales\",\n \"OraculoSeccionDestacados\",\n \"OraculoSeccionCasino\",\n ]\n : []),\n ]);\n const isFullBleed = fullBleedComponents.has(s.componentKey);\n\n const paddingX = isDesktop ? 120 : 24;\n\n const stackGapPx = (isDesktop ? 8 : 5) * 8;\n const isNoStackSpacing = s.componentKey === \"OraculoSeccionCasinoEnVivo\";\n\n const wrapperStyle: React.CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n ...(isFullBleed\n ? {}\n : { paddingLeft: paddingX, paddingRight: paddingX }),\n\n ...(isNoStackSpacing\n ? {\n marginTop: -stackGapPx,\n marginBottom: -stackGapPx,\n }\n : {}),\n };\n\n // if (\n // noMostrarSinItems.includes(s.componentKey)\n // ) {\n // //console.log(payload);\n // return (<Comp key={s.id}{...compProps} />);\n // }\n return (\n <div key={s.id} style={wrapperStyle} className=\"oraculo-section-wrapper\">\n <Comp {...compProps} />\n </div>\n );\n };\n\n /**\n * para testear captura\n useEffect(() => {\n // ✅ Inicializar OlimpoErrorClient con la API configurada\n const sessionProvider: SessionProvider = {\n getUser: () => ({\n user: \"test\",\n email: \"test@latinka.com.pe\",\n alias: \"test\",\n groups: [\n 3,\n 5,\n ]\n })\n };\n \n if (!OlimpoErrorClient.isInitialized()) {\n OlimpoErrorClient.init({\n apiUrl: process.env.NEXT_PUBLIC_OLIMPO_API,\n projectSlug: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_PROJECT_SLUG,\n environmentName: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_ENVIRONMENT_NAME,\n token: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_TOKEN,\n country: process.env.NEXT_PUBLIC_COUNTRY,\n sessionProvider: sessionProvider\n });\n }\n }, []);\n */\n\n if (loading && !sectionsOverride)\n return Loader ? <Loader /> : <div>Cargando...</div>;\n\n if (!loading && !sectionsOverride && sections.length === 0) {\n return (\n <div className=\"text-xs text-gray-500\">Sin secciones (Firestore)</div>\n );\n }\n if (disableWrapper) {\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId}>\n <>\n {orderedVisible.map(renderSingleSection)}\n </>\n </DocIdProvider>\n </OraculoThemeProvider>\n );\n }\n\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId}>\n <Container\n className=\"oli-font\"\n maxWidth={false}\n disableGutters\n sx={{\n backgroundColor: \"#121212\",\n position: \"relative\",\n pb: 5,\n // pt: 5,\n width: \"100%\",\n maxWidth: \"100%\",\n overflowX: \"hidden\",\n }}\n >\n <Stack direction=\"column\" spacing={isDesktop ? 8 : 5} useFlexGap>\n {orderedVisible.map(renderSingleSection)}\n </Stack>\n </Container>\n </DocIdProvider>\n </OraculoThemeProvider>\n );\n};\n\nexport default OraculoPageLandingPreview;\n"],"names":["OraculoButton","children","onClick","href","target","rel","type","disabled","variant","size","fullWidth","fullHeight","className","ariaLabel","leftIcon","rightIcon","iconOnly","hasText","onlyOneIcon","isIconOnly","cls","content","jsxs","Fragment","jsx","ariaDisabled","MuiLink","e","OraculoSectionTitle","title","iconUrl","wrapperClass","OraculoCarouselDots","total","active","onSelect","durationMs","rootClass","seed","setSeed","useState","useEffect","s","_","i","isActive","OraculoGridGroup","minWidth","spacing","justify","columns","gridTemplate","gap","OraculoLogoMediosPago","src","alt","Box","OraculoEventTitle","subtitle","styles","OraculoEventStatusBadge","text","color","textColor","OraculoEventStatus","live","time","OraculoMatchHeader","OraculoEventLabel","OraculoEventLeague","OraculoEventScore","name","OraculoTeamPolo","jersey","base","sleeve","stripes","sleevelong","OraculoEventTeamInfo","Skeleton","useHorizontalWheelSplide","hostRef","splideRef","enabled","threshold","cooldownMs","accRef","useRef","lastNavRef","host","onWheel","splide","deltaX","deltaY","now","direction","Splide","SplideRaw","SplideSlide","SplideSlideRaw","OraculoCarousel","forwardRef","items","renderItem","perPage","breakpoints","options","onMove","useIndexAsKey","enableHorizontalWheel","showRightGradient","ref","wheelHostRef","prevLengthRef","gradientLeftRef","gradientRightRef","useImperativeHandle","_a","index","getVisibleRange","Slides","Controller","track","trackWidth","visibleStart","currentWidth","visibleEnd","slide","hasOverflow","list","handleMove","useCallback","isStart","isEnd","_b","React","lengthChanged","handleResize","handleMounted","mergedOptions","item","OraculoGameCard","imageUrl","fillParent","dim","handleButtonClick","sizeStyles","OraculoGameRankCard","orden","loading","sizes","getVal","k","def","_d","_c","W","H","R","F","hang","OraculoLiveCasinoCard","logo","provider","providerName","machine","Typography","GAP","SkCard","r","OraculoGameSlide","layout","gridSkeletonCount","big","smalls","it","OraculoWelcomeBanner","amount","buttonText","onButtonClick","backgroundImage","symbol","value","isLarge","OraculoClubOlimpoVisual","buttonLabel","imgAlt","imgSrcMobile","imgSrcDesktopBg","imgSrcDesktopLogo","redirectHomeWithOutcomes","url","outcomes","arr","verMasSeccionEnVivo","verMasSeccionSemana","verMasSeccionCombinadas","fetchJerseys","eventIds","useDebouncedValue","delay","debounced","setDebounced","id","DocIdContext","createContext","DocIdProvider","docId","useDocId","context","useContext","OraculoEventCombinadosCard","coupon","captureInteraction","useCaptureInteraction","processCoupon","allOutcomes","uniqueEvents","event","apuestas","homeName","awayName","a","best","line","_e","_f","_g","b","buildUrlFromCoupon","events","firstGroupId","path","p","handleOutcomeClick","totalOdds","eventNames","couponData","o","eventMap","resultTitle","label","outcomesByEvent","acc","Stack","eventId","OraculoButtonBet","DEFAULT_HOME_JERSEY","DEFAULT_AWAY_JERSEY","getTeamJersey","jerseyEvent","side","role","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","defaultOutcomeBase","defaultOutcomes","OraculoEventHeader","_i","_h","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","odds","matchTitle","cuota","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","isLoading","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","sectionClassName","ChevronLeftRounded","ChevronRightRounded","KEY","getStore","g","setOraculoExtras","extrasObj","getOraculoExtra","key","clearOraculoExtras","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","top6","handleOpen","juego","showIframe","loadMachine","getGameId","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","handleOpenLive","RECOMMENDATIONS_URL","mapMachineToGameItem","_j","_k","extractMachineIds","payload","getPersonalizeUserId","user","fetchRecommendations","productType","userId","qs","res","usePersonalizeGameItems","isPersonalize","resolvedItems","setResolvedItems","setLoading","cancelled","recommendationsPayload","machineIds","machineResults","machineId","data","parsedItems","result","error","usePersonalizeCasinoItems","usePersonalizeVirtualesItems","parseBooleanValue","input","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","end","buildLoadingSlides","mkItems","n","OraculoSeccionCasino","onItemClick","personalizeEnabled","currentItems","itm","game","buildVirtualSlides","buildLoadingVirtualSlides","OraculoSeccionVirtuales","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","isMobile","useMediaQuery","showDots","isMounted","isAutoplayRef","activeIndex","setActiveIndex","timer","navRef","wheelLockRef","wheelUnlockTimerRef","activeSlide","sectionSx","handleBannerButtonClick","handleSlideChange","el","THRESHOLD","LOCK_MS","dx","dy","dirNext","renderSlide","desktop","hl1","hl2","OraculoSeccionClubOlimpo","fullBleed","selectedIndex","rootRef","bottomRef","useLayoutEffect","root","bottom","update","ro","extractRowOutcomes","row","mergeEventOffers","eventos","prePackCoupons","rows","outcomeId","outcomeIds","rowIndexByOutcomeId","betOffersByEvent","filteredOutcomes","mergedEvents","evento","kambiDisplayComboFromRows","product","raw","normalized","MemoizedCombinadaCard","OraculoEventCombinadasCard","OraculoSeccionEventoCombinadas","setEvents","SPECIALS_GROUPS_URL","carouselItems","loadDataEventSpecial","listData","groupId","SPECIALS_URL","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","filterFootballEvents","blocked","ev","group","word","MemoizedCard","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","jerseys","setJerseys","visibleRange","setVisibleRange","fetchingRef","orderedEventIds","setOrderedEventIds","orderIdsFetchedRef","orderMapRef","debouncedVisibleRange","fetchedIdsRef","loadData","orderJson","ids","newMap","err","response","filteredEvents","sortedEvents","aIndex","bIndex","interval","BUFFER","from","to","idsToFetch","prev","OraculoEventSemanaCardSkeleton","MemoizedSemanaCard","fetchInBatches","urls","batchSize","signal","results","batch","responses","u","sortEvents","evs","filterEventsWithinOneWeek","oneWeekLater","eventDate","mergeEventOffersOutcome","apuestasByEvent","OraculoSeccionEventoSemana","WEEK_EVENTS_URL","COMMON_QUERY","loadDataWeekEvent","orderedGroupIds","orderResponse","football","groups","orderMap","firstGroups","buildUrls","sub","loadAllGroupEvents","orderEvents","allEvents","allBetOffers","merged","finalEvents","orderedEvents","controller","sectionStyle","OraculoSeccionBanners","backgrounds","hideItems","activeDot","setActiveDot","totalDots","canNavigate","showDock","ARROW_COLOR","arrowSx","carouselOptions","handleBannerClick","bg","bannerName","handleMenuItemClick","autoplayMs","autoplayTimeoutRef","canAutoplay","stopAutoplay","scheduleAutoplay","handleSlideChangeTracking","safe","wasAutoplay","IconButton","DEFAULT_ITEMS","OraculoSeccionMediosPago","split","row1","row2","l","OraculoThemeProvider","outer","useTheme","createTheme","ThemeProvider","CssBaseline","OraculoSectionHost","Landing","LANDING_FALLBACK_JSON","isComponent","val","isSectionName","normalizeLandingJsonToSections","rawJson","c","LandingComponents","extrasToObject","extras","HttpError","status","statusText","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","db","loader","disableWrapper","Loader","sections","setSections","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","applyFallback","reason","extra","unsubscribe","onSnapshot","doc","snap","fetchSectionData","section","rawUrl","method","params","body","headers","encoded","effectiveSections","fetchedKeysRef","fetchables","json","message","orderedVisible","toManualArray","obj","f","t","num","fn","toManualScalars","fields","out","mapPayloadToProps","manual","variableName","propName","pl","buildCompProps","hasUrl","compProps","scalars","arr2","varName2","renderStatusBox","colorMap","renderSingleSection","rawKey","Comp","loadingSec","errorSec","isFullBleed","paddingX","stackGapPx","isNoStackSpacing","wrapperStyle","Container"],"mappings":"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"}
|