oraculo-ui 0.2.27 → 0.2.28

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.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/hooks/usePersonalizeCasinoItems.ts","../src/organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx","../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/atoms/OraculoEvent/useLazyJerseys.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 <div className=\"orc-co-desktopInner\">\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 </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 moduleId?: number;\n}\n\nconst DocIdContext = createContext<DocIdContextType | undefined>(undefined);\n\nexport const DocIdProvider: React.FC<{\n children: React.ReactNode;\n docId: string;\n moduleId?: number;\n}> = ({ children, docId, moduleId }) => {\n const value = React.useMemo(() => ({ docId, moduleId }), [docId, moduleId]);\n\n return (\n <DocIdContext.Provider value={value}>\n {children}\n </DocIdContext.Provider>\n );\n};\n\nexport const useDocContext = () => {\n const context = useContext(DocIdContext);\n if (!context) {\n throw new Error(\"useDocContext debe usarse dentro de DocIdProvider\");\n }\n return context;\n};\n\nexport const useDocId = () => useDocContext().docId;\nexport const useModuleId = () => useDocContext().moduleId;","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, { useEffect, 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, useModuleId } from \"../../contexts/DocIdContext\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\n\nexport default function OraculoSeccionDestacados({\n items,\n title = \"Destacados\",\n iconUrl,\n onViewMore,\n className = \"\",\n paddingMobile = \"16px\",\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 const moduleId = useModuleId();\n\n const isLoading = !items || items.length === 0;\n\n const handlePrev = () => {\n captureInteraction({\n element: \"destacados_carousel_prev\",\n label: `${docId} - OraculoSeccionDestacados - Anterior`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionDestacados - Siguiente`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionDestacados - Ver más`,\n target: \"https://www.olimpo.bet/promociones\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionDestacados - Click: ${String(promotion)}`,\n target: url,\n event_type: \"click\",\n module_id: moduleId,\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 const isMobile = useMediaQuery(\"(max-width:950px)\");\n const itemsLength = items?.length ?? 0;\n\n useEffect(() => {\n if (itemsLength === 0) {\n setNavState({ isStart: true, isEnd: true });\n return;\n }\n\n // Estado inicial correcto:\n // Estoy al inicio, pero probablemente puedo ir a la derecha.\n setNavState({ isStart: true, isEnd: false });\n }, [itemsLength, isMobile, paddingMobile]);\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: !isMobile ? 0 : paddingMobile,\n paddingRight: !isMobile ? 0 : paddingMobile,\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={!isMobile}\n options={{ autoWidth: true, trimSpace: 'move' }}\n breakpoints={{\n 768: { perPage: 2, focus: \"start\", padding: { left: paddingMobile, right: paddingMobile } },\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 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: `${docId} - OraculoSeccionDestacados - Slide Carousel`,\n target: \"carousel\",\n event_type: \"slide\",\n module_id: moduleId,\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, useModuleId } 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 const moduleId = useModuleId();\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: `${docId} - OraculoSeccionTopJuegos - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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 { 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// Mapeo de las máquinas a los items del juego\nconst mapMachineToGameItem = (\n machine: any,\n index: number\n): OraculoGameItem => {\n return {\n orden: Number(index),\n machine: String(\n machine.id ?? machine.external_id\n ),\n logo: machine.logo ?? \"\",\n name: machine.room_name ?? \"\",\n web_name: machine.product ?? \"\",\n provider: machine.service ?? \"\",\n sub_provider: machine.service ?? \"\",\n external_id: machine.external_id ?? \"\",\n type: machine.game_type ?? \"\",\n tags: machine.tags ?? \"\",\n lobby_tag: machine.lobby_tag ?? null,\n background: machine.background ?? \"\",\n rtp: machine.rtp ?? null,\n demo_allowed: machine.demo_allowed ?? false,\n gaming_session_required: machine.gaming_session_required ?? false,\n };\n};\n\n// Extrae los IDs de las máquinas de la respuesta de recomendaciones\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\n// Obtener el userId personalizado\nconst getPersonalizeUserId = () => {\n const user = getOraculoExtra<any>(\"user\");\n return user?.userId ?? user?.user ?? user?.id ?? null;\n};\n\n// Obtener las recomendaciones\nconst fetchRecommendations = async (productType: any) => {\n const userId = getPersonalizeUserId();\n\n const qs = new URLSearchParams({\n userId: String(userId),\n productType\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 const data = await res.json();\n\n return {\n ...data,\n recommendations: Array.isArray(data?.recommendations)\n ? data.recommendations.slice(0, 49)\n : [],\n };\n};\n\n// Nueva función para obtener el ranking de las máquinas\nconst fetchRanking = async (userId: string, machineIds: string[]) => {\n const url = \"https://1v5raznji6.execute-api.us-east-1.amazonaws.com/dev/ranking\";\n\n const body = JSON.stringify({\n userId: String(userId),\n items: machineIds,\n });\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body,\n });\n\n if (!res.ok) {\n throw new Error(`No se pudo obtener el ranking. HTTP ${res.status} ${res.statusText}`);\n }\n\n const data = await res.json();\n return data.rankedItems;\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 // Obtener el ranking de las máquinas\n const userId = getPersonalizeUserId();\n const rankedItems = await fetchRanking(userId, machineIds);\n\n // Mapear las máquinas con su ranking\n const rankedMachineIds = rankedItems.map((item: any) => item.itemId);\n const machineResults = await Promise.allSettled(\n rankedMachineIds.map(async (machineId: string, index: number) => {\n const res = await fetch(`https://api.mktolimpo.com/api/machine/${machineId}`);\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 // Ordenar los elementos por el ranking recibido\n const orderedItems = rankedItems\n .map((rankedItem: any) => {\n const item = parsedItems.find((i) => i.machine === rankedItem.itemId);\n return item ? { ...item, score: rankedItem.score } : null;\n })\n .filter(Boolean)\n .sort((a: any, b: any) => (b.score ?? 0) - (a.score ?? 0));\n\n setResolvedItems(orderedItems);\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\");\n\nexport const usePersonalizeCasinoEnVivoItems = (\n items: OraculoGameItem[],\n isPersonalize = false\n) => usePersonalizeGameItems(items, isPersonalize, \"Casino en vivo\");","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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeCasinoEnVivoItems } from \"../../hooks/usePersonalizeCasinoItems\";\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 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 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 isPersonalize = false,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const moduleId = useModuleId();\n\n const personalizeEnabled = parseBooleanValue(isPersonalize);\n\n const { resolvedItems, loading } = usePersonalizeCasinoEnVivoItems(\n items,\n personalizeEnabled\n );\n\n const currentItems = personalizeEnabled\n ? resolvedItems\n : Array.isArray(items)\n ? items\n : [];\n\n const handleOpenLive = (juego: any) => {\n captureInteraction({\n element: \"live_casino_card\",\n label: `${docId} - OraculoSeccionCasinoEnVivo${personalizeEnabled ? \" - personalize\" : \"\"} - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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\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 showIframe?.();\n\n if (typeof window !== \"undefined\") {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n }\n\n requestAnimationFrame(() => {\n loadMachine?.(juego, false, \"casino_en_vivo\");\n });\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"casino_en_vivo_view_more\",\n label: `${docId} - OraculoSeccionCasinoEnVivo${personalizeEnabled ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/casino-en-vivo\",\n event_type: \"click\",\n module_id: moduleId,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasinoEnVivo\" },\n });\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 <Box\n sx={{\n position: \"absolute\",\n inset: 0,\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: {\n xs: \"cover\",\n md: \"cover\",\n },\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n zIndex: 0,\n }}\n />\n\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 <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 <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 {(currentItems ?? []).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 <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;","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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeCasinoItems } from \"../../hooks/usePersonalizeCasinoItems\";\nimport { useMediaQuery } from \"@mui/material\";\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 moduleId = useModuleId();\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 handlePrev = () => {\n captureInteraction({\n element: \"casino_prev\",\n label: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/casino\",\n event_type: \"click\",\n module_id: moduleId,\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 const 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 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\n const isLoading = personalizeEnabled\n ? loading\n : !Array.isArray(items) || items.length === 0;\n\n const isMobile = useMediaQuery(\"(max-width:950px)\");\n\n const slides = isLoading\n ? buildLoadingSlides(mosaicFirst, gridSize)\n : buildCasinoSlides(currentItems, mosaicFirst, gridSize);\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: 0,\n \"@media (max-width: 1024px)\": {\n px: 2,\n },\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 options={{ autoWidth: true, trimSpace: \"move\" }}\n showRightGradient={!isMobile}\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: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeVirtualesItems } from \"../../hooks/usePersonalizeCasinoItems\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\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 const moduleId = useModuleId();\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 handlePrev = () => {\n captureInteraction({\n element: \"virtuales_prev\",\n label: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/juegos-virtuales\",\n event_type: \"click\",\n module_id: moduleId,\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 const isLoading = personalizeEnabled\n ? loading\n : !Array.isArray(items) || items.length === 0;\n\n const isMobile = useMediaQuery(\"(max-width:950px)\");\n\n const slides = isLoading\n ? buildLoadingVirtualSlides(mosaicFirst, gridSize)\n : buildVirtualSlides(currentItems, mosaicFirst, gridSize);\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: 0,\n \"@media (max-width: 1024px)\": {\n px: 2,\n },\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={!isMobile}\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: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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, useModuleId } 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 /** objeto user */\n user?: any;\n\n}\ntype MarketplacePage = \"home\" | \"experiencias\" | \"productos\";\n\nconst OraculoSeccionClubOlimpo: React.FC<OraculoSeccionClubOlimpoItems> = ({\n className = \"\",\n fullBleed = true,\n items,\n selectedIndex = 0,\n ariaLabel,\n user = null\n}) => {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const bottomRef = useRef<HTMLDivElement | null>(null);\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const moduleId = useModuleId();\n\n if (!items) return null;\n\n const getMarketPlaceUrl = async () => {\n let resolvedUser = user;\n\n // Fallback: si no viene user por props/context/store, buscar en localStorage\n if ((!resolvedUser?.user || !resolvedUser?.session) && typeof window !== \"undefined\") {\n try {\n const localUserRaw = localStorage.getItem(\"user\");\n if (localUserRaw) {\n const localUserParsed = JSON.parse(localUserRaw);\n resolvedUser = localUserParsed;\n }\n } catch (error) {\n console.error(\"[getMarketPlaceUrl] Error parsing localStorage user\", error);\n }\n }\n\n // Si aún no existe user/session, mantener comportamiento actual\n if (!resolvedUser?.user || !resolvedUser?.session) {\n console.warn(\"User data missing\");\n return null;\n }\n\n captureInteraction({\n element: \"club_olimpo_button\",\n label: `${docId} - OraculoSeccionClubOlimpo - Click: Club Olimpo`,\n target: \"https://www.clubolimpo.com/OlimpoBetWeb/\",\n event_type: \"click\",\n module_id: moduleId,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionClubOlimpo\" },\n });\n\n try {\n const data = {\n idUsuario: \"PE\" + resolvedUser.user,\n session_id: resolvedUser.session,\n pagina: \"home\",\n };\n\n const fetchUrl = `https://apipe.mktolimpo.com/api/pm/token`;\n\n const response = await fetch(fetchUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (response.ok) {\n const jsonResponse = await response.json();\n return jsonResponse?.url;\n }\n\n return null;\n } catch (error) {\n console.error(\"[getMarketPlaceUrl]\", error);\n return null;\n }\n };\n\n const onClick = () => {\n captureInteraction({\n element: \"club_olimpo_button\",\n label: `${docId} - OraculoSeccionClubOlimpo - Click: Club Olimpo`,\n target: \"https://www.olimpo.bet/conoce-club-olimpo\",\n event_type: \"click\",\n module_id: moduleId,\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\n const handleRedirect = async () => {\n const url = await getMarketPlaceUrl();\n if (url) {\n window.location.href = url;\n }\n else {\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/conoce-club-olimpo\");\n }\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={handleRedirect}\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, useModuleId } from \"../../contexts/DocIdContext\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\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 moduleId = useModuleId();\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: `${docId} - OraculoSeccionEventoCombinadas - Click: Anterior`,\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoCombinadas - Click: Siguiente`,\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoCombinadas - Click: Ver más`,\r\n event_type: \"click\",\r\n module_id: moduleId,\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 groupIds = listData?.group?.groups\r\n ?.map(g => g.id)\r\n ?.filter(Boolean) // remove undefined/null just in case\r\n ?.join(',');\r\n\r\n if (!groupIds) {\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/${groupIds}.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 const isMobile = useMediaQuery(\"(max-width:950px)\");\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={!isMobile}\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 { useEffect, useRef, useState } from \"react\";\r\n\r\ntype UseLazyJerseysParams<TEvent> = {\r\n events: TEvent[] | null;\r\n visibleRange: { start: number | null; end: number | null };\r\n fetchJerseys: (ids: number[]) => Promise<any>;\r\n buffer?: number;\r\n debounceMs?: number;\r\n};\r\n\r\nexport function useLazyJerseys<TEvent extends { id?: number }>({\r\n events,\r\n visibleRange,\r\n fetchJerseys,\r\n buffer = 2,\r\n debounceMs = 250,\r\n}: UseLazyJerseysParams<TEvent>) {\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n\r\n const pendingRef = useRef<Set<number>>(new Set());\r\n const requestIdRef = useRef(0);\r\n const debounceTimerRef = useRef<any>(null);\r\n const lastRangeRef = useRef<{ start: number; end: number } | null>(null);\r\n\r\n useEffect(() => {\r\n if (!events || events.length === 0) return;\r\n\r\n // debounce\r\n if (debounceTimerRef.current) {\r\n clearTimeout(debounceTimerRef.current);\r\n }\r\n\r\n debounceTimerRef.current = setTimeout(() => {\r\n const start = visibleRange.start ?? 0;\r\n const end = visibleRange.end ?? 7;\r\n\r\n const from = Math.max(0, start - buffer);\r\n const to = Math.min(events.length - 1, end + buffer);\r\n\r\n // 🔥 GAP RECOVERY\r\n let finalFrom = from;\r\n let finalTo = to;\r\n\r\n const prev = lastRangeRef.current;\r\n\r\n if (prev) {\r\n // fast forward jump → fill gap\r\n if (from > prev.end) {\r\n finalFrom = prev.end + 1;\r\n }\r\n\r\n // fast backward jump → fill gap\r\n if (to < prev.start) {\r\n finalTo = prev.start - 1;\r\n }\r\n }\r\n\r\n // store current (NOT final)\r\n lastRangeRef.current = { start: from, end: to };\r\n\r\n const idsToFetch = events\r\n .slice(finalFrom, finalTo + 1)\r\n .map((ev) => ev?.id)\r\n .filter((id): id is number => Boolean(id))\r\n .filter((id) => !pendingRef.current.has(id)) // don't refetch in-flight\r\n .filter((id) => !(id in jerseys)); \r\n\r\n if (idsToFetch.length === 0) return;\r\n\r\n idsToFetch.forEach((id) => pendingRef.current.add(id));\r\n\r\n const requestId = ++requestIdRef.current;\r\n\r\n(async () => {\r\n try {\r\n const res = await fetchJerseys(idsToFetch);\r\n\r\n if (requestId !== requestIdRef.current) {\r\n // ✅ FIX: clean pending even if stale\r\n idsToFetch.forEach((id) => pendingRef.current.delete(id));\r\n return;\r\n }\r\n\r\n if (!res?.events) {\r\n idsToFetch.forEach((id) =>\r\n pendingRef.current.delete(id),\r\n );\r\n return;\r\n }\r\n\r\n setJerseys((prev) => {\r\n const next = { ...prev };\r\n\r\n for (const [id, jersey] of Object.entries(res.events)) {\r\n const numId = Number(id);\r\n if (!next[numId]) {\r\n next[numId] = jersey;\r\n }\r\n }\r\n\r\n return next;\r\n });\r\n\r\n const returnedIds = new Set(\r\n Object.keys(res.events).map(Number),\r\n );\r\n\r\n idsToFetch.forEach((id) => {\r\n pendingRef.current.delete(id);\r\n });\r\n } catch (e) {\r\n idsToFetch.forEach((id) =>\r\n pendingRef.current.delete(id),\r\n );\r\n console.error(\"Jersey fetch error\", e);\r\n }\r\n})();\r\n }, debounceMs);\r\n\r\n return () => {\r\n if (debounceTimerRef.current) {\r\n clearTimeout(debounceTimerRef.current);\r\n }\r\n };\r\n }, [events, visibleRange, buffer, debounceMs, fetchJerseys]);\r\n\r\n return {\r\n jerseys,\r\n isPending: pendingRef.current,\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, useModuleId } from \"../../contexts/DocIdContext\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport { useLazyJerseys } from \"../../atoms/OraculoEvent/useLazyJerseys\";\r\nimport { LiveEvent } from \"../../interfaces/oraculo/InterfaceKambi\";\r\n\r\nconst filterFootballEvents = (events: LiveEvent[]): LiveEvent[] => {\r\n const blocked = [\"esports\", \"cyber\"];\r\n return events.filter(ev => {\r\n const sport = ev?.event?.sport;\r\n if (typeof sport !== \"string\" || sport !== \"FOOTBALL\") return false;\r\n const group = typeof ev?.event?.group === \"string\" ? 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<LiveEvent[] | null>(null);\r\n const [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\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 moduleId = useModuleId();\r\n const orderMapRef = useRef(new Map());\r\n\r\n const handlePrev = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_prev\",\r\n label: `${docId} - OraculoSeccionEventoEnVivo - Anterior`,\r\n target: \"prev\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoEnVivo - Siguiente`,\r\n target: \"next\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoEnVivo - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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\n\r\nconst { jerseys } = useLazyJerseys({\r\n events: events?.map(ev => ev.event) || [], // extract actual event objects\r\n visibleRange,\r\n fetchJerseys,\r\n buffer: 3, // same as your previous BUFFER\r\n debounceMs: 300, // same as your previous debouncedVisibleRange\r\n});\r\n \r\n\r\n const sectionClassName = className || undefined;\r\n const isLoading = events === null;\r\n\r\n const carouselItems = useMemo(() => {\r\n if (isLoading) return Array(4).fill({});\r\n return events?.slice(0, 20) || [];\r\n }, [isLoading, events]);\r\n const isMobile = useMediaQuery(\"(max-width:950px)\");\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={{ \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={!isMobile}\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, useModuleId } from \"../../contexts/DocIdContext\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport { useLazyJerseys } from \"../../atoms/OraculoEvent/useLazyJerseys\";\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 moduleId = useModuleId();\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 [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\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_semana_view_more\",\r\n label: `${docId} - OraculoSeccionEventoSemana - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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 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\nconst { jerseys } = useLazyJerseys({\r\n events,\r\n visibleRange,\r\n fetchJerseys,\r\n buffer: 2,\r\n debounceMs: 250,\r\n});\r\n const isLoading = events === null;\r\n const isMobile = useMediaQuery(\"(max-width:950px)\");\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={!isMobile}\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: `${docId} - OraculoSeccionEventoSemana - Slide Carousel`,\r\n target: \"carousel\",\r\n event_type: \"slide\",\r\n module_id: moduleId,\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, useMediaQuery } 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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\n\nconst PERU_UTC_OFFSET_MINUTES = -5 * 60;\n\nconst hasTimezoneInfo = (value: string) => /[zZ]|[+-]\\d{2}:\\d{2}$/.test(value);\n\nconst parsePeruDateToUtcMs = (value?: string | null) => {\n if (!value) return null;\n\n // Si ya viene con zona horaria (Z o +hh:mm), se parsea normal\n if (hasTimezoneInfo(value)) {\n const ms = new Date(value).getTime();\n return Number.isNaN(ms) ? null : ms;\n }\n\n // Si NO viene con zona horaria, asumimos que está en hora Perú\n // Ej: \"2026-04-13T10:45\"\n const match = value.match(\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/\n );\n\n if (!match) return null;\n\n const [, y, m, d, hh, mm, ss = \"00\"] = match;\n\n // Convertimos \"hora Perú\" -> UTC\n return Date.UTC(\n Number(y),\n Number(m) - 1,\n Number(d),\n Number(hh) - PERU_UTC_OFFSET_MINUTES / 60,\n Number(mm),\n Number(ss)\n );\n};\n\nconst isBannerVisibleByDate = (banner: any, nowMs: number) => {\n const fields = banner?.fields ?? banner?.parameters ?? banner?.extraFields ?? [];\n\n const startAt =\n banner?.startAt ??\n fields.find((f: any) => f?.name === \"startAt\")?.value ??\n null;\n\n const endAt =\n banner?.endAt ??\n fields.find((f: any) => f?.name === \"endAt\")?.value ??\n null;\n\n const startMs = parsePeruDateToUtcMs(startAt);\n const endMs = parsePeruDateToUtcMs(endAt);\n\n if (startMs != null && nowMs < startMs) return false;\n\n if (endMs != null && nowMs >= endMs) {\n // console.log(\"banner hidden\", banner);\n return false;\n }\n\n return true;\n};\n\ntype setDepositActionGlobalType = (value: boolean) => void;\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 const moduleId = useModuleId();\n\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const isMounted = useRef(false);\n const isAutoplayRef = useRef(false);\n\n const [nowMs, setNowMs] = useState(() => Date.now());\n const setDepositActionGlobal = getOraculoExtra<setDepositActionGlobalType>(\"setDepositActionGlobal\");\n\n const sortByOrder = <T extends { order?: number }>(list?: T[]) => {\n return [...(list ?? [])]\n .map((item, index) => ({ item, index }))\n .sort((a, b) => {\n const orderA = a.item.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.item.order ?? Number.MAX_SAFE_INTEGER;\n\n return orderA - orderB || a.index - b.index;\n })\n .map(({ item }) => item);\n };\n\n const sortedItems = useMemo(() => {\n return sortByOrder(items);\n }, [items]);\n\n const visibleBackgrounds = useMemo(() => {\n const filtered = (backgrounds ?? []).filter((banner) =>\n isBannerVisibleByDate(banner, nowMs)\n );\n\n return sortByOrder(filtered);\n }, [backgrounds, nowMs]);\n\n const totalDots = visibleBackgrounds.length || 1;\n const isLoading = !visibleBackgrounds || visibleBackgrounds.length === 0;\n const canNavigate = !isLoading && visibleBackgrounds.length > 1;\n\n // Si no se muestran items, no se muestra el dock\n const showDock = !hideItems && sortedItems.length > 0;\n const isMobile = useMediaQuery(\"(max-width:950px)\");\n\n const isPrevDisabled = !canNavigate || activeDot === 0;\n const isNextDisabled = !canNavigate || activeDot === totalDots - 1;\n\n const ARROW_COLOR = \"#B5B5B5\";\n\n useEffect(() => {\n const interval = window.setInterval(() => {\n setNowMs(Date.now());\n }, 30 * 1000);\n\n return () => window.clearInterval(interval);\n }, []);\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 = (\n event: React.MouseEvent<HTMLElement>,\n bg: OraculoBannerItem,\n index: number\n ) => {\n const hasFunction = Boolean(bg.idFunction);\n const hasHref = Boolean(bg.href);\n\n if (hasFunction) {\n event.preventDefault();\n event.stopPropagation();\n\n switch (bg.idFunction) {\n case \"deposito\":\n setDepositActionGlobal?.(true);\n return;\n\n default:\n return;\n }\n }\n\n if (!hasHref) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const bannerName = bg.href?.split(\"/\").pop()?.split(\".\")[0] || bg.label || bg.id || `banner_${index + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `${docId} - OraculoSeccionBanners - Banner click: ${bannerName}`,\n target: bg.href || \"no_url\",\n event_type: \"click\",\n module_id: moduleId,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n banner_position: index + 1,\n banner_total: visibleBackgrounds?.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: `${docId} - OraculoSeccionBanners - Menu item click: ${item.label || item.id}`,\n target: item.href || \"action\",\n event_type: \"click\",\n module_id: moduleId,\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 && (visibleBackgrounds?.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 = visibleBackgrounds?.[safe]?.href\n ? visibleBackgrounds[safe].href?.split(\"/\").pop()?.split(\".\")[0] || `banner_${safe + 1}`\n : `banner_${safe + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `${docId} - OraculoSeccionBanners - Banner view: Slide ${safe + 1} - ${bannerName}`,\n target: visibleBackgrounds?.[safe]?.href || \"no_url\",\n event_type: \"view\",\n module_id: moduleId,\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 pb: showDock ? { xs: \"40px\", sm: 0 } : 0,\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 height: \"auto\",\n aspectRatio: \"512 / 260\",\n \"@media (min-width: 950px)\": {\n aspectRatio: \"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={visibleBackgrounds}\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 const hasFunction = Boolean(bg.idFunction);\n const hasHref = Boolean(bg.href);\n const isLink = hasHref && !hasFunction;\n const isClickable = hasFunction || hasHref;\n\n return (\n <Box\n component={isLink ? \"a\" : \"div\"}\n href={isLink ? bg.href : undefined}\n target={isLink ? bg.target ?? \"_self\" : undefined}\n rel={isLink && bg.target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n onClick={(event: React.MouseEvent<HTMLElement, MouseEvent>) => handleBannerClick(event, bg, idx)}\n sx={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n textDecoration: \"none\",\n cursor: isClickable ? \"pointer\" : \"default\",\n }}\n >\n <Box component=\"picture\" sx={{ position: \"absolute\", inset: 0, lineHeight: 0 }}>\n <source srcSet={bg.desktopSrc} media=\"(min-width:950px)\" />\n <source srcSet={bg.mobileSrc} media=\"(max-width:949px)\" />\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 />\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: { xs: 36, sm: 80, md: 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: 0, 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 {sortedItems?.map((item: OraculoBannerItem) => (\n <Box\n key={item.id}\n sx={{\n position: \"relative\",\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 \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: -12,\n height: \"3px\",\n borderRadius: \"999px\",\n backgroundColor: \"#3CC666\",\n opacity: 0,\n transform: \"scaleX(0.7)\",\n transformOrigin: \"center\",\n transition: \"all 0.25s ease\",\n pointerEvents: \"none\",\n },\n\n \"&:hover .menu-text\": {\n color: \"#3CC666\",\n },\n\n \"&:hover::after\": {\n opacity: 1,\n transform: \"scaleX(1)\",\n },\n\n ...(item.iconHover && {\n \"&:hover .menu-icon-default\": {\n display: \"none\",\n },\n \"&:hover .menu-icon-hover\": {\n display: \"block\",\n },\n }),\n }}\n onClick={() => handleMenuItemClick(item)}\n >\n {item.icon && (\n <Box\n sx={{\n position: \"relative\",\n width: { xs: 20, sm: 22, md: 24 },\n height: { xs: 20, sm: 22, md: 24 },\n flexShrink: 0,\n }}\n >\n <Box\n component=\"img\"\n src={item.icon}\n alt={item.label || `icon-${item.id}`}\n className=\"menu-icon-default\"\n sx={{\n display: \"block\",\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n }}\n />\n\n {item.iconHover && (\n <Box\n component=\"img\"\n src={item.iconHover}\n alt={item.label || `icon-hover-${item.id}`}\n className=\"menu-icon-hover\"\n sx={{\n display: \"none\",\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n }}\n />\n )}\n </Box>\n )}\n\n <Typography\n className=\"menu-text\"\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\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","\"use client\";\nimport React from \"react\";\nimport OraculoThemeProvider from \"../theme/OraculoThemeProvider\";\nimport { DocIdProvider } from \"../contexts/DocIdContext\";\n\nexport default function OraculoSectionHost({\n docId = \"Landing: home\",\n moduleId = 301,\n children,\n}: {\n docId?: string;\n moduleId?: number;\n children: React.ReactNode;\n}) {\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId} moduleId={moduleId}>\n {children}\n </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 title: \"Banners\",\n visible: true,\n id: 9,\n manualItems: [\n {\n fields: [\n {\n value: \"1\",\n id: \"abb2c3d6-d5c5-47ee-8ffa-c764a8bc731e\",\n type: \"string\",\n name: \"id\",\n isImage: false,\n required: true,\n },\n {\n id: \"549c02bf-56b5-4652-93d9-46b9451bac39\",\n type: \"string\",\n value: \"POR INICIAR\",\n required: false,\n isImage: false,\n name: \"label\",\n },\n {\n isImage: true,\n required: true,\n name: \"icon\",\n type: \"string\",\n id: \"c6538242-1974-4bed-aed3-703a111987b5\",\n maxSizeMB: 0.2,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/clock.svg\",\n },\n {\n name: \"iconHover\",\n isImage: true,\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756376881-icon1.png\",\n type: \"string\",\n id: \"8a5752de-6d6e-4ba7-b4a3-e001534d43a6\",\n maxSizeMB: 0.5,\n },\n {\n id: \"7d564f31-69ff-4f32-983b-46d28ced4a18\",\n type: \"string\",\n value: \"https://www.olimpo.bet/deportes#starting-soon\",\n required: false,\n isImage: false,\n name: \"href\",\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 2\n }\n ],\n id: \"724a1dc0-d55b-4443-a580-cad22e328536\",\n },\n {\n fields: [\n {\n value: \"2\",\n id: \"45c50e08-560e-42cb-8be1-e9722f69c8a0\",\n type: \"string\",\n name: \"id\",\n isImage: false,\n required: true,\n },\n {\n isImage: false,\n required: false,\n name: \"label\",\n type: \"string\",\n id: \"2eec0f3d-0126-4960-8ec0-17cc92b5eb43\",\n value: \"EXPLORAR\",\n },\n {\n name: \"icon\",\n isImage: true,\n required: true,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon2.svg\",\n maxSizeMB: 0.2,\n id: \"5530e6bd-d2b2-4045-9371-722e23d96e14\",\n type: \"string\",\n },\n {\n required: false,\n isImage: true,\n name: \"iconHover\",\n type: \"string\",\n id: \"42be2203-7dbf-418e-9181-9a2c022076ac\",\n maxSizeMB: 0.5,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756386124-icon2.png\",\n },\n {\n value: \"https://www.olimpo.bet/deportes#sports/a-z\",\n id: \"7e5375ad-ecbb-4354-868a-b9323bcfd053\",\n type: \"string\",\n name: \"href\",\n required: false,\n isImage: false,\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 1\n }\n ],\n id: \"ad0df0e2-c8ce-4524-b05a-2a29578aba11\",\n },\n {\n fields: [\n {\n id: \"fc35f393-6692-4d25-a534-d51f4bd6d9a2\",\n type: \"string\",\n value: \"3\",\n isImage: false,\n required: true,\n name: \"id\",\n },\n {\n id: \"a323e324-cf04-4178-b2c2-596d51564123\",\n type: \"string\",\n value: \"TOP JUEGOS\",\n required: false,\n isImage: false,\n name: \"label\",\n },\n {\n type: \"string\",\n id: \"6ede5815-7336-40fa-99f2-57ac6cb938cd\",\n maxSizeMB: 0.2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765981473501-icon3.svg\",\n required: true,\n isImage: true,\n name: \"icon\",\n },\n {\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756400282-icon3.png\",\n id: \"49c3a94a-dbb3-4a0a-9b03-cf04bcb2266f\",\n maxSizeMB: 0.5,\n type: \"string\",\n name: \"iconHover\",\n required: false,\n isImage: true,\n },\n {\n name: \"href\",\n required: false,\n isImage: false,\n value: \"https://www.olimpo.bet/casino\",\n id: \"26a486fd-31e6-4ed4-ab83-0f9a7bf6adc4\",\n type: \"string\",\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 5\n }\n ],\n id: \"966bc1fc-0b1a-4a50-a4a2-964262922c3d\",\n },\n {\n fields: [\n {\n id: \"fbec2c21-cf32-426f-910b-9c78a6cd714c\",\n type: \"string\",\n value: \"4\",\n required: true,\n isImage: false,\n name: \"id\",\n },\n {\n type: \"string\",\n id: \"2de80dbf-998b-4bc7-8383-4b69746ef155\",\n value: \"MISIONES\",\n isImage: false,\n required: false,\n name: \"label\",\n },\n {\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon3.svg\",\n type: \"string\",\n id: \"686c62bd-ea86-4aeb-97b7-6f1488912066\",\n maxSizeMB: 0.2,\n name: \"icon\",\n isImage: true,\n required: true,\n },\n {\n type: \"string\",\n maxSizeMB: 0.5,\n id: \"aac10c8d-7aac-4051-82ed-a88706a6f6dc\",\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756409593-icon.png\",\n required: false,\n isImage: true,\n name: \"iconHover\",\n },\n {\n required: false,\n isImage: false,\n name: \"href\",\n id: \"4b72f490-75e4-458e-a4b5-68f0736a25d4\",\n type: \"string\",\n value: \"https://www.olimpo.bet/private/misiones\",\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 3\n }\n ],\n id: \"31e00ff9-f2dd-4942-bff3-919902fde880\",\n },\n ],\n dataMode: \"manual\",\n order: 1,\n manualScalarFields: [\n {\n isImage: false,\n required: false,\n name: \"groups\",\n id: \"7ee165a0-1268-4825-82df-9fef9857f535\",\n type: \"string\",\n value: \"\",\n },\n {\n value: \"\",\n id: \"46f65c34-d9c1-4aab-b9ad-171b295c40da\",\n type: \"boolean\",\n name: \"isPersonalize\",\n isImage: false,\n required: false,\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualItems2: [\n {\n fields: [\n {\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204037917-comercial-misiones.webp\",\n id: \"eea41214-3c26-41e9-a908-d87327147396\",\n name: \"desktopSrc\",\n isImage: true,\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n },\n {\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1080x840\",\n id: \"b393dfd3-c085-43e0-b68a-97cc04c06b6a\",\n validateDimensions: false,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\n isImage: true,\n name: \"mobileSrc\",\n },\n {\n required: false,\n dimensions: \"1440x400\",\n type: \"string\",\n maxSizeMB: 2,\n name: \"fallbackSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204045973-comercial-misiones.webp\",\n id: \"2616b944-7cd1-4919-bc56-38ddb1a3093b\",\n },\n {\n required: false,\n isImage: false,\n name: \"href\",\n id: \"54689f0e-f698-48a1-9d84-d13a397e24ea\",\n type: \"string\",\n value: \"\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"idFunction\",\n required : false,\n type : \"string\",\n value : \"deposito\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 1\n }\n ],\n id: \"13b35362-5695-4687-b6a8-645f8effd264\",\n },\n {\n fields: [\n {\n name: \"desktopSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204060818-captacion-nuevahome.png\",\n id: \"1ebab59e-f706-4795-81cb-7accfc9f33d7\",\n required: false,\n dimensions: \"1440x400\",\n type: \"string\",\n maxSizeMB: 2,\n },\n {\n id: \"bdebd1b0-d633-4b9e-9247-8e769cdc5b3b\",\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1774473125247-captacion-nuevahomemobile4.png\",\n validateDimensions: false,\n isImage: true,\n name: \"mobileSrc\",\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1080x840\",\n required: false,\n },\n {\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204124958-captacion-nuevahome.png\",\n id: \"4bc20da7-b769-43dd-ba2e-ee9261ec73d7\",\n name: \"fallbackSrc\",\n isImage: true,\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n },\n {\n value: \"\",\n id: \"b85e737d-97ec-430c-b819-ba6e91a25372\",\n type: \"string\",\n name: \"href\",\n isImage: false,\n required: false,\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 2\n }\n ],\n id: \"024f8130-91e1-4296-b826-cffa32ab1a96\",\n },\n {\n fields: [\n {\n id: \"28a44fd4-2f36-491e-a026-d797891eb420\",\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307101474-ftd_web_asesorlu.jpg\",\n isImage: true,\n name: \"desktopSrc\",\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n },\n {\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1080x840\",\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307108379-ftd_mobile_asesorlu.jpg\",\n id: \"9ddef07e-6c33-44c6-a9de-3045bcce0a64\",\n name: \"mobileSrc\",\n isImage: true,\n },\n {\n dimensions: \"1440x400\",\n required: false,\n maxSizeMB: 2,\n type: \"string\",\n name: \"fallbackSrc\",\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307112560-ftd_web_asesorlu.jpg\",\n validateDimensions: false,\n id: \"9043d645-9494-4bb8-9706-e740a3c4aecb\",\n },\n {\n name: \"href\",\n required: false,\n isImage: false,\n value: \"https://www.olimpo.bet/descargar-app\",\n type: \"string\",\n id: \"52f1a69c-9c7d-4e3e-95b7-568f885fc653\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 7\n }\n ],\n id: \"cdfce77c-a814-43f1-911d-3715803252c2\",\n },\n {\n fields: [\n {\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1440x400\",\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773203978730-nuevahomedesktop_asesorpersonalizado.jpg\",\n validateDimensions: false,\n id: \"0a19727d-a6bd-4f3b-83b6-dc40be8f6790\",\n name: \"desktopSrc\",\n isImage: true,\n },\n {\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1080x840\",\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1772833893358-nueva-home-mobile_asesorlcas.jpg\",\n validateDimensions: false,\n id: \"3ca28d62-53c0-4269-8ecf-ddbbe493db56\",\n name: \"mobileSrc\",\n isImage: true,\n },\n {\n required: false,\n dimensions: \"1440x400\",\n type: \"string\",\n maxSizeMB: 2,\n name: \"fallbackSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773203997327-nuevahomedesktop_asesorpersonalizado.jpg\",\n id: \"241c4be2-2f91-4c92-a0ef-d2013941a7de\",\n },\n {\n value:\n \"https://www.olimpo.bet/promociones/Marzo_PromoRecarga4500ASESOR_IBK_BCP_BBVA\",\n id: \"bed09e2d-31f7-42db-88be-8ca1f2354e92\",\n type: \"string\",\n name: \"href\",\n isImage: false,\n required: false,\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-13T10:45\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-14T12:15\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 3\n }\n ],\n id: \"b3816989-ffeb-4409-bc0a-46310867097c\",\n },\n {\n fields: [\n {\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773778766147-bannerweb_nuevomerch1920x460.png\",\n id: \"1e4be1ce-774b-48ff-89db-f6148d1ce4a8\",\n name: \"desktopSrc\",\n isImage: true,\n },\n {\n required: false,\n dimensions: \"1080x840\",\n type: \"string\",\n maxSizeMB: 2,\n name: \"mobileSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773778933662-bannermobile_nuevomerch1080x840.png\",\n id: \"05b790ea-cba0-4592-868a-b5e4cde116c3\",\n },\n {\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1440x400\",\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773778926345-bannerweb_nuevomerch1920x460.png\",\n validateDimensions: false,\n id: \"b1ee5a81-f713-4b7c-882c-41088776fe09\",\n name: \"fallbackSrc\",\n isImage: true,\n },\n {\n name: \"href\",\n isImage: false,\n required: false,\n value: \"https://www.clubolimpo.com/OlimpoBetWeb/\",\n type: \"string\",\n id: \"bf9a05f4-d4e3-4c7b-8bab-e5a734aa4091\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-13T10:45\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-14T11:50\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 4\n }\n ],\n id: \"2e3e6afd-bbd3-4bbd-b6e7-0eba50e556d4\",\n },\n {\n fields: [\n {\n required: false,\n isImage: true,\n dimensions: \"1440x400\",\n name: \"desktopSrc\",\n type: \"string\",\n id: \"35672057-20b1-48f6-b57e-8177c7ffb50c\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773931330007-sorteoiphonebannerhomedesktop_1920x460.png\",\n },\n {\n type: \"string\",\n id: \"dfe3c031-0577-499e-95f4-2a47363710c7\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773931336253-sorteoiphonebannerhomemobile_1080x840.png\",\n required: false,\n isImage: true,\n dimensions: \"1080x840\",\n name: \"mobileSrc\",\n },\n {\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773931341960-sorteoiphonebannerhomedesktop_1920x460.png\",\n type: \"string\",\n maxSizeMB: 2,\n id: \"aac633b9-d6d3-45be-b93a-1aa73e486ed6\",\n name: \"fallbackSrc\",\n required: false,\n isImage: true,\n dimensions: \"1440x400\",\n },\n {\n name: \"href\",\n required: false,\n isImage: false,\n value: \"https://www.olimpo.bet/private/club-olimpo\",\n type: \"string\",\n id: \"0dd06091-c954-4b2a-9e74-76c98a2f95d6\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-13T10:45\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-14T12:15\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 5\n }\n ],\n id: \"706ea8a2-46ae-4fd9-8b42-5879a903a006\",\n },\n ],\n variableName2: \"backgrounds\",\n variableName: \"items\",\n componentKey: \"OraculoSeccionBanners\",\n },\n {\n dataMode: \"url\",\n id: 3,\n visible: true,\n apiUrl:\n \"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 title: \"Eventos de la semana\",\n apiMethod: \"GET\",\n componentKey: \"OraculoSeccionEventoSemana\",\n apiParams: [],\n variableName: \"items\",\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualScalarFields: [\n {\n required: false,\n name: \"title\",\n type: \"string\",\n id: \"7a3de844-5727-4043-be42-7f965e2aa249\",\n value: \"Eventos esta semana\",\n isUrl: false,\n },\n {\n id: \"2895f65f-e75b-4116-958d-04d4c34f16fe\",\n type: \"string\",\n isUrl: true,\n value: \"\",\n required: false,\n name: \"iconUrl\",\n },\n {\n required: false,\n name: \"onViewMore\",\n type: \"function\",\n id: \"d973d3ee-721e-4d76-888c-6ad8b7bb3414\",\n value: \"\",\n isUrl: false,\n },\n {\n value: \"\",\n isUrl: false,\n id: \"c062fe02-c069-49fb-aae6-d39aa3fde89c\",\n type: \"string\",\n name: \"className\",\n required: false,\n },\n ],\n order: 2,\n },\n {\n dataMode: \"url\",\n id: 4,\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n visible: true,\n title: \"Casino\",\n // apiMethod: \"GET\",\n componentKey: \"OraculoSeccionCasino\",\n variableName: \"items\",\n apiParams: [\n {\n id: \"2af22a50-07e2-4a48-8569-90c79827f3e7\",\n value: \"OLI\",\n key: \"company\",\n },\n {\n id: \"efa2def8-eeb4-4fcc-80f6-32c24e7804e6\",\n value: \"HOME_CASINO\",\n key: \"lobby\",\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualScalarFields: [\n {\n name: \"title\",\n required: true,\n isImage: false,\n value: \"Casino\",\n id: \"c2046b5a-4d30-46ff-9513-e15a6e0b0a7e\",\n type: \"string\",\n },\n {\n maxSizeMB: 0.2,\n id: \"9c5964ca-ce84-4c47-86ec-b34d7f3a5793\",\n type: \"string\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Casino/diamante.svg\",\n isImage: true,\n required: true,\n name: \"iconUrl\",\n },\n {\n name: \"mosaicFirst\",\n required: false,\n isImage: false,\n value: true,\n type: \"boolean\",\n id: \"1c32ea69-598b-4f80-81e4-709d887c12c1\",\n },\n {\n type: \"number\",\n id: \"5c3c60eb-cf49-4083-ab83-67d65f829554\",\n value: 4,\n isImage: false,\n required: false,\n name: \"gridSize\",\n },\n {\n required: false,\n isImage: false,\n name: \"groups\",\n type: \"string\",\n id: \"c4d4c4b9-0c93-4aca-a61f-042e52fd9254\",\n value: \"\",\n },\n ],\n order: 3,\n },\n {\n apiMethod: \"GET\",\n id: 1,\n dataMode: \"url\",\n title: \"Eventos Combinadas\",\n visible: true,\n apiUrl:\n \"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 updatedAt: \"2026-03-19T14:43:05.680Z\",\n order: 4,\n manualScalarFields: [\n {\n id: \"33e5944d-b5be-4971-8c10-65aa6b71051c\",\n type: \"string\",\n value: \"Combinadas\",\n isImage: false,\n required: true,\n name: \"title\",\n },\n {\n name: \"iconUrl\",\n dimensions: \"40x40\",\n isImage: true,\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765894618836-frame181009.svg\",\n id: \"95cd1489-206c-4a72-b4bd-b65161089f73\",\n maxSizeMB: 0.2,\n type: \"string\",\n },\n {\n required: false,\n isImage: false,\n name: \"className\",\n type: \"string\",\n id: \"af234a92-41ad-4ff1-bfbb-ac63a9af19f7\",\n value: \"\",\n },\n {\n value: \"\",\n id: \"52f226c8-6456-4395-b72d-d140af6fa46d\",\n type: \"string\",\n name: \"groups\",\n isImage: false,\n required: false,\n },\n ],\n componentKey: \"OraculoSeccionEventoCombinadas\",\n apiParams: [],\n variableName: \"items\",\n },\n {\n dataMode: \"url\",\n id: 2,\n visible: true,\n apiUrl:\n '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 title: \"Eventos en vivo\",\n apiMethod: \"GET\",\n componentKey: \"OraculoSeccionEventoEnVivo\",\n apiParams: [],\n variableName: \"items\",\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualScalarFields: [\n {\n id: \"7fc591db-555b-49b2-a3ad-30aa66eff17b\",\n type: \"string\",\n value: \"En vivo\",\n isImage: false,\n required: true,\n name: \"title\",\n },\n {\n required: false,\n isImage: true,\n name: \"iconUrl\",\n id: \"db4b6355-ed6c-4265-ad78-d8fffb660997\",\n maxSizeMB: 0.2,\n type: \"string\",\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1771339214517-dotrecordinglightred.gif\",\n },\n {\n id: \"a16ab6c6-321c-4ebe-bd36-a85ad49edf3e\",\n type: \"string\",\n value: \"\",\n required: false,\n isImage: false,\n name: \"className\",\n },\n {\n type: \"string\",\n id: \"48a911bf-94d7-4c92-beb8-551c24498411\",\n value: \"\",\n required: false,\n isImage: false,\n name: \"groups\",\n },\n ],\n order: 5,\n },\n {\n title: \"Bono Bienvenida\",\n visible: false,\n id: 11,\n manualItems: [\n {\n fields: [\n {\n required: true,\n name: \"title\",\n type: \"string\",\n id: \"e015fc5e-983e-4096-b82e-6d5ed9957dd5\",\n value: \"Recibe\",\n isUrl: false,\n },\n {\n name: \"amount\",\n required: false,\n value: \"S/60\",\n isUrl: false,\n type: \"string\",\n id: \"00b69888-d8ee-4bae-943c-be4e0dead26b\",\n },\n {\n value: \"SIN ROLLOVER\",\n isUrl: false,\n id: \"376cd731-4a20-4435-a5ee-351ac55d4351\",\n type: \"string\",\n name: \"subtitle\",\n required: false,\n },\n {\n isUrl: false,\n value: \"Hazlo aquí\",\n id: \"3b73cff5-cb30-4b00-9b41-305455334e56\",\n type: \"string\",\n name: \"buttonText\",\n required: true,\n },\n {\n required: true,\n name: \"backgroundImage\",\n id: \"89710b59-2a6a-4de8-be9a-7d9274bad84b\",\n type: \"string\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n isUrl: true,\n },\n {\n isUrl: false,\n value:\n \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\n id: \"e7ceaadc-b203-4587-856b-b9015201a43f\",\n type: \"function\",\n name: \"onButtonClick\",\n required: false,\n },\n ],\n id: \"8677b338-7d12-4ba9-a95f-d34ed71d92b0\",\n },\n {\n id: \"6707ce1d-064a-43af-8679-712c7235873a\",\n fields: [\n {\n name: \"title\",\n required: true,\n isUrl: false,\n value: \"Regístrate y recibe\",\n type: \"string\",\n id: \"81e1730c-0f9b-4ab9-a4df-f36c974ae99d\",\n },\n {\n type: \"string\",\n id: \"c1e96d9b-e7c7-4bb7-a8db-b67c32dcae32\",\n isUrl: false,\n value: \"S/40\",\n required: false,\n name: \"amount\",\n },\n {\n value: \"SIN ROLLOVER\",\n isUrl: false,\n id: \"93242ead-5f09-4966-9484-471b27859c31\",\n type: \"string\",\n name: \"subtitle\",\n required: false,\n },\n {\n id: \"0d97802b-7aaf-4ae3-b513-8a5a469e5d5d\",\n type: \"string\",\n isUrl: false,\n value: \"Hazlo aquí\",\n required: true,\n name: \"buttonText\",\n },\n {\n id: \"541fcdc8-07a7-47b8-9a33-d22cb865823c\",\n type: \"string\",\n isUrl: true,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n required: true,\n name: \"backgroundImage\",\n },\n {\n type: \"function\",\n id: \"b8c4b96c-0807-4040-8c3e-8392fb278aab\",\n value:\n \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\n isUrl: false,\n required: false,\n name: \"onButtonClick\",\n },\n ],\n },\n ],\n dataMode: \"manual\",\n manualScalarFields: [\n {\n name: \"headline\",\n required: false,\n value: \"Te damos la\",\n isUrl: false,\n id: \"fec2252c-2c2d-448d-8775-9d073bd8def9\",\n type: \"string\",\n },\n {\n required: false,\n name: \"headline2\",\n id: \"17e045d1-8ddb-46bc-b3ae-ae0c7ffc5952\",\n type: \"string\",\n isUrl: false,\n value: \"bienvenida al club\",\n },\n {\n type: \"string\",\n id: \"cae601b0-ed5d-4b97-9e1f-1816d7986c6b\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondobg.png\",\n isUrl: true,\n required: false,\n name: \"backgroundImageUrl\",\n },\n ],\n order: 6,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n variableName: \"items\",\n componentKey: \"OraculoSeccionBonoBienvenida\",\n },\n {\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n visible: true,\n title: \"Casino en vivo\",\n id: 12,\n dataMode: \"url\",\n apiMethod: \"POST\",\n apiParams: [\n {\n id: \"2822fa64-0e89-43ea-9c80-ee77076c95bd\",\n value: \"OLI\",\n key: \"company\",\n },\n {\n id: \"2d6f8267-0468-4320-976d-b01df40e8ca3\",\n value: \"HOME_CASINOENVIVO\",\n key: \"lobby\",\n },\n ],\n variableName: \"items\",\n componentKey: \"OraculoSeccionCasinoEnVivo\",\n manualScalarFields: [\n {\n required: true,\n isImage: false,\n name: \"title\",\n type: \"string\",\n id: \"52e655b4-7259-4f7f-9017-dafe24247810\",\n value: \"Casino en vivo\",\n },\n {\n name: \"subtitle\",\n isImage: false,\n required: false,\n value:\n \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\",\n type: \"string\",\n id: \"e299d500-abdc-4577-bb38-1943b6f02dfd\",\n },\n {\n name: \"backgroundMobileUrl\",\n isImage: true,\n required: false,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoMobile.png\",\n maxSizeMB: 2,\n id: \"6dcfd666-c2db-4a19-9fbf-08167bf56ae0\",\n type: \"string\",\n },\n {\n type: \"string\",\n id: \"2aa55855-0865-4cf1-a1ee-e52db864c6b4\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1771942936688-fondo3.1.webp\",\n isImage: true,\n required: false,\n name: \"backgroundDesktopUrl\",\n },\n {\n required: false,\n isImage: false,\n name: \"groups\",\n id: \"e1599845-59d4-4320-903b-3857453b4322\",\n type: \"string\",\n value: \"\",\n },\n ],\n order: 7,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n },\n {\n apiMethod: \"GET\",\n visible: true,\n title: \"Virtuales\",\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n dataMode: \"url\",\n id: 7,\n order: 8,\n manualScalarFields: [\n {\n name: \"title\",\n required: true,\n isImage: false,\n value: \"Virtuales\",\n id: \"f6b16510-51db-4124-864d-2d12a0bb1b23\",\n type: \"string\",\n },\n {\n type: \"string\",\n maxSizeMB: 0.2,\n id: \"f9686ddc-f673-4784-8025-df26f48cc04f\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Virtuales/virtuales.svg\",\n isImage: true,\n required: true,\n name: \"iconUrl\",\n },\n {\n isImage: false,\n required: false,\n name: \"mosaicFirst\",\n id: \"4c4f348c-cb17-4fd6-bc4d-f816a42da249\",\n type: \"boolean\",\n value: true,\n },\n {\n type: \"number\",\n id: \"c264c9c3-7178-4961-b366-163d9b818800\",\n value: 4,\n isImage: false,\n required: false,\n name: \"gridSize\",\n },\n {\n value: \"\",\n type: \"string\",\n id: \"2310900e-68ce-4a64-89da-e0976d172fee\",\n name: \"groups\",\n required: false,\n isImage: false,\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n variableName: \"items\",\n apiParams: [\n {\n id: \"de915e1d-1742-4383-bd83-ed96fda1145a\",\n value: \"OLI\",\n key: \"company\",\n },\n {\n key: \"lobby\",\n value: \"HOME_VIRTUALES\",\n id: \"039b41a3-4e94-4a52-8798-e78d8651c090\",\n },\n ],\n componentKey: \"OraculoSeccionVirtuales\",\n },\n {\n apiMethod: \"GET\",\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n visible: true,\n title: \"Oraculo Seccion Top Juegos\",\n id: 13,\n dataMode: \"url\",\n manualScalarFields: [\n {\n name: \"title\",\n required: true,\n isImage: false,\n value: \"Top juegos\",\n type: \"string\",\n id: \"a01c36e7-a551-4c92-89e0-e9eabcdbe344\",\n },\n {\n name: \"iconUrl\",\n required: true,\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307302930-top.webp\",\n type: \"string\",\n id: \"1960df1d-b07e-4461-b55f-39834ac30d8e\",\n maxSizeMB: 0.2,\n },\n {\n value: \"\",\n type: \"string\",\n id: \"63dab0f6-b4d1-47af-b1e7-d3dcf4c69c4e\",\n name: \"groups\",\n required: false,\n isImage: false,\n },\n ],\n order: 9,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n apiParams: [\n {\n id: \"2bcfd8cd-8f1f-474f-beb4-170477acf9bd\",\n key: \"company\",\n value: \"OLI\",\n },\n {\n value: \"HOME_TOPJUEGOS\",\n key: \"lobby\",\n id: \"dac0b2d9-f00d-4979-9deb-31c6f66b1899\",\n },\n ],\n variableName: \"items\",\n componentKey: \"OraculoSeccionTopJuegos\",\n },\n {\n dataMode: \"url\",\n id: 6,\n title: 'Promociones \"Lo nuevo\"',\n visible: true,\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getPromotionsLobby\",\n apiMethod: \"GET\",\n componentKey: \"OraculoSeccionDestacados\",\n variableName: \"items\",\n apiParams: [\n {\n id: \"a2ee1b32-dc39-434f-9358-920e6c7bba0b\",\n key: \"company\",\n value: \"OLI\",\n },\n {\n id: \"16715513-30a1-4955-8e94-a4deee4722ba\",\n value: \"DESTACADOS\",\n key: \"lobby\",\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n order: 10,\n manualScalarFields: [\n {\n type: \"string\",\n id: \"f131acc5-a298-4583-9952-c0747dc1f1af\",\n value: \"Lo nuevo\",\n isImage: false,\n required: true,\n name: \"title\",\n },\n {\n name: \"iconUrl\",\n required: true,\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307276612-lonuevo.webp\",\n id: \"8f0dadc8-ff0f-4074-870f-2bbcd9f38cab\",\n maxSizeMB: 0.2,\n type: \"string\",\n },\n {\n isImage: false,\n required: false,\n name: \"className\",\n id: \"39cd368d-0003-4145-88a9-f22b1a4ef32b\",\n type: \"string\",\n value: \"\",\n },\n {\n id: \"a9e218fd-9cc6-432f-a7bf-c119581e6927\",\n type: \"string\",\n value: \"\",\n isImage: false,\n required: false,\n name: \"groups\",\n },\n ],\n },\n {\n title: \"Club Olimpo\",\n visible: true,\n id: 8,\n manualItems: [\n {\n fields: [\n {\n value: \"¡Canjea bonos, productos y las mejores experiencias!\",\n type: \"string\",\n id: \"65b37bc4-f480-4409-afd7-ff8b83c722e0\",\n name: \"text\",\n isImage: false,\n required: true,\n },\n {\n isImage: false,\n required: false,\n name: \"buttonLabel\",\n type: \"string\",\n id: \"cdc8fb20-5c5a-4165-93be-4df1026cdcee\",\n value: \"Vamos\",\n },\n {\n name: \"imgAlt\",\n isImage: false,\n required: false,\n value: \"\",\n id: \"9f25442e-caeb-4fab-9bea-b91f1aef97eb\",\n type: \"string\",\n },\n {\n name: \"imgMobile\",\n required: true,\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307329736-clubolimpo-mobile.webp\",\n type: \"string\",\n maxSizeMB: 2,\n id: \"259ffa74-7e4f-48e6-90da-4837f2c37fe9\",\n },\n {\n type: \"string\",\n id: \"e7812141-42d8-419f-9d15-b8711139e980\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307339455-clubolimpo.webp\",\n isImage: true,\n required: false,\n name: \"imgDesktopBg\",\n },\n {\n value:\n \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/Logo.png\",\n type: \"string\",\n maxSizeMB: 0.2,\n id: \"622d860b-9f9f-462a-a675-3768d6daf3c3\",\n name: \"imgDesktopLogo\",\n required: false,\n isImage: true,\n },\n ],\n id: \"03e20297-c0fa-4382-85b2-54eaa9325be1\",\n },\n ],\n dataMode: \"manual\",\n manualScalarFields: [\n {\n name: \"groups\",\n isImage: false,\n required: false,\n value: \"\",\n id: \"3b00e159-6da9-4c45-8382-47d54db59181\",\n type: \"string\",\n },\n ],\n order: 11,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualItems2: [],\n variableName: \"items\",\n componentKey: \"OraculoSeccionClubOlimpo\",\n },\n {\n order: 12,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n visible: true,\n title: \"Medios de Pago\",\n id: 10,\n componentKey: \"OraculoSeccionMediosPago\",\n },\n ],\n settings: {\n priority: 6,\n landingName: \"home\",\n groups: [\n \"604404\",\n \"604405\",\n \"604406\",\n \"604407\",\n \"604408\",\n \"604409\",\n \"542172\",\n ],\n isActive: true,\n isDefault: false,\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 manualScalarFields: c.manualScalarFields,\n variableName2: c.variableName2,\n manualItems2: c.manualItems2,\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: any }[];\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\n\n \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 /** Module id (default 301) */\n moduleId?: number;\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 SectionErrorBoundaryProps = {\n section: OraculoPageLandingPreviewSection;\n children: React.ReactNode;\n fallback?: React.ReactNode;\n};\n\ntype SectionErrorBoundaryState = {\n hasError: boolean;\n};\n\nclass SectionErrorBoundary extends React.Component<\n SectionErrorBoundaryProps,\n SectionErrorBoundaryState\n> {\n constructor(props: SectionErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, info: any) {\n console.error(\"[landing] sección que falló:\", {\n id: this.props.section.id,\n title: this.props.section.title,\n componentKey: this.props.section.componentKey,\n error,\n info,\n });\n }\n\n render() {\n if (this.state.hasError) return null;\n return this.props.children;\n }\n}\n\nconst noMostrarSinItems = [\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n];\n\nconst OraculoPageLandingPreview: React.FC<OraculoPageLandingPreviewProps> = ({\n sectionsOverride,\n docId = \"Landing: home\",\n moduleId = 301,\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 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 const fallbackSections = useMemo(\n () => normalizeLandingJsonToSections(LANDING_FALLBACK_JSON),\n []\n );\n\n const findFallbackSection = (\n section: OraculoPageLandingPreviewSection\n ): OraculoPageLandingPreviewSection | undefined => {\n return fallbackSections.find(\n (f) => f.id === section.id || f.componentKey === section.componentKey\n );\n };\n\n const normalizeNumberArray = (arr: unknown): number[] => {\n if (!Array.isArray(arr)) return [];\n return arr\n .map((x) => Number(x))\n .filter((x) => !Number.isNaN(x));\n };\n\n const userGroups = useMemo<number[]>(() => {\n const user = extrasObj[\"user\"] as { groups?: unknown } | undefined;\n return normalizeNumberArray(user?.groups);\n }, [extrasObj]);\n\n const getSectionGroupsFromManualScalars = (\n section: OraculoPageLandingPreviewSection\n ): number[] => {\n const fields = section.manualScalarFields;\n if (!Array.isArray(fields)) return [];\n\n const groupField = fields.find(\n (f) => String(f?.name || \"\").trim().toLowerCase() === \"groups\"\n );\n\n if (!groupField) return [];\n\n const rawValue = groupField.value;\n\n if (rawValue == null) return [];\n\n // si por alguna razón viniera array\n if (Array.isArray(rawValue)) {\n return rawValue\n .map((x) => Number(String(x).trim()))\n .filter((x) => !Number.isNaN(x));\n }\n\n const text = String(rawValue).trim();\n if (!text) return [];\n\n return text\n .split(\",\")\n .map((x) => Number(x.trim()))\n .filter((x) => !Number.isNaN(x));\n };\n\n const canShowSectionByGroups = (\n section: OraculoPageLandingPreviewSection,\n userGroupsArg: number[]\n ): boolean => {\n const sectionGroups = getSectionGroupsFromManualScalars(section);\n\n // si no trae groups o viene vacío -> mostrar\n if (sectionGroups.length === 0) return true;\n\n // si la sección sí exige groups, pero el user no tiene groups -> no mostrar\n if (!Array.isArray(userGroupsArg) || userGroupsArg.length === 0) return false;\n\n const userGroupSet = new Set(userGroupsArg);\n return sectionGroups.some((group) => userGroupSet.has(group));\n };\n\n // Fetch sections from Firestore unless override provided\n useEffect(() => {\n if (sectionsOverride) return;\n\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\n const toLoad = effectiveSections\n .map((s) => s.componentKey)\n .filter((key) => !!key);\n\n if (toLoad.length === 0) return;\n }, [sectionsOverride, sections]);\n\n const fetchSectionData = async (\n section: OraculoPageLandingPreviewSection\n ): Promise<SectionPayload> => {\n if (noMostrarSinItems.includes(section.componentKey)) {\n return {\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 .filter((s) => canShowSectionByGroups(s, userGroups))\n .sort((a, b) => a.order - b.order),\n [effectiveSections, userGroups]\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\n return items.map((it) => {\n const obj: Record<string, unknown> = {};\n\n for (const f of it.fields || []) {\n const t = (f.type || \"string\").toLowerCase();\n\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 {\n obj[f.name] = f.value;\n }\n }\n\n return obj;\n });\n };\n\n const toManualScalars = (\n fields: { name: string; type: string; value: any }[] | undefined\n ): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n if (!Array.isArray(fields)) return out;\n\n for (const f of fields) {\n if (!f.name) continue;\n const t = (f.type || \"string\").toLowerCase();\n\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 {\n out[f.name] = f.value;\n }\n }\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 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\n if (noMostrarSinItems.includes(s.componentKey)) {\n return { items: payload, ...compProps, ...scalars };\n }\n\n compProps = { ...compProps, ...scalars };\n\n if (hasUrl) {\n 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 s.variableName\n );\n\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 buildEmptyProps = (\n s: OraculoPageLandingPreviewSection\n ): Record<string, unknown> => {\n const out: Record<string, unknown> = s.props ? { ...s.props } : {};\n\n try {\n Object.assign(out, toManualScalars(s.manualScalarFields));\n } catch (e) {\n console.error(\"❌ Error armando scalars vacíos:\", s, e);\n }\n\n const propName = (s.variableName || \"items\").trim() || \"items\";\n if (typeof out[propName] === \"undefined\") {\n out[propName] = [];\n }\n\n if (s.variableName2) {\n const propName2 = (s.variableName2 || \"items2\").trim() || \"items2\";\n if (typeof out[propName2] === \"undefined\") {\n out[propName2] = [];\n }\n }\n\n return out;\n };\n\n const buildCompPropsSafe = (\n s: OraculoPageLandingPreviewSection\n ): Record<string, unknown> => {\n try {\n return buildCompProps(s);\n } catch (error) {\n console.error(\"🔥 ERROR EN buildCompProps:\", s, error);\n\n const fallbackSection = findFallbackSection(s);\n\n if (fallbackSection && fallbackSection !== s) {\n try {\n console.warn(\n `[landing] usando fallback local para sección ${s.title} (${s.componentKey})`\n );\n return buildCompProps(fallbackSection);\n } catch (fallbackError) {\n console.error(\"🔥 ERROR EN fallback buildCompProps:\", fallbackSection, fallbackError);\n }\n }\n\n return buildEmptyProps(s);\n }\n };\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\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 const Comp = LandingComponents[rawKey];\n\n const fullBleedComponents = new Set([\n \"OraculoSeccionBanners\",\n \"OraculoSeccionBonoBienvenida\",\n \"OraculoSeccionCasinoEnVivo\",\n \"OraculoSeccionClubOlimpo\",\n ...(!isDesktop\n ? [\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n \"OraculoSeccionVirtuales\",\n \"OraculoSeccionDestacados\",\n \"OraculoSeccionCasino\",\n ]\n : []),\n ]);\n\n const isFullBleed = fullBleedComponents.has(s.componentKey);\n const paddingX = isDesktop ? 120 : 24;\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 ...(isNoStackSpacing\n ? {\n marginTop: -stackGapPx,\n marginBottom: -stackGapPx,\n }\n : {}),\n };\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 }\n\n if (errorSec && !payload) {\n const fallbackSection = findFallbackSection(s);\n\n if (fallbackSection && fallbackSection.dataMode === \"manual\") {\n try {\n const fallbackProps = buildCompPropsSafe(fallbackSection);\n\n return (\n <div key={s.id} style={wrapperStyle} className=\"oraculo-section-wrapper\">\n <Comp {...fallbackProps} />\n </div>\n );\n } catch (fallbackRenderError) {\n console.error(\n \"🔥 ERROR renderizando fallback manual de sección:\",\n fallbackSection,\n fallbackRenderError\n );\n }\n }\n\n return renderStatusBox(\n s.id,\n \"error\",\n `Error cargando ${s.apiUrl}: ${errorSec}`\n );\n }\n }\n\n const baseProps = buildCompPropsSafe(s);\n\nconst compProps =\n s.componentKey === \"OraculoSeccionClubOlimpo\"\n ? {\n ...baseProps,\n user: extrasObj[\"user\"],\n }\n : baseProps;\n // const wrapperStyle = getWrapperStyle(s, rawKey);\n\n // console.log(\"[landing] intentando render:\", {\n // id: s.id,\n // title: s.title,\n // componentKey: s.componentKey,\n // });\n\n return (\n <SectionErrorBoundary section={s}>\n <div\n key={s.id}\n style={wrapperStyle}\n className=\"oraculo-section-wrapper\"\n >\n <Comp {...compProps} />\n </div>\n </SectionErrorBoundary>\n );\n };\n\n const renderSectionSafe = (section: OraculoPageLandingPreviewSection) => {\n return (\n <SectionErrorBoundary\n key={section.id}\n section={section}\n fallback={renderStatusBox(\n section.id,\n \"error\",\n `La sección \"${section.title}\" falló al renderizar`\n )}\n >\n {renderSingleSection(section)}\n </SectionErrorBoundary>\n );\n };\n\n if (loading && !sectionsOverride) {\n return Loader ? <Loader /> : <div>Cargando...</div>;\n }\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\n // if (disableWrapper) {\n // return (\n // <OraculoThemeProvider>\n // <DocIdProvider docId={docId} moduleId={moduleId}>\n // <>{orderedVisible.map((section) => {\n // try {\n // return renderSingleSection(section);\n // } catch (error) {\n // console.error(\"🔥 ERROR EN SECTION:\", section, error);\n // return null;\n // }\n // })}</>\n // </DocIdProvider>\n // </OraculoThemeProvider>\n // );\n // }\n\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId} moduleId={moduleId}>\n <Container\n className=\"oli-font\"\n maxWidth={false}\n disableGutters\n sx={{\n backgroundColor: \"#121212\",\n position: \"relative\",\n pb: 5,\n width: \"100%\",\n maxWidth: \"100%\",\n overflowX: \"hidden\",\n }}\n >\n <Stack direction=\"column\" spacing={isDesktop ? 8 : 5} useFlexGap>\n {orderedVisible.map((section) => {\n try {\n return renderSingleSection(section);\n } catch (error) {\n console.error(\"🔥 ERROR EN SECTION:\", section, error);\n return null;\n }\n })}\n </Stack>\n </Container>\n </DocIdProvider>\n </OraculoThemeProvider>\n );\n};\n\nexport default OraculoPageLandingPreview;"],"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","DocIdContext","createContext","DocIdProvider","docId","moduleId","useDocContext","context","useContext","useDocId","useModuleId","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","paddingMobile","carouselRef","navState","setNavState","isLoading","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","sectionClassName","isMobile","useMediaQuery","itemsLength","ChevronLeftRounded","ChevronRightRounded","KEY","getStore","g","setOraculoExtras","extrasObj","getOraculoExtra","key","clearOraculoExtras","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","top6","handleOpen","juego","showIframe","loadMachine","RECOMMENDATIONS_URL","mapMachineToGameItem","_j","_k","_l","_m","_n","extractMachineIds","payload","id","getPersonalizeUserId","user","fetchRecommendations","productType","userId","qs","res","data","fetchRanking","machineIds","body","usePersonalizeGameItems","isPersonalize","resolvedItems","setResolvedItems","setLoading","cancelled","recommendationsPayload","rankedItems","rankedMachineIds","machineResults","machineId","parsedItems","result","orderedItems","rankedItem","error","usePersonalizeCasinoItems","usePersonalizeVirtualesItems","usePersonalizeCasinoEnVivoItems","getGameId","idx","parseBooleanValue","input","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","personalizeEnabled","currentItems","handleOpenLive","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","end","OraculoSeccionCasino","onItemClick","buildLoadingSlides","mkItems","n","itm","game","buildVirtualSlides","buildLoadingVirtualSlides","OraculoSeccionVirtuales","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","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","getMarketPlaceUrl","resolvedUser","localUserRaw","response","jsonResponse","handleRedirect","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","groupIds","SPECIALS_URL","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","useLazyJerseys","visibleRange","buffer","debounceMs","jerseys","setJerseys","pendingRef","requestIdRef","debounceTimerRef","lastRangeRef","from","to","finalFrom","finalTo","prev","idsToFetch","ev","requestId","next","numId","returnedIds","filterFootballEvents","blocked","sport","group","word","MemoizedCard","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","setVisibleRange","orderedEventIds","setOrderedEventIds","orderIdsFetchedRef","orderMapRef","loadData","orderJson","ids","newMap","err","filteredEvents","sortedEvents","aIndex","bIndex","interval","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","PERU_UTC_OFFSET_MINUTES","hasTimezoneInfo","parsePeruDateToUtcMs","ms","match","y","m","d","hh","mm","ss","isBannerVisibleByDate","banner","nowMs","fields","startAt","f","endAt","startMs","endMs","OraculoSeccionBanners","backgrounds","hideItems","activeDot","setActiveDot","setNowMs","setDepositActionGlobal","sortByOrder","orderA","orderB","sortedItems","visibleBackgrounds","filtered","totalDots","canNavigate","showDock","ARROW_COLOR","arrowSx","carouselOptions","handleBannerClick","bg","hasFunction","hasHref","bannerName","handleMenuItemClick","autoplayMs","autoplayTimeoutRef","canAutoplay","stopAutoplay","scheduleAutoplay","handleSlideChangeTracking","safe","wasAutoplay","isLink","isClickable","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","SectionErrorBoundary","props","info","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","db","loader","disableWrapper","Loader","sections","setSections","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","fallbackSections","findFallbackSection","section","normalizeNumberArray","x","userGroups","getSectionGroupsFromManualScalars","groupField","rawValue","canShowSectionByGroups","userGroupsArg","sectionGroups","userGroupSet","applyFallback","reason","extra","unsubscribe","onSnapshot","doc","snap","fetchSectionData","rawUrl","method","params","headers","encoded","effectiveSections","fetchedKeysRef","fetchables","json","message","orderedVisible","toManualArray","obj","t","num","fn","toManualScalars","out","mapPayloadToProps","manual","variableName","propName","pl","buildCompProps","hasUrl","compProps","scalars","arr2","varName2","buildEmptyProps","propName2","buildCompPropsSafe","fallbackSection","fallbackError","renderStatusBox","renderSingleSection","rawKey","Comp","isFullBleed","paddingX","stackGapPx","isNoStackSpacing","wrapperStyle","loadingSec","errorSec","fallbackProps","fallbackRenderError","baseProps","Container"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.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/hooks/usePersonalizeCasinoItems.ts","../src/organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx","../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/atoms/OraculoEvent/useLazyJerseys.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 <div className=\"orc-co-desktopInner\">\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 </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 moduleId?: number;\n}\n\nconst DocIdContext = createContext<DocIdContextType | undefined>(undefined);\n\nexport const DocIdProvider: React.FC<{\n children: React.ReactNode;\n docId: string;\n moduleId?: number;\n}> = ({ children, docId, moduleId }) => {\n const value = React.useMemo(() => ({ docId, moduleId }), [docId, moduleId]);\n\n return (\n <DocIdContext.Provider value={value}>\n {children}\n </DocIdContext.Provider>\n );\n};\n\nexport const useDocContext = () => {\n const context = useContext(DocIdContext);\n if (!context) {\n throw new Error(\"useDocContext debe usarse dentro de DocIdProvider\");\n }\n return context;\n};\n\nexport const useDocId = () => useDocContext().docId;\nexport const useModuleId = () => useDocContext().moduleId;","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, { useEffect, 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, useModuleId } from \"../../contexts/DocIdContext\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\n\nexport default function OraculoSeccionDestacados({\n items,\n title = \"Destacados\",\n iconUrl,\n onViewMore,\n className = \"\",\n paddingMobile = \"16px\",\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 const moduleId = useModuleId();\n\n const isLoading = !items || items.length === 0;\n\n const handlePrev = () => {\n captureInteraction({\n element: \"destacados_carousel_prev\",\n label: `${docId} - OraculoSeccionDestacados - Anterior`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionDestacados - Siguiente`,\n target: \"carousel\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionDestacados - Ver más`,\n target: \"https://www.olimpo.bet/promociones\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionDestacados - Click: ${String(promotion)}`,\n target: url,\n event_type: \"click\",\n module_id: moduleId,\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 const isMobile = useMediaQuery(\"(max-width:950px)\");\n const itemsLength = items?.length ?? 0;\n\n useEffect(() => {\n if (itemsLength === 0) {\n setNavState({ isStart: true, isEnd: true });\n return;\n }\n\n // Estado inicial correcto:\n // Estoy al inicio, pero probablemente puedo ir a la derecha.\n setNavState({ isStart: true, isEnd: false });\n }, [itemsLength, isMobile, paddingMobile]);\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: !isMobile ? 0 : paddingMobile,\n paddingRight: !isMobile ? 0 : paddingMobile,\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={!isMobile}\n options={{ autoWidth: true, trimSpace: 'move' }}\n breakpoints={{\n 768: { perPage: 2, focus: \"start\", padding: { left: paddingMobile, right: paddingMobile } },\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 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: `${docId} - OraculoSeccionDestacados - Slide Carousel`,\n target: \"carousel\",\n event_type: \"slide\",\n module_id: moduleId,\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, useModuleId } 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 const moduleId = useModuleId();\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: `${docId} - OraculoSeccionTopJuegos - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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 { 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// Mapeo de las máquinas a los items del juego\nconst mapMachineToGameItem = (\n machine: any,\n index: number\n): OraculoGameItem => {\n return {\n orden: Number(index),\n machine: String(\n machine.id ?? machine.external_id\n ),\n logo: machine.logo ?? \"\",\n name: machine.room_name ?? \"\",\n web_name: machine.product ?? \"\",\n provider: machine.service ?? \"\",\n sub_provider: machine.service ?? \"\",\n external_id: machine.external_id ?? \"\",\n type: machine.game_type ?? \"\",\n tags: machine.tags ?? \"\",\n lobby_tag: machine.lobby_tag ?? null,\n background: machine.background ?? \"\",\n rtp: machine.rtp ?? null,\n demo_allowed: machine.demo_allowed ?? false,\n gaming_session_required: machine.gaming_session_required ?? false,\n };\n};\n\n// Extrae los IDs de las máquinas de la respuesta de recomendaciones\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\n// Obtener el userId personalizado\nconst getPersonalizeUserId = () => {\n const user = getOraculoExtra<any>(\"user\");\n return user?.userId ?? user?.user ?? user?.id ?? null;\n};\n\n// Obtener las recomendaciones\nconst fetchRecommendations = async (productType: any) => {\n const userId = getPersonalizeUserId();\n\n const qs = new URLSearchParams({\n userId: String(userId),\n productType\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 const data = await res.json();\n\n return {\n ...data,\n recommendations: Array.isArray(data?.recommendations)\n ? data.recommendations.slice(0, 49)\n : [],\n };\n};\n\n// Nueva función para obtener el ranking de las máquinas\nconst fetchRanking = async (userId: string, machineIds: string[]) => {\n const url = \"https://1v5raznji6.execute-api.us-east-1.amazonaws.com/dev/ranking\";\n\n const body = JSON.stringify({\n userId: String(userId),\n items: machineIds,\n });\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body,\n });\n\n if (!res.ok) {\n throw new Error(`No se pudo obtener el ranking. HTTP ${res.status} ${res.statusText}`);\n }\n\n const data = await res.json();\n return data.rankedItems;\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 // Obtener el ranking de las máquinas\n const userId = getPersonalizeUserId();\n const rankedItems = await fetchRanking(userId, machineIds);\n\n // Mapear las máquinas con su ranking\n const rankedMachineIds = rankedItems.map((item: any) => item.itemId);\n const machineResults = await Promise.allSettled(\n rankedMachineIds.map(async (machineId: string, index: number) => {\n const res = await fetch(`https://api.mktolimpo.com/api/machine/${machineId}`);\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 // Ordenar los elementos por el ranking recibido\n const orderedItems = rankedItems\n .map((rankedItem: any) => {\n const item = parsedItems.find((i) => i.machine === rankedItem.itemId);\n return item ? { ...item, score: rankedItem.score } : null;\n })\n .filter(Boolean)\n .sort((a: any, b: any) => (b.score ?? 0) - (a.score ?? 0));\n\n setResolvedItems(orderedItems);\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\");\n\nexport const usePersonalizeCasinoEnVivoItems = (\n items: OraculoGameItem[],\n isPersonalize = false\n) => usePersonalizeGameItems(items, isPersonalize, \"Casino en vivo\");","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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeCasinoEnVivoItems } from \"../../hooks/usePersonalizeCasinoItems\";\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 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 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 isPersonalize = false,\n}) => {\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const moduleId = useModuleId();\n\n const personalizeEnabled = parseBooleanValue(isPersonalize);\n\n const { resolvedItems, loading } = usePersonalizeCasinoEnVivoItems(\n items,\n personalizeEnabled\n );\n\n const currentItems = personalizeEnabled\n ? resolvedItems\n : Array.isArray(items)\n ? items\n : [];\n\n const handleOpenLive = (juego: any) => {\n captureInteraction({\n element: \"live_casino_card\",\n label: `${docId} - OraculoSeccionCasinoEnVivo${personalizeEnabled ? \" - personalize\" : \"\"} - Open game: ${String(juego.machine || \"unknown\")}`,\n target: String(juego.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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\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 showIframe?.();\n\n if (typeof window !== \"undefined\") {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n }\n\n requestAnimationFrame(() => {\n loadMachine?.(juego, false, \"casino_en_vivo\");\n });\n };\n\n const handleViewMore = () => {\n captureInteraction({\n element: \"casino_en_vivo_view_more\",\n label: `${docId} - OraculoSeccionCasinoEnVivo${personalizeEnabled ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/casino-en-vivo\",\n event_type: \"click\",\n module_id: moduleId,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionCasinoEnVivo\" },\n });\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 <Box\n sx={{\n position: \"absolute\",\n inset: 0,\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: {\n xs: \"cover\",\n md: \"cover\",\n },\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n zIndex: 0,\n }}\n />\n\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 <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 <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 {(currentItems ?? []).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 <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;","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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeCasinoItems } from \"../../hooks/usePersonalizeCasinoItems\";\nimport { useMediaQuery } from \"@mui/material\";\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 moduleId = useModuleId();\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 handlePrev = () => {\n captureInteraction({\n element: \"casino_prev\",\n label: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/casino\",\n event_type: \"click\",\n module_id: moduleId,\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 const 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 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\n const isLoading = personalizeEnabled\n ? loading\n : !Array.isArray(items) || items.length === 0;\n\n const isMobile = useMediaQuery(\"(max-width:950px)\");\n\n const slides = isLoading\n ? buildLoadingSlides(mosaicFirst, gridSize)\n : buildCasinoSlides(currentItems, mosaicFirst, gridSize);\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: 0,\n \"@media (max-width: 1024px)\": {\n px: 2,\n },\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 options={{ autoWidth: true, trimSpace: \"move\" }}\n showRightGradient={!isMobile}\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: `${docId} - OraculoSeccionCasino ${isPersonalize ? \" - personalize\" : \"\"} - Game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { usePersonalizeVirtualesItems } from \"../../hooks/usePersonalizeCasinoItems\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\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 const moduleId = useModuleId();\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 handlePrev = () => {\n captureInteraction({\n element: \"virtuales_prev\",\n label: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Anterior`,\n target: \"prev\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Siguiente`,\n target: \"next\",\n event_type: \"click\",\n module_id: moduleId,\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: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Ver más`,\n target: \"https://www.olimpo.bet/juegos-virtuales\",\n event_type: \"click\",\n module_id: moduleId,\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 const isLoading = personalizeEnabled\n ? loading\n : !Array.isArray(items) || items.length === 0;\n\n const isMobile = useMediaQuery(\"(max-width:950px)\");\n\n const slides = isLoading\n ? buildLoadingVirtualSlides(mosaicFirst, gridSize)\n : buildVirtualSlides(currentItems, mosaicFirst, gridSize);\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: 0,\n \"@media (max-width: 1024px)\": {\n px: 2,\n },\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={!isMobile}\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: `${docId} - OraculoSeccionVirtuales${personalizeEnabled ? \" - personalize\" : \"\"} - Game: ${String(game.machine || \"unknown\")}`,\n target: String(game.machine || \"unknown\"),\n event_type: \"click\",\n module_id: moduleId,\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, useModuleId } 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 /** objeto user */\n user?: any;\n\n}\ntype MarketplacePage = \"home\" | \"experiencias\" | \"productos\";\n\nconst OraculoSeccionClubOlimpo: React.FC<OraculoSeccionClubOlimpoItems> = ({\n className = \"\",\n fullBleed = true,\n items,\n selectedIndex = 0,\n ariaLabel,\n user = null\n}) => {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const bottomRef = useRef<HTMLDivElement | null>(null);\n const captureInteraction = useCaptureInteraction();\n const docId = useDocId();\n const moduleId = useModuleId();\n\n if (!items) return null;\n\n const getMarketPlaceUrl = async () => {\n let resolvedUser = user;\n\n // Fallback: si no viene user por props/context/store, buscar en localStorage\n if ((!resolvedUser?.user || !resolvedUser?.session) && typeof window !== \"undefined\") {\n try {\n const localUserRaw = localStorage.getItem(\"user\");\n if (localUserRaw) {\n const localUserParsed = JSON.parse(localUserRaw);\n resolvedUser = localUserParsed;\n }\n } catch (error) {\n console.error(\"[getMarketPlaceUrl] Error parsing localStorage user\", error);\n }\n }\n\n // Si aún no existe user/session, mantener comportamiento actual\n if (!resolvedUser?.user || !resolvedUser?.session) {\n console.warn(\"User data missing\");\n return null;\n }\n\n captureInteraction({\n element: \"club_olimpo_button\",\n label: `${docId} - OraculoSeccionClubOlimpo - Click: Club Olimpo`,\n target: \"https://www.clubolimpo.com/OlimpoBetWeb/\",\n event_type: \"click\",\n module_id: moduleId,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location\n ? globalThis.location.pathname\n : \"\",\n },\n tags: { section: \"OraculoSeccionClubOlimpo\" },\n });\n\n try {\n const data = {\n idUsuario: \"PE\" + resolvedUser.user,\n session_id: resolvedUser.session,\n pagina: \"home\",\n };\n\n const fetchUrl = `https://apipe.mktolimpo.com/api/pm/token`;\n\n const response = await fetch(fetchUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (response.ok) {\n const jsonResponse = await response.json();\n return jsonResponse?.url;\n }\n\n return null;\n } catch (error) {\n console.error(\"[getMarketPlaceUrl]\", error);\n return null;\n }\n };\n\n const onClick = () => {\n captureInteraction({\n element: \"club_olimpo_button\",\n label: `${docId} - OraculoSeccionClubOlimpo - Click: Club Olimpo`,\n target: \"https://www.olimpo.bet/conoce-club-olimpo\",\n event_type: \"click\",\n module_id: moduleId,\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\n const handleRedirect = async () => {\n const url = await getMarketPlaceUrl();\n if (url) {\n window.location.href = url;\n }\n else {\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\n globalThis.location.assign(\"https://www.olimpo.bet/conoce-club-olimpo\");\n }\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={handleRedirect}\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, useModuleId } from \"../../contexts/DocIdContext\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\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 moduleId = useModuleId();\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: `${docId} - OraculoSeccionEventoCombinadas - Click: Anterior`,\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoCombinadas - Click: Siguiente`,\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoCombinadas - Click: Ver más`,\r\n event_type: \"click\",\r\n module_id: moduleId,\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 groupIds = listData?.group?.groups\r\n ?.map(g => g.id)\r\n ?.filter(Boolean) // remove undefined/null just in case\r\n ?.join(',');\r\n\r\n if (!groupIds) {\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/${groupIds}.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 const isMobile = useMediaQuery(\"(max-width:950px)\");\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={!isMobile}\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 { useEffect, useRef, useState } from \"react\";\r\n\r\ntype UseLazyJerseysParams<TEvent> = {\r\n events: TEvent[] | null;\r\n visibleRange: { start: number | null; end: number | null };\r\n fetchJerseys: (ids: number[]) => Promise<any>;\r\n buffer?: number;\r\n debounceMs?: number;\r\n};\r\n\r\nexport function useLazyJerseys<TEvent extends { id?: number }>({\r\n events,\r\n visibleRange,\r\n fetchJerseys,\r\n buffer = 2,\r\n debounceMs = 250,\r\n}: UseLazyJerseysParams<TEvent>) {\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n\r\n const pendingRef = useRef<Set<number>>(new Set());\r\n const requestIdRef = useRef(0);\r\n const debounceTimerRef = useRef<any>(null);\r\n const lastRangeRef = useRef<{ start: number; end: number } | null>(null);\r\n\r\n useEffect(() => {\r\n if (!events || events.length === 0) return;\r\n\r\n // debounce\r\n if (debounceTimerRef.current) {\r\n clearTimeout(debounceTimerRef.current);\r\n }\r\n\r\n debounceTimerRef.current = setTimeout(() => {\r\n const start = visibleRange.start ?? 0;\r\n const end = visibleRange.end ?? 7;\r\n\r\n const from = Math.max(0, start - buffer);\r\n const to = Math.min(events.length - 1, end + buffer);\r\n\r\n // 🔥 GAP RECOVERY\r\n let finalFrom = from;\r\n let finalTo = to;\r\n\r\n const prev = lastRangeRef.current;\r\n\r\n if (prev) {\r\n // fast forward jump → fill gap\r\n if (from > prev.end) {\r\n finalFrom = prev.end + 1;\r\n }\r\n\r\n // fast backward jump → fill gap\r\n if (to < prev.start) {\r\n finalTo = prev.start - 1;\r\n }\r\n }\r\n\r\n // store current (NOT final)\r\n lastRangeRef.current = { start: from, end: to };\r\n\r\n const idsToFetch = events\r\n .slice(finalFrom, finalTo + 1)\r\n .map((ev) => ev?.id)\r\n .filter((id): id is number => Boolean(id))\r\n .filter((id) => !pendingRef.current.has(id)) // don't refetch in-flight\r\n .filter((id) => !(id in jerseys)); \r\n\r\n if (idsToFetch.length === 0) return;\r\n\r\n idsToFetch.forEach((id) => pendingRef.current.add(id));\r\n\r\n const requestId = ++requestIdRef.current;\r\n\r\n(async () => {\r\n try {\r\n const res = await fetchJerseys(idsToFetch);\r\n\r\n if (requestId !== requestIdRef.current) {\r\n // ✅ FIX: clean pending even if stale\r\n idsToFetch.forEach((id) => pendingRef.current.delete(id));\r\n return;\r\n }\r\n\r\n if (!res?.events) {\r\n idsToFetch.forEach((id) =>\r\n pendingRef.current.delete(id),\r\n );\r\n return;\r\n }\r\n\r\n setJerseys((prev) => {\r\n const next = { ...prev };\r\n\r\n for (const [id, jersey] of Object.entries(res.events)) {\r\n const numId = Number(id);\r\n if (!next[numId]) {\r\n next[numId] = jersey;\r\n }\r\n }\r\n\r\n return next;\r\n });\r\n\r\n const returnedIds = new Set(\r\n Object.keys(res.events).map(Number),\r\n );\r\n\r\n idsToFetch.forEach((id) => {\r\n pendingRef.current.delete(id);\r\n });\r\n } catch (e) {\r\n idsToFetch.forEach((id) =>\r\n pendingRef.current.delete(id),\r\n );\r\n console.error(\"Jersey fetch error\", e);\r\n }\r\n})();\r\n }, debounceMs);\r\n\r\n return () => {\r\n if (debounceTimerRef.current) {\r\n clearTimeout(debounceTimerRef.current);\r\n }\r\n };\r\n }, [events, visibleRange, buffer, debounceMs, fetchJerseys]);\r\n\r\n return {\r\n jerseys,\r\n isPending: pendingRef.current,\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, useModuleId } from \"../../contexts/DocIdContext\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport { useLazyJerseys } from \"../../atoms/OraculoEvent/useLazyJerseys\";\r\nimport { LiveEvent } from \"../../interfaces/oraculo/InterfaceKambi\";\r\n\r\nconst filterFootballEvents = (events: LiveEvent[]): LiveEvent[] => {\r\n const blocked = [\"esports\", \"cyber\"];\r\n return events.filter(ev => {\r\n const sport = ev?.event?.sport;\r\n if (typeof sport !== \"string\" || sport !== \"FOOTBALL\") return false;\r\n const group = typeof ev?.event?.group === \"string\" ? 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<LiveEvent[] | null>(null);\r\n const [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\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 moduleId = useModuleId();\r\n const orderMapRef = useRef(new Map());\r\n\r\n const handlePrev = () => {\r\n captureInteraction({\r\n element: \"evento_en_vivo_prev\",\r\n label: `${docId} - OraculoSeccionEventoEnVivo - Anterior`,\r\n target: \"prev\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoEnVivo - Siguiente`,\r\n target: \"next\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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: `${docId} - OraculoSeccionEventoEnVivo - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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\n\r\nconst { jerseys } = useLazyJerseys({\r\n events: events?.map(ev => ev.event) || [], // extract actual event objects\r\n visibleRange,\r\n fetchJerseys,\r\n buffer: 3, // same as your previous BUFFER\r\n debounceMs: 300, // same as your previous debouncedVisibleRange\r\n});\r\n \r\n\r\n const sectionClassName = className || undefined;\r\n const isLoading = events === null;\r\n\r\n const carouselItems = useMemo(() => {\r\n if (isLoading) return Array(4).fill({});\r\n return events?.slice(0, 20) || [];\r\n }, [isLoading, events]);\r\n const isMobile = useMediaQuery(\"(max-width:950px)\");\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={{ \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={!isMobile}\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, useModuleId } from \"../../contexts/DocIdContext\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport { useLazyJerseys } from \"../../atoms/OraculoEvent/useLazyJerseys\";\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 moduleId = useModuleId();\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 [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\r\n const handleViewMore = () => {\r\n captureInteraction({\r\n element: \"evento_semana_view_more\",\r\n label: `${docId} - OraculoSeccionEventoSemana - Ver más`,\r\n target: \"ver_mas\",\r\n event_type: \"click\",\r\n module_id: moduleId,\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 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\nconst { jerseys } = useLazyJerseys({\r\n events,\r\n visibleRange,\r\n fetchJerseys,\r\n buffer: 2,\r\n debounceMs: 250,\r\n});\r\n const isLoading = events === null;\r\n const isMobile = useMediaQuery(\"(max-width:950px)\");\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={!isMobile}\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: `${docId} - OraculoSeccionEventoSemana - Slide Carousel`,\r\n target: \"carousel\",\r\n event_type: \"slide\",\r\n module_id: moduleId,\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, useMediaQuery } 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, useModuleId } from \"../../contexts/DocIdContext\";\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\n\nconst PERU_UTC_OFFSET_MINUTES = -5 * 60;\n\nconst hasTimezoneInfo = (value: string) => /[zZ]|[+-]\\d{2}:\\d{2}$/.test(value);\n\nconst parsePeruDateToUtcMs = (value?: string | null) => {\n if (!value) return null;\n\n // Si ya viene con zona horaria (Z o +hh:mm), se parsea normal\n if (hasTimezoneInfo(value)) {\n const ms = new Date(value).getTime();\n return Number.isNaN(ms) ? null : ms;\n }\n\n // Si NO viene con zona horaria, asumimos que está en hora Perú\n // Ej: \"2026-04-13T10:45\"\n const match = value.match(\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/\n );\n\n if (!match) return null;\n\n const [, y, m, d, hh, mm, ss = \"00\"] = match;\n\n // Convertimos \"hora Perú\" -> UTC\n return Date.UTC(\n Number(y),\n Number(m) - 1,\n Number(d),\n Number(hh) - PERU_UTC_OFFSET_MINUTES / 60,\n Number(mm),\n Number(ss)\n );\n};\n\nconst isBannerVisibleByDate = (banner: any, nowMs: number) => {\n const fields = banner?.fields ?? banner?.parameters ?? banner?.extraFields ?? [];\n\n const startAt =\n banner?.startAt ??\n fields.find((f: any) => f?.name === \"startAt\")?.value ??\n null;\n\n const endAt =\n banner?.endAt ??\n fields.find((f: any) => f?.name === \"endAt\")?.value ??\n null;\n\n const startMs = parsePeruDateToUtcMs(startAt);\n const endMs = parsePeruDateToUtcMs(endAt);\n\n if (startMs != null && nowMs < startMs) return false;\n\n if (endMs != null && nowMs >= endMs) {\n // console.log(\"banner hidden\", banner);\n return false;\n }\n\n return true;\n};\n\ntype setDepositActionGlobalType = (value: boolean) => void;\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 const moduleId = useModuleId();\n\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\n const isMounted = useRef(false);\n const isAutoplayRef = useRef(false);\n\n const [nowMs, setNowMs] = useState(() => Date.now());\n const setDepositActionGlobal = getOraculoExtra<setDepositActionGlobalType>(\"setDepositActionGlobal\");\n\n const sortByOrder = <T extends { order?: number }>(list?: T[]) => {\n return [...(list ?? [])]\n .map((item, index) => ({ item, index }))\n .sort((a, b) => {\n const orderA = a.item.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.item.order ?? Number.MAX_SAFE_INTEGER;\n\n return orderA - orderB || a.index - b.index;\n })\n .map(({ item }) => item);\n };\n\n const sortedItems = useMemo(() => {\n return sortByOrder(items);\n }, [items]);\n\n const visibleBackgrounds = useMemo(() => {\n const filtered = (backgrounds ?? []).filter((banner) =>\n isBannerVisibleByDate(banner, nowMs)\n );\n\n return sortByOrder(filtered);\n }, [backgrounds, nowMs]);\n\n const totalDots = visibleBackgrounds.length || 1;\n const isLoading = !visibleBackgrounds || visibleBackgrounds.length === 0;\n const canNavigate = !isLoading && visibleBackgrounds.length > 1;\n\n // Si no se muestran items, no se muestra el dock\n const showDock = !hideItems && sortedItems.length > 0;\n const isMobile = useMediaQuery(\"(max-width:950px)\");\n\n const isPrevDisabled = !canNavigate || activeDot === 0;\n const isNextDisabled = !canNavigate || activeDot === totalDots - 1;\n\n const ARROW_COLOR = \"#B5B5B5\";\n\n useEffect(() => {\n const interval = window.setInterval(() => {\n setNowMs(Date.now());\n }, 30 * 1000);\n\n return () => window.clearInterval(interval);\n }, []);\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 = (\n event: React.MouseEvent<HTMLElement>,\n bg: OraculoBannerItem,\n index: number\n ) => {\n const hasFunction = Boolean(bg.idFunction);\n const hasHref = Boolean(bg.href);\n\n if (hasFunction) {\n event.preventDefault();\n event.stopPropagation();\n\n switch (bg.idFunction) {\n case \"deposito\":\n setDepositActionGlobal?.(true);\n return;\n\n default:\n return;\n }\n }\n\n if (!hasHref) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const bannerName = bg.href?.split(\"/\").pop()?.split(\".\")[0] || bg.label || bg.id || `banner_${index + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `${docId} - OraculoSeccionBanners - Banner click: ${bannerName}`,\n target: bg.href || \"no_url\",\n event_type: \"click\",\n module_id: moduleId,\n metadata: {\n location:\n typeof globalThis !== \"undefined\" && globalThis.location ? globalThis.location.pathname : \"\",\n banner_position: index + 1,\n banner_total: visibleBackgrounds?.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: `${docId} - OraculoSeccionBanners - Menu item click: ${item.label || item.id}`,\n target: item.href || \"action\",\n event_type: \"click\",\n module_id: moduleId,\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 && (visibleBackgrounds?.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 = visibleBackgrounds?.[safe]?.href\n ? visibleBackgrounds[safe].href?.split(\"/\").pop()?.split(\".\")[0] || `banner_${safe + 1}`\n : `banner_${safe + 1}`;\n\n captureInteraction({\n element: \"banner_carousel\",\n label: `${docId} - OraculoSeccionBanners - Banner view: Slide ${safe + 1} - ${bannerName}`,\n target: visibleBackgrounds?.[safe]?.href || \"no_url\",\n event_type: \"view\",\n module_id: moduleId,\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 pb: showDock ? { xs: \"40px\", sm: 0 } : 0,\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 height: \"auto\",\n aspectRatio: \"512 / 260\",\n \"@media (min-width: 950px)\": {\n aspectRatio: \"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={visibleBackgrounds}\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 const hasFunction = Boolean(bg.idFunction);\n const hasHref = Boolean(bg.href);\n const isLink = hasHref && !hasFunction;\n const isClickable = hasFunction || hasHref;\n\n return (\n <Box\n component={isLink ? \"a\" : \"div\"}\n href={isLink ? bg.href : undefined}\n target={isLink ? bg.target ?? \"_self\" : undefined}\n rel={isLink && bg.target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n onClick={(event: React.MouseEvent<HTMLElement, MouseEvent>) => handleBannerClick(event, bg, idx)}\n sx={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n display: \"block\",\n textDecoration: \"none\",\n cursor: isClickable ? \"pointer\" : \"default\",\n }}\n >\n <Box component=\"picture\" sx={{ position: \"absolute\", inset: 0, lineHeight: 0 }}>\n <source srcSet={bg.desktopSrc} media=\"(min-width:950px)\" />\n <source srcSet={bg.mobileSrc} media=\"(max-width:949px)\" />\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 />\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: { xs: 36, sm: 80, md: 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: 0, 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 {sortedItems?.map((item: OraculoBannerItem) => (\n <Box\n key={item.id}\n sx={{\n position: \"relative\",\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 \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: -12,\n height: \"3px\",\n borderRadius: \"999px\",\n backgroundColor: \"#3CC666\",\n opacity: 0,\n transform: \"scaleX(0.7)\",\n transformOrigin: \"center\",\n transition: \"all 0.25s ease\",\n pointerEvents: \"none\",\n },\n\n \"&:hover .menu-text\": {\n color: \"#3CC666\",\n },\n\n \"&:hover::after\": {\n opacity: 1,\n transform: \"scaleX(1)\",\n },\n\n ...(item.iconHover && {\n \"&:hover .menu-icon-default\": {\n display: \"none\",\n },\n \"&:hover .menu-icon-hover\": {\n display: \"block\",\n },\n }),\n }}\n onClick={() => handleMenuItemClick(item)}\n >\n {item.icon && (\n <Box\n sx={{\n position: \"relative\",\n width: { xs: 20, sm: 22, md: 24 },\n height: { xs: 20, sm: 22, md: 24 },\n flexShrink: 0,\n }}\n >\n <Box\n component=\"img\"\n src={item.icon}\n alt={item.label || `icon-${item.id}`}\n className=\"menu-icon-default\"\n sx={{\n display: \"block\",\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n }}\n />\n\n {item.iconHover && (\n <Box\n component=\"img\"\n src={item.iconHover}\n alt={item.label || `icon-hover-${item.id}`}\n className=\"menu-icon-hover\"\n sx={{\n display: \"none\",\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n }}\n />\n )}\n </Box>\n )}\n\n <Typography\n className=\"menu-text\"\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\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 { src: \"assets/img/home/MediosPago/bbva.png\", alt: \"BBVA\" },\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","\"use client\";\nimport React from \"react\";\nimport OraculoThemeProvider from \"../theme/OraculoThemeProvider\";\nimport { DocIdProvider } from \"../contexts/DocIdContext\";\n\nexport default function OraculoSectionHost({\n docId = \"Landing: home\",\n moduleId = 301,\n children,\n}: {\n docId?: string;\n moduleId?: number;\n children: React.ReactNode;\n}) {\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId} moduleId={moduleId}>\n {children}\n </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 title: \"Banners\",\n visible: true,\n id: 9,\n manualItems: [\n {\n fields: [\n {\n value: \"1\",\n id: \"abb2c3d6-d5c5-47ee-8ffa-c764a8bc731e\",\n type: \"string\",\n name: \"id\",\n isImage: false,\n required: true,\n },\n {\n id: \"549c02bf-56b5-4652-93d9-46b9451bac39\",\n type: \"string\",\n value: \"POR INICIAR\",\n required: false,\n isImage: false,\n name: \"label\",\n },\n {\n isImage: true,\n required: true,\n name: \"icon\",\n type: \"string\",\n id: \"c6538242-1974-4bed-aed3-703a111987b5\",\n maxSizeMB: 0.2,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/clock.svg\",\n },\n {\n name: \"iconHover\",\n isImage: true,\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756376881-icon1.png\",\n type: \"string\",\n id: \"8a5752de-6d6e-4ba7-b4a3-e001534d43a6\",\n maxSizeMB: 0.5,\n },\n {\n id: \"7d564f31-69ff-4f32-983b-46d28ced4a18\",\n type: \"string\",\n value: \"https://www.olimpo.bet/deportes#starting-soon\",\n required: false,\n isImage: false,\n name: \"href\",\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 2\n }\n ],\n id: \"724a1dc0-d55b-4443-a580-cad22e328536\",\n },\n {\n fields: [\n {\n value: \"2\",\n id: \"45c50e08-560e-42cb-8be1-e9722f69c8a0\",\n type: \"string\",\n name: \"id\",\n isImage: false,\n required: true,\n },\n {\n isImage: false,\n required: false,\n name: \"label\",\n type: \"string\",\n id: \"2eec0f3d-0126-4960-8ec0-17cc92b5eb43\",\n value: \"EXPLORAR\",\n },\n {\n name: \"icon\",\n isImage: true,\n required: true,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon2.svg\",\n maxSizeMB: 0.2,\n id: \"5530e6bd-d2b2-4045-9371-722e23d96e14\",\n type: \"string\",\n },\n {\n required: false,\n isImage: true,\n name: \"iconHover\",\n type: \"string\",\n id: \"42be2203-7dbf-418e-9181-9a2c022076ac\",\n maxSizeMB: 0.5,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756386124-icon2.png\",\n },\n {\n value: \"https://www.olimpo.bet/deportes#sports/a-z\",\n id: \"7e5375ad-ecbb-4354-868a-b9323bcfd053\",\n type: \"string\",\n name: \"href\",\n required: false,\n isImage: false,\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 1\n }\n ],\n id: \"ad0df0e2-c8ce-4524-b05a-2a29578aba11\",\n },\n {\n fields: [\n {\n id: \"fc35f393-6692-4d25-a534-d51f4bd6d9a2\",\n type: \"string\",\n value: \"3\",\n isImage: false,\n required: true,\n name: \"id\",\n },\n {\n id: \"a323e324-cf04-4178-b2c2-596d51564123\",\n type: \"string\",\n value: \"TOP JUEGOS\",\n required: false,\n isImage: false,\n name: \"label\",\n },\n {\n type: \"string\",\n id: \"6ede5815-7336-40fa-99f2-57ac6cb938cd\",\n maxSizeMB: 0.2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765981473501-icon3.svg\",\n required: true,\n isImage: true,\n name: \"icon\",\n },\n {\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756400282-icon3.png\",\n id: \"49c3a94a-dbb3-4a0a-9b03-cf04bcb2266f\",\n maxSizeMB: 0.5,\n type: \"string\",\n name: \"iconHover\",\n required: false,\n isImage: true,\n },\n {\n name: \"href\",\n required: false,\n isImage: false,\n value: \"https://www.olimpo.bet/casino\",\n id: \"26a486fd-31e6-4ed4-ab83-0f9a7bf6adc4\",\n type: \"string\",\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 5\n }\n ],\n id: \"966bc1fc-0b1a-4a50-a4a2-964262922c3d\",\n },\n {\n fields: [\n {\n id: \"fbec2c21-cf32-426f-910b-9c78a6cd714c\",\n type: \"string\",\n value: \"4\",\n required: true,\n isImage: false,\n name: \"id\",\n },\n {\n type: \"string\",\n id: \"2de80dbf-998b-4bc7-8383-4b69746ef155\",\n value: \"MISIONES\",\n isImage: false,\n required: false,\n name: \"label\",\n },\n {\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon3.svg\",\n type: \"string\",\n id: \"686c62bd-ea86-4aeb-97b7-6f1488912066\",\n maxSizeMB: 0.2,\n name: \"icon\",\n isImage: true,\n required: true,\n },\n {\n type: \"string\",\n maxSizeMB: 0.5,\n id: \"aac10c8d-7aac-4051-82ed-a88706a6f6dc\",\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773756409593-icon.png\",\n required: false,\n isImage: true,\n name: \"iconHover\",\n },\n {\n required: false,\n isImage: false,\n name: \"href\",\n id: \"4b72f490-75e4-458e-a4b5-68f0736a25d4\",\n type: \"string\",\n value: \"https://www.olimpo.bet/private/misiones\",\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 3\n }\n ],\n id: \"31e00ff9-f2dd-4942-bff3-919902fde880\",\n },\n ],\n dataMode: \"manual\",\n order: 1,\n manualScalarFields: [\n {\n isImage: false,\n required: false,\n name: \"groups\",\n id: \"7ee165a0-1268-4825-82df-9fef9857f535\",\n type: \"string\",\n value: \"\",\n },\n {\n value: \"\",\n id: \"46f65c34-d9c1-4aab-b9ad-171b295c40da\",\n type: \"boolean\",\n name: \"isPersonalize\",\n isImage: false,\n required: false,\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualItems2: [\n {\n fields: [\n {\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204037917-comercial-misiones.webp\",\n id: \"eea41214-3c26-41e9-a908-d87327147396\",\n name: \"desktopSrc\",\n isImage: true,\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n },\n {\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1080x840\",\n id: \"b393dfd3-c085-43e0-b68a-97cc04c06b6a\",\n validateDimensions: false,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\n isImage: true,\n name: \"mobileSrc\",\n },\n {\n required: false,\n dimensions: \"1440x400\",\n type: \"string\",\n maxSizeMB: 2,\n name: \"fallbackSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204045973-comercial-misiones.webp\",\n id: \"2616b944-7cd1-4919-bc56-38ddb1a3093b\",\n },\n {\n required: false,\n isImage: false,\n name: \"href\",\n id: \"54689f0e-f698-48a1-9d84-d13a397e24ea\",\n type: \"string\",\n value: \"\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"idFunction\",\n required : false,\n type : \"string\",\n value : \"deposito\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 1\n }\n ],\n id: \"13b35362-5695-4687-b6a8-645f8effd264\",\n },\n {\n fields: [\n {\n name: \"desktopSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204060818-captacion-nuevahome.png\",\n id: \"1ebab59e-f706-4795-81cb-7accfc9f33d7\",\n required: false,\n dimensions: \"1440x400\",\n type: \"string\",\n maxSizeMB: 2,\n },\n {\n id: \"bdebd1b0-d633-4b9e-9247-8e769cdc5b3b\",\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1774473125247-captacion-nuevahomemobile4.png\",\n validateDimensions: false,\n isImage: true,\n name: \"mobileSrc\",\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1080x840\",\n required: false,\n },\n {\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773204124958-captacion-nuevahome.png\",\n id: \"4bc20da7-b769-43dd-ba2e-ee9261ec73d7\",\n name: \"fallbackSrc\",\n isImage: true,\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n },\n {\n value: \"\",\n id: \"b85e737d-97ec-430c-b819-ba6e91a25372\",\n type: \"string\",\n name: \"href\",\n isImage: false,\n required: false,\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 2\n }\n ],\n id: \"024f8130-91e1-4296-b826-cffa32ab1a96\",\n },\n {\n fields: [\n {\n id: \"28a44fd4-2f36-491e-a026-d797891eb420\",\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307101474-ftd_web_asesorlu.jpg\",\n isImage: true,\n name: \"desktopSrc\",\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n },\n {\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1080x840\",\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307108379-ftd_mobile_asesorlu.jpg\",\n id: \"9ddef07e-6c33-44c6-a9de-3045bcce0a64\",\n name: \"mobileSrc\",\n isImage: true,\n },\n {\n dimensions: \"1440x400\",\n required: false,\n maxSizeMB: 2,\n type: \"string\",\n name: \"fallbackSrc\",\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307112560-ftd_web_asesorlu.jpg\",\n validateDimensions: false,\n id: \"9043d645-9494-4bb8-9706-e740a3c4aecb\",\n },\n {\n name: \"href\",\n required: false,\n isImage: false,\n value: \"https://www.olimpo.bet/descargar-app\",\n type: \"string\",\n id: \"52f1a69c-9c7d-4e3e-95b7-568f885fc653\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 7\n }\n ],\n id: \"cdfce77c-a814-43f1-911d-3715803252c2\",\n },\n {\n fields: [\n {\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1440x400\",\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773203978730-nuevahomedesktop_asesorpersonalizado.jpg\",\n validateDimensions: false,\n id: \"0a19727d-a6bd-4f3b-83b6-dc40be8f6790\",\n name: \"desktopSrc\",\n isImage: true,\n },\n {\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1080x840\",\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1772833893358-nueva-home-mobile_asesorlcas.jpg\",\n validateDimensions: false,\n id: \"3ca28d62-53c0-4269-8ecf-ddbbe493db56\",\n name: \"mobileSrc\",\n isImage: true,\n },\n {\n required: false,\n dimensions: \"1440x400\",\n type: \"string\",\n maxSizeMB: 2,\n name: \"fallbackSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773203997327-nuevahomedesktop_asesorpersonalizado.jpg\",\n id: \"241c4be2-2f91-4c92-a0ef-d2013941a7de\",\n },\n {\n value:\n \"https://www.olimpo.bet/promociones/Marzo_PromoRecarga4500ASESOR_IBK_BCP_BBVA\",\n id: \"bed09e2d-31f7-42db-88be-8ca1f2354e92\",\n type: \"string\",\n name: \"href\",\n isImage: false,\n required: false,\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-13T10:45\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-14T12:15\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 3\n }\n ],\n id: \"b3816989-ffeb-4409-bc0a-46310867097c\",\n },\n {\n fields: [\n {\n type: \"string\",\n maxSizeMB: 2,\n required: false,\n dimensions: \"1440x400\",\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773778766147-bannerweb_nuevomerch1920x460.png\",\n id: \"1e4be1ce-774b-48ff-89db-f6148d1ce4a8\",\n name: \"desktopSrc\",\n isImage: true,\n },\n {\n required: false,\n dimensions: \"1080x840\",\n type: \"string\",\n maxSizeMB: 2,\n name: \"mobileSrc\",\n isImage: true,\n validateDimensions: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773778933662-bannermobile_nuevomerch1080x840.png\",\n id: \"05b790ea-cba0-4592-868a-b5e4cde116c3\",\n },\n {\n maxSizeMB: 2,\n type: \"string\",\n dimensions: \"1440x400\",\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773778926345-bannerweb_nuevomerch1920x460.png\",\n validateDimensions: false,\n id: \"b1ee5a81-f713-4b7c-882c-41088776fe09\",\n name: \"fallbackSrc\",\n isImage: true,\n },\n {\n name: \"href\",\n isImage: false,\n required: false,\n value: \"https://www.clubolimpo.com/OlimpoBetWeb/\",\n type: \"string\",\n id: \"bf9a05f4-d4e3-4c7b-8bab-e5a734aa4091\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-13T10:45\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-14T11:50\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 4\n }\n ],\n id: \"2e3e6afd-bbd3-4bbd-b6e7-0eba50e556d4\",\n },\n {\n fields: [\n {\n required: false,\n isImage: true,\n dimensions: \"1440x400\",\n name: \"desktopSrc\",\n type: \"string\",\n id: \"35672057-20b1-48f6-b57e-8177c7ffb50c\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773931330007-sorteoiphonebannerhomedesktop_1920x460.png\",\n },\n {\n type: \"string\",\n id: \"dfe3c031-0577-499e-95f4-2a47363710c7\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773931336253-sorteoiphonebannerhomemobile_1080x840.png\",\n required: false,\n isImage: true,\n dimensions: \"1080x840\",\n name: \"mobileSrc\",\n },\n {\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1773931341960-sorteoiphonebannerhomedesktop_1920x460.png\",\n type: \"string\",\n maxSizeMB: 2,\n id: \"aac633b9-d6d3-45be-b93a-1aa73e486ed6\",\n name: \"fallbackSrc\",\n required: false,\n isImage: true,\n dimensions: \"1440x400\",\n },\n {\n name: \"href\",\n required: false,\n isImage: false,\n value: \"https://www.olimpo.bet/private/club-olimpo\",\n type: \"string\",\n id: \"0dd06091-c954-4b2a-9e74-76c98a2f95d6\",\n },\n {\n id: \"5a6d8750-9087-404f-8388-a2c8ea74baf2\",\n isImage:false,\n name: \"startAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-13T10:45\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d726bbb2\",\n isImage:false,\n name: \"endAt\",\n required : false,\n type : \"string\",\n value : \"2026-04-14T12:15\"\n },\n {\n id: \"fa9c467f-4f33-4bee-b502-a413d7212321\",\n isImage:false,\n name: \"order\",\n required : false,\n type : \"number\",\n value : 5\n }\n ],\n id: \"706ea8a2-46ae-4fd9-8b42-5879a903a006\",\n },\n ],\n variableName2: \"backgrounds\",\n variableName: \"items\",\n componentKey: \"OraculoSeccionBanners\",\n },\n {\n dataMode: \"url\",\n id: 3,\n visible: true,\n apiUrl:\n \"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 title: \"Eventos de la semana\",\n apiMethod: \"GET\",\n componentKey: \"OraculoSeccionEventoSemana\",\n apiParams: [],\n variableName: \"items\",\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualScalarFields: [\n {\n required: false,\n name: \"title\",\n type: \"string\",\n id: \"7a3de844-5727-4043-be42-7f965e2aa249\",\n value: \"Eventos esta semana\",\n isUrl: false,\n },\n {\n id: \"2895f65f-e75b-4116-958d-04d4c34f16fe\",\n type: \"string\",\n isUrl: true,\n value: \"\",\n required: false,\n name: \"iconUrl\",\n },\n {\n required: false,\n name: \"onViewMore\",\n type: \"function\",\n id: \"d973d3ee-721e-4d76-888c-6ad8b7bb3414\",\n value: \"\",\n isUrl: false,\n },\n {\n value: \"\",\n isUrl: false,\n id: \"c062fe02-c069-49fb-aae6-d39aa3fde89c\",\n type: \"string\",\n name: \"className\",\n required: false,\n },\n ],\n order: 2,\n },\n {\n dataMode: \"url\",\n id: 4,\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n visible: true,\n title: \"Casino\",\n // apiMethod: \"GET\",\n componentKey: \"OraculoSeccionCasino\",\n variableName: \"items\",\n apiParams: [\n {\n id: \"2af22a50-07e2-4a48-8569-90c79827f3e7\",\n value: \"OLI\",\n key: \"company\",\n },\n {\n id: \"efa2def8-eeb4-4fcc-80f6-32c24e7804e6\",\n value: \"HOME_CASINO\",\n key: \"lobby\",\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualScalarFields: [\n {\n name: \"title\",\n required: true,\n isImage: false,\n value: \"Casino\",\n id: \"c2046b5a-4d30-46ff-9513-e15a6e0b0a7e\",\n type: \"string\",\n },\n {\n maxSizeMB: 0.2,\n id: \"9c5964ca-ce84-4c47-86ec-b34d7f3a5793\",\n type: \"string\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Casino/diamante.svg\",\n isImage: true,\n required: true,\n name: \"iconUrl\",\n },\n {\n name: \"mosaicFirst\",\n required: false,\n isImage: false,\n value: true,\n type: \"boolean\",\n id: \"1c32ea69-598b-4f80-81e4-709d887c12c1\",\n },\n {\n type: \"number\",\n id: \"5c3c60eb-cf49-4083-ab83-67d65f829554\",\n value: 4,\n isImage: false,\n required: false,\n name: \"gridSize\",\n },\n {\n required: false,\n isImage: false,\n name: \"groups\",\n type: \"string\",\n id: \"c4d4c4b9-0c93-4aca-a61f-042e52fd9254\",\n value: \"\",\n },\n ],\n order: 3,\n },\n {\n apiMethod: \"GET\",\n id: 1,\n dataMode: \"url\",\n title: \"Eventos Combinadas\",\n visible: true,\n apiUrl:\n \"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 updatedAt: \"2026-03-19T14:43:05.680Z\",\n order: 4,\n manualScalarFields: [\n {\n id: \"33e5944d-b5be-4971-8c10-65aa6b71051c\",\n type: \"string\",\n value: \"Combinadas\",\n isImage: false,\n required: true,\n name: \"title\",\n },\n {\n name: \"iconUrl\",\n dimensions: \"40x40\",\n isImage: true,\n required: false,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765894618836-frame181009.svg\",\n id: \"95cd1489-206c-4a72-b4bd-b65161089f73\",\n maxSizeMB: 0.2,\n type: \"string\",\n },\n {\n required: false,\n isImage: false,\n name: \"className\",\n type: \"string\",\n id: \"af234a92-41ad-4ff1-bfbb-ac63a9af19f7\",\n value: \"\",\n },\n {\n value: \"\",\n id: \"52f226c8-6456-4395-b72d-d140af6fa46d\",\n type: \"string\",\n name: \"groups\",\n isImage: false,\n required: false,\n },\n ],\n componentKey: \"OraculoSeccionEventoCombinadas\",\n apiParams: [],\n variableName: \"items\",\n },\n {\n dataMode: \"url\",\n id: 2,\n visible: true,\n apiUrl:\n '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 title: \"Eventos en vivo\",\n apiMethod: \"GET\",\n componentKey: \"OraculoSeccionEventoEnVivo\",\n apiParams: [],\n variableName: \"items\",\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualScalarFields: [\n {\n id: \"7fc591db-555b-49b2-a3ad-30aa66eff17b\",\n type: \"string\",\n value: \"En vivo\",\n isImage: false,\n required: true,\n name: \"title\",\n },\n {\n required: false,\n isImage: true,\n name: \"iconUrl\",\n id: \"db4b6355-ed6c-4265-ad78-d8fffb660997\",\n maxSizeMB: 0.2,\n type: \"string\",\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1771339214517-dotrecordinglightred.gif\",\n },\n {\n id: \"a16ab6c6-321c-4ebe-bd36-a85ad49edf3e\",\n type: \"string\",\n value: \"\",\n required: false,\n isImage: false,\n name: \"className\",\n },\n {\n type: \"string\",\n id: \"48a911bf-94d7-4c92-beb8-551c24498411\",\n value: \"\",\n required: false,\n isImage: false,\n name: \"groups\",\n },\n ],\n order: 5,\n },\n {\n title: \"Bono Bienvenida\",\n visible: false,\n id: 11,\n manualItems: [\n {\n fields: [\n {\n required: true,\n name: \"title\",\n type: \"string\",\n id: \"e015fc5e-983e-4096-b82e-6d5ed9957dd5\",\n value: \"Recibe\",\n isUrl: false,\n },\n {\n name: \"amount\",\n required: false,\n value: \"S/60\",\n isUrl: false,\n type: \"string\",\n id: \"00b69888-d8ee-4bae-943c-be4e0dead26b\",\n },\n {\n value: \"SIN ROLLOVER\",\n isUrl: false,\n id: \"376cd731-4a20-4435-a5ee-351ac55d4351\",\n type: \"string\",\n name: \"subtitle\",\n required: false,\n },\n {\n isUrl: false,\n value: \"Hazlo aquí\",\n id: \"3b73cff5-cb30-4b00-9b41-305455334e56\",\n type: \"string\",\n name: \"buttonText\",\n required: true,\n },\n {\n required: true,\n name: \"backgroundImage\",\n id: \"89710b59-2a6a-4de8-be9a-7d9274bad84b\",\n type: \"string\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n isUrl: true,\n },\n {\n isUrl: false,\n value:\n \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\n id: \"e7ceaadc-b203-4587-856b-b9015201a43f\",\n type: \"function\",\n name: \"onButtonClick\",\n required: false,\n },\n ],\n id: \"8677b338-7d12-4ba9-a95f-d34ed71d92b0\",\n },\n {\n id: \"6707ce1d-064a-43af-8679-712c7235873a\",\n fields: [\n {\n name: \"title\",\n required: true,\n isUrl: false,\n value: \"Regístrate y recibe\",\n type: \"string\",\n id: \"81e1730c-0f9b-4ab9-a4df-f36c974ae99d\",\n },\n {\n type: \"string\",\n id: \"c1e96d9b-e7c7-4bb7-a8db-b67c32dcae32\",\n isUrl: false,\n value: \"S/40\",\n required: false,\n name: \"amount\",\n },\n {\n value: \"SIN ROLLOVER\",\n isUrl: false,\n id: \"93242ead-5f09-4966-9484-471b27859c31\",\n type: \"string\",\n name: \"subtitle\",\n required: false,\n },\n {\n id: \"0d97802b-7aaf-4ae3-b513-8a5a469e5d5d\",\n type: \"string\",\n isUrl: false,\n value: \"Hazlo aquí\",\n required: true,\n name: \"buttonText\",\n },\n {\n id: \"541fcdc8-07a7-47b8-9a33-d22cb865823c\",\n type: \"string\",\n isUrl: true,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\n required: true,\n name: \"backgroundImage\",\n },\n {\n type: \"function\",\n id: \"b8c4b96c-0807-4040-8c3e-8392fb278aab\",\n value:\n \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\n isUrl: false,\n required: false,\n name: \"onButtonClick\",\n },\n ],\n },\n ],\n dataMode: \"manual\",\n manualScalarFields: [\n {\n name: \"headline\",\n required: false,\n value: \"Te damos la\",\n isUrl: false,\n id: \"fec2252c-2c2d-448d-8775-9d073bd8def9\",\n type: \"string\",\n },\n {\n required: false,\n name: \"headline2\",\n id: \"17e045d1-8ddb-46bc-b3ae-ae0c7ffc5952\",\n type: \"string\",\n isUrl: false,\n value: \"bienvenida al club\",\n },\n {\n type: \"string\",\n id: \"cae601b0-ed5d-4b97-9e1f-1816d7986c6b\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondobg.png\",\n isUrl: true,\n required: false,\n name: \"backgroundImageUrl\",\n },\n ],\n order: 6,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n variableName: \"items\",\n componentKey: \"OraculoSeccionBonoBienvenida\",\n },\n {\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n visible: true,\n title: \"Casino en vivo\",\n id: 12,\n dataMode: \"url\",\n apiMethod: \"POST\",\n apiParams: [\n {\n id: \"2822fa64-0e89-43ea-9c80-ee77076c95bd\",\n value: \"OLI\",\n key: \"company\",\n },\n {\n id: \"2d6f8267-0468-4320-976d-b01df40e8ca3\",\n value: \"HOME_CASINOENVIVO\",\n key: \"lobby\",\n },\n ],\n variableName: \"items\",\n componentKey: \"OraculoSeccionCasinoEnVivo\",\n manualScalarFields: [\n {\n required: true,\n isImage: false,\n name: \"title\",\n type: \"string\",\n id: \"52e655b4-7259-4f7f-9017-dafe24247810\",\n value: \"Casino en vivo\",\n },\n {\n name: \"subtitle\",\n isImage: false,\n required: false,\n value:\n \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\",\n type: \"string\",\n id: \"e299d500-abdc-4577-bb38-1943b6f02dfd\",\n },\n {\n name: \"backgroundMobileUrl\",\n isImage: true,\n required: false,\n value:\n \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoMobile.png\",\n maxSizeMB: 2,\n id: \"6dcfd666-c2db-4a19-9fbf-08167bf56ae0\",\n type: \"string\",\n },\n {\n type: \"string\",\n id: \"2aa55855-0865-4cf1-a1ee-e52db864c6b4\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1771942936688-fondo3.1.webp\",\n isImage: true,\n required: false,\n name: \"backgroundDesktopUrl\",\n },\n {\n required: false,\n isImage: false,\n name: \"groups\",\n id: \"e1599845-59d4-4320-903b-3857453b4322\",\n type: \"string\",\n value: \"\",\n },\n ],\n order: 7,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n },\n {\n apiMethod: \"GET\",\n visible: true,\n title: \"Virtuales\",\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n dataMode: \"url\",\n id: 7,\n order: 8,\n manualScalarFields: [\n {\n name: \"title\",\n required: true,\n isImage: false,\n value: \"Virtuales\",\n id: \"f6b16510-51db-4124-864d-2d12a0bb1b23\",\n type: \"string\",\n },\n {\n type: \"string\",\n maxSizeMB: 0.2,\n id: \"f9686ddc-f673-4784-8025-df26f48cc04f\",\n value:\n \"https://stg-www.contodobet.com/static/img/landing/Virtuales/virtuales.svg\",\n isImage: true,\n required: true,\n name: \"iconUrl\",\n },\n {\n isImage: false,\n required: false,\n name: \"mosaicFirst\",\n id: \"4c4f348c-cb17-4fd6-bc4d-f816a42da249\",\n type: \"boolean\",\n value: true,\n },\n {\n type: \"number\",\n id: \"c264c9c3-7178-4961-b366-163d9b818800\",\n value: 4,\n isImage: false,\n required: false,\n name: \"gridSize\",\n },\n {\n value: \"\",\n type: \"string\",\n id: \"2310900e-68ce-4a64-89da-e0976d172fee\",\n name: \"groups\",\n required: false,\n isImage: false,\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n variableName: \"items\",\n apiParams: [\n {\n id: \"de915e1d-1742-4383-bd83-ed96fda1145a\",\n value: \"OLI\",\n key: \"company\",\n },\n {\n key: \"lobby\",\n value: \"HOME_VIRTUALES\",\n id: \"039b41a3-4e94-4a52-8798-e78d8651c090\",\n },\n ],\n componentKey: \"OraculoSeccionVirtuales\",\n },\n {\n apiMethod: \"GET\",\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\n visible: true,\n title: \"Oraculo Seccion Top Juegos\",\n id: 13,\n dataMode: \"url\",\n manualScalarFields: [\n {\n name: \"title\",\n required: true,\n isImage: false,\n value: \"Top juegos\",\n type: \"string\",\n id: \"a01c36e7-a551-4c92-89e0-e9eabcdbe344\",\n },\n {\n name: \"iconUrl\",\n required: true,\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307302930-top.webp\",\n type: \"string\",\n id: \"1960df1d-b07e-4461-b55f-39834ac30d8e\",\n maxSizeMB: 0.2,\n },\n {\n value: \"\",\n type: \"string\",\n id: \"63dab0f6-b4d1-47af-b1e7-d3dcf4c69c4e\",\n name: \"groups\",\n required: false,\n isImage: false,\n },\n ],\n order: 9,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n apiParams: [\n {\n id: \"2bcfd8cd-8f1f-474f-beb4-170477acf9bd\",\n key: \"company\",\n value: \"OLI\",\n },\n {\n value: \"HOME_TOPJUEGOS\",\n key: \"lobby\",\n id: \"dac0b2d9-f00d-4979-9deb-31c6f66b1899\",\n },\n ],\n variableName: \"items\",\n componentKey: \"OraculoSeccionTopJuegos\",\n },\n {\n dataMode: \"url\",\n id: 6,\n title: 'Promociones \"Lo nuevo\"',\n visible: true,\n apiUrl: \"https://wallet-pe.olimpo.bet/api/contents/getPromotionsLobby\",\n apiMethod: \"GET\",\n componentKey: \"OraculoSeccionDestacados\",\n variableName: \"items\",\n apiParams: [\n {\n id: \"a2ee1b32-dc39-434f-9358-920e6c7bba0b\",\n key: \"company\",\n value: \"OLI\",\n },\n {\n id: \"16715513-30a1-4955-8e94-a4deee4722ba\",\n value: \"DESTACADOS\",\n key: \"lobby\",\n },\n ],\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n order: 10,\n manualScalarFields: [\n {\n type: \"string\",\n id: \"f131acc5-a298-4583-9952-c0747dc1f1af\",\n value: \"Lo nuevo\",\n isImage: false,\n required: true,\n name: \"title\",\n },\n {\n name: \"iconUrl\",\n required: true,\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307276612-lonuevo.webp\",\n id: \"8f0dadc8-ff0f-4074-870f-2bbcd9f38cab\",\n maxSizeMB: 0.2,\n type: \"string\",\n },\n {\n isImage: false,\n required: false,\n name: \"className\",\n id: \"39cd368d-0003-4145-88a9-f22b1a4ef32b\",\n type: \"string\",\n value: \"\",\n },\n {\n id: \"a9e218fd-9cc6-432f-a7bf-c119581e6927\",\n type: \"string\",\n value: \"\",\n isImage: false,\n required: false,\n name: \"groups\",\n },\n ],\n },\n {\n title: \"Club Olimpo\",\n visible: true,\n id: 8,\n manualItems: [\n {\n fields: [\n {\n value: \"¡Canjea bonos, productos y las mejores experiencias!\",\n type: \"string\",\n id: \"65b37bc4-f480-4409-afd7-ff8b83c722e0\",\n name: \"text\",\n isImage: false,\n required: true,\n },\n {\n isImage: false,\n required: false,\n name: \"buttonLabel\",\n type: \"string\",\n id: \"cdc8fb20-5c5a-4165-93be-4df1026cdcee\",\n value: \"Vamos\",\n },\n {\n name: \"imgAlt\",\n isImage: false,\n required: false,\n value: \"\",\n id: \"9f25442e-caeb-4fab-9bea-b91f1aef97eb\",\n type: \"string\",\n },\n {\n name: \"imgMobile\",\n required: true,\n isImage: true,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307329736-clubolimpo-mobile.webp\",\n type: \"string\",\n maxSizeMB: 2,\n id: \"259ffa74-7e4f-48e6-90da-4837f2c37fe9\",\n },\n {\n type: \"string\",\n id: \"e7812141-42d8-419f-9d15-b8711139e980\",\n maxSizeMB: 2,\n value:\n \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1770307339455-clubolimpo.webp\",\n isImage: true,\n required: false,\n name: \"imgDesktopBg\",\n },\n {\n value:\n \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/Logo.png\",\n type: \"string\",\n maxSizeMB: 0.2,\n id: \"622d860b-9f9f-462a-a675-3768d6daf3c3\",\n name: \"imgDesktopLogo\",\n required: false,\n isImage: true,\n },\n ],\n id: \"03e20297-c0fa-4382-85b2-54eaa9325be1\",\n },\n ],\n dataMode: \"manual\",\n manualScalarFields: [\n {\n name: \"groups\",\n isImage: false,\n required: false,\n value: \"\",\n id: \"3b00e159-6da9-4c45-8382-47d54db59181\",\n type: \"string\",\n },\n ],\n order: 11,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n manualItems2: [],\n variableName: \"items\",\n componentKey: \"OraculoSeccionClubOlimpo\",\n },\n {\n order: 12,\n updatedAt: \"2026-03-19T14:43:05.680Z\",\n visible: true,\n title: \"Medios de Pago\",\n id: 10,\n componentKey: \"OraculoSeccionMediosPago\",\n },\n ],\n settings: {\n priority: 6,\n landingName: \"home\",\n groups: [\n \"604404\",\n \"604405\",\n \"604406\",\n \"604407\",\n \"604408\",\n \"604409\",\n \"542172\",\n ],\n isActive: true,\n isDefault: false,\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 manualScalarFields: c.manualScalarFields,\n variableName2: c.variableName2,\n manualItems2: c.manualItems2,\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: any }[];\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\n\n \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 /** Module id (default 301) */\n moduleId?: number;\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 SectionErrorBoundaryProps = {\n section: OraculoPageLandingPreviewSection;\n children: React.ReactNode;\n fallback?: React.ReactNode;\n};\n\ntype SectionErrorBoundaryState = {\n hasError: boolean;\n};\n\nclass SectionErrorBoundary extends React.Component<\n SectionErrorBoundaryProps,\n SectionErrorBoundaryState\n> {\n constructor(props: SectionErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, info: any) {\n console.error(\"[landing] sección que falló:\", {\n id: this.props.section.id,\n title: this.props.section.title,\n componentKey: this.props.section.componentKey,\n error,\n info,\n });\n }\n\n render() {\n if (this.state.hasError) return null;\n return this.props.children;\n }\n}\n\nconst noMostrarSinItems = [\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n];\n\nconst OraculoPageLandingPreview: React.FC<OraculoPageLandingPreviewProps> = ({\n sectionsOverride,\n docId = \"Landing: home\",\n moduleId = 301,\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 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 const fallbackSections = useMemo(\n () => normalizeLandingJsonToSections(LANDING_FALLBACK_JSON),\n []\n );\n\n const findFallbackSection = (\n section: OraculoPageLandingPreviewSection\n ): OraculoPageLandingPreviewSection | undefined => {\n return fallbackSections.find(\n (f) => f.id === section.id || f.componentKey === section.componentKey\n );\n };\n\n const normalizeNumberArray = (arr: unknown): number[] => {\n if (!Array.isArray(arr)) return [];\n return arr\n .map((x) => Number(x))\n .filter((x) => !Number.isNaN(x));\n };\n\n const userGroups = useMemo<number[]>(() => {\n const user = extrasObj[\"user\"] as { groups?: unknown } | undefined;\n return normalizeNumberArray(user?.groups);\n }, [extrasObj]);\n\n const getSectionGroupsFromManualScalars = (\n section: OraculoPageLandingPreviewSection\n ): number[] => {\n const fields = section.manualScalarFields;\n if (!Array.isArray(fields)) return [];\n\n const groupField = fields.find(\n (f) => String(f?.name || \"\").trim().toLowerCase() === \"groups\"\n );\n\n if (!groupField) return [];\n\n const rawValue = groupField.value;\n\n if (rawValue == null) return [];\n\n // si por alguna razón viniera array\n if (Array.isArray(rawValue)) {\n return rawValue\n .map((x) => Number(String(x).trim()))\n .filter((x) => !Number.isNaN(x));\n }\n\n const text = String(rawValue).trim();\n if (!text) return [];\n\n return text\n .split(\",\")\n .map((x) => Number(x.trim()))\n .filter((x) => !Number.isNaN(x));\n };\n\n const canShowSectionByGroups = (\n section: OraculoPageLandingPreviewSection,\n userGroupsArg: number[]\n ): boolean => {\n const sectionGroups = getSectionGroupsFromManualScalars(section);\n\n // si no trae groups o viene vacío -> mostrar\n if (sectionGroups.length === 0) return true;\n\n // si la sección sí exige groups, pero el user no tiene groups -> no mostrar\n if (!Array.isArray(userGroupsArg) || userGroupsArg.length === 0) return false;\n\n const userGroupSet = new Set(userGroupsArg);\n return sectionGroups.some((group) => userGroupSet.has(group));\n };\n\n // Fetch sections from Firestore unless override provided\n useEffect(() => {\n if (sectionsOverride) return;\n\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\n const toLoad = effectiveSections\n .map((s) => s.componentKey)\n .filter((key) => !!key);\n\n if (toLoad.length === 0) return;\n }, [sectionsOverride, sections]);\n\n const fetchSectionData = async (\n section: OraculoPageLandingPreviewSection\n ): Promise<SectionPayload> => {\n if (noMostrarSinItems.includes(section.componentKey)) {\n return {\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 .filter((s) => canShowSectionByGroups(s, userGroups))\n .sort((a, b) => a.order - b.order),\n [effectiveSections, userGroups]\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\n return items.map((it) => {\n const obj: Record<string, unknown> = {};\n\n for (const f of it.fields || []) {\n const t = (f.type || \"string\").toLowerCase();\n\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 {\n obj[f.name] = f.value;\n }\n }\n\n return obj;\n });\n };\n\n const toManualScalars = (\n fields: { name: string; type: string; value: any }[] | undefined\n ): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n if (!Array.isArray(fields)) return out;\n\n for (const f of fields) {\n if (!f.name) continue;\n const t = (f.type || \"string\").toLowerCase();\n\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 {\n out[f.name] = f.value;\n }\n }\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 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\n if (noMostrarSinItems.includes(s.componentKey)) {\n return { items: payload, ...compProps, ...scalars };\n }\n\n compProps = { ...compProps, ...scalars };\n\n if (hasUrl) {\n 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 s.variableName\n );\n\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 buildEmptyProps = (\n s: OraculoPageLandingPreviewSection\n ): Record<string, unknown> => {\n const out: Record<string, unknown> = s.props ? { ...s.props } : {};\n\n try {\n Object.assign(out, toManualScalars(s.manualScalarFields));\n } catch (e) {\n console.error(\"❌ Error armando scalars vacíos:\", s, e);\n }\n\n const propName = (s.variableName || \"items\").trim() || \"items\";\n if (typeof out[propName] === \"undefined\") {\n out[propName] = [];\n }\n\n if (s.variableName2) {\n const propName2 = (s.variableName2 || \"items2\").trim() || \"items2\";\n if (typeof out[propName2] === \"undefined\") {\n out[propName2] = [];\n }\n }\n\n return out;\n };\n\n const buildCompPropsSafe = (\n s: OraculoPageLandingPreviewSection\n ): Record<string, unknown> => {\n try {\n return buildCompProps(s);\n } catch (error) {\n console.error(\"🔥 ERROR EN buildCompProps:\", s, error);\n\n const fallbackSection = findFallbackSection(s);\n\n if (fallbackSection && fallbackSection !== s) {\n try {\n console.warn(\n `[landing] usando fallback local para sección ${s.title} (${s.componentKey})`\n );\n return buildCompProps(fallbackSection);\n } catch (fallbackError) {\n console.error(\"🔥 ERROR EN fallback buildCompProps:\", fallbackSection, fallbackError);\n }\n }\n\n return buildEmptyProps(s);\n }\n };\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\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 const Comp = LandingComponents[rawKey];\n\n const fullBleedComponents = new Set([\n \"OraculoSeccionBanners\",\n \"OraculoSeccionBonoBienvenida\",\n \"OraculoSeccionCasinoEnVivo\",\n \"OraculoSeccionClubOlimpo\",\n ...(!isDesktop\n ? [\n \"OraculoSeccionEventoEnVivo\",\n \"OraculoSeccionEventoSemana\",\n \"OraculoSeccionEventoCombinadas\",\n \"OraculoSeccionVirtuales\",\n \"OraculoSeccionDestacados\",\n \"OraculoSeccionCasino\",\n ]\n : []),\n ]);\n\n const isFullBleed = fullBleedComponents.has(s.componentKey);\n const paddingX = isDesktop ? 120 : 24;\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 ...(isNoStackSpacing\n ? {\n marginTop: -stackGapPx,\n marginBottom: -stackGapPx,\n }\n : {}),\n };\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 }\n\n if (errorSec && !payload) {\n const fallbackSection = findFallbackSection(s);\n\n if (fallbackSection && fallbackSection.dataMode === \"manual\") {\n try {\n const fallbackProps = buildCompPropsSafe(fallbackSection);\n\n return (\n <div key={s.id} style={wrapperStyle} className=\"oraculo-section-wrapper\">\n <Comp {...fallbackProps} />\n </div>\n );\n } catch (fallbackRenderError) {\n console.error(\n \"🔥 ERROR renderizando fallback manual de sección:\",\n fallbackSection,\n fallbackRenderError\n );\n }\n }\n\n return renderStatusBox(\n s.id,\n \"error\",\n `Error cargando ${s.apiUrl}: ${errorSec}`\n );\n }\n }\n\n const baseProps = buildCompPropsSafe(s);\n\nconst compProps =\n s.componentKey === \"OraculoSeccionClubOlimpo\"\n ? {\n ...baseProps,\n user: extrasObj[\"user\"],\n }\n : baseProps;\n // const wrapperStyle = getWrapperStyle(s, rawKey);\n\n // console.log(\"[landing] intentando render:\", {\n // id: s.id,\n // title: s.title,\n // componentKey: s.componentKey,\n // });\n\n return (\n <SectionErrorBoundary section={s}>\n <div\n key={s.id}\n style={wrapperStyle}\n className=\"oraculo-section-wrapper\"\n >\n <Comp {...compProps} />\n </div>\n </SectionErrorBoundary>\n );\n };\n\n const renderSectionSafe = (section: OraculoPageLandingPreviewSection) => {\n return (\n <SectionErrorBoundary\n key={section.id}\n section={section}\n fallback={renderStatusBox(\n section.id,\n \"error\",\n `La sección \"${section.title}\" falló al renderizar`\n )}\n >\n {renderSingleSection(section)}\n </SectionErrorBoundary>\n );\n };\n\n if (loading && !sectionsOverride) {\n return Loader ? <Loader /> : <div>Cargando...</div>;\n }\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\n // if (disableWrapper) {\n // return (\n // <OraculoThemeProvider>\n // <DocIdProvider docId={docId} moduleId={moduleId}>\n // <>{orderedVisible.map((section) => {\n // try {\n // return renderSingleSection(section);\n // } catch (error) {\n // console.error(\"🔥 ERROR EN SECTION:\", section, error);\n // return null;\n // }\n // })}</>\n // </DocIdProvider>\n // </OraculoThemeProvider>\n // );\n // }\n\n return (\n <OraculoThemeProvider>\n <DocIdProvider docId={docId} moduleId={moduleId}>\n <Container\n className=\"oli-font\"\n maxWidth={false}\n disableGutters\n sx={{\n backgroundColor: \"#121212\",\n position: \"relative\",\n pb: 5,\n width: \"100%\",\n maxWidth: \"100%\",\n overflowX: \"hidden\",\n }}\n >\n <Stack direction=\"column\" spacing={isDesktop ? 8 : 5} useFlexGap>\n {orderedVisible.map((section) => {\n try {\n return renderSingleSection(section);\n } catch (error) {\n console.error(\"🔥 ERROR EN SECTION:\", section, error);\n return null;\n }\n })}\n </Stack>\n </Container>\n </DocIdProvider>\n </OraculoThemeProvider>\n );\n};\n\nexport default OraculoPageLandingPreview;"],"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","DocIdContext","createContext","DocIdProvider","docId","moduleId","useDocContext","context","useContext","useDocId","useModuleId","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","paddingMobile","carouselRef","navState","setNavState","isLoading","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","sectionClassName","isMobile","useMediaQuery","itemsLength","ChevronLeftRounded","ChevronRightRounded","KEY","getStore","g","setOraculoExtras","extrasObj","getOraculoExtra","key","clearOraculoExtras","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","top6","handleOpen","juego","showIframe","loadMachine","RECOMMENDATIONS_URL","mapMachineToGameItem","_j","_k","_l","_m","_n","extractMachineIds","payload","id","getPersonalizeUserId","user","fetchRecommendations","productType","userId","qs","res","data","fetchRanking","machineIds","body","usePersonalizeGameItems","isPersonalize","resolvedItems","setResolvedItems","setLoading","cancelled","recommendationsPayload","rankedItems","rankedMachineIds","machineResults","machineId","parsedItems","result","orderedItems","rankedItem","error","usePersonalizeCasinoItems","usePersonalizeVirtualesItems","usePersonalizeCasinoEnVivoItems","getGameId","idx","parseBooleanValue","input","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","personalizeEnabled","currentItems","handleOpenLive","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","end","OraculoSeccionCasino","onItemClick","buildLoadingSlides","mkItems","n","itm","game","buildVirtualSlides","buildLoadingVirtualSlides","OraculoSeccionVirtuales","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","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","getMarketPlaceUrl","resolvedUser","localUserRaw","response","jsonResponse","handleRedirect","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","groupIds","SPECIALS_URL","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","useLazyJerseys","visibleRange","buffer","debounceMs","jerseys","setJerseys","pendingRef","requestIdRef","debounceTimerRef","lastRangeRef","from","to","finalFrom","finalTo","prev","idsToFetch","ev","requestId","next","numId","returnedIds","filterFootballEvents","blocked","sport","group","word","MemoizedCard","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","setVisibleRange","orderedEventIds","setOrderedEventIds","orderIdsFetchedRef","orderMapRef","loadData","orderJson","ids","newMap","err","filteredEvents","sortedEvents","aIndex","bIndex","interval","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","PERU_UTC_OFFSET_MINUTES","hasTimezoneInfo","parsePeruDateToUtcMs","ms","match","y","m","d","hh","mm","ss","isBannerVisibleByDate","banner","nowMs","fields","startAt","f","endAt","startMs","endMs","OraculoSeccionBanners","backgrounds","hideItems","activeDot","setActiveDot","setNowMs","setDepositActionGlobal","sortByOrder","orderA","orderB","sortedItems","visibleBackgrounds","filtered","totalDots","canNavigate","showDock","ARROW_COLOR","arrowSx","carouselOptions","handleBannerClick","bg","hasFunction","hasHref","bannerName","handleMenuItemClick","autoplayMs","autoplayTimeoutRef","canAutoplay","stopAutoplay","scheduleAutoplay","handleSlideChangeTracking","safe","wasAutoplay","isLink","isClickable","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","SectionErrorBoundary","props","info","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","db","loader","disableWrapper","Loader","sections","setSections","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","fallbackSections","findFallbackSection","section","normalizeNumberArray","x","userGroups","getSectionGroupsFromManualScalars","groupField","rawValue","canShowSectionByGroups","userGroupsArg","sectionGroups","userGroupSet","applyFallback","reason","extra","unsubscribe","onSnapshot","doc","snap","fetchSectionData","rawUrl","method","params","headers","encoded","effectiveSections","fetchedKeysRef","fetchables","json","message","orderedVisible","toManualArray","obj","t","num","fn","toManualScalars","out","mapPayloadToProps","manual","variableName","propName","pl","buildCompProps","hasUrl","compProps","scalars","arr2","varName2","buildEmptyProps","propName2","buildCompPropsSafe","fallbackSection","fallbackError","renderStatusBox","renderSingleSection","rawKey","Comp","isFullBleed","paddingX","stackGapPx","isNoStackSpacing","wrapperStyle","loadingSec","errorSec","fallbackProps","fallbackRenderError","baseProps","Container"],"mappings":"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"}