oraculo-ui 0.1.78 → 0.1.80

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.cjs.js","sources":["../src/atoms/OraculoButton/OraculoButton.tsx","../src/atoms/OraculoSectionTitle/OraculoSectionTitle.tsx","../src/atoms/OraculoCarouselDots/OraculoCarouselDots.tsx","../src/atoms/OraculoGridGroup/OraculoGridGroup.tsx","../src/atoms/OraculoLogo/OraculoLogoMediosPago.tsx","../src/atoms/OraculoEvent/OraculoEventTitle.tsx","../src/atoms/OraculoEvent/OraculoEventStatusBadge.tsx","../src/atoms/OraculoEvent/OraculoEventStatus.tsx","../src/atoms/OraculoEvent/OraculoEventHeader.tsx","../src/atoms/OraculoEvent/OraculoEventLabel.tsx","../src/atoms/OraculoEvent/OraculoEventLeague.tsx","../src/atoms/OraculoEvent/OraculoEventScore.tsx","../src/atoms/OraculoEvent/OraculoTeamPolo.tsx","../src/atoms/OraculoEvent/OraculoEventTeamInfo.tsx","../src/molecules/OraculoCarousel/useHorizontalWheelSplide.tsx","../src/molecules/OraculoCarousel/OraculoCarousel.tsx","../src/molecules/OraculoGameCard/OraculoGameCard.tsx","../src/molecules/OraculoGameRankCard/OraculoGameRankCard.tsx","../src/molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard.tsx","../src/molecules/OraculoGameSlide/OraculoGameSlide.tsx","../src/molecules/OraculoWelcomeBanner/OraculoWelcomeBanner.tsx","../src/molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual.tsx","../src/atoms/OraculoEvent/KambiOpenBet.tsx","../src/molecules/OraculoEventCard/OraculoEventCombinadasCard.tsx","../src/atoms/OraculoButtonBet/OraculoButtonBet.tsx","../src/atoms/OraculoEvent/KambiJersey.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCard.tsx","../src/atoms/OraculoEvent/OraculoEventDate.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCard.tsx","../src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx","../src/utils/openMachineRegistry.ts","../src/organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos.tsx","../src/organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx","../src/organisms/OraculoSeccionCasino/OraculoSeccionCasino.tsx","../src/organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales.tsx","../src/organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida.tsx","../src/organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.tsx","../src/organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCardSkeleton.tsx","../src/molecules/OraculoEventCard/FadeItemWrapper.tsx","../src/organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCardSkeleton.tsx","../src/organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana.tsx","../src/organisms/OraculoSeccionBanners/OraculoSeccionBanners.tsx","../src/organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago.tsx","../src/templates/landingRegistry.ts","../src/templates/OraculoPageLandingPreview.tsx"],"sourcesContent":["import React from \"react\";\r\nimport \"./OraculoButton.css\";\r\nimport { Link as MuiLink } from \"@mui/material\";\r\n\r\nexport interface OraculoButtonProps {\r\n children?: React.ReactNode;\r\n onClick?: any;\r\n href?: string;\r\n target?: React.HTMLAttributeAnchorTarget;\r\n rel?: string;\r\n type?: \"button\" | \"submit\" | \"reset\";\r\n disabled?: boolean;\r\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n fullWidth?: boolean;\r\n fullHeight?: boolean;\r\n className?: string;\r\n ariaLabel?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n iconOnly?: boolean;\r\n}\r\n\r\nexport default function OraculoButton({\r\n children,\r\n onClick,\r\n href,\r\n target,\r\n rel,\r\n type = \"button\",\r\n disabled = false,\r\n variant = \"primary\",\r\n size,\r\n fullWidth = false,\r\n fullHeight = false,\r\n className = \"\",\r\n ariaLabel,\r\n leftIcon,\r\n rightIcon,\r\n iconOnly,\r\n}: OraculoButtonProps) {\r\n const hasText = !!children && children !== true;\r\n const hasLeft = !!leftIcon;\r\n const hasRight = !!rightIcon;\r\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\r\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\r\n\r\n const cls = [\r\n \"orc-btn\",\r\n variant === \"secondary\"\r\n ? \"orc-btn--secondary\"\r\n : variant === \"tertiary\"\r\n ? \"orc-btn--tertiary\"\r\n : \"orc-btn--primary\",\r\n size ? `orc-btn--${size}` : \"\",\r\n fullWidth ? \"orc-btn--full\" : \"\",\r\n fullHeight ? \"orc-btn--fullHeight\" : \"\",\r\n isIconOnly ? \"orc-btn--iconOnly\" : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const content = (\r\n <>\r\n {leftIcon && <span className=\"orc-btn__icon\">{leftIcon}</span>}\r\n {!isIconOnly && <span className=\"orc-btn__label\">{children}</span>}\r\n {rightIcon && <span className=\"orc-btn__icon\">{rightIcon}</span>}\r\n </>\r\n );\r\n\r\n const ariaDisabled = disabled ? true : undefined;\r\n\r\n if (href) {\r\n return (\r\n <MuiLink\r\n href={href}\r\n target={target}\r\n rel={rel}\r\n aria-label={ariaLabel}\r\n aria-disabled={ariaDisabled}\r\n tabIndex={ariaDisabled ? -1 : undefined}\r\n className={cls}\r\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\r\n >\r\n {content}\r\n </MuiLink>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type={type}\r\n onClick={onClick}\r\n disabled={!!ariaDisabled}\r\n aria-label={ariaLabel}\r\n className={cls}\r\n >\r\n {content}\r\n </button>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./OraculoSectionTitle.css\";\r\n\r\nexport interface OraculoSectionTitleProps {\r\n title: string;\r\n iconUrl?: string;\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nexport default function OraculoSectionTitle({\r\n title,\r\n iconUrl,\r\n size = \"md\",\r\n className = \"\",\r\n}: OraculoSectionTitleProps) {\r\n const sizeClass = size ? `orc-section-title--${size}` : \"\";\r\n\r\n const wrapperClass = [\r\n \"orc-section-title\",\r\n sizeClass,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div className={wrapperClass}>\r\n {iconUrl && (\r\n <img\r\n src={iconUrl}\r\n alt=\"\"\r\n className=\"orc-section-title__icon\"\r\n />\r\n )}\r\n <h2 className=\"orc-section-title__title\">{title}</h2>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./OraculoCarouselDots.css\";\r\n\r\nexport interface OraculoCarouselDotsProps {\r\n total: number;\r\n active: number;\r\n onSelect?: (index: number) => void;\r\n className?: string;\r\n}\r\n\r\nconst OraculoCarouselDots: React.FC<OraculoCarouselDotsProps> = ({\r\n total,\r\n active,\r\n onSelect,\r\n className = \"\",\r\n}) => {\r\n if (total <= 1) return null;\r\n\r\n const rootClass = [\"orc-dots\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <div className={rootClass} role=\"tablist\">\r\n {Array.from({ length: total }).map((_, i) => (\r\n <span key={i} className=\"orc-dots__cell\">\r\n <button\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={i === active}\r\n aria-label={`Ir al slide ${i + 1}`}\r\n className={\r\n \"orc-dots__dot\" +\r\n (i === active ? \" orc-dots__dot--active\" : \"\")\r\n }\r\n onClick={() => onSelect?.(i)}\r\n />\r\n </span>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default OraculoCarouselDots;\r\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\";\r\nimport React from \"react\";\r\n\r\n\r\nexport type Logo = { src: string; alt: string };\r\n\r\nexport default function OraculoLogoMediosPago({ src, alt }: Logo) {\r\n return (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n width: { xs: 65, sm: 80, md: 120, lg: 160 }, // 65 en móvil, 80 en desktop\r\n height: { xs: 48, md: 96 }, // 48 en móvil, 96 en desktop\r\n display: \"inline-block\",\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={src}\r\n alt={alt}\r\n sx={{\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n </Box>\r\n );\r\n}\r\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 : '41px',\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 { enabled = true }: { enabled?: boolean } = {}\r\n) {\r\n const rafRef = useRef<number | null>(null);\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 // 🧠 Detect horizontal intent ONLY\r\n if (Math.abs(deltaX) <= Math.abs(deltaY)) {\r\n // vertical scroll → allow normal page scrolling\r\n return;\r\n }\r\n\r\n // Ignore tiny horizontal noise\r\n if (Math.abs(deltaX) < 2) return;\r\n\r\n // We handle horizontal → stop native scroll\r\n e.preventDefault();\r\n\r\n const direction = deltaX > 0 ? \">\" : \"<\";\r\n\r\n // Throttle to one navigation per frame\r\n if (rafRef.current !== null) return;\r\n\r\n rafRef.current = requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n splide.go(direction);\r\n });\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 if (rafRef.current) cancelAnimationFrame(rafRef.current);\r\n };\r\n }, [enabled, hostRef, splideRef]);\r\n}\r\n","// src/molecules/OraculoCarousel/OraculoCarousel.tsx\r\nimport React, {\r\n forwardRef,\r\n useCallback,\r\n useImperativeHandle,\r\n useRef,\r\n ReactNode,\r\n} from \"react\";\r\nimport {\r\n Splide as SplideRaw,\r\n SplideSlide as SplideSlideRaw,\r\n} from \"@splidejs/react-splide\";\r\n\r\nimport {useHorizontalWheelSplide} from \"./useHorizontalWheelSplide\";\r\n\r\nexport interface OraculoCarouselOptions {\r\n type?: string;\r\n perPage?: number;\r\n gap?: string;\r\n pagination?: boolean;\r\n arrows?: boolean;\r\n drag?: boolean;\r\n focus?: string | \"center\";\r\n autoWidth?: boolean;\r\n trimSpace?: any;\r\n rewind?: boolean;\r\n padding?: { left?: string; right?: string };\r\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface OraculoCarouselRef {\r\n next: () => void;\r\n prev: () => void;\r\n go: (index: number | string) => void;\r\n}\r\n\r\nexport interface OraculoCarouselProps<T = any> {\r\n items: T[];\r\n renderItem: (item: T, index: number) => ReactNode;\r\n perPage?: number;\r\n gap?: string;\r\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\r\n options?: OraculoCarouselOptions;\r\n className?: string;\r\n useIndexAsKey?: boolean;\r\n onMove?: (info: {\r\n index: number;\r\n isStart: boolean;\r\n isEnd: boolean;\r\n total: number;\r\n visibleEnd: number;\r\n visibleStart: number;\r\n }) => void;\r\n enableHorizontalWheel?: boolean;\r\n}\r\n\r\n// 👇 Aislamos tipos de Splide: internamente es any, hacia afuera tu API está tipada\r\nconst Splide: any = SplideRaw;\r\nconst SplideSlide: any = SplideSlideRaw;\r\n\r\nconst OraculoCarousel = forwardRef<OraculoCarouselRef, OraculoCarouselProps<any>>(\r\n (\r\n {\r\n items = [],\r\n renderItem,\r\n perPage = 1,\r\n gap = \"0px\",\r\n breakpoints,\r\n options = {},\r\n className = \"\",\r\n onMove,\r\n useIndexAsKey = false,\r\n enableHorizontalWheel = true,\r\n },\r\n ref\r\n ) => {\r\n const splideRef = useRef<any>(null);\r\n const wheelHostRef = useRef<HTMLDivElement>(null);\r\n const prevLengthRef = useRef(items.length);\r\n\r\n useHorizontalWheelSplide(wheelHostRef, splideRef, {\r\n enabled: enableHorizontalWheel,\r\n });\r\n useImperativeHandle(ref, () => ({\r\n next: () => splideRef.current?.go(\">\"),\r\n prev: () => splideRef.current?.go(\"<\"),\r\n go: (index) => splideRef.current?.go(index),\r\n }));\r\n\r\nconst getVisibleRange = (splide: any) => {\r\n const Slides = splide.Components.Slides;\r\n const Controller = splide.Components.Controller;\r\n const track = splide.root.querySelector(\".splide__track\");\r\n\r\n const trackWidth = track?.clientWidth ?? 0;\r\n const visibleStart = Controller.getIndex();\r\n const total = Slides.getLength();\r\n\r\n let currentWidth = 0;\r\n let visibleEnd = visibleStart;\r\n\r\n for (let i = visibleStart; i < total; i++) {\r\n const slide = Slides.getAt(i);\r\n if (!slide) break;\r\n\r\n // use offsetWidth (cheaper than getBoundingClientRect)\r\n currentWidth += slide.slide.offsetWidth;\r\n\r\n if (currentWidth > trackWidth) break;\r\n visibleEnd = i;\r\n }\r\n\r\n return { visibleStart, visibleEnd };\r\n};\r\nconst hasOverflow = (splide: any) => {\r\n const track = splide.root.querySelector(\".splide__track\");\r\n const list = splide.root.querySelector(\".splide__list\");\r\n\r\n if (!track || !list) return false;\r\n\r\n return list.scrollWidth > track.clientWidth + 1;\r\n};\r\n\r\nconst handleMove = useCallback((splide: any) => {\r\n const slides = splide.Components.Slides;\r\n const total = slides.getLength();\r\n\r\n // NO SCROLL POSSIBLE\r\n if (!hasOverflow(splide)) {\r\n onMove?.({\r\n index: 0,\r\n isStart: true,\r\n isEnd: true,\r\n total,\r\n visibleStart: 0,\r\n visibleEnd: total - 1,\r\n });\r\n return;\r\n }\r\n\r\n const { visibleStart, visibleEnd } = getVisibleRange(splide);\r\n\r\n const isStart = visibleStart === 0;\r\n const isEnd = visibleEnd === total - 1;\r\n\r\n const index = splide.Components.Controller.getIndex();\r\n\r\n onMove?.({\r\n index,\r\n isStart,\r\n isEnd,\r\n total,\r\n visibleStart,\r\n visibleEnd,\r\n });\r\n}, [onMove]);\r\nReact.useEffect(() => {\r\n const splide = splideRef.current?.splide;\r\n if (!splide) return;\r\n\r\n const lengthChanged = prevLengthRef.current !== items.length;\r\n prevLengthRef.current = items.length;\r\n\r\n if (!lengthChanged) return;\r\n\r\n // let React commit DOM first\r\n requestAnimationFrame(() => {\r\n splide.refresh();\r\n handleMove(splide);\r\n });\r\n}, [items.length, handleMove]);\r\nconst handleResize = useCallback(() => {\r\n const splide = splideRef.current?.splide;\r\n if (!splide) return;\r\n\r\n splide.go(0, false); \r\n handleMove(splide);\r\n}, [handleMove]);\r\n const handleMounted = useCallback(\r\n (splide: any) => {\r\n handleMove(splide);\r\n },\r\n [handleMove]\r\n );\r\n\r\n const mergedOptions: OraculoCarouselOptions = {\r\n type: \"slide\",\r\n trimSpace: false,\r\n drag: true,\r\n pagination: false,\r\n arrows: false,\r\n rewind: false,\r\n focus: \"start\",\r\n autoWidth: false,\r\n perPage,\r\n gap,\r\n breakpoints,\r\n ...options,\r\n\r\n ...(enableHorizontalWheel ? { wheel: false } : {}),\r\n\r\n };\r\n\r\n return (\r\n <div ref={wheelHostRef} className={className} style={{ width: \"100%\" }}>\r\n <Splide\r\n ref={splideRef}\r\n options={mergedOptions}\r\n onMove={handleMove}\r\n onMounted={handleMounted}\r\n onResize={handleResize}\r\n >\r\n {items.map((item, index) => (\r\n <SplideSlide key={useIndexAsKey ? index : (item as any).id ?? index}>\r\n {renderItem(item, index)}\r\n </SplideSlide>\r\n ))}\r\n </Splide>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport default OraculoCarousel;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { OraculoButton } from \"../..\";\r\n\r\nexport interface OraculoGameCardProps {\r\n imageUrl: string;\r\n onClick?: () => void;\r\n size?: \"lg\" | \"sm\";\r\n fillParent?: boolean;\r\n}\r\n\r\nconst OraculoGameCard: React.FC<OraculoGameCardProps> = ({\r\n imageUrl,\r\n onClick,\r\n size = \"sm\",\r\n fillParent = false,\r\n}) => {\r\n const dim =\r\n size === \"lg\"\r\n ? { w: 280, h: 352 }\r\n : { w: 152, h: 168 };\r\n\r\n const handleButtonClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\r\n e.stopPropagation();\r\n onClick?.();\r\n };\r\n\r\n const sizeStyles = fillParent\r\n ? { width: \"100%\", height: \"100%\" }\r\n : { width: `${dim.w}px`, height: `${dim.h}px` };\r\n\r\n return (\r\n <Box\r\n onClick={onClick}\r\n role=\"button\"\r\n sx={{\r\n position: \"relative\",\r\n borderRadius: \"12px\",\r\n overflow: \"hidden\",\r\n boxSizing: \"border-box\",\r\n transition: \"transform .15s ease, box-shadow .15s ease\",\r\n ...sizeStyles,\r\n \"&:hover\": {\r\n transform: \"translateY(-2px)\",\r\n boxShadow: 8,\r\n cursor: \"pointer\",\r\n },\r\n \"&:hover .oraculo-game-card-overlay\": {\r\n opacity: 1,\r\n },\r\n \"&:hover .oraculo-game-card-btn\": {\r\n opacity: 1,\r\n transform: \"translate(-50%, -50%) scale(1)\",\r\n pointerEvents: \"auto\",\r\n },\r\n }}\r\n >\r\n <img\r\n src={imageUrl}\r\n alt=\"Juego de casino\"\r\n loading=\"lazy\"\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n borderRadius: \"inherit\",\r\n }}\r\n />\r\n\r\n <Box\r\n className=\"oraculo-game-card-overlay\"\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n backgroundColor: \"rgba(0, 0, 0, 0.45)\",\r\n opacity: 0,\r\n transition: \"opacity .15s ease\",\r\n pointerEvents: \"none\",\r\n zIndex: 1,\r\n }}\r\n />\r\n\r\n <Box\r\n className=\"oraculo-game-card-btn\"\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n zIndex: 2,\r\n transform: \"translate(-50%, -50%) scale(0.95)\",\r\n opacity: 0,\r\n transition: \"opacity .15s ease, transform .15s ease\",\r\n pointerEvents: \"none\",\r\n }}\r\n >\r\n <OraculoButton variant=\"primary\" size=\"md\" onClick={handleButtonClick}>\r\n Jugar\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoGameCard;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\r\n\r\ntype SizeOpt = { w: number; h: number; r?: number; font?: number };\r\n\r\nexport interface OraculoGameRankCardSizes {\r\n xs: SizeOpt;\r\n md: SizeOpt;\r\n}\r\n\r\nexport interface OraculoGameRankCardProps {\r\n imageUrl: string;\r\n orden?: number;\r\n onClick?: () => void;\r\n sizes?: OraculoGameRankCardSizes;\r\n\r\n /** si true, muestra skeleton en vez de la card */\r\n loading?: boolean;\r\n}\r\n\r\nexport default function OraculoGameRankCard({\r\n imageUrl,\r\n orden = 1,\r\n onClick,\r\n loading = false,\r\n sizes = {\r\n xs: { w: 104, h: 112, r: 18, font: 48 },\r\n md: { w: 186, h: 264, r: 22.6, font: 64 },\r\n },\r\n}: OraculoGameRankCardProps) {\r\n const getVal = <K extends keyof SizeOpt>(k: K, def: number) => ({\r\n xs: sizes.xs?.[k] ?? def,\r\n md: sizes.md?.[k] ?? def,\r\n });\r\n\r\n const W = getVal(\"w\", 186);\r\n const H = getVal(\"h\", 264);\r\n const R = getVal(\"r\", 22.6);\r\n const F = getVal(\"font\", 64);\r\n\r\n const hang = {\r\n xs: Math.round((sizes.xs?.font ?? 64) * 0.28),\r\n md: Math.round((sizes.md?.font ?? 64) * 0.28),\r\n };\r\n\r\n return (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n maxWidth: { xs: `${W.xs}px`, md: `${W.md}px` },\r\n aspectRatio: {\r\n xs: `${W.xs}/${H.xs}`,\r\n md: `${W.md}/${H.md}`,\r\n },\r\n borderRadius: { xs: `${R.xs}px`, md: `${R.md}px` },\r\n boxSizing: \"border-box\",\r\n overflow: \"visible\",\r\n pb: { xs: `${hang.xs}px`, md: `${hang.md}px` },\r\n\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n inset: 0,\r\n borderRadius: \"inherit\",\r\n pointerEvents: \"none\",\r\n zIndex: 2,\r\n background:\r\n \"linear-gradient(21.29deg, #0B0D1B -1.16%, rgba(255,255,255,0) 51.92%, rgba(255,255,255,0) 127.62%)\",\r\n backgroundBlendMode: \"multiply\",\r\n },\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n borderRadius: \"inherit\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {loading ? (\r\n <Skeleton\r\n variant=\"rectangular\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n sx={{\r\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro visible en fondo oscuro\r\n \"&::after\": {\r\n background:\r\n \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\r\n },\r\n }}\r\n />\r\n ) : (\r\n <OraculoGameCard\r\n imageUrl={imageUrl}\r\n onClick={onClick}\r\n size=\"lg\"\r\n fillParent\r\n />\r\n )}\r\n </Box>\r\n\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n position: \"absolute\",\r\n left: 8,\r\n bottom: {\r\n xs: `-${hang.xs}px`,\r\n md: `-${hang.md}px`,\r\n },\r\n fontFamily: \"secondary\",\r\n fontSize: {\r\n xs: `${F.xs}px`,\r\n md: `${F.md}px`,\r\n },\r\n lineHeight: 1,\r\n color: \"#3CC666\",\r\n WebkitTextStroke: \"1px #9ee86e\",\r\n zIndex: 3,\r\n userSelect: \"none\",\r\n }}\r\n >\r\n {orden}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nexport interface OraculoLiveCasinoCardProps {\r\n logo: string;\r\n provider?: string;\r\n providerName?: string;\r\n machine?: number | string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst OraculoLiveCasinoCard: React.FC<OraculoLiveCasinoCardProps> = ({\r\n logo,\r\n provider,\r\n providerName,\r\n machine,\r\n onClick,\r\n}) => {\r\n return (\r\n <Box\r\n onClick={onClick}\r\n sx={{\r\n flex: \"0 0 auto\",\r\n position: \"relative\",\r\n borderRadius: \"20px\",\r\n overflow: \"hidden\",\r\n width: { xs: 100, md: 180 },\r\n height: { xs: 200, md: 380 },\r\n transition: \"width .50s ease, transform .28s ease\",\r\n willChange: \"width, transform\",\r\n cursor: \"pointer\",\r\n zIndex: 0,\r\n \"&:hover\": {\r\n zIndex: 2,\r\n width: { md: 260, xs: 110 },\r\n },\r\n \"&:hover .orc-live-provider-label\": {\r\n opacity: 1,\r\n },\r\n }}\r\n >\r\n {/* Imagen de fondo */}\r\n <Box\r\n component=\"img\"\r\n src={logo}\r\n alt={`Juego ${machine ?? \"\"}`}\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n }}\r\n />\r\n\r\n {/* Label del provider */}\r\n <Box\r\n className=\"orc-live-provider-label\"\r\n sx={{\r\n position: \"absolute\",\r\n left: \"50%\",\r\n top: { xs: \"75%\", md: \"80%\" },\r\n transform: \"translate(-50%, -50%)\",\r\n zIndex: 3,\r\n opacity: 0,\r\n transition: \"opacity .25s ease\",\r\n pointerEvents: \"none\",\r\n }}\r\n >\r\n <Typography\r\n sx={{\r\n color: \"#fff\",\r\n fontWeight: 700,\r\n fontSize: { xs: 11, md: 14 },\r\n textTransform: \"capitalize\",\r\n }}\r\n >\r\n {provider ?? providerName ?? \"\"}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoLiveCasinoCard;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\r\n\r\nexport interface OraculoGameSlideItem {\r\n id: string | number;\r\n imageUrl: string;\r\n background?: string;\r\n}\r\n\r\nexport interface OraculoGameSlideProps {\r\n items: OraculoGameSlideItem[];\r\n layout?: \"mosaic\" | \"grid\";\r\n onClick?: (item: OraculoGameSlideItem, index: number) => void;\r\n\r\n /** si true, renderiza skeletons en vez de cards */\r\n loading?: boolean;\r\n\r\n /** cuantos skeletons en grid (default 4) */\r\n gridSkeletonCount?: number;\r\n}\r\n\r\nconst GAP = 12; // px\r\n\r\nconst SkCard = ({ r = 16 }: { r?: number }) => (\r\n <Box sx={{ width: \"100%\", height: \"100%\", borderRadius: r, overflow: \"hidden\" }}>\r\n <Skeleton\r\n variant=\"rectangular\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n sx={{\r\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro sobre fondo oscuro\r\n \"&::after\": {\r\n // opcional: brillo un poquito más visible\r\n background: \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\r\n },\r\n }}\r\n />\r\n </Box>\r\n);\r\n\r\n\r\nconst OraculoGameSlide: React.FC<OraculoGameSlideProps> = ({\r\n items,\r\n layout = \"grid\",\r\n onClick,\r\n loading = false,\r\n gridSkeletonCount = 4,\r\n}) => {\r\n // =========================\r\n // MOSAIC: 1 grande + 4 chicas\r\n // =========================\r\n if (layout === \"mosaic\") {\r\n const big = items[0];\r\n // console.log(\"big: \", big);\r\n \r\n const smalls = items.slice(1, 5);\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateRows: {\r\n xs: `repeat(2, 112px)`,\r\n md: `repeat(2, 168px)`,\r\n },\r\n gridTemplateColumns: {\r\n xs: `184px`,\r\n md: `280px`,\r\n },\r\n gridAutoFlow: \"column\",\r\n gridAutoColumns: {\r\n xs: `104px`,\r\n md: `152px`,\r\n },\r\n columnGap: `${GAP}px`,\r\n rowGap: `${GAP}px`,\r\n alignItems: \"stretch\",\r\n justifyItems: \"stretch\",\r\n }}\r\n >\r\n {/* BIG */}\r\n <Box\r\n sx={{\r\n width: { xs: 184, md: 280 },\r\n height: { xs: 234, md: 352 },\r\n gridRow: \"1 / span 2\",\r\n overflow: \"hidden\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n {loading ? (\r\n <SkCard />\r\n ) : (\r\n big && (\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${big.background ?? big.imageUrl ?? \"\"}`}\r\n size=\"lg\"\r\n fillParent\r\n onClick={() => onClick?.(big, 0)}\r\n />\r\n )\r\n )}\r\n </Box>\r\n\r\n {/* SMALLS */}\r\n {(loading ? Array.from({ length: 4 }) : smalls).map((it: any, index: number) => (\r\n <Box\r\n key={loading ? `sk-${index}` : it.id}\r\n sx={{\r\n width: { xs: 104, md: 152 },\r\n height: { xs: 112, md: 168 },\r\n overflow: \"hidden\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n {loading ? (\r\n <SkCard />\r\n ) : (\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index + 1)}\r\n />\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n // =========================\r\n // GRID 2x2\r\n // =========================\r\n return (\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: {\r\n xs: `repeat(2, 104px)`,\r\n md: `repeat(2, 152px)`,\r\n },\r\n gridTemplateRows: {\r\n xs: `repeat(2, 112px)`,\r\n md: `repeat(2, 168px)`,\r\n },\r\n gap: `${GAP}px`,\r\n gridAutoFlow: \"column\",\r\n }}\r\n >\r\n {(loading ? Array.from({ length: gridSkeletonCount }) : items).map((it: any, index: number) => (\r\n <Box\r\n key={loading ? `sk-${index}` : it.id ?? index}\r\n sx={{ overflow: \"hidden\", borderRadius: 2 }}\r\n >\r\n {loading ? (\r\n <SkCard />\r\n ) : (\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index)}\r\n />\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoGameSlide;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\n\r\nexport interface OraculoWelcomeBannerProps {\r\n title?: string;\r\n amount?: string; // ej: \"S/40\"\r\n subtitle?: string;\r\n buttonText?: string;\r\n onButtonClick?: () => void;\r\n backgroundImage?: string;\r\n alt?: string;\r\n className?: string;\r\n /** Tamaño en desktop: \"small\" (456x272) o \"large\" (618x346) */\r\n variant?: \"small\" | \"large\";\r\n}\r\n\r\nconst OraculoWelcomeBanner: React.FC<OraculoWelcomeBannerProps> = ({\r\n title,\r\n amount,\r\n subtitle,\r\n buttonText,\r\n onButtonClick,\r\n backgroundImage,\r\n alt,\r\n className = \"\",\r\n variant = \"small\",\r\n}) => {\r\n const symbol = amount ? amount.slice(0, 2) : \"\";\r\n const value = amount ? amount.slice(2) : \"\";\r\n const isLarge = variant === \"large\";\r\n\r\n return (\r\n <Box\r\n className={className}\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n maxWidth: {\r\n xs: 328,\r\n md: isLarge ? 618 : 456,\r\n },\r\n mx: \"auto\",\r\n }}\r\n >\r\n {backgroundImage && (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n aspectRatio: {\r\n xs: \"328 / 188\",\r\n md: isLarge ? \"618 / 346\" : \"456 / 272\",\r\n },\r\n borderRadius: \"14px\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={backgroundImage}\r\n alt={alt ?? \"Fondo promocional\"}\r\n sx={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n objectPosition: {\r\n xs: \"50% 0%\",\r\n md: \"45% 0%\",\r\n },\r\n display: \"block\",\r\n }}\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Capa de contenido */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n color: \"#e7f8ff\",\r\n textAlign: \"center\",\r\n pl: \"14%\",\r\n pr: { xs: \"14%\", lg: \"15%\" },\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n maxWidth: \"60%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {/* Título superior */}\r\n {title && (\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 12, md: 20 },\r\n fontWeight: 400,\r\n color: \"#e7f8ff\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n )}\r\n\r\n {/* Monto */}\r\n {amount && (\r\n <Box\r\n component=\"p\"\r\n sx={{\r\n fontFamily: '\"secondary\", sans-serif',\r\n lineHeight: { xs: 0.9, lg: 0.87 },\r\n m: \"4px 0\",\r\n background:\r\n \"linear-gradient(175deg, #EDC421 -12.56%, #FFFABF 17.99%, #EDC421 49.74%)\",\r\n WebkitBackgroundClip: \"text\",\r\n WebkitTextFillColor: \"transparent\",\r\n WebkitTextStroke: \"0.5px #fff8c1\",\r\n filter:\r\n \"drop-shadow(0px 4px 0px #8D4406) drop-shadow(0px 4px 4px rgba(28, 28, 28, 0.4))\",\r\n display: \"flex\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box\r\n component=\"span\"\r\n sx={{ fontSize: { xs: 35, md: 48 }, mr: 0.5 }}\r\n >\r\n {symbol}\r\n </Box>\r\n <Box\r\n component=\"span\"\r\n sx={{ fontSize: { xs: 52, md: 77 } }}\r\n >\r\n {value}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {/* Subtítulo */}\r\n {subtitle && (\r\n <Typography\r\n sx={{\r\n pb: \"20px\",\r\n fontSize: 14,\r\n fontWeight: 600,\r\n color: \"#e7f8ff\",\r\n }}\r\n >\r\n {subtitle}\r\n </Typography>\r\n )}\r\n\r\n {/* Botón */}\r\n {buttonText && (\r\n <OraculoButton onClick={onButtonClick}>\r\n {buttonText}\r\n </OraculoButton>\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoWelcomeBanner;\r\n","import React from \"react\";\r\nimport \"../../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.css\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\n\r\nexport interface OraculoClubOlimpoVisualProps {\r\n text: string;\r\n buttonLabel?: string;\r\n onClick?: () => void;\r\n\r\n // MOBILE\r\n imgAlt?: string;\r\n imgSrcMobile: string;\r\n\r\n // DESKTOP\r\n imgSrcDesktopBg?: string;\r\n imgSrcDesktopLogo?: string;\r\n}\r\n\r\nconst OraculoClubOlimpoVisual: React.FC<OraculoClubOlimpoVisualProps> = ({\r\n text,\r\n buttonLabel = \"Conoce más\",\r\n onClick,\r\n imgAlt = \"Club Olimpo\",\r\n imgSrcMobile,\r\n imgSrcDesktopBg,\r\n imgSrcDesktopLogo,\r\n}) => {\r\n return (\r\n <>\r\n {/* MOBILE */}\r\n <div className=\"orc-co-bgMobile\">\r\n <img\r\n src={imgSrcMobile}\r\n alt={imgAlt}\r\n className=\"orc-co-bgMobileImg\"\r\n />\r\n </div>\r\n\r\n {/* DESKTOP */}\r\n <div className=\"orc-co-bgDesktop\">\r\n {imgSrcDesktopBg && (\r\n <div className=\"orc-co-fillHost\">\r\n <img\r\n src={imgSrcDesktopBg}\r\n alt={`${imgAlt} fondo`}\r\n className=\"orc-co-bgDesktopImg\"\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Bloque izquierdo: LOGO + TEXTO + BOTÓN */}\r\n <div className=\"orc-co-desktopContent\">\r\n {imgSrcDesktopLogo && (\r\n <img\r\n src={imgSrcDesktopLogo}\r\n alt={`${imgAlt} logo`}\r\n className=\"orc-co-logoImg\"\r\n />\r\n )}\r\n\r\n <p className=\"orc-co-captionDesktop\">{text}</p>\r\n\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </div>\r\n\r\n {/* MOBILE: barra inferior */}\r\n <div className=\"orc-co-bottom\">\r\n <p className=\"orc-co-caption\">{text}</p>\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default OraculoClubOlimpoVisual;\r\n","import { useState, useEffect} from \"react\";\r\n\r\nexport function redirectHomeWithOutcomes(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 = \"/deportes#in-play\";\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 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 { CombinadoEventProps, BetOffer} from \"../../interfaces/oraculo/InterfaceKambi\";\r\nimport {redirectHomeWithOutcomes} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\nexport default function OraculoEventCombinadosCard({event}: CombinadoEventProps) {\r\nfunction processOutcome(event : any) {\r\n const apuestas = event.betoffers ?? [];\r\n const homeName = event.homeName;\r\n const awayName = event.awayName;\r\n\r\n const outcomes = apuestas.map((a : any) => {\r\n let best = a.outcomes[0];\r\n let value = \"\";\r\n\r\n let line = best?.line ? best.line / 1000 : \"\";\r\n \r\n if ([\"Más de\", \"Mas de\", \"Over\"].includes(best?.label)) {\r\n value = `Más de ${line}`;\r\n if (best?.participant) {\r\n value = `${best.participant} - ${value}`;\r\n }\r\n }\r\n else if ([\"Menos de\", \"Menos\"].includes(best?.label)) {\r\n value = `Menos de ${line}`;\r\n if (best?.participant) {\r\n value = `${best.participant} - ${value}`;\r\n }\r\n }\r\n \r\nelse if ([\"Sí\", \"No\"].includes(best?.label) ) {\r\n value = best?.label;\r\n if (best?.participant) {\r\n value = `${best.participant} - ${value}`;\r\n }\r\n}\r\n\r\n// ----- PRIORITY 3: DOUBLE CHANCE (1X, 12, X2) -----\r\nelse if ([\"1X\", \"12\", \"X2\"].includes(best?.label)) {\r\n \r\n if (best.label === \"1X\") {\r\n value = `${homeName} o Empate`;//event.participants?.[0]?.name || \r\n } else if (best.label === \"12\") {\r\n value = `${homeName} o ${awayName}`;\r\n } else if (best.label === \"X2\") {\r\n value = `${awayName} o Empate`;\r\n }\r\n\r\n}\r\n // ----- DEFAULT LOGIC -----\r\n else {\r\n if (best?.participant) value = best.participant;\r\n else value = best?.label ?? \"\";\r\n\r\n if (line !== \"\" && value === best.label) {\r\n value = `${best.label} ${line}`;\r\n }\r\n }\r\n\r\n return {\r\n id : best?.id ?? 0,\r\n value,\r\n label: a.criterion.label,\r\n odds: best?.odds ?? 0,\r\n bl: best?.label ?? 0,\r\n position: best?.position ?? 0,\r\n\r\n };\r\n });\r\n\r\n const total = outcomes.reduce((acc: any, o:any) => acc + o.odds, 0) / 1000;\r\n\r\n return {\r\n outcomes,\r\n total: total.toFixed(2),\r\n };\r\n}\r\nconst eventOutcomes = processOutcome(event)\r\n\r\n\r\n return (\r\n <div className={styles.card}>\r\n <div className={styles.combinadas}>\r\n <Stack direction=\"column\" spacing={0.5} useFlexGap>\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 <img loading=\"lazy\" src=\"/assets/img/home/Combinadas/line.png\" />\r\n\r\n <Stack direction=\"column\" spacing={0.5} useFlexGap>\r\n {eventOutcomes['outcomes'].sort((a: any, b: any) => a.position - b.position).map((a :any, i : number) => {\r\n\r\n return (\r\n <div className={styles.apuestaItem} key={i}>\r\n <div className={styles.lineContainer}>\r\n <div className={styles.circle} />\r\n {i < eventOutcomes.outcomes.length - 1 && <div className={styles.line} />}\r\n </div>\r\n\r\n <div className={styles.apuestaText}>\r\n <strong>\r\n {a['value']}\r\n </strong>{\" \"}\r\n | {a['label']}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </Stack>\r\n </Stack>\r\n </div>\r\n\r\n <button onClick={() => redirectHomeWithOutcomes(eventOutcomes?.outcomes?.map((o : any) => o?.id) ?? []) } className={styles.cuotaTotal}>\r\n <span>\r\n Cuota total: <strong>{(((event as any)['combinadoTotal'] ?? 0 ) / 1000).toFixed(2)}</strong>\r\n </span>\r\n <img loading=\"lazy\" src=\"/assets/img/home/Combinadas/cuotaTotal.svg\" alt=\"cuota total\" />\r\n</button>\r\n </div>\r\n );\r\n}\r\n\r\n","import React from \"react\";\r\nimport styles from \"./OraculoButtonBet.module.css\";\r\nimport { Link as MuiLink } from \"@mui/material\";\r\n\r\nexport interface OraculoButtonProps {\r\n children?: React.ReactNode;\r\n onClick?: any;\r\n href?: string;\r\n target?: React.HTMLAttributeAnchorTarget;\r\n rel?: string;\r\n type?: \"button\" | \"submit\" | \"reset\";\r\n disabled?: boolean;\r\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n fullWidth?: boolean;\r\n fullHeight?: boolean;\r\n className?: string;\r\n ariaLabel?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n iconOnly?: boolean;\r\n}\r\n\r\nexport default function OraculoButtonBet({\r\n children,\r\n onClick,\r\n href,\r\n target,\r\n rel,\r\n type = \"button\",\r\n disabled = false,\r\n variant = \"primary\",\r\n size,\r\n fullWidth = false,\r\n fullHeight = false,\r\n className = \"\",\r\n ariaLabel,\r\n leftIcon,\r\n rightIcon,\r\n iconOnly,\r\n}: OraculoButtonProps) {\r\n const hasText = !!children && children !== true;\r\n const hasLeft = !!leftIcon;\r\n const hasRight = !!rightIcon;\r\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\r\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\r\n\r\n const cls = [\r\n styles[\"orc-btn\"], // base\r\n styles[`orc-btn--${variant}`], // variant primary/secondary/tertiary\r\n size ? styles[`orc-btn--${size}`] : \"\", // sm / md / lg\r\n fullWidth ? styles[\"orc-btn--full\"] : \"\",\r\n fullHeight ? styles[\"orc-btn--fullHeight\"] : \"\",\r\n isIconOnly ? styles[\"orc-btn--iconOnly\"] : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const content = (\r\n <>\r\n {leftIcon && <span className={styles[\"orc-btn__icon\"]}>{leftIcon}</span>}\r\n {!isIconOnly && (\r\n <span className={styles[\"orc-btn__label\"]}>{children}</span>\r\n )}\r\n {rightIcon && <span className={styles[\"orc-btn__icon\"]}>{rightIcon}</span>}\r\n </>\r\n );\r\n\r\n const ariaDisabled = disabled ? true : undefined;\r\n\r\n if (href) {\r\n return (\r\n <MuiLink\r\n href={href}\r\n target={target}\r\n rel={rel}\r\n aria-label={ariaLabel}\r\n aria-disabled={ariaDisabled}\r\n tabIndex={ariaDisabled ? -1 : undefined}\r\n className={cls}\r\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\r\n >\r\n {content}\r\n </MuiLink>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type={type}\r\n onClick={onClick}\r\n disabled={!!ariaDisabled}\r\n aria-label={ariaLabel}\r\n className={cls}\r\n >\r\n {content}\r\n </button>\r\n );\r\n}\r\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\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 ?? []).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 ?? []).map((item : Outcome, index : number) => (\r\n <OraculoButtonBet key={index} variant=\"primary\" disabled={item.odds == undefined || selectedOffer?.cashOutStatus == 'SUSPENDED'} onClick={()=>{redirectHomeWithOutcomes(item.id);}} >\r\n {item.odds === undefined ? \"\" : (item.odds / 1000).toFixed(2)}\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\n\r\nexport default function OraculoEventSemanaCard({event, jersey} : SemanaEventProps ) {\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\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={()=>{redirectHomeWithOutcomes(item.id);}} >{(item.odds / 1000).toFixed(2)}</OraculoButton>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</OraculoGridGroup>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Stack>\r\n\t\t\t\t</Stack>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t);\r\n}","import React, { useRef, useState } from \"react\";\r\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport {\r\n OraculoSeccionDestacadosItem,\r\n OraculoSeccionDestacadosProps,\r\n} from \"../../interfaces/oraculo/InterfaceDestacados\";\r\n\r\nexport default function OraculoSeccionDestacados({\r\n items,\r\n title = \"Destacados\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: OraculoSeccionDestacadosProps) {\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n const handlePrev = () => carouselRef.current?.prev();\r\n const handleNext = () => carouselRef.current?.next();\r\n\r\n const handleViewMore = () => {\r\n window.location.href = \"https://www.olimpo.bet/promociones\";\r\n };\r\n\r\n const redirectToPromotion = (promotion?: string) => {\r\n if (!promotion) return;\r\n if (typeof window === \"undefined\") return;\r\n\r\n const slug = encodeURIComponent(promotion);\r\n const url = `https://www.olimpo.bet/promociones/${slug}`;\r\n window.location.href = url;\r\n };\r\n\r\n const sectionClassName = className || undefined;\r\n\r\n return (\r\n <section className={sectionClassName} style={{ width: \"100%\" }}>\r\n <header\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto auto\",\r\n alignItems: \"center\",\r\n columnGap: 12,\r\n rowGap: 8,\r\n marginBottom: 16,\r\n }}\r\n >\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <div style={{ display: \"flex\", gap: 8 }}>\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 || isLoading}\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 || isLoading}\r\n />\r\n </div>\r\n\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </header>\r\n\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={2}\r\n gap=\"16px\"\r\n enableHorizontalWheel\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: true,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"start\",\r\n }}\r\n breakpoints={{\r\n 768: { perPage: 2, focus: \"start\" },\r\n 1024: { perPage: 2.5, focus: \"start\" },\r\n }}\r\n renderItem={(item: OraculoSeccionDestacadosItem) => (\r\n <div\r\n key={`${item.title}-${item.image}`}\r\n style={{\r\n textAlign: \"center\",\r\n marginTop: 16,\r\n cursor: \"pointer\",\r\n }}\r\n onClick={() => redirectToPromotion(item.promotion)}\r\n >\r\n <img\r\n src={`https://olimpo.bet${item.image !== \"\" ? item.image : item.summary_image}`}\r\n alt={item.title}\r\n style={{\r\n width: \"100%\",\r\n height:\r\n typeof window !== \"undefined\" && window.innerWidth < 768 ? \"80px\" : \"137px\",\r\n borderRadius: 8,\r\n display: \"block\",\r\n objectFit: \"cover\",\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </section>\r\n );\r\n}\r\n","\r\nconst KEY = \"__ORACULO_EXTRAS__\" as const;\r\n\r\ntype Store = {\r\n extras?: Record<string, unknown>;\r\n};\r\n\r\nfunction getStore(): Store {\r\n const g = globalThis as any;\r\n if (!g[KEY]) g[KEY] = {};\r\n return g[KEY] as Store;\r\n}\r\n\r\nexport function setOraculoExtras(extrasObj: Record<string, unknown>) {\r\n getStore().extras = extrasObj;\r\n}\r\nexport function getOraculoExtra<T = unknown>(key: string): T | undefined {\r\n return getStore().extras?.[key] as T | undefined;\r\n}\r\nexport function clearOraculoExtras() {\r\n delete (globalThis as any)[KEY];\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport OraculoGameRankCard from \"../../molecules/OraculoGameRankCard/OraculoGameRankCard\";\r\nimport { OraculoSeccionTopJuegosProps } from \"../../interfaces/oraculo/InterfaceTopJuegos\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\nexport default function OraculoSeccionTopJuegos({\r\n items,\r\n title = \"Top Juegos\",\r\n iconUrl,\r\n onCardClick,\r\n}: OraculoSeccionTopJuegosProps) {\r\n const normalizedItems = useMemo(\r\n () =>\r\n (items ?? [])\r\n .map((item, index) => ({\r\n ...item,\r\n orden: item.orden ?? index + 1,\r\n _originalIndex: index,\r\n }))\r\n .sort((a, b) => {\r\n if (a.orden != null && b.orden != null) return a.orden - b.orden;\r\n return a._originalIndex - b._originalIndex;\r\n }),\r\n [items]\r\n );\r\n\r\n const isLoading = !items || items.length === 0;\r\n const top6 = isLoading ? Array.from({ length: 6 }) : normalizedItems.slice(0, 6);\r\n\r\n const handleOpen = (juego: any) => {\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n showIframe?.();\r\n\r\n requestAnimationFrame(() => {\r\n loadMachine?.(juego, false, \"CASINO\");\r\n });\r\n };\r\n\r\n return (\r\n <section style={{ width: \"100%\" }}>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: {\r\n xs: \"repeat(3, minmax(0, 1fr))\",\r\n md: \"repeat(6, minmax(0, 1fr))\",\r\n },\r\n gap: { xs: 1.5, md: 2 },\r\n justifyItems: \"center\",\r\n width: \"100%\",\r\n }}\r\n >\r\n {top6.map((juego: any, index: number) => (\r\n <OraculoGameRankCard\r\n key={isLoading ? `sk-${index}` : (juego.machine ?? `${index}`)}\r\n imageUrl={isLoading ? \"\" : juego.background ? `https://olimpo.bet${juego.background}` : `https://olimpo.bet${juego.logo ?? \"\"}`}\r\n orden={isLoading ? index + 1 : juego.orden}\r\n loading={isLoading}\r\n onClick={\r\n isLoading\r\n ? undefined\r\n : () => {\r\n onCardClick?.(juego);\r\n handleOpen(juego);\r\n }\r\n }\r\n />\r\n ))}\r\n </Box>\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoLiveCasinoCard from \"../../molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard\";\r\nimport { OraculoSeccionCasinoEnVivoProps } from \"../../interfaces/oraculo/InterfaceCasinoEnVivo\";\r\nimport { OraculoGameItem } from \"../..\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) => g.orden ?? g.machine ?? idx;\r\n\r\nconst OraculoSeccionCasinoEnVivo: React.FC<OraculoSeccionCasinoEnVivoProps> = ({\r\n items,\r\n title = \"Casino en vivo\",\r\n subtitle = \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\",\r\n backgroundMobileUrl = \"\",\r\n backgroundDesktopUrl = \"\",\r\n onViewMore,\r\n className,\r\n}) => {\r\n const handleOpenLive = (juego: any) => {\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n // 1) Mostrar contenedor del iframe\r\n showIframe?.();\r\n\r\n // 2) Subir arriba (para que el iframe no aparezca “desde donde estabas”)\r\n if (typeof window !== \"undefined\") {\r\n window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n }\r\n\r\n // 3) Abrir juego con el flujo del host (mismo que casino/virtuales)\r\n // Espera 1 frame por si el DOM del iframe se monta/actualiza al mostrarlo\r\n requestAnimationFrame(() => {\r\n loadMachine?.(juego, false, \"casino_en_vivo\");\r\n });\r\n };\r\n\r\n return (\r\n <Box\r\n className={className}\r\n sx={{\r\n position: \"relative\",\r\n color: \"white\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Fondo */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n backgroundImage: {\r\n xs: `\r\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\r\n url('${backgroundMobileUrl}')\r\n `,\r\n md: `\r\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\r\n url('${backgroundDesktopUrl}')\r\n `,\r\n },\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n backgroundRepeat: \"no-repeat\",\r\n zIndex: 0,\r\n }}\r\n />\r\n\r\n {/* Contenido */}\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n zIndex: 1,\r\n maxWidth: 1200,\r\n height: { xs: \"450px\", md: \"550px\" },\r\n mx: \"auto\",\r\n px: { xs: 2.5, md: 6 },\r\n display: \"flex\",\r\n flexDirection: { xs: \"column\", md: \"row\" },\r\n alignItems: { xs: \"center\", md: \"center\" },\r\n justifyContent: \"center\",\r\n gap: { xs: 0, md: 15 },\r\n textAlign: { xs: \"center\", md: \"left\" },\r\n }}\r\n >\r\n {/* Columna izquierda */}\r\n <Stack spacing={3} sx={{ maxWidth: { md: 280 } }}>\r\n <Typography\r\n variant=\"h4\"\r\n sx={{\r\n fontWeight: 800,\r\n fontSize: { xs: 24, md: 40 },\r\n WebkitTextStroke: \"0.5px rgba(255, 255, 255, .5)\",\r\n textShadow:\r\n \"0 0 2px rgba(255, 255, 255, .95),\" +\r\n \"0 0 4px rgba(255, 255, 255, .6),\" +\r\n \"0 1px 0 #898989\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 14, md: 18 },\r\n color: \"rgba(255,255,255,0.9)\",\r\n marginX: { xs: 4, md: 0 },\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {subtitle}\r\n </Typography>\r\n\r\n <Box sx={{ display: { xs: \"none\", md: \"block\" } }}>\r\n <OraculoButton\r\n variant=\"primary\"\r\n size=\"md\"\r\n onClick={() => onViewMore?.() || (window.location.href = \"https://www.olimpo.bet/casino-en-vivo\")}\r\n >\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Stack>\r\n\r\n {/* Lista de tarjetas */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: { xs: 2, md: 3 },\r\n justifyContent: \"center\",\r\n overflowX: { xs: \"auto\", md: \"visible\" },\r\n py: { xs: 3, md: 0 },\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {(items ?? []).slice(0, 3).map((juego, idx) => (\r\n <OraculoLiveCasinoCard\r\n key={getGameId(juego, idx)}\r\n logo={`https://olimpo.bet${juego.background ? juego.background : juego.logo ?? \"\"}`}\r\n provider={juego.provider}\r\n providerName={juego.web_name}\r\n machine={juego.machine}\r\n onClick={() => handleOpenLive(juego)}\r\n />\r\n ))}\r\n </Box>\r\n\r\n {/* Botón mobile */}\r\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\r\n <OraculoButton\r\n variant=\"primary\"\r\n size=\"lg\"\r\n onClick={() => onViewMore?.() || (window.location.href = \"https://www.olimpo.bet/casino-en-vivo\")}\r\n >\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionCasinoEnVivo;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\r\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\r\n\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, { OraculoGameSlideItem } from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionCasinoProps } from \"../../interfaces/oraculo/InterfaceCasino\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\ninterface CasinoSlide {\r\n id: string;\r\n kind: SlideKind;\r\n items: OraculoGameSlideItem[];\r\n}\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) => g.orden ?? g.machine ?? idx;\r\n\r\nconst buildCasinoSlides = (\r\n games: OraculoGameItem[],\r\n mosaicFirst = true,\r\n gridSize = 1\r\n): CasinoSlide[] => {\r\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\r\n id: getGameId(g, idx),\r\n imageUrl: g.logo ?? \"\",\r\n ...(g.background ? { background: g.background } : {}),\r\n }));\r\n\r\n if (!baseItems.length) return [];\r\n\r\n const slides: CasinoSlide[] = [];\r\n let start = 0;\r\n\r\n if (mosaicFirst) {\r\n const take = Math.min(baseItems.length, 1);\r\n slides.push({ id: \"mosaic-0\", kind: \"mosaic\", items: baseItems.slice(0, take) });\r\n start = take;\r\n }\r\n\r\n while (start < baseItems.length) {\r\n const end = Math.min(start + gridSize, baseItems.length);\r\n slides.push({ id: `grid-${start}`, kind: \"grid\", items: baseItems.slice(start, end) });\r\n start = end;\r\n }\r\n\r\n return slides;\r\n};\r\n\r\nconst OraculoSeccionCasino: React.FC<OraculoSeccionCasinoProps> = ({\r\n items,\r\n title = \"Casino\",\r\n iconUrl = \"/assets/img/home/Casino/diamante.svg\",\r\n onItemClick,\r\n onViewMore,\r\n mosaicFirst = true,\r\n gridSize = 1,\r\n}) => {\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\n const handlePrev = () => carouselRef.current?.prev();\r\n const handleNext = () => carouselRef.current?.next();\r\n\r\n const handleViewMore = () => {\r\n window.location.href = \"https://www.olimpo.bet/casino\";\r\n };\r\n\r\n const buildLoadingSlides = (mosaicFirst = true, gridSize = 4): CasinoSlide[] => {\r\n const mkItems = (n: number) =>\r\n Array.from({ length: n }, (_, i) => ({ id: `sk-${n}-${i}`, imageUrl: \"\" }));\r\n\r\n const slides: CasinoSlide[] = [];\r\n if (mosaicFirst) slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n return slides;\r\n };\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n const slides = isLoading\r\n ? buildLoadingSlides(mosaicFirst, gridSize)\r\n : buildCasinoSlides(items, mosaicFirst, gridSize);\r\n\r\n return (\r\n <section>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n {/* Header */}\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto auto\",\r\n alignItems: \"center\",\r\n columnGap: 1.5,\r\n rowGap: 1,\r\n }}\r\n >\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\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 </Box>\r\n\r\n <Box sx={{ justifySelf: \"end\" }}>\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n\r\n {/* Carousel (wheel interno por prop) */}\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={slides}\r\n perPage={1}\r\n gap=\"0px\"\r\n enableHorizontalWheel\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: true,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"start\",\r\n }}\r\n renderItem={(slide) => (\r\n <div style={{ alignSelf: \"start\" }}>\r\n <OraculoGameSlide\r\n items={slide.items}\r\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\r\n loading={isLoading}\r\n onClick={(itm) => {\r\n if (isLoading) return;\r\n\r\n const game = items.find((g, idx) => String(getGameId(g, idx)) === String(itm.id));\r\n if (!game) return;\r\n\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n showIframe?.();\r\n loadMachine?.(game, false, \"CASINO\");\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionCasino;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\r\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\r\n\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, { OraculoGameSlideItem } from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionVirtualesProps } from \"../../interfaces/oraculo/InterfaceVirtuales\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\ninterface VirtualSlide {\r\n id: string;\r\n kind: SlideKind;\r\n items: OraculoGameSlideItem[];\r\n}\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) => g.orden ?? g.machine ?? idx;\r\n\r\nconst buildVirtualSlides = (\r\n games: OraculoGameItem[],\r\n mosaicFirst = true,\r\n gridSize = 1\r\n): VirtualSlide[] => {\r\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\r\n id: getGameId(g, idx),\r\n imageUrl: g.logo ?? \"\",\r\n ...(g.background ? { background: g.background } : {}),\r\n }));\r\n\r\n if (!baseItems.length) return [];\r\n\r\n const slides: VirtualSlide[] = [];\r\n let start = 0;\r\n\r\n if (mosaicFirst) {\r\n const take = Math.min(baseItems.length, 1);\r\n slides.push({ id: \"mosaic-0\", kind: \"mosaic\", items: baseItems.slice(0, take) });\r\n start = take;\r\n }\r\n\r\n while (start < baseItems.length) {\r\n const end = Math.min(start + gridSize, baseItems.length);\r\n slides.push({ id: `grid-${start}`, kind: \"grid\", items: baseItems.slice(start, end) });\r\n start = end;\r\n }\r\n\r\n return slides;\r\n};\r\n\r\nconst buildLoadingVirtualSlides = (mosaicFirst = true, gridSize = 4): VirtualSlide[] => {\r\n const mkItems = (n: number) =>\r\n Array.from({ length: n }, (_, i) => ({ id: `sk-${n}-${i}`, imageUrl: \"\" }));\r\n\r\n const slides: VirtualSlide[] = [];\r\n if (mosaicFirst) slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n return slides;\r\n};\r\n\r\nconst OraculoSeccionVirtuales: React.FC<OraculoSeccionVirtualesProps> = ({\r\n items,\r\n title = \"Virtuales\",\r\n iconUrl = \"/assets/img/home/Virtuales/virtuales.svg\",\r\n onItemClick,\r\n onViewMore,\r\n mosaicFirst = true,\r\n gridSize = 1,\r\n}) => {\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\n const handlePrev = () => carouselRef.current?.prev();\r\n const handleNext = () => carouselRef.current?.next();\r\n\r\n const handleViewMore = () => {\r\n window.location.href = \"https://www.olimpo.bet/juegos-virtuales\";\r\n };\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n const slides = isLoading\r\n ? buildLoadingVirtualSlides(mosaicFirst, gridSize)\r\n : buildVirtualSlides(items, mosaicFirst, gridSize);\r\n\r\n return (\r\n <section>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n {/* Header */}\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto auto\",\r\n alignItems: \"center\",\r\n columnGap: 1.5,\r\n rowGap: 1,\r\n }}\r\n >\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\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 </Box>\r\n\r\n <Box sx={{ justifySelf: \"end\" }}>\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={slides}\r\n perPage={1}\r\n gap=\"0\"\r\n enableHorizontalWheel\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: true,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"start\",\r\n perMove: 1,\r\n }}\r\n renderItem={(slide) => (\r\n <div style={{ alignSelf: \"start\" }}>\r\n <OraculoGameSlide\r\n items={slide.items}\r\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\r\n loading={isLoading}\r\n onClick={(itm) => {\r\n if (isLoading) return;\r\n\r\n const game = items.find((g, idx) => String(getGameId(g, idx)) === String(itm.id));\r\n if (!game) {\r\n console.warn(\"[virtuales] no se encontró game para id:\", itm.id);\r\n return;\r\n }\r\n\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n showIframe?.();\r\n loadMachine?.(game, false, \"VIRTUALES\");\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionVirtuales;\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\n\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoWelcomeBanner from \"../../molecules/OraculoWelcomeBanner/OraculoWelcomeBanner\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport { OraculoSeccionBonoProps, OraculoBonosItem } from \"../../interfaces/oraculo/InterfaceBonos\";\r\n\r\nconst buildSectionSx = (bgUrl: string) => ({\r\n position: \"relative\" as const,\r\n py: 8,\r\n color: \"#fff\",\r\n backgroundImage: `\r\n linear-gradient(to bottom,#121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to left, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to right, #121212 0%, rgba(18,18,18,0) 10%),\r\n url(\"${bgUrl}\")\r\n `,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n backgroundSize: \"cover\",\r\n});\r\n\r\nconst headlineBaseSx = {\r\n textAlign: \"center\" as const,\r\n lineHeight: 1.1,\r\n mb: 1.5,\r\n};\r\n\r\nconst hlTopSx = {\r\n display: \"inline-block\",\r\n fontWeight: 600,\r\n fontSize: 24,\r\n};\r\n\r\nconst hlBottomSx = {\r\n display: \"inline-block\",\r\n fontSize: 24,\r\n lineHeight: 1.1,\r\n WebkitTextStroke: \"0.3px rgba(255, 255, 255, .5)\",\r\n textShadow: `\r\n 0 0 2px rgba(255, 255, 255, .95),\r\n 0 0 6px rgba(255, 255, 255, .6),\r\n 0 1px 0 rgba(137, 137, 137, .85)\r\n `,\r\n};\r\n\r\nconst OraculoSeccionBonoBienvenida: React.FC<OraculoSeccionBonoProps> = ({\r\n headline,\r\n headline2,\r\n items,\r\n backgroundImageUrl,\r\n}) => {\r\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\r\n const showDots = items.length > 1;\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const wheelHostRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const navRef = useRef(navState);\r\n useEffect(() => {\r\n navRef.current = navState;\r\n }, [navState]);\r\n\r\n const wheelLockRef = useRef(false);\r\n const wheelUnlockTimerRef = useRef<number | null>(null);\r\n\r\n const activeSlide = items?.[activeIndex];\r\n\r\n const bgUrl = useMemo(\r\n () => activeSlide?.backgroundImageUrl ?? backgroundImageUrl ?? \"\",\r\n [activeSlide, backgroundImageUrl]\r\n );\r\n\r\n const sectionSx = buildSectionSx(bgUrl);\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n useEffect(() => {\r\n const el = wheelHostRef.current;\r\n if (!el) return;\r\n\r\n const THRESHOLD = 6;\r\n const INVERT = false;\r\n const LOCK_MS = 380;\r\n\r\n const onWheel = (e: WheelEvent) => {\r\n if (isLoading) return;\r\n if (e.ctrlKey) return;\r\n\r\n if (wheelLockRef.current) return;\r\n\r\n const dx = e.deltaX;\r\n const dy = e.deltaY;\r\n\r\n // solo horizontal\r\n if (Math.abs(dx) <= Math.abs(dy)) return;\r\n if (Math.abs(dx) < THRESHOLD) return;\r\n\r\n const dirNext = INVERT ? dx < 0 : dx > 0;\r\n\r\n // si no es loop, evitamos “rebotar” en bordes\r\n if (dirNext && navRef.current.isEnd) return;\r\n if (!dirNext && navRef.current.isStart) return;\r\n\r\n e.preventDefault();\r\n\r\n wheelLockRef.current = true;\r\n if (dirNext) carouselRef.current?.next();\r\n else carouselRef.current?.prev();\r\n\r\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\r\n wheelUnlockTimerRef.current = window.setTimeout(() => {\r\n wheelLockRef.current = false;\r\n }, LOCK_MS);\r\n };\r\n\r\n el.addEventListener(\"wheel\", onWheel, { passive: false });\r\n return () => {\r\n el.removeEventListener(\"wheel\", onWheel as any);\r\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\r\n };\r\n }, [isLoading]);\r\n\r\n const renderSlide = (it: OraculoBonosItem, desktop: boolean) => {\r\n const hl1 = it.headline ?? headline;\r\n const hl2 = it.headline2 ?? headline2;\r\n\r\n if (!desktop) {\r\n return (\r\n <Box sx={{ textAlign: \"center\" }}>\r\n {(hl1 || hl2) && (\r\n <Box sx={headlineBaseSx}>\r\n {hl1 && (\r\n <Typography component=\"span\" sx={hlTopSx}>\r\n {hl1}\r\n </Typography>\r\n )}\r\n {hl2 && (\r\n <>\r\n <br />\r\n <Typography component=\"span\" sx={hlBottomSx}>\r\n {hl2}\r\n </Typography>\r\n </>\r\n )}\r\n </Box>\r\n )}\r\n\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <OraculoWelcomeBanner {...it} onButtonClick={it.onButtonClick} variant=\"small\" />\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n sx={{\r\n maxWidth: 1200,\r\n mx: \"auto\",\r\n px: 15,\r\n display: \"grid\",\r\n gridTemplateColumns: \"260px minmax(0, 1fr)\",\r\n alignItems: \"center\",\r\n columnGap: 6,\r\n }}\r\n >\r\n {(hl1 || hl2) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n minHeight: \"100%\",\r\n }}\r\n >\r\n <Box sx={{ ...headlineBaseSx, textAlign: \"left\", mb: 0 }}>\r\n {hl1 && (\r\n <Typography component=\"span\" sx={hlTopSx}>\r\n {hl1}\r\n </Typography>\r\n )}\r\n {hl2 && (\r\n <>\r\n <br />\r\n <Typography component=\"span\" sx={hlBottomSx}>\r\n {hl2}\r\n </Typography>\r\n </>\r\n )}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\r\n <Box sx={{ width: \"100%\", maxWidth: 600, mx: \"auto\" }}>\r\n <OraculoWelcomeBanner {...it} onButtonClick={it.onButtonClick} variant=\"large\" />\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box component=\"section\" sx={sectionSx}>\r\n <div ref={wheelHostRef} style={{ width: \"100%\" }}>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={1}\r\n gap={\"0px\"}\r\n options={{\r\n autoWidth: false,\r\n // si quieres, puedes activar loop acá:\r\n // type: \"loop\",\r\n // perMove: 1,\r\n // focus: \"center\",\r\n // pagination: false,\r\n // arrows: false,\r\n // drag: true,\r\n }}\r\n renderItem={(it) => (\r\n <Box sx={{ width: \"100%\" }}>\r\n {renderSlide(it, !isMobile)}\r\n </Box>\r\n )}\r\n onMove={({ index, isStart, isEnd }: any) => {\r\n setActiveIndex(index);\r\n if (typeof isStart === \"boolean\" && typeof isEnd === \"boolean\") {\r\n setNavState({ isStart, isEnd });\r\n }\r\n }}\r\n />\r\n </div>\r\n\r\n {showDots && (\r\n <Box sx={{ mt: 2, display: \"flex\", justifyContent: \"center\" }}>\r\n <OraculoCarouselDots\r\n total={items.length}\r\n active={activeIndex}\r\n onSelect={(i) => {\r\n setActiveIndex(i);\r\n carouselRef.current?.go(i);\r\n }}\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionBonoBienvenida;\r\n","import React, { useLayoutEffect, useRef } from \"react\";\r\nimport \"./OraculoSeccionClubOlimpo.css\";\r\nimport OraculoClubOlimpoVisual from \"../../molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual\";\r\nimport { OraculoSeccionClubOlimpoItem } from \"../../interfaces/oraculo/InterfaceClubOlimpo\";\r\n\r\nexport interface OraculoSeccionClubOlimpoItems {\r\n className?: string;\r\n /** Si true, hace el efecto full-bleed (100vw centrado) */\r\n fullBleed?: boolean;\r\n /** Lista de variantes (puedes pasar 1 o varias). */\r\n items: OraculoSeccionClubOlimpoItem;\r\n /** Índice del item a mostrar si pasas varios. */\r\n selectedIndex?: number;\r\n /** aria-label de la sección (fallback al imgAlt del item seleccionado). */\r\n ariaLabel?: string;\r\n}\r\n\r\nconst OraculoSeccionClubOlimpo: React.FC<OraculoSeccionClubOlimpoItems> = ({\r\n className = \"\",\r\n fullBleed = true,\r\n items,\r\n selectedIndex = 0,\r\n ariaLabel,\r\n}) => {\r\n const rootRef = useRef<HTMLDivElement | null>(null);\r\n const bottomRef = useRef<HTMLDivElement | null>(null);\r\n\r\n if (!items ) return null;\r\n\r\n const onClick = () => {\r\n window.location.href = \"https://www.olimpo.bet/conoce-club-olimpo\";\r\n };\r\n\r\n const item = Array.isArray(items) \r\n ? items[selectedIndex]\r\n : items;\r\n\r\n useLayoutEffect(() => {\r\n if (!rootRef.current || !bottomRef.current) return;\r\n if (typeof ResizeObserver === \"undefined\") return;\r\n\r\n const root = rootRef.current;\r\n const bottom = bottomRef.current;\r\n\r\n const update = () => {\r\n root.style.setProperty(\r\n \"--orc-co-bottomH\",\r\n `${bottom.offsetHeight + 16}px`\r\n );\r\n };\r\n\r\n const ro = new ResizeObserver(update);\r\n ro.observe(bottom);\r\n update();\r\n\r\n return () => ro.disconnect();\r\n }, []);\r\n\r\n const rootClass = [\r\n \"orc-co-wrap\",\r\n fullBleed ? \"orc-co-fullBleed\" : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <section\r\n ref={rootRef}\r\n className={rootClass}\r\n aria-label={ariaLabel || item.imgAlt || \"Club Olimpo\"}\r\n >\r\n <div ref={bottomRef}>\r\n <OraculoClubOlimpoVisual\r\n text={item.text}\r\n // onClick={item.onClick}\r\n onClick={onClick}\r\n imgAlt={item.imgAlt}\r\n imgSrcMobile={item.imgMobile}\r\n imgSrcDesktopBg={item.imgDesktopBg}\r\n imgSrcDesktopLogo={item.imgDesktopLogo}\r\n />\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionClubOlimpo;\r\n","import { useRef, useState, useEffect } 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\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\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState([]);\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 carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n carouselRef.current?.next();\r\n \r\n };\r\n\r\n const handleViewMore = () => {\r\n verMasSeccionCombinadas();\r\n };\r\n\r\n async function loadDataEventSpecial() {\r\n try {\r\n const listRes = await fetch(SPECIALS_GROUPS_URL);\r\n const listData = await listRes.json();\r\n\r\n const groupId = listData?.group?.groups?.[0]?.id;\r\n\r\n if (!groupId) {\r\n console.error(\"Could not extract group ID\");\r\n return;\r\n }\r\n\r\n const SPECIALS_URL = `https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/prepackcoupon/eventgroup/${groupId}.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764283566783&prePackCouponTags=CUSTOM`;\r\n\r\n const response = await fetch(SPECIALS_URL);\r\n const data = await response.json();\r\n\r\n setEvents(\r\n mergeEventOffers(data.events, data.betOffers, data.prePackCoupons)\r\n );\r\n } catch (e) {\r\n console.error(\"loadDataEventSpecial error:\", e);\r\n }\r\n}\r\n\r\n function mergeEventOffers(eventos:any, apuestas : any, prePackCoupons : any) {\r\n const results : any = [] ;\r\n\r\n for (const coupon of prePackCoupons) {\r\n // Build outcome set only for this coupon\r\n const usedOutcomeIds = getUsedOutcomeIds([coupon]);\r\n const reqs = extractRequirements(coupon);\r\n\r\n // Filter apuestas only using this coupon’s outcomes\r\n const apuestasByEvent = apuestas.reduce((acc:any, a:any) => {\r\n if (!acc[a.eventId]) acc[a.eventId] = [];\r\n\r\n const filteredOutcomes = a.outcomes.filter((o:any) =>\r\n usedOutcomeIds.has(o.id)\r\n );\r\n\r\n if (filteredOutcomes.length > 0) {\r\n const requiredIds = Array.from(\r\n reqs?.[0]?.requiredOutcomeIds ?? []\r\n );\r\n const outcomesWithPosition = filteredOutcomes.map((o: any) => ({\r\n ...o,\r\n position: requiredIds.indexOf(o.id)\r\n }))\r\n \r\n acc[a.eventId].push({\r\n ...a,\r\n outcomes: outcomesWithPosition\r\n });\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n // Extract required outcomes of THIS coupon\r\n\r\n // Now create duplicated event\r\n eventos.forEach((evento : any) => {\r\n if (evento.id !== coupon.prePackCouponRows[0].eventId) return;\r\n\r\n const eventOutcomeSet = usedOutcomeIds;\r\n\r\n let combinadoTotal = null;\r\n for (const r of reqs) {\r\n const fullMatch =\r\n [...r.requiredOutcomeIds].every(id => eventOutcomeSet.has(id));\r\n\r\n if (fullMatch) {\r\n combinadoTotal = r.decimal;\r\n break;\r\n }\r\n }\r\n\r\n results.push({\r\n ...evento,\r\n combinadoTotal,\r\n betoffers: apuestasByEvent[evento.id] || [],\r\n couponId: coupon.id // optional for tracking\r\n });\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction extractRequirements(coupon : any) {\r\n const reqs = [];\r\n\r\n for (const row of coupon.prePackCouponRows) {\r\n if (row.type === \"BET_BUILDER\" && row.group?.groups) {\r\n const requiredOutcomeIds = new Set();\r\n row.group.groups.forEach((g:any) => {\r\n g.outcomes?.forEach((o:any) => requiredOutcomeIds.add(o.id));\r\n });\r\n\r\n reqs.push({\r\n requiredOutcomeIds,\r\n decimal: row.odds.decimal\r\n });\r\n }\r\n }\r\n\r\n return reqs;\r\n}\r\n\r\nfunction getUsedOutcomeIds(prePackCoupons : any) {\r\n const allIds = new Set();\r\n\r\n for (const coupon of prePackCoupons) {\r\n for (const row of coupon.prePackCouponRows) {\r\n if (row.type === \"BET_BUILDER\" && row.group?.groups) {\r\n // Extract outcomes inside nested groups\r\n row.group.groups.forEach((g:any) => {\r\n g.outcomes?.forEach((o:any) => allIds.add(o.id));\r\n });\r\n }\r\n\r\n if (row.type === \"SIMPLE\" && row.outcome) {\r\n allIds.add(row.outcome.id);\r\n }\r\n }\r\n }\r\n return allIds;\r\n}\r\n\r\n useEffect(() => {\r\n loadDataEventSpecial();\r\n}, []);\r\n\r\n const sectionClassName = className || undefined;\r\n\r\n if (!events || 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 <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\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={events.filter(event => event['combinadoTotal'] !== null)}\r\n perPage={undefined}\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move' }}\r\n useIndexAsKey\r\n enableHorizontalWheel\r\n breakpoints={{\r\n 768: { perPage: 1.2, gap: \"12px\", padding: { left: \"0px\", right: \"0px\" }, }, \r\n }}\r\n renderItem={(p) => <OraculoEventCombinadasCard event={p} />}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport styles from \"./OraculoEventEnVivoCard.module.css\";\r\n\r\nexport default function OraculoEventEnVivoCardSkeleton({}) {\r\n return (\r\n <div\r\n className={styles.cardWrapper}\r\n >\r\n <Stack direction=\"column\" spacing={1}>\r\n\r\n {/* Header */}\r\n <Stack spacing={1} direction=\"row\" >\r\n <Skeleton variant=\"text\" width=\"60%\" height={24} />\r\n <Skeleton variant=\"text\" width=\"39%\" height={24} />\r\n </Stack>\r\n\r\n {/* Teams + Score */}\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n <Skeleton variant=\"text\" width={40} height={40} />\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n </Stack>\r\n\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n <Skeleton variant=\"text\" width={40} height={16} />\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n </Stack>\r\n\r\n {/* Labels */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n </Stack>\r\n\r\n {/* Buttons */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n </Stack>\r\n\r\n </Stack>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./FadeItemWrapper.module.css\";\r\n\r\nexport default function FadeItemWrapper({ children }: { children: React.ReactNode }) {\r\n return <div className={styles.fadeWrapper}>{children}</div>;\r\n}\r\n","import { useRef, useState, useEffect, useCallback } 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\n\r\nimport React from \"react\";\r\nimport Stack from '@mui/material/Stack';\r\nimport { verMasSeccionEnVivo, fetchJerseys, useDebouncedValue } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\nexport default function OraculoSeccionEventoEnVivo({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl = 'https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/icon.svg',\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n\r\n const LIVE_EVENTS_URL = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true\"; //cada 20s\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[] | null>(null);\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n const [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\r\n const fetchingRef = useRef(false);\r\n const [orderedEventIds, setOrderedEventIds] = useState<string[] | null>(null);\r\n const orderIdsFetchedRef = useRef(false);\r\n\r\n\r\n const debouncedVisibleRange = useDebouncedValue(visibleRange, 300);\r\n\r\n const handlePrev = () => {\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n carouselRef.current?.next();\r\n };\r\n\r\n const handleViewMore = () => {\r\n verMasSeccionEnVivo();\r\n };\r\n const blocked = [\"esports\", \"cyber\"];\r\n\r\n const filterFootballEvents = (events: any[]) =>\r\n events.filter(ev => {\r\n if (ev.event.sport !== \"FOOTBALL\") return false;\r\n\r\n const group = ev.event.group?.toLowerCase() || \"\";\r\n return !blocked.some(word => group.includes(word));\r\n });\r\n\r\n\r\n\r\n const loadData = useCallback(async () => {\r\n try {\r\n let orderIds = orderedEventIds;\r\n\r\n if (!orderIdsFetchedRef.current && orderedEventIds === null) {\r\n orderIdsFetchedRef.current = true;\r\n\r\n try {\r\n const response = await fetch(\r\n \"https://api.mktolimpo.com/api/kambi/eventos/orden\"\r\n );\r\n\r\n const json = response.ok ? await response.json() : null;\r\n orderIds = json?.data?.event_ids || [];\r\n } catch {\r\n orderIds = [];\r\n }\r\n\r\n setOrderedEventIds(orderIds);\r\n }\r\n\r\n const response = await fetch(LIVE_EVENTS_URL);\r\n const data = await response.json();\r\n const filteredEvents = filterFootballEvents(data.events);\r\n\r\n if (!orderIds || orderIds.length === 0) {\r\n setEvents(filteredEvents);\r\n return;\r\n }\r\n\r\n const orderMap = new Map(\r\n orderIds.map((id, index) => [String(id), index])\r\n );\r\n\r\n const sortedEvents = [...filteredEvents].sort((a, b) => {\r\n const aIndex = orderMap.get(String(a.event.id));\r\n const bIndex = orderMap.get(String(b.event.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 setEvents(sortedEvents);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}, [orderedEventIds]);\r\n\r\n\r\nuseEffect(() => {\r\n loadData();\r\n const interval = setInterval(loadData, 20000);\r\n return () => clearInterval(interval);\r\n}, [loadData]);\r\n\r\nuseEffect(() => {\r\n if (\r\n debouncedVisibleRange.start === null ||\r\n debouncedVisibleRange.end === null ||\r\n !events?.length ||\r\n fetchingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n const BUFFER = 3;\r\n const from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n const to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n const idsToFetch = events\r\n .slice(from, to + 1)\r\n .map(ev => ev?.event.id)\r\n .filter(Boolean)\r\n .filter(id => jerseys[id] === undefined);\r\n\r\n if (!idsToFetch.length) return;\r\n\r\n fetchingRef.current = true;\r\n\r\n fetchJerseys(idsToFetch)\r\n .then(res => {\r\n setJerseys(prev => ({\r\n ...prev,\r\n ...res.events,\r\n }));\r\n })\r\n .catch(e => {\r\n console.error(\"Jersey fetch error\", e);\r\n })\r\n .finally(() => {\r\n fetchingRef.current = false;\r\n });\r\n}, [debouncedVisibleRange, events, jerseys]);\r\n\r\n\r\n \r\n\r\n const sectionClassName = className || undefined;\r\n const isLoading = events === null;\r\n\r\nif (!isLoading && events.length === 0) {\r\n return null;\r\n}\r\n\r\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 <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\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={\r\n isLoading\r\n ? Array(4).fill({}) // show 4 skeleton slides\r\n : events.slice(0,20)\r\n }\r\n perPage={undefined}\r\n \r\n enableHorizontalWheel\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move'}}\r\n breakpoints={{\r\n 400: { gap: \"4px\", focus: \"center\" }, \r\n 768: { gap: \"8px\", focus: \"center\" }, \r\n 1024: { gap: \"10px\" , focus: \"center\" },\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\r\n return isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCard\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\t\t\t\t\t\t\tsetNavState({ isStart, isEnd });\r\n\t\t\t\t\t\t\tsetVisibleRange({\r\n\t\t\t\t\t\t\t\tstart: visibleStart,\r\n\t\t\t\t\t\t\t\tend: visibleEnd,\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}}\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} 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 { verMasSeccionSemana, fetchJerseys, useDebouncedValue } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\n\tasync function fetchInBatches(urls: string[], batchSize = 2, signal: AbortSignal,) {\r\n\t\tconst results: any[] = [];\r\n\t\tfor (let i = 0; i < urls.length; i += batchSize) {\r\n\t\t\tif (signal.aborted) {\r\n\t\t\t\tthrow new DOMException(\"Aborted\", \"AbortError\");\r\n\t\t\t}\r\n\t\t\tconst batch = urls.slice(i, i + batchSize);\r\n\t\t\tconst responses = await Promise.all(\r\n\t\t\tbatch.map(u => fetch(u, { signal }).then(r => r.json()))\r\n\t\t\t);\r\n\t\t\tresults.push(...responses);\r\n\t\t}\r\n\t\treturn results;\r\n\t}\r\n\r\n\tfunction sortEvents(evs: any[]) {\r\n\t\treturn [...evs].sort(\r\n\t\t(a, b) => new Date(a.start).getTime() - new Date(b.start).getTime()\r\n\t\t);\r\n\t}\r\n\tfunction filterEventsWithinOneWeek(events: any[]) {\r\n\t\tconst now = new Date();\r\n\t\tconst oneWeekLater = new Date(now.getTime() + 20 * 24 * 60 * 60 * 1000);\r\n\r\n\t\treturn events.filter((event: any) => {\r\n\t\tif (!event.start) return false;\r\n\r\n\t\tconst eventDate = new Date(event.start);\r\n\t\treturn eventDate >= now && eventDate <= oneWeekLater;\r\n\t\t});\r\n\t}\r\n\tfunction mergeEventOffersOutcome(eventos : any, apuestas : any) {\r\n\t\tconst filtered = apuestas.filter((b:any) => b.betOfferType?.id === 2);\r\n\r\n\t\tconst apuestasByEvent = filtered.reduce((acc : any, b : any) => {\r\n\t\tif (!acc[b.eventId]) acc[b.eventId] = [];\r\n\t\tacc[b.eventId].push(b);\r\n\t\treturn acc;\r\n\t\t}, {});\r\n\r\n\t\treturn eventos\r\n\t\t.filter((evento : any) => apuestasByEvent[evento.id]) \r\n\t\t.map((evento: any) => ({\r\n\t\t\t...evento,\r\n\t\t\toutcome: apuestasByEvent[evento.id],\r\n\t\t}));\r\n\t}\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 \r\n\tconst WEEK_EVENTS_URL = 'https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group.json?channel_id=1&client_id=200&lang=es_PE&market=PE'\r\n\tconst carouselRef = useRef<any>(null);\r\n\tconst [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\tconst [events, setEvents] = useState<any[] | null>(null);\r\n\tconst pendingJerseysRef = useRef<Set<number>>(new Set());\r\n\tconst [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n\tconst [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\r\n\tconst COMMON_QUERY = \"channel_id=1&client_id=200&competitionId=undefined&lang=es_PE&market=PE&useCombined=true\";\r\n\tconst debouncedVisibleRange = useDebouncedValue(visibleRange, 250);\r\n const fetchingRef = useRef(false);\r\n\r\n\tconst handleViewMore = () => {\r\n\t\t\tverMasSeccionSemana();\r\n\t};\r\n\r\n\tasync function loadDataWeekEvent(signal: AbortSignal) {\r\n\t\tlet orderedGroupIds: string[] = [];\r\n\t\tlet orderedEventIds: string[] = []\r\n\t\ttry {\r\n\t\tconst orderResponse = await fetch(\r\n\t\t\t\"https://api.mktolimpo.com/api/kambi/eventos/orden\",\r\n \t\t{ signal }\r\n\t\t);\r\n\r\n\t\tif (orderResponse.ok) {\r\n\t\t\tconst orderJson = await orderResponse.json();\r\n\t\t\torderedGroupIds = orderJson?.data?.group_ids || [];\r\n\t\t\torderedEventIds = orderJson?.data?.event_ids || [];\r\n\t\t}\r\n\t\t} catch (e: any) {\r\n\t\t\tif (e.name !== \"AbortError\") {\r\n\t\t\tconsole.warn(\"Order API not available, using default group order\");\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(WEEK_EVENTS_URL, { signal });\r\n\t\t\tconst data = await response.json();\r\n\t\t\tconst football = data.group.groups.find(\r\n\t\t\t(g : any) => g.englishName === \"Football\"\r\n\t\t\t);\r\n\r\n\t\t\tif (!football || !Array.isArray(football.groups)) {\r\n\t\t\t\tconsole.error(\"Football groups not found\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet groups = [...football.groups];\r\n\r\n\t\t\t// 3️⃣ Apply group_ids order\r\n\t\t\tif (orderedGroupIds.length > 0) {\r\n\t\t\tconst orderMap = new Map(\r\n\t\t\t\torderedGroupIds.map((id, index) => [id, index])\r\n\t\t\t);\r\n\r\n\t\t\tgroups.sort((a: any, b: any) => {\r\n\t\t\t\tconst aIndex = orderMap.get(String(a.id));\r\n\t\t\t\tconst bIndex = orderMap.get(String(b.id));\r\n\r\n\t\t\t\tif (aIndex !== undefined && bIndex !== undefined) {\r\n\t\t\t\treturn aIndex - bIndex;\r\n\t\t\t\t}\r\n\t\t\t\tif (aIndex !== undefined) return -1;\r\n\t\t\t\tif (bIndex !== undefined) return 1;\r\n\t\t\t\treturn 0;\r\n\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst N = 5; \r\n\r\n\t\t\tconst firstGroups = groups.slice(0, N);\r\n\r\n\t\t\tconst buildUrls = (group : any) => {\r\n\t\t\t\tconst base = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football\";\r\n\r\n\t\t\t\tif (group.groups && group.groups.length > 0) {\r\n\t\t\t\tconst sub = group.groups[0]; // ONLY FIRST child\r\n\t\t\t\treturn [\r\n\t\t\t\t\t`${base}/${group.termKey}/${sub.termKey}/all/matches.json?${COMMON_QUERY}`\r\n\t\t\t\t];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn [\r\n\t\t\t\t\t`${base}/${group.termKey}/all/all/matches.json?${COMMON_QUERY}`\r\n\t\t\t\t];\r\n\t\t\t};\r\n\r\n\t\t\tconst urls = firstGroups.flatMap(buildUrls);\r\n\r\n\t\t\tloadAllGroupEvents(urls, orderedEventIds, signal\r\n\r\n\t\t\t)\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\tasync function loadAllGroupEvents(urls : any, orderEvents : any, signal: AbortSignal) {\r\n\t\ttry {\r\n\t\t\tconst responses = await fetchInBatches(urls, 2, signal);\r\n\r\n\t\t\tlet allEvents : any = [];\r\n\t\t\tlet allBetOffers : any = [];\r\n\r\n\t\t\tresponses.forEach(data => {\r\n\t\t\t\tif (!data.events) return;\r\n\r\n\t\t\t\tallEvents.push(...data.events.map((item: any) => item.event));\r\n\t\t\t\tallBetOffers.push(...data.events.flatMap((item:any) => item.betOffers || []));\r\n\t\t\t});\r\n\r\n\t\t\tconst merged = mergeEventOffersOutcome(allEvents, allBetOffers);\r\n\t\t\tconst finalEvents = sortEvents(filterEventsWithinOneWeek(merged));\r\n\r\n\t\t\tlet orderedEvents = finalEvents;\r\n\r\n\t\t\tif (orderEvents.length > 0) {\r\n\t\t\t\t\tconst orderMap = new Map<string, number>(\r\n\t\t\t\torderEvents.map((id: number | string, index: number) => [\r\n\t\t\t\t\tString(id),\r\n\t\t\t\t\tindex,\r\n\t\t\t\t])\r\n\t\t\t);\r\n\t\t\torderedEvents = [...finalEvents].sort((a, b) => {\r\n\t\t\t\tconst aIndex = orderMap.get(String(a.id));\r\n\t\t\t\tconst bIndex = orderMap.get(String(b.id));\r\n\r\n\t\t\t\tif (aIndex !== undefined && bIndex !== undefined) {\r\n\t\t\t\t\treturn aIndex - bIndex;\r\n\t\t\t\t}\r\n\t\t\t\tif (aIndex !== undefined) return -1;\r\n\t\t\t\tif (bIndex !== undefined) return 1;\r\n\t\t\t\treturn 0;\r\n\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t\tif (signal.aborted) return;\r\n\t\t\tsetEvents(orderedEvents);\r\n\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Error loading events:\", error);\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\r\n \tuseEffect(() => {\r\n\t\tif (!items) return;\r\n\r\n\t\tconst controller = new AbortController();\r\n\r\n\t\tloadDataWeekEvent(controller.signal);\r\n\r\n\t\treturn () => {\r\n\t\t\tcontroller.abort();\r\n\t\t};\r\n\t}, [items]);\r\n\r\n\r\nuseEffect(() => {\r\n\r\n\tif (\r\n\t debouncedVisibleRange.start === null ||\r\n\t debouncedVisibleRange.end === null ||\r\n\t !events?.length ||\r\n\t fetchingRef.current\r\n\t) {\r\n\t return;\r\n\t}\r\n\r\n const BUFFER = 2;\r\n\tconst from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n\tconst to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n\tconst idsToFetch = events\r\n\t .slice(from, to + 1)\r\n\t .map(ev => ev?.id)\r\n\t .filter(Boolean)\r\n\t .filter(id => jerseys[id] === undefined);\r\n\tif (!idsToFetch.length) return;\r\n\r\n\tlet cancelled = false;\r\n\tfetchingRef.current = true;\r\n\r\n\t(async () => {\r\n\t try {\r\n\t const res = await fetchJerseys(idsToFetch);\r\n\r\n\t if (!cancelled) {\r\n\t\tsetJerseys(prev => ({\r\n\t\t...prev,\r\n\t\t...res.events,\r\n\t\t}));\r\n\t }\r\n\t } catch (e) {\r\n\t console.error(\"Jersey fetch error\", e);\r\n\t } finally {\r\n\t fetchingRef.current = false;\r\n\t }\r\n\t})();\r\n\r\n\treturn () => {\r\n\t cancelled = true;\r\n\t};\r\n }, [debouncedVisibleRange, events]);\r\n\tconst sectionClassName = className || undefined;\r\n\t\tconst sectionStyle : React.CSSProperties = { paddingLeft: 0, width: \"100%\", boxSizing: \"border-box\"};\r\n\r\n const isLoading = events === null;\r\n\r\nif (!isLoading && events.length === 0) {\r\n return null;\r\n}\r\n\r\n\r\n\treturn (\r\n\t\t<section className={sectionClassName} style={sectionStyle}>\r\n\r\n\t\t\t<div className={styles.wrapper}>\r\n\t\t\t\t<div className={styles.container}>\r\n\r\n\t\t\t\t\t<Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n\t\t\t\t\t\t<OraculoSectionTitle title=\"Eventos de la semana\" />\r\n\t\t\t\t\t\t<div className={styles.buttonWrapper}>\r\n\t\t\t\t\t\t<OraculoButton variant=\"secondary\" size=\"lg\" fullWidth onClick={() => {handleViewMore() }} >Ver más</OraculoButton>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</Stack>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div style={{ minWidth: '180px' }}>\r\n\r\n\t\t\t\r\n\t\t\t\t\t<OraculoCarousel\r\n\t\t\t\t\t\tref={carouselRef}\r\n\t\t\t\t\t\titems={\r\n\t\t\t\t\t\tisLoading\r\n\t\t\t\t\t\t\t? Array(6).fill({}) // show 4 skeleton slides\r\n\t\t\t\t\t\t\t: events.slice(0, 20)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tperPage={3.5}\r\n\t\t\t\t\t\tgap=\"16px\"\r\n\t\t\t\t\t\tenableHorizontalWheel\r\n\t\t\t\t\t\toptions={{ autoWidth: true, trimSpace: true }}\r\n\t\t\t\t\t\tbreakpoints={{\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t1024:{ perPage: 1.4, gap: \"8px\", focus: \"center\", padding: { left: \"8px\", right: \"8px\" }, }, \r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\trenderItem={(p) => {\r\n\t\t\t const eventId = p.id ;\r\n const jersey =\r\n eventId in jerseys ? jerseys[eventId] : undefined;\r\n\t\t\t\t\t\t\treturn isLoading ? (\r\n\t\t\t\t\t\t\t\t<FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t\t<OraculoEventSemanaCardSkeleton />\r\n\t\t\t\t\t\t\t\t</FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t\t<OraculoEventSemanaCard event ={p} jersey={jersey} />\r\n\t\t\t\t\t\t\t\t</FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMove={({ isStart, isEnd, visibleStart, visibleEnd }) => {\r\n\t\t\t\t\t\t\tsetNavState({ isStart, isEnd });\r\n\t\t\t\t\t\t\tsetVisibleRange({\r\n\t\t\t\t\t\t\t\tstart: visibleStart,\r\n\t\t\t\t\t\t\t\tend: visibleEnd,\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</section>\r\n\t);\r\n}\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport {\r\n OraculoBannerItem,\r\n OraculoSeccionBannersProps,\r\n} from \"../../interfaces/oraculo/InterfaceBanner\";\r\n\r\nexport default function OraculoSeccionBanners({\r\n backgrounds,\r\n items,\r\n}: OraculoSeccionBannersProps) {\r\n const [activeDot, setActiveDot] = useState(0);\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n\r\n const totalDots = backgrounds?.length || 1;\r\n const isLoading = !backgrounds || backgrounds.length === 0;\r\n\r\n useEffect(() => {\r\n if (isLoading) return;\r\n if (!backgrounds || backgrounds.length <= 1) return;\r\n\r\n const id = window.setInterval(() => {\r\n carouselRef.current?.next();\r\n }, 5000);\r\n\r\n return () => window.clearInterval(id);\r\n }, [isLoading, backgrounds?.length]);\r\n\r\n\r\n return (\r\n <Box\r\n component=\"section\"\r\n sx={{\r\n position: \"relative\",\r\n overflow: \"visible\",\r\n }}\r\n >\r\n {/* Carrusel de backgrounds */}\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n height: { xs: 300, sm: 360, md: 420 },\r\n borderRadius: 0,\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={backgrounds}\r\n perPage={1}\r\n gap=\"0px\"\r\n enableHorizontalWheel\r\n options={{\r\n type: \"loop\",\r\n perMove: 1,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"center\",\r\n }}\r\n onMove={({ index }) => {\r\n const safe = ((index % totalDots) + totalDots) % totalDots;\r\n setActiveDot(safe);\r\n }}\r\n renderItem={(bg) => (\r\n <Box\r\n component=\"a\"\r\n href={bg.href}\r\n target={bg.target ?? \"_self\"}\r\n rel={bg.target === \"_blank\" ? \"noopener noreferrer\" : undefined}\r\n sx={{\r\n position: \"relative\",\r\n height: { xs: 300, sm: 360, md: 420 },\r\n display: \"block\",\r\n textDecoration: \"none\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <Box\r\n component=\"picture\"\r\n sx={{ position: \"absolute\", inset: 0, lineHeight: 0 }}\r\n >\r\n <source srcSet={bg.desktopSrc} media=\"(min-width:800px)\" />\r\n <source srcSet={bg.mobileSrc} media=\"(max-width:799px)\" />\r\n <Box\r\n component=\"img\"\r\n src={bg.fallbackSrc ?? bg.desktopSrc}\r\n alt=\"\"\r\n aria-hidden\r\n loading=\"lazy\"\r\n sx={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n }}\r\n />\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n pointerEvents: \"none\",\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n top: \"40%\",\r\n background:\r\n \"linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(18,18,18,0.85) 80%, #121212 100%)\",\r\n },\r\n }}\r\n />\r\n </Box>\r\n )}\r\n />\r\n\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n left: 0,\r\n right: 0,\r\n bottom: 72,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n zIndex: 2,\r\n }}\r\n >\r\n <OraculoCarouselDots total={totalDots} active={activeDot} />\r\n </Box>\r\n </Box>\r\n\r\n {/* Dock de items */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n bottom: { xs: -12, sm: 0 },\r\n left: 120,\r\n right: 120,\r\n \"@media (max-width:1024px)\": {\r\n left: 24,\r\n right: 24,\r\n },\r\n backgroundColor: \"#363636\",\r\n borderRadius: 2,\r\n p: 1.5,\r\n display: \"flex\",\r\n justifyContent: \"space-around\",\r\n alignItems: \"center\",\r\n boxShadow: \"0 10px 24px rgba(0,0,0,.35)\",\r\n zIndex: 3,\r\n }}\r\n >\r\n {items?.map((item: OraculoBannerItem) => (\r\n <Box\r\n key={item.id}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: { xs: \"column\", md: \"row\" },\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: { xs: 0.5, md: 1 },\r\n color: \"#FFFFFF\",\r\n minWidth: 0,\r\n cursor: item.onClick || item.href ? \"pointer\" : \"default\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n onClick={() => {\r\n if (item.onClick) return item.onClick();\r\n if (item.href) return (window.location.href = item.href ?? \"/#\");\r\n }}\r\n >\r\n {item.icon && (\r\n <Box\r\n component=\"img\"\r\n src={item.icon}\r\n alt={item.label || `icon-${item.id}`}\r\n sx={{\r\n width: { xs: 20, sm: 22, md: 24 },\r\n height: { xs: 20, sm: 22, md: 24 },\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n )}\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 10, sm: 11, md: 12 },\r\n fontWeight: 600,\r\n color: \"#E0E0E0\",\r\n textAlign: \"center\",\r\n }}\r\n >\r\n {item.label}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { Box, Stack, Typography } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport OraculoLogoMediosPago from \"../../atoms/OraculoLogo/OraculoLogoMediosPago\";\r\n\r\ntype LogoType = {\r\n src: string;\r\n alt: string;\r\n};\r\n\r\ntype Props = {\r\n title?: string;\r\n items?: LogoType[]; // <-- ahora solo 1 arreglo\r\n};\r\n\r\n// 7 items (ejemplo)\r\nconst DEFAULT_ITEMS: LogoType[] = [\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/IBK.svg\", alt: \"Interbank\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/Yape.svg\", alt: \"Yape\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/BCP.png\", alt: \"BCP\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/pagoEfectivo.png\", alt: \"PagoEfectivo\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/tupay.svg\", alt: \"Tupay\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/monnet.svg\", alt: \"Monnet\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/niubiz.svg\", alt: \"Niubiz\" },\r\n];\r\n\r\nexport default function OraculoSeccionMediosPago({\r\n title = \"Medios de pago\",\r\n items = DEFAULT_ITEMS,\r\n}: Props) {\r\n // 4/3 cuando son 7\r\n const split = Math.ceil(items.length / 2);\r\n const row1 = items.slice(0, split);\r\n const row2 = items.slice(split);\r\n\r\n return (\r\n <Box component=\"section\" aria-labelledby=\"mp-title\" sx={{ color: \"#fff\" }}>\r\n <Typography\r\n id=\"mp-title\"\r\n variant=\"h6\"\r\n sx={{\r\n fontWeight: 800,\r\n fontSize: { xs: 20, md: 32 },\r\n textAlign: \"center\",\r\n mb: 1.5,\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n\r\n <Box\r\n sx={{\r\n width: \"288px\",\r\n height: \"2px\",\r\n mx: \"auto\",\r\n mb: 3,\r\n opacity: 0.95,\r\n filter: \"blur(0.2px)\",\r\n background:\r\n \"linear-gradient(90deg, rgba(0,0,0,0) 0%, #1dd75b 18%, #23d46b 50%, #1dd75b 82%, rgba(0,0,0,0) 100%)\",\r\n }}\r\n />\r\n\r\n {/* 2 filas SIEMPRE (móvil y desktop) */}\r\n <Stack spacing={{ xs: 2, md: 3 }} alignItems=\"center\">\r\n <Stack\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n gap={{ xs: 2, md: 3 }}\r\n flexWrap=\"wrap\"\r\n >\r\n {row1.map((l, idx) => (\r\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\r\n ))}\r\n </Stack>\r\n\r\n <Stack\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n gap={{ xs: 2, md: 3 }}\r\n flexWrap=\"wrap\"\r\n >\r\n {row2.map((l, idx) => (\r\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\r\n ))}\r\n </Stack>\r\n </Stack>\r\n </Box>\r\n );\r\n}\r\n","import OraculoSeccionBonoBienvenida from \"../organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida\";\r\nimport OraculoSeccionTopJuegos from \"../organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos\";\r\nimport OraculoSeccionCasino from \"../organisms/OraculoSeccionCasino/OraculoSeccionCasino\";\r\nimport OraculoSeccionCasinoEnVivo from \"../organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo\";\r\nimport OraculoSeccionVirtuales from \"../organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales\";\r\nimport OraculoSeccionClubOlimpo from \"../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo\";\r\nimport OraculoSeccionDestacados from \"../organisms/OraculoSeccionDestacados/OraculoSeccionDestacados\";\r\nimport OraculoSeccionBanners from \"../organisms/OraculoSeccionBanners/OraculoSeccionBanners\";\r\nimport OraculoSeccionMediosPago from \"../organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago\";\r\nimport OraculoSeccionEventoCombinadas from \"../organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas\";\r\nimport OraculoSeccionEventoEnVivo from \"../organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo\";\r\nimport OraculoSeccionEventoSemana from \"../organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana\";\r\n\r\nimport React from \"react\";\r\n\r\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\r\n\r\nexport const Landing: LandingComponentMap = {\r\n OraculoSeccionDestacados,\r\n OraculoSeccionTopJuegos,\r\n OraculoSeccionCasinoEnVivo,\r\n OraculoSeccionCasino,\r\n OraculoSeccionVirtuales,\r\n OraculoSeccionClubOlimpo,\r\n OraculoSeccionBonoBienvenida,\r\n OraculoSeccionBanners,\r\n OraculoSeccionMediosPago,\r\n OraculoSeccionEventoEnVivo,\r\n OraculoSeccionEventoSemana,\r\n OraculoSeccionEventoCombinadas,\r\n};","\"use client\";\r\nimport React, { useEffect, useState, useMemo } from \"react\";\r\nimport { Container, Stack, useMediaQuery } from \"@mui/material\";\r\nimport { doc, onSnapshot, Firestore } from \"firebase/firestore\";\r\n// import \"@splidejs/react-splide/css\";\r\n\r\nimport { Landing } from \"./landingRegistry\";\r\nimport { clearOraculoExtras, setOraculoExtras } from \"../utils/openMachineRegistry\";\r\n// import \"../index.css\"\r\n\r\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\r\n\r\n// Es componente React si es función o componente objeto (MUI, etc.)\r\nconst isComponent = (val: any) =>\r\n typeof val === \"function\" ||\r\n (val && typeof val === \"object\" && \"$$typeof\" in val);\r\n\r\n// En oraculo-ui los organismos de landing se llaman OraculoSeccionXXX\r\nconst isSectionName = (key: string) => /^OraculoSeccion[A-Z]/.test(key);\r\n\r\nexport const LandingComponents: LandingComponentMap = Object.fromEntries(\r\n Object.entries(Landing).filter(\r\n ([key, val]) => isSectionName(key) && isComponent(val)\r\n )\r\n) as LandingComponentMap;\r\n\r\n// Section item model mirrors Firestore persisted structure\r\nexport type OraculoPageLandingPreviewSection = {\r\n id: number;\r\n title: string;\r\n componentKey: string;\r\n visible: boolean;\r\n order: number;\r\n props?: Record<string, unknown>;\r\n apiUrl?: string;\r\n dataMode?: \"url\" | \"manual\";\r\n variableName?: string;\r\n manualItems?: { fields: { name: string; type: string; value: string }[] }[];\r\n variableName2?: string;\r\n manualItems2?: { fields: { name: string; type: string; value: string }[] }[];\r\n manualScalarFields?: { name: string; type: string; value: string }[];\r\n apiMethod?: \"GET\" | \"POST\";\r\n apiParams?: { id: string; key: string; value: string }[];\r\n};\r\n\r\nexport type OpenMachineFn = (\r\n machine_name: string,\r\n provider: any,\r\n machine: any,\r\n external_id: any,\r\n type: any,\r\n demo: any,\r\n source: string\r\n) => void;\r\n\r\nexport type OraculoExtras = Array<[string, unknown]>;\r\n\r\nconst extrasToObject = (extras?: OraculoExtras): Record<string, unknown> => {\r\n try {\r\n return Object.fromEntries(extras ?? []);\r\n } catch (e) {\r\n console.warn(\"[oraculo] extras inválidos. Debe ser Array<[string, unknown]>\", extras);\r\n return {};\r\n }\r\n};\r\n\r\nconst asComponent = <T,>(val: unknown): T | undefined =>\r\n typeof val === \"function\" ? (val as T) : undefined;\r\n\r\nconst asFn = <T extends Function>(val: unknown): T | undefined =>\r\n typeof val === \"function\" ? (val as T) : undefined;\r\n\r\n/** Payload bruto obtenido por fetch o construido manualmente */\r\ntype SectionPayload =\r\n | Record<string, unknown>\r\n | Array<unknown>\r\n | null\r\n | undefined;\r\n\r\nexport interface OraculoPageLandingPreviewProps {\r\n /** Optional override: if provided, renders these sections instead of fetching Firestore */\r\n sectionsOverride?: OraculoPageLandingPreviewSection[];\r\n /** Firestore document id (default 'home') */\r\n docId?: string;\r\n /** Instancia de Firestore proporcionada por la app que consume el paquete */\r\n db: Firestore;\r\n /** Componente que se renderizará mientras carga */\r\n loader?: React.ComponentType<any>;\r\n // Optional extras\r\n extras?: OraculoExtras;\r\n}\r\n\r\nclass HttpError extends Error {\r\n constructor(\r\n public status: number,\r\n public url: string,\r\n public statusText: string\r\n ) {\r\n super(`HTTP ${status} ${statusText}`);\r\n this.name = \"HttpError\";\r\n }\r\n}\r\n\r\ntype ComponentMap = Record<\r\n string,\r\n React.ComponentType<Record<string, unknown>>\r\n>;\r\n\r\nconst noMostrarSinItems = [\r\n \"OraculoSeccionEventoEnVivo\",\r\n \"OraculoSeccionEventoSemana\",\r\n \"OraculoSeccionEventoCombinadas\",\r\n];\r\n\r\nconst OraculoPageLandingPreview: React.FC<OraculoPageLandingPreviewProps> = ({\r\n sectionsOverride,\r\n docId = \"home\",\r\n db,\r\n extras,\r\n loader\r\n}) => {\r\n const extrasObj = useMemo(() => extrasToObject(extras), [extras]);\r\n\r\n const Loader = loader || extrasObj[\"loader\"] as React.ComponentType<any> | undefined;\r\n \r\n\r\n const [sections, setSections] = useState<OraculoPageLandingPreviewSection[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [sectionDataMap, setSectionDataMap] = useState<\r\n Record<number, SectionPayload>\r\n >({});\r\n const [sectionLoadingMap, setSectionLoadingMap] = useState<\r\n Record<number, boolean>\r\n >({});\r\n const [sectionErrorMap, setSectionErrorMap] = useState<\r\n Record<number, string>\r\n >({});\r\n\r\n const isDesktop = useMediaQuery(\"(min-width:1024px)\");\r\n\r\n // Fetch sections from Firestore unless override provided\r\n useEffect(() => {\r\n if (sectionsOverride) return;\r\n if (!db) return; // seguridad extra por si alguien no pasa db\r\n\r\n setLoading(true);\r\n\r\n const unsubscribe = onSnapshot(\r\n doc(db, \"landings\", docId),\r\n (snap) => {\r\n try {\r\n let fetched: OraculoPageLandingPreviewSection[] = snap.exists()\r\n ? (snap.data()?.sections as OraculoPageLandingPreviewSection[]) ||\r\n []\r\n : [];\r\n fetched = fetched\r\n .slice()\r\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\r\n .map((s, i) => ({ ...s, order: i + 1 }));\r\n // setSections([...new Set([...fetched, ...arraydemo])]);\r\n setSections(fetched);\r\n console.log(\"fetched: \", fetched);\r\n } catch (e) {\r\n console.error(\"Error procesando landings/\" + docId, e);\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n (error) => {\r\n console.error(\"Error escuchando landings/\" + docId, error);\r\n setLoading(false);\r\n }\r\n );\r\n\r\n return () => unsubscribe();\r\n }, [sectionsOverride, docId, db]);\r\n\r\n useEffect(() => {\r\n setOraculoExtras(extrasObj);\r\n return () => clearOraculoExtras();\r\n }, [extrasObj]);\r\n\r\n useEffect(() => {\r\n // preload all components used in sections\r\n const effectiveSections = sectionsOverride\r\n ? sectionsOverride.slice()\r\n : sections.slice();\r\n const toLoad = effectiveSections\r\n .map((s) => s.componentKey)\r\n .filter((key) => !!key);\r\n\r\n if (toLoad.length === 0) return;\r\n\r\n }, [sectionsOverride, sections]);\r\n\r\n const fetchSectionData = async (\r\n section: OraculoPageLandingPreviewSection\r\n ): Promise<SectionPayload> => {\r\n\r\n if (noMostrarSinItems.includes(section.componentKey)) {\r\n return {\r\n // whatever empty structure your UI expects\r\n items: [],\r\n events: [],\r\n data: {},\r\n } as SectionPayload;\r\n }\r\n\r\n const rawUrl = (section.apiUrl || \"\").trim();\r\n if (!rawUrl) return undefined;\r\n\r\n const method = section.apiMethod || \"GET\";\r\n const params = section.apiParams || [];\r\n\r\n let url = rawUrl;\r\n let body: BodyInit | undefined;\r\n let headers: HeadersInit | undefined;\r\n\r\n if (method === \"GET\") {\r\n const u = new URL(\r\n rawUrl,\r\n typeof window == \"undefined\"\r\n ? \"http://localhost\"\r\n : window.location.origin\r\n );\r\n for (const p of params) {\r\n if (!p.key) continue;\r\n u.searchParams.append(p.key, p.value);\r\n }\r\n url = u.toString();\r\n } else {\r\n // application/x-www-form-urlencoded\r\n const encoded = new URLSearchParams();\r\n for (const p of params) {\r\n if (!p.key) continue;\r\n // el value se manda tal cual; URLSearchParams se encarga del %7B%22...%7D\r\n encoded.append(p.key, p.value);\r\n }\r\n body = encoded.toString();\r\n headers = {\r\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\r\n };\r\n }\r\n\r\n const res = await fetch(url, {\r\n method,\r\n headers,\r\n body,\r\n });\r\n\r\n if (!res.ok) throw new HttpError(res.status, url, res.statusText);\r\n return res.json();\r\n };\r\n\r\n // Use override if provided\r\n const effectiveSections = useMemo(\r\n () => (sectionsOverride ? sectionsOverride.slice() : sections.slice()),\r\n [sectionsOverride, sections]\r\n );\r\n\r\n const fetchedKeysRef = React.useRef<Set<string>>(new Set());\r\n\r\n useEffect(() => {\r\n const fetchables = effectiveSections\r\n .map((s) => ({ s, url: (s.apiUrl || \"\").trim() }))\r\n .filter(({ url }) => !!url);\r\n\r\n if (!fetchables.length) return;\r\n\r\n for (const { s, url } of fetchables) {\r\n const key = `${s.id}|${url}`;\r\n if (fetchedKeysRef.current.has(key)) continue;\r\n fetchedKeysRef.current.add(key);\r\n\r\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: true }));\r\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: \"\" }));\r\n\r\n (async () => {\r\n try {\r\n const json = await fetchSectionData(s);\r\n setSectionDataMap((prev) => ({ ...prev, [s.id]: json }));\r\n } catch (err: unknown) {\r\n let message = \"Error desconocido\";\r\n if (err instanceof HttpError) {\r\n message = `Error HTTP ${err.status} (${err.statusText}) en ${err.url}`;\r\n } else if (err instanceof SyntaxError) {\r\n message = \"Respuesta no es JSON válido\";\r\n } else if (err instanceof TypeError) {\r\n message = \"Fallo de red / CORS / conexión\";\r\n } else if (typeof err === \"string\") {\r\n message = err.toString();\r\n }\r\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: message }));\r\n } finally {\r\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: false }));\r\n }\r\n })();\r\n }\r\n }, [effectiveSections]);\r\n\r\n const orderedVisible = useMemo(\r\n () =>\r\n effectiveSections\r\n .filter((s) => s.visible)\r\n .sort((a, b) => a.order - b.order),\r\n [effectiveSections]\r\n );\r\n\r\n const toManualArray = (\r\n items:\r\n | { fields: { name: string; type: string; value: string }[] }[]\r\n | undefined\r\n ): Array<Record<string, unknown>> => {\r\n if (!Array.isArray(items)) return [];\r\n return items.map((it) => {\r\n const obj: Record<string, unknown> = {};\r\n for (const f of it.fields || []) {\r\n const t = (f.type || \"string\").toLowerCase();\r\n if (t === \"number\") {\r\n const val = String(f.value || \"\").trim();\r\n if (val !== \"\") {\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n obj[f.name] = num;\r\n }\r\n }\r\n } else if (t === \"boolean\")\r\n obj[f.name] = String(f.value).toLowerCase() === \"true\";\r\n else if (t === \"function\") {\r\n const body = String(f.value || \"\").trim();\r\n if (body) {\r\n try {\r\n // ✅ Explicit function type\r\n const fn = new Function(body) as () => unknown;\r\n obj[f.name] = fn;\r\n } catch (e) {\r\n console.error(`❌ Error creando función en item '${f.name}':`, e);\r\n }\r\n }\r\n } else obj[f.name] = f.value;\r\n }\r\n return obj;\r\n });\r\n };\r\n\r\n const toManualScalars = (\r\n fields: { name: string; type: string; value: string }[] | undefined\r\n ): Record<string, unknown> => {\r\n const out: Record<string, unknown> = {};\r\n if (!Array.isArray(fields)) return out;\r\n for (const f of fields) {\r\n if (!f.name) continue;\r\n const t = (f.type || \"string\").toLowerCase();\r\n if (t === \"number\") {\r\n // Si el valor está vacío o es inválido, NO agregar el prop (usar default del componente)\r\n const val = String(f.value || \"\").trim();\r\n if (val !== \"\") {\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n out[f.name] = num;\r\n }\r\n }\r\n } else if (t === \"boolean\")\r\n out[f.name] = String(f.value).toLowerCase() === \"true\";\r\n else if (t === \"function\") {\r\n const body = String(f.value || \"\").trim();\r\n if (body) {\r\n try {\r\n // ✅ Explicit function type\r\n const fn = new Function(body) as () => unknown;\r\n out[f.name] = fn;\r\n } catch (e) {\r\n console.error(`❌ Error creando función en item '${f.name}':`, e);\r\n }\r\n }\r\n } else out[f.name] = f.value;\r\n }\r\n return out;\r\n };\r\n\r\n const mapPayloadToProps = (\r\n payload: SectionPayload,\r\n manual: { arr?: unknown[]; variableName?: string } | null,\r\n base?: Record<string, unknown>\r\n ): Record<string, unknown> => {\r\n const merged: Record<string, unknown> = base ? { ...base } : {};\r\n if (manual) {\r\n const name = (manual.variableName || \"items\").trim() || \"items\";\r\n merged[name] = manual.arr || [];\r\n return merged;\r\n }\r\n const pl = payload;\r\n const isArr = Array.isArray(pl);\r\n const obj =\r\n !isArr && typeof pl === \"object\" && pl !== null ? pl : undefined;\r\n const arrData =\r\n obj && Array.isArray((obj as any).lobby || (obj as any).items)\r\n ? (((obj as any).lobby || (obj as any).items) as unknown[])\r\n : undefined;\r\n const choose = (fallback: unknown[]) => (isArr ? pl : arrData || fallback);\r\n merged.items = choose(arrData || []);\r\n return merged;\r\n };\r\n\r\n const buildCompProps = (\r\n s: OraculoPageLandingPreviewSection\r\n ): Record<string, unknown> => {\r\n const hasUrl = !!s.apiUrl?.trim();\r\n const payload: SectionPayload = hasUrl ? sectionDataMap[s.id] : undefined;\r\n let compProps: Record<string, unknown> = s.props ? { ...s.props } : {};\r\n const scalars = toManualScalars(s.manualScalarFields);\r\n if (\r\n noMostrarSinItems.includes(s.componentKey)\r\n ) {\r\n //console.log(payload);\r\n return { items: payload, ...compProps, ...scalars };\r\n }\r\n\r\n compProps = { ...compProps, ...scalars };\r\n if (hasUrl) compProps = mapPayloadToProps(payload, null, compProps);\r\n else if (s.dataMode === \"manual\") {\r\n const arr = toManualArray(s.manualItems);\r\n compProps = mapPayloadToProps(\r\n null,\r\n { arr, variableName: s.variableName },\r\n compProps\r\n );\r\n\r\n // Si existe variableName2 y manualItems2, agregar también ese prop\r\n if (s.variableName2 && s.manualItems2) {\r\n const arr2 = toManualArray(s.manualItems2);\r\n const varName2 = (s.variableName2 || \"items2\").trim() || \"items2\";\r\n compProps[varName2] = arr2;\r\n }\r\n }\r\n\r\n return compProps;\r\n };\r\n\r\n const renderStatusBox = (\r\n key: number,\r\n type: \"loading\" | \"error\" | \"component\",\r\n message: string\r\n ) => {\r\n const colorMap: Record<string, string> = {\r\n loading: \"bg-blue-100 text-blue-800\",\r\n error: \"bg-red-100 text-red-800\",\r\n component: \"bg-yellow-100 text-yellow-800\",\r\n };\r\n return (\r\n <div key={key} className={`mx-4 p-4 rounded ${colorMap[type]}`}>\r\n {message}\r\n </div>\r\n );\r\n };\r\n\r\n const renderSingleSection = (s: OraculoPageLandingPreviewSection) => {\r\n const rawKey = s.componentKey;\r\n\r\n const Comp = LandingComponents[rawKey];\r\n\r\n if (!Comp) {\r\n console.warn(`No hay componente registrado para \"${rawKey}\"`);\r\n return renderStatusBox(\r\n s.id,\r\n \"component\",\r\n `Componente \"${rawKey}\" no encontrado`\r\n );\r\n }\r\n\r\n const hasUrl = !!s.apiUrl?.trim();\r\n const payload = hasUrl ? sectionDataMap[s.id] : undefined;\r\n const loadingSec = hasUrl ? !!sectionLoadingMap[s.id] : false;\r\n const errorSec = hasUrl ? sectionErrorMap[s.id] : \"\";\r\n\r\n if (hasUrl) {\r\n if (loadingSec && !payload)\r\n return renderStatusBox(\r\n s.id,\r\n \"loading\",\r\n `Cargando datos desde ${s.apiUrl}...`\r\n );\r\n if (errorSec && !payload)\r\n return renderStatusBox(\r\n s.id,\r\n \"error\",\r\n `Error cargando ${s.apiUrl}: ${errorSec}`\r\n );\r\n }\r\n\r\n const compProps = buildCompProps(s);\r\n const fullBleedComponents = new Set([\r\n \"OraculoSeccionBanners\",\r\n \"OraculoSeccionBonoBienvenida\",\r\n \"OraculoSeccionCasinoEnVivo\",\r\n !isDesktop ? \"OraculoSeccionClubOlimpo\" : \"\",\r\n ]);\r\n const isFullBleed = fullBleedComponents.has(s.componentKey);\r\n\r\n const paddingX = isDesktop ? 120 : 24;\r\n\r\n const wrapperStyle: React.CSSProperties = isFullBleed\r\n ? {\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n }\r\n : {\r\n paddingLeft: paddingX,\r\n paddingRight: paddingX,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n };\r\n\r\n // if (\r\n // noMostrarSinItems.includes(s.componentKey)\r\n // ) {\r\n // //console.log(payload);\r\n // return (<Comp key={s.id}{...compProps} />);\r\n // }\r\n return (\r\n <div key={s.id} style={wrapperStyle} className=\"oraculo-section-wrapper\">\r\n <Comp {...compProps} />\r\n </div>\r\n );\r\n };\r\n\r\n if (loading && !sectionsOverride)\r\n return Loader ? <Loader /> : <div>Cargando...</div>;\r\n\r\n if (!loading && !sectionsOverride && sections.length === 0) {\r\n return (\r\n <div className=\"text-xs text-gray-500\">Sin secciones (Firestore)</div>\r\n );\r\n }\r\n\r\n return (\r\n <Container\r\n className=\"oli-font\"\r\n maxWidth={false}\r\n disableGutters\r\n sx={{\r\n backgroundColor: \"#121212\",\r\n position: \"relative\",\r\n pb: 5,\r\n // pt: 5,\r\n width: \"100%\",\r\n maxWidth: \"100%\",\r\n overflowX: \"hidden\",\r\n }}\r\n >\r\n <Stack\r\n direction=\"column\"\r\n spacing={isDesktop ? 8 : 5}\r\n useFlexGap\r\n >\r\n {orderedVisible.map(renderSingleSection)}\r\n </Stack>\r\n </Container>\r\n );\r\n};\r\n\r\nexport default OraculoPageLandingPreview;\r\n"],"names":["OraculoButton","children","onClick","href","target","rel","type","disabled","variant","size","fullWidth","fullHeight","className","ariaLabel","leftIcon","rightIcon","iconOnly","hasText","onlyOneIcon","isIconOnly","cls","content","jsxs","Fragment","jsx","ariaDisabled","MuiLink","e","OraculoSectionTitle","title","iconUrl","wrapperClass","OraculoCarouselDots","total","active","onSelect","rootClass","_","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","rafRef","useRef","useEffect","host","onWheel","splide","deltaX","deltaY","direction","Splide","SplideRaw","SplideSlide","SplideSlideRaw","OraculoCarousel","forwardRef","items","renderItem","perPage","breakpoints","options","onMove","useIndexAsKey","enableHorizontalWheel","ref","wheelHostRef","prevLengthRef","useImperativeHandle","_a","index","getVisibleRange","Slides","Controller","track","trackWidth","visibleStart","currentWidth","visibleEnd","i","slide","hasOverflow","list","handleMove","useCallback","isStart","isEnd","React","lengthChanged","handleResize","handleMounted","mergedOptions","item","OraculoGameCard","imageUrl","fillParent","dim","handleButtonClick","sizeStyles","OraculoGameRankCard","orden","loading","sizes","getVal","k","def","_b","_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","outcomes","arr","verMasSeccionEnVivo","verMasSeccionSemana","verMasSeccionCombinadas","fetchJerseys","eventIds","useDebouncedValue","delay","debounced","setDebounced","useState","id","OraculoEventCombinadosCard","event","processOutcome","apuestas","homeName","awayName","a","best","line","_e","acc","o","eventOutcomes","Stack","b","OraculoButtonBet","DEFAULT_HOME_JERSEY","DEFAULT_AWAY_JERSEY","getTeamJersey","jerseyEvent","side","role","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","OraculoEventHeader","_g","_f","_i","_h","_j","_k","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","isLoading","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","url","sectionClassName","ChevronLeftRounded","ChevronRightRounded","KEY","getStore","g","setOraculoExtras","extrasObj","getOraculoExtra","key","clearOraculoExtras","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","top6","handleOpen","juego","showIframe","loadMachine","getGameId","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","handleOpenLive","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","isMobile","useMediaQuery","showDots","activeIndex","setActiveIndex","navRef","wheelLockRef","wheelUnlockTimerRef","activeSlide","sectionSx","el","THRESHOLD","LOCK_MS","dx","dy","dirNext","renderSlide","desktop","hl1","hl2","OraculoSeccionClubOlimpo","fullBleed","selectedIndex","rootRef","bottomRef","useLayoutEffect","root","bottom","update","ro","OraculoSeccionEventoCombinadas","events","setEvents","SPECIALS_GROUPS_URL","loadDataEventSpecial","listData","groupId","SPECIALS_URL","data","mergeEventOffers","eventos","prePackCoupons","results","coupon","usedOutcomeIds","getUsedOutcomeIds","reqs","extractRequirements","apuestasByEvent","filteredOutcomes","requiredIds","outcomesWithPosition","evento","eventOutcomeSet","combinadoTotal","row","requiredOutcomeIds","allIds","p","OraculoEventCombinadasCard","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","jerseys","setJerseys","visibleRange","setVisibleRange","fetchingRef","orderedEventIds","setOrderedEventIds","orderIdsFetchedRef","debouncedVisibleRange","blocked","filterFootballEvents","ev","group","word","loadData","orderIds","response","json","filteredEvents","orderMap","sortedEvents","aIndex","bIndex","interval","BUFFER","from","to","idsToFetch","res","prev","eventId","OraculoEventSemanaCardSkeleton","fetchInBatches","urls","batchSize","signal","batch","responses","u","sortEvents","evs","filterEventsWithinOneWeek","now","oneWeekLater","eventDate","mergeEventOffersOutcome","OraculoSeccionEventoSemana","WEEK_EVENTS_URL","COMMON_QUERY","loadDataWeekEvent","orderedGroupIds","orderResponse","orderJson","football","groups","firstGroups","buildUrls","sub","loadAllGroupEvents","orderEvents","allEvents","allBetOffers","merged","finalEvents","orderedEvents","error","controller","cancelled","sectionStyle","OraculoSeccionBanners","backgrounds","activeDot","setActiveDot","totalDots","safe","bg","DEFAULT_ITEMS","OraculoSeccionMediosPago","split","row1","row2","l","Landing","isComponent","val","isSectionName","LandingComponents","extrasToObject","extras","HttpError","status","statusText","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","docId","db","loader","Loader","sections","setSections","setLoading","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","unsubscribe","onSnapshot","doc","snap","fetched","s","fetchSectionData","section","rawUrl","method","params","body","headers","encoded","effectiveSections","fetchedKeysRef","fetchables","err","message","orderedVisible","toManualArray","obj","f","t","num","fn","toManualScalars","fields","out","mapPayloadToProps","payload","manual","pl","isArr","arrData","choose","fallback","buildCompProps","hasUrl","compProps","scalars","arr2","varName2","renderStatusBox","colorMap","renderSingleSection","rawKey","Comp","loadingSec","errorSec","isFullBleed","paddingX","wrapperStyle","Container"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/atoms/OraculoButton/OraculoButton.tsx","../src/atoms/OraculoSectionTitle/OraculoSectionTitle.tsx","../src/atoms/OraculoCarouselDots/OraculoCarouselDots.tsx","../src/atoms/OraculoGridGroup/OraculoGridGroup.tsx","../src/atoms/OraculoLogo/OraculoLogoMediosPago.tsx","../src/atoms/OraculoEvent/OraculoEventTitle.tsx","../src/atoms/OraculoEvent/OraculoEventStatusBadge.tsx","../src/atoms/OraculoEvent/OraculoEventStatus.tsx","../src/atoms/OraculoEvent/OraculoEventHeader.tsx","../src/atoms/OraculoEvent/OraculoEventLabel.tsx","../src/atoms/OraculoEvent/OraculoEventLeague.tsx","../src/atoms/OraculoEvent/OraculoEventScore.tsx","../src/atoms/OraculoEvent/OraculoTeamPolo.tsx","../src/atoms/OraculoEvent/OraculoEventTeamInfo.tsx","../src/molecules/OraculoCarousel/useHorizontalWheelSplide.tsx","../src/molecules/OraculoCarousel/OraculoCarousel.tsx","../src/molecules/OraculoGameCard/OraculoGameCard.tsx","../src/molecules/OraculoGameRankCard/OraculoGameRankCard.tsx","../src/molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard.tsx","../src/molecules/OraculoGameSlide/OraculoGameSlide.tsx","../src/molecules/OraculoWelcomeBanner/OraculoWelcomeBanner.tsx","../src/molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual.tsx","../src/atoms/OraculoEvent/KambiOpenBet.tsx","../src/molecules/OraculoEventCard/OraculoEventCombinadasCard.tsx","../src/atoms/OraculoButtonBet/OraculoButtonBet.tsx","../src/atoms/OraculoEvent/KambiJersey.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCard.tsx","../src/atoms/OraculoEvent/OraculoEventDate.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCard.tsx","../src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx","../src/utils/openMachineRegistry.ts","../src/organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos.tsx","../src/organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx","../src/organisms/OraculoSeccionCasino/OraculoSeccionCasino.tsx","../src/organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales.tsx","../src/organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida.tsx","../src/organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.tsx","../src/organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCardSkeleton.tsx","../src/molecules/OraculoEventCard/FadeItemWrapper.tsx","../src/organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCardSkeleton.tsx","../src/organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana.tsx","../src/organisms/OraculoSeccionBanners/OraculoSeccionBanners.tsx","../src/organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago.tsx","../src/templates/landingRegistry.ts","../src/config/json_configuration.ts","../src/templates/OraculoPageLandingPreview.tsx"],"sourcesContent":["import React from \"react\";\r\nimport \"./OraculoButton.css\";\r\nimport { Link as MuiLink } from \"@mui/material\";\r\n\r\nexport interface OraculoButtonProps {\r\n children?: React.ReactNode;\r\n onClick?: any;\r\n href?: string;\r\n target?: React.HTMLAttributeAnchorTarget;\r\n rel?: string;\r\n type?: \"button\" | \"submit\" | \"reset\";\r\n disabled?: boolean;\r\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n fullWidth?: boolean;\r\n fullHeight?: boolean;\r\n className?: string;\r\n ariaLabel?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n iconOnly?: boolean;\r\n}\r\n\r\nexport default function OraculoButton({\r\n children,\r\n onClick,\r\n href,\r\n target,\r\n rel,\r\n type = \"button\",\r\n disabled = false,\r\n variant = \"primary\",\r\n size,\r\n fullWidth = false,\r\n fullHeight = false,\r\n className = \"\",\r\n ariaLabel,\r\n leftIcon,\r\n rightIcon,\r\n iconOnly,\r\n}: OraculoButtonProps) {\r\n const hasText = !!children && children !== true;\r\n const hasLeft = !!leftIcon;\r\n const hasRight = !!rightIcon;\r\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\r\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\r\n\r\n const cls = [\r\n \"orc-btn\",\r\n variant === \"secondary\"\r\n ? \"orc-btn--secondary\"\r\n : variant === \"tertiary\"\r\n ? \"orc-btn--tertiary\"\r\n : \"orc-btn--primary\",\r\n size ? `orc-btn--${size}` : \"\",\r\n fullWidth ? \"orc-btn--full\" : \"\",\r\n fullHeight ? \"orc-btn--fullHeight\" : \"\",\r\n isIconOnly ? \"orc-btn--iconOnly\" : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const content = (\r\n <>\r\n {leftIcon && <span className=\"orc-btn__icon\">{leftIcon}</span>}\r\n {!isIconOnly && <span className=\"orc-btn__label\">{children}</span>}\r\n {rightIcon && <span className=\"orc-btn__icon\">{rightIcon}</span>}\r\n </>\r\n );\r\n\r\n const ariaDisabled = disabled ? true : undefined;\r\n\r\n if (href) {\r\n return (\r\n <MuiLink\r\n href={href}\r\n target={target}\r\n rel={rel}\r\n aria-label={ariaLabel}\r\n aria-disabled={ariaDisabled}\r\n tabIndex={ariaDisabled ? -1 : undefined}\r\n className={cls}\r\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\r\n >\r\n {content}\r\n </MuiLink>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type={type}\r\n onClick={onClick}\r\n disabled={!!ariaDisabled}\r\n aria-label={ariaLabel}\r\n className={cls}\r\n >\r\n {content}\r\n </button>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./OraculoSectionTitle.css\";\r\n\r\nexport interface OraculoSectionTitleProps {\r\n title: string;\r\n iconUrl?: string;\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nexport default function OraculoSectionTitle({\r\n title,\r\n iconUrl,\r\n size = \"md\",\r\n className = \"\",\r\n}: OraculoSectionTitleProps) {\r\n const sizeClass = size ? `orc-section-title--${size}` : \"\";\r\n\r\n const wrapperClass = [\r\n \"orc-section-title\",\r\n sizeClass,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div className={wrapperClass}>\r\n {iconUrl && (\r\n <img\r\n src={iconUrl}\r\n alt=\"\"\r\n className=\"orc-section-title__icon\"\r\n />\r\n )}\r\n <h2 className=\"orc-section-title__title\">{title}</h2>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./OraculoCarouselDots.css\";\r\n\r\nexport interface OraculoCarouselDotsProps {\r\n total: number;\r\n active: number;\r\n onSelect?: (index: number) => void;\r\n className?: string;\r\n}\r\n\r\nconst OraculoCarouselDots: React.FC<OraculoCarouselDotsProps> = ({\r\n total,\r\n active,\r\n onSelect,\r\n className = \"\",\r\n}) => {\r\n if (total <= 1) return null;\r\n\r\n const rootClass = [\"orc-dots\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <div className={rootClass} role=\"tablist\">\r\n {Array.from({ length: total }).map((_, i) => (\r\n <span key={i} className=\"orc-dots__cell\">\r\n <button\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={i === active}\r\n aria-label={`Ir al slide ${i + 1}`}\r\n className={\r\n \"orc-dots__dot\" +\r\n (i === active ? \" orc-dots__dot--active\" : \"\")\r\n }\r\n onClick={() => onSelect?.(i)}\r\n />\r\n </span>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default OraculoCarouselDots;\r\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\";\r\nimport React from \"react\";\r\n\r\n\r\nexport type Logo = { src: string; alt: string };\r\n\r\nexport default function OraculoLogoMediosPago({ src, alt }: Logo) {\r\n return (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n width: { xs: 65, sm: 80, md: 120, lg: 160 }, // 65 en móvil, 80 en desktop\r\n height: { xs: 48, md: 96 }, // 48 en móvil, 96 en desktop\r\n display: \"inline-block\",\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={src}\r\n alt={alt}\r\n sx={{\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n </Box>\r\n );\r\n}\r\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 : '41px',\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 { enabled = true }: { enabled?: boolean } = {}\r\n) {\r\n const rafRef = useRef<number | null>(null);\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 // 🧠 Detect horizontal intent ONLY\r\n if (Math.abs(deltaX) <= Math.abs(deltaY)) {\r\n // vertical scroll → allow normal page scrolling\r\n return;\r\n }\r\n\r\n // Ignore tiny horizontal noise\r\n if (Math.abs(deltaX) < 2) return;\r\n\r\n // We handle horizontal → stop native scroll\r\n e.preventDefault();\r\n\r\n const direction = deltaX > 0 ? \">\" : \"<\";\r\n\r\n // Throttle to one navigation per frame\r\n if (rafRef.current !== null) return;\r\n\r\n rafRef.current = requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n splide.go(direction);\r\n });\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 if (rafRef.current) cancelAnimationFrame(rafRef.current);\r\n };\r\n }, [enabled, hostRef, splideRef]);\r\n}\r\n","// src/molecules/OraculoCarousel/OraculoCarousel.tsx\r\nimport React, {\r\n forwardRef,\r\n useCallback,\r\n useImperativeHandle,\r\n useRef,\r\n ReactNode,\r\n} from \"react\";\r\nimport {\r\n Splide as SplideRaw,\r\n SplideSlide as SplideSlideRaw,\r\n} from \"@splidejs/react-splide\";\r\n\r\nimport {useHorizontalWheelSplide} from \"./useHorizontalWheelSplide\";\r\n\r\nexport interface OraculoCarouselOptions {\r\n type?: string;\r\n perPage?: number;\r\n gap?: string;\r\n pagination?: boolean;\r\n arrows?: boolean;\r\n drag?: boolean;\r\n focus?: string | \"center\";\r\n autoWidth?: boolean;\r\n trimSpace?: any;\r\n rewind?: boolean;\r\n padding?: { left?: string; right?: string };\r\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface OraculoCarouselRef {\r\n next: () => void;\r\n prev: () => void;\r\n go: (index: number | string) => void;\r\n}\r\n\r\nexport interface OraculoCarouselProps<T = any> {\r\n items: T[];\r\n renderItem: (item: T, index: number) => ReactNode;\r\n perPage?: number;\r\n gap?: string;\r\n breakpoints?: Record<string | number, OraculoCarouselOptions>;\r\n options?: OraculoCarouselOptions;\r\n className?: string;\r\n useIndexAsKey?: boolean;\r\n onMove?: (info: {\r\n index: number;\r\n isStart: boolean;\r\n isEnd: boolean;\r\n total: number;\r\n visibleEnd: number;\r\n visibleStart: number;\r\n }) => void;\r\n enableHorizontalWheel?: boolean;\r\n}\r\n\r\n// 👇 Aislamos tipos de Splide: internamente es any, hacia afuera tu API está tipada\r\nconst Splide: any = SplideRaw;\r\nconst SplideSlide: any = SplideSlideRaw;\r\n\r\nconst OraculoCarousel = forwardRef<OraculoCarouselRef, OraculoCarouselProps<any>>(\r\n (\r\n {\r\n items = [],\r\n renderItem,\r\n perPage = 1,\r\n gap = \"0px\",\r\n breakpoints,\r\n options = {},\r\n className = \"\",\r\n onMove,\r\n useIndexAsKey = false,\r\n enableHorizontalWheel = true,\r\n },\r\n ref\r\n ) => {\r\n const splideRef = useRef<any>(null);\r\n const wheelHostRef = useRef<HTMLDivElement>(null);\r\n const prevLengthRef = useRef(items.length);\r\n\r\n useHorizontalWheelSplide(wheelHostRef, splideRef, {\r\n enabled: enableHorizontalWheel,\r\n });\r\n useImperativeHandle(ref, () => ({\r\n next: () => splideRef.current?.go(\">\"),\r\n prev: () => splideRef.current?.go(\"<\"),\r\n go: (index) => splideRef.current?.go(index),\r\n }));\r\n\r\nconst getVisibleRange = (splide: any) => {\r\n const Slides = splide.Components.Slides;\r\n const Controller = splide.Components.Controller;\r\n const track = splide.root.querySelector(\".splide__track\");\r\n\r\n const trackWidth = track?.clientWidth ?? 0;\r\n const visibleStart = Controller.getIndex();\r\n const total = Slides.getLength();\r\n\r\n let currentWidth = 0;\r\n let visibleEnd = visibleStart;\r\n\r\n for (let i = visibleStart; i < total; i++) {\r\n const slide = Slides.getAt(i);\r\n if (!slide) break;\r\n\r\n // use offsetWidth (cheaper than getBoundingClientRect)\r\n currentWidth += slide.slide.offsetWidth;\r\n\r\n if (currentWidth > trackWidth) break;\r\n visibleEnd = i;\r\n }\r\n\r\n return { visibleStart, visibleEnd };\r\n};\r\nconst hasOverflow = (splide: any) => {\r\n const track = splide.root.querySelector(\".splide__track\");\r\n const list = splide.root.querySelector(\".splide__list\");\r\n\r\n if (!track || !list) return false;\r\n\r\n return list.scrollWidth > track.clientWidth + 1;\r\n};\r\n\r\nconst handleMove = useCallback((splide: any) => {\r\n const slides = splide.Components.Slides;\r\n const total = slides.getLength();\r\n\r\n // NO SCROLL POSSIBLE\r\n if (!hasOverflow(splide)) {\r\n onMove?.({\r\n index: 0,\r\n isStart: true,\r\n isEnd: true,\r\n total,\r\n visibleStart: 0,\r\n visibleEnd: total - 1,\r\n });\r\n return;\r\n }\r\n\r\n const { visibleStart, visibleEnd } = getVisibleRange(splide);\r\n\r\n const isStart = visibleStart === 0;\r\n const isEnd = visibleEnd === total - 1;\r\n\r\n const index = splide.Components.Controller.getIndex();\r\n\r\n onMove?.({\r\n index,\r\n isStart,\r\n isEnd,\r\n total,\r\n visibleStart,\r\n visibleEnd,\r\n });\r\n}, [onMove]);\r\nReact.useEffect(() => {\r\n const splide = splideRef.current?.splide;\r\n if (!splide) return;\r\n\r\n const lengthChanged = prevLengthRef.current !== items.length;\r\n prevLengthRef.current = items.length;\r\n\r\n if (!lengthChanged) return;\r\n\r\n // let React commit DOM first\r\n requestAnimationFrame(() => {\r\n splide.refresh();\r\n handleMove(splide);\r\n });\r\n}, [items.length, handleMove]);\r\nconst handleResize = useCallback(() => {\r\n const splide = splideRef.current?.splide;\r\n if (!splide) return;\r\n\r\n splide.go(0, false); \r\n handleMove(splide);\r\n}, [handleMove]);\r\n const handleMounted = useCallback(\r\n (splide: any) => {\r\n handleMove(splide);\r\n },\r\n [handleMove]\r\n );\r\n\r\n const mergedOptions: OraculoCarouselOptions = {\r\n type: \"slide\",\r\n trimSpace: false,\r\n drag: true,\r\n pagination: false,\r\n arrows: false,\r\n rewind: false,\r\n focus: \"start\",\r\n autoWidth: false,\r\n perPage,\r\n gap,\r\n breakpoints,\r\n ...options,\r\n\r\n ...(enableHorizontalWheel ? { wheel: false } : {}),\r\n\r\n };\r\n\r\n return (\r\n <div ref={wheelHostRef} className={className} style={{ width: \"100%\" }}>\r\n <Splide\r\n ref={splideRef}\r\n options={mergedOptions}\r\n onMove={handleMove}\r\n onMounted={handleMounted}\r\n onResize={handleResize}\r\n >\r\n {items.map((item, index) => (\r\n <SplideSlide key={useIndexAsKey ? index : (item as any).id ?? index}>\r\n {renderItem(item, index)}\r\n </SplideSlide>\r\n ))}\r\n </Splide>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport default OraculoCarousel;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { OraculoButton } from \"../..\";\r\n\r\nexport interface OraculoGameCardProps {\r\n imageUrl: string;\r\n onClick?: () => void;\r\n size?: \"lg\" | \"sm\";\r\n fillParent?: boolean;\r\n}\r\n\r\nconst OraculoGameCard: React.FC<OraculoGameCardProps> = ({\r\n imageUrl,\r\n onClick,\r\n size = \"sm\",\r\n fillParent = false,\r\n}) => {\r\n const dim =\r\n size === \"lg\"\r\n ? { w: 280, h: 352 }\r\n : { w: 152, h: 168 };\r\n\r\n const handleButtonClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\r\n e.stopPropagation();\r\n onClick?.();\r\n };\r\n\r\n const sizeStyles = fillParent\r\n ? { width: \"100%\", height: \"100%\" }\r\n : { width: `${dim.w}px`, height: `${dim.h}px` };\r\n\r\n return (\r\n <Box\r\n onClick={onClick}\r\n role=\"button\"\r\n sx={{\r\n position: \"relative\",\r\n borderRadius: \"12px\",\r\n overflow: \"hidden\",\r\n boxSizing: \"border-box\",\r\n transition: \"transform .15s ease, box-shadow .15s ease\",\r\n ...sizeStyles,\r\n \"&:hover\": {\r\n transform: \"translateY(-2px)\",\r\n boxShadow: 8,\r\n cursor: \"pointer\",\r\n },\r\n \"&:hover .oraculo-game-card-overlay\": {\r\n opacity: 1,\r\n },\r\n \"&:hover .oraculo-game-card-btn\": {\r\n opacity: 1,\r\n transform: \"translate(-50%, -50%) scale(1)\",\r\n pointerEvents: \"auto\",\r\n },\r\n }}\r\n >\r\n <img\r\n src={imageUrl}\r\n alt=\"Juego de casino\"\r\n loading=\"lazy\"\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n borderRadius: \"inherit\",\r\n }}\r\n />\r\n\r\n <Box\r\n className=\"oraculo-game-card-overlay\"\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n backgroundColor: \"rgba(0, 0, 0, 0.45)\",\r\n opacity: 0,\r\n transition: \"opacity .15s ease\",\r\n pointerEvents: \"none\",\r\n zIndex: 1,\r\n }}\r\n />\r\n\r\n <Box\r\n className=\"oraculo-game-card-btn\"\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n zIndex: 2,\r\n transform: \"translate(-50%, -50%) scale(0.95)\",\r\n opacity: 0,\r\n transition: \"opacity .15s ease, transform .15s ease\",\r\n pointerEvents: \"none\",\r\n }}\r\n >\r\n <OraculoButton variant=\"primary\" size=\"md\" onClick={handleButtonClick}>\r\n Jugar\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoGameCard;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\r\n\r\ntype SizeOpt = { w: number; h: number; r?: number; font?: number };\r\n\r\nexport interface OraculoGameRankCardSizes {\r\n xs: SizeOpt;\r\n md: SizeOpt;\r\n}\r\n\r\nexport interface OraculoGameRankCardProps {\r\n imageUrl: string;\r\n orden?: number;\r\n onClick?: () => void;\r\n sizes?: OraculoGameRankCardSizes;\r\n\r\n /** si true, muestra skeleton en vez de la card */\r\n loading?: boolean;\r\n}\r\n\r\nexport default function OraculoGameRankCard({\r\n imageUrl,\r\n orden = 1,\r\n onClick,\r\n loading = false,\r\n sizes = {\r\n xs: { w: 104, h: 112, r: 18, font: 48 },\r\n md: { w: 186, h: 264, r: 22.6, font: 64 },\r\n },\r\n}: OraculoGameRankCardProps) {\r\n const getVal = <K extends keyof SizeOpt>(k: K, def: number) => ({\r\n xs: sizes.xs?.[k] ?? def,\r\n md: sizes.md?.[k] ?? def,\r\n });\r\n\r\n const W = getVal(\"w\", 186);\r\n const H = getVal(\"h\", 264);\r\n const R = getVal(\"r\", 22.6);\r\n const F = getVal(\"font\", 64);\r\n\r\n const hang = {\r\n xs: Math.round((sizes.xs?.font ?? 64) * 0.28),\r\n md: Math.round((sizes.md?.font ?? 64) * 0.28),\r\n };\r\n\r\n return (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n maxWidth: { xs: `${W.xs}px`, md: `${W.md}px` },\r\n aspectRatio: {\r\n xs: `${W.xs}/${H.xs}`,\r\n md: `${W.md}/${H.md}`,\r\n },\r\n borderRadius: { xs: `${R.xs}px`, md: `${R.md}px` },\r\n boxSizing: \"border-box\",\r\n overflow: \"visible\",\r\n pb: { xs: `${hang.xs}px`, md: `${hang.md}px` },\r\n\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n inset: 0,\r\n borderRadius: \"inherit\",\r\n pointerEvents: \"none\",\r\n zIndex: 2,\r\n background:\r\n \"linear-gradient(21.29deg, #0B0D1B -1.16%, rgba(255,255,255,0) 51.92%, rgba(255,255,255,0) 127.62%)\",\r\n backgroundBlendMode: \"multiply\",\r\n },\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n borderRadius: \"inherit\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {loading ? (\r\n <Skeleton\r\n variant=\"rectangular\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n sx={{\r\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro visible en fondo oscuro\r\n \"&::after\": {\r\n background:\r\n \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\r\n },\r\n }}\r\n />\r\n ) : (\r\n <OraculoGameCard\r\n imageUrl={imageUrl}\r\n onClick={onClick}\r\n size=\"lg\"\r\n fillParent\r\n />\r\n )}\r\n </Box>\r\n\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n position: \"absolute\",\r\n left: 8,\r\n bottom: {\r\n xs: `-${hang.xs}px`,\r\n md: `-${hang.md}px`,\r\n },\r\n fontFamily: \"secondary\",\r\n fontSize: {\r\n xs: `${F.xs}px`,\r\n md: `${F.md}px`,\r\n },\r\n lineHeight: 1,\r\n color: \"#3CC666\",\r\n WebkitTextStroke: \"1px #9ee86e\",\r\n zIndex: 3,\r\n userSelect: \"none\",\r\n }}\r\n >\r\n {orden}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nexport interface OraculoLiveCasinoCardProps {\r\n logo: string;\r\n provider?: string;\r\n providerName?: string;\r\n machine?: number | string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst OraculoLiveCasinoCard: React.FC<OraculoLiveCasinoCardProps> = ({\r\n logo,\r\n provider,\r\n providerName,\r\n machine,\r\n onClick,\r\n}) => {\r\n return (\r\n <Box\r\n onClick={onClick}\r\n sx={{\r\n flex: \"0 0 auto\",\r\n position: \"relative\",\r\n borderRadius: \"20px\",\r\n overflow: \"hidden\",\r\n width: { xs: 100, md: 180 },\r\n height: { xs: 200, md: 380 },\r\n transition: \"width .50s ease, transform .28s ease\",\r\n willChange: \"width, transform\",\r\n cursor: \"pointer\",\r\n zIndex: 0,\r\n \"&:hover\": {\r\n zIndex: 2,\r\n width: { md: 260, xs: 110 },\r\n },\r\n \"&:hover .orc-live-provider-label\": {\r\n opacity: 1,\r\n },\r\n }}\r\n >\r\n {/* Imagen de fondo */}\r\n <Box\r\n component=\"img\"\r\n src={logo}\r\n alt={`Juego ${machine ?? \"\"}`}\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n }}\r\n />\r\n\r\n {/* Label del provider */}\r\n <Box\r\n className=\"orc-live-provider-label\"\r\n sx={{\r\n position: \"absolute\",\r\n left: \"50%\",\r\n top: { xs: \"75%\", md: \"80%\" },\r\n transform: \"translate(-50%, -50%)\",\r\n zIndex: 3,\r\n opacity: 0,\r\n transition: \"opacity .25s ease\",\r\n pointerEvents: \"none\",\r\n }}\r\n >\r\n <Typography\r\n sx={{\r\n color: \"#fff\",\r\n fontWeight: 700,\r\n fontSize: { xs: 11, md: 14 },\r\n textTransform: \"capitalize\",\r\n }}\r\n >\r\n {provider ?? providerName ?? \"\"}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoLiveCasinoCard;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\r\n\r\nexport interface OraculoGameSlideItem {\r\n id: string | number;\r\n imageUrl: string;\r\n background?: string;\r\n}\r\n\r\nexport interface OraculoGameSlideProps {\r\n items: OraculoGameSlideItem[];\r\n layout?: \"mosaic\" | \"grid\";\r\n onClick?: (item: OraculoGameSlideItem, index: number) => void;\r\n\r\n /** si true, renderiza skeletons en vez de cards */\r\n loading?: boolean;\r\n\r\n /** cuantos skeletons en grid (default 4) */\r\n gridSkeletonCount?: number;\r\n}\r\n\r\nconst GAP = 12; // px\r\n\r\nconst SkCard = ({ r = 16 }: { r?: number }) => (\r\n <Box sx={{ width: \"100%\", height: \"100%\", borderRadius: r, overflow: \"hidden\" }}>\r\n <Skeleton\r\n variant=\"rectangular\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n sx={{\r\n bgcolor: \"rgba(255,255,255,0.10)\", // gris oscuro sobre fondo oscuro\r\n \"&::after\": {\r\n // opcional: brillo un poquito más visible\r\n background: \"linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent)\",\r\n },\r\n }}\r\n />\r\n </Box>\r\n);\r\n\r\n\r\nconst OraculoGameSlide: React.FC<OraculoGameSlideProps> = ({\r\n items,\r\n layout = \"grid\",\r\n onClick,\r\n loading = false,\r\n gridSkeletonCount = 4,\r\n}) => {\r\n // =========================\r\n // MOSAIC: 1 grande + 4 chicas\r\n // =========================\r\n if (layout === \"mosaic\") {\r\n const big = items[0];\r\n // console.log(\"big: \", big);\r\n \r\n const smalls = items.slice(1, 5);\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateRows: {\r\n xs: `repeat(2, 112px)`,\r\n md: `repeat(2, 168px)`,\r\n },\r\n gridTemplateColumns: {\r\n xs: `184px`,\r\n md: `280px`,\r\n },\r\n gridAutoFlow: \"column\",\r\n gridAutoColumns: {\r\n xs: `104px`,\r\n md: `152px`,\r\n },\r\n columnGap: `${GAP}px`,\r\n rowGap: `${GAP}px`,\r\n alignItems: \"stretch\",\r\n justifyItems: \"stretch\",\r\n }}\r\n >\r\n {/* BIG */}\r\n <Box\r\n sx={{\r\n width: { xs: 184, md: 280 },\r\n height: { xs: 234, md: 352 },\r\n gridRow: \"1 / span 2\",\r\n overflow: \"hidden\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n {loading ? (\r\n <SkCard />\r\n ) : (\r\n big && (\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${big.background ?? big.imageUrl ?? \"\"}`}\r\n size=\"lg\"\r\n fillParent\r\n onClick={() => onClick?.(big, 0)}\r\n />\r\n )\r\n )}\r\n </Box>\r\n\r\n {/* SMALLS */}\r\n {(loading ? Array.from({ length: 4 }) : smalls).map((it: any, index: number) => (\r\n <Box\r\n key={loading ? `sk-${index}` : it.id}\r\n sx={{\r\n width: { xs: 104, md: 152 },\r\n height: { xs: 112, md: 168 },\r\n overflow: \"hidden\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n {loading ? (\r\n <SkCard />\r\n ) : (\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index + 1)}\r\n />\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n // =========================\r\n // GRID 2x2\r\n // =========================\r\n return (\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: {\r\n xs: `repeat(2, 104px)`,\r\n md: `repeat(2, 152px)`,\r\n },\r\n gridTemplateRows: {\r\n xs: `repeat(2, 112px)`,\r\n md: `repeat(2, 168px)`,\r\n },\r\n gap: `${GAP}px`,\r\n gridAutoFlow: \"column\",\r\n }}\r\n >\r\n {(loading ? Array.from({ length: gridSkeletonCount }) : items).map((it: any, index: number) => (\r\n <Box\r\n key={loading ? `sk-${index}` : it.id ?? index}\r\n sx={{ overflow: \"hidden\", borderRadius: 2 }}\r\n >\r\n {loading ? (\r\n <SkCard />\r\n ) : (\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.background ?? it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index)}\r\n />\r\n )}\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoGameSlide;\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\n\r\nexport interface OraculoWelcomeBannerProps {\r\n title?: string;\r\n amount?: string; // ej: \"S/40\"\r\n subtitle?: string;\r\n buttonText?: string;\r\n onButtonClick?: () => void;\r\n backgroundImage?: string;\r\n alt?: string;\r\n className?: string;\r\n /** Tamaño en desktop: \"small\" (456x272) o \"large\" (618x346) */\r\n variant?: \"small\" | \"large\";\r\n}\r\n\r\nconst OraculoWelcomeBanner: React.FC<OraculoWelcomeBannerProps> = ({\r\n title,\r\n amount,\r\n subtitle,\r\n buttonText,\r\n onButtonClick,\r\n backgroundImage,\r\n alt,\r\n className = \"\",\r\n variant = \"small\",\r\n}) => {\r\n const symbol = amount ? amount.slice(0, 2) : \"\";\r\n const value = amount ? amount.slice(2) : \"\";\r\n const isLarge = variant === \"large\";\r\n\r\n return (\r\n <Box\r\n className={className}\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n maxWidth: {\r\n xs: 328,\r\n md: isLarge ? 618 : 456,\r\n },\r\n mx: \"auto\",\r\n }}\r\n >\r\n {backgroundImage && (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n aspectRatio: {\r\n xs: \"328 / 188\",\r\n md: isLarge ? \"618 / 346\" : \"456 / 272\",\r\n },\r\n borderRadius: \"14px\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={backgroundImage}\r\n alt={alt ?? \"Fondo promocional\"}\r\n sx={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n objectPosition: {\r\n xs: \"50% 0%\",\r\n md: \"45% 0%\",\r\n },\r\n display: \"block\",\r\n }}\r\n />\r\n </Box>\r\n )}\r\n\r\n {/* Capa de contenido */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n color: \"#e7f8ff\",\r\n textAlign: \"center\",\r\n pl: \"14%\",\r\n pr: { xs: \"14%\", lg: \"15%\" },\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n maxWidth: \"60%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {/* Título superior */}\r\n {title && (\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 12, md: 20 },\r\n fontWeight: 400,\r\n color: \"#e7f8ff\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n )}\r\n\r\n {/* Monto */}\r\n {amount && (\r\n <Box\r\n component=\"p\"\r\n sx={{\r\n fontFamily: '\"secondary\", sans-serif',\r\n lineHeight: { xs: 0.9, lg: 0.87 },\r\n m: \"4px 0\",\r\n background:\r\n \"linear-gradient(175deg, #EDC421 -12.56%, #FFFABF 17.99%, #EDC421 49.74%)\",\r\n WebkitBackgroundClip: \"text\",\r\n WebkitTextFillColor: \"transparent\",\r\n WebkitTextStroke: \"0.5px #fff8c1\",\r\n filter:\r\n \"drop-shadow(0px 4px 0px #8D4406) drop-shadow(0px 4px 4px rgba(28, 28, 28, 0.4))\",\r\n display: \"flex\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box\r\n component=\"span\"\r\n sx={{ fontSize: { xs: 35, md: 48 }, mr: 0.5 }}\r\n >\r\n {symbol}\r\n </Box>\r\n <Box\r\n component=\"span\"\r\n sx={{ fontSize: { xs: 52, md: 77 } }}\r\n >\r\n {value}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {/* Subtítulo */}\r\n {subtitle && (\r\n <Typography\r\n sx={{\r\n pb: \"20px\",\r\n fontSize: 14,\r\n fontWeight: 600,\r\n color: \"#e7f8ff\",\r\n }}\r\n >\r\n {subtitle}\r\n </Typography>\r\n )}\r\n\r\n {/* Botón */}\r\n {buttonText && (\r\n <OraculoButton onClick={onButtonClick}>\r\n {buttonText}\r\n </OraculoButton>\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoWelcomeBanner;\r\n","import React from \"react\";\r\nimport \"../../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.css\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\n\r\nexport interface OraculoClubOlimpoVisualProps {\r\n text: string;\r\n buttonLabel?: string;\r\n onClick?: () => void;\r\n\r\n // MOBILE\r\n imgAlt?: string;\r\n imgSrcMobile: string;\r\n\r\n // DESKTOP\r\n imgSrcDesktopBg?: string;\r\n imgSrcDesktopLogo?: string;\r\n}\r\n\r\nconst OraculoClubOlimpoVisual: React.FC<OraculoClubOlimpoVisualProps> = ({\r\n text,\r\n buttonLabel = \"Conoce más\",\r\n onClick,\r\n imgAlt = \"Club Olimpo\",\r\n imgSrcMobile,\r\n imgSrcDesktopBg,\r\n imgSrcDesktopLogo,\r\n}) => {\r\n return (\r\n <>\r\n {/* MOBILE */}\r\n <div className=\"orc-co-bgMobile\">\r\n <img\r\n src={imgSrcMobile}\r\n alt={imgAlt}\r\n className=\"orc-co-bgMobileImg\"\r\n />\r\n </div>\r\n\r\n {/* DESKTOP */}\r\n <div className=\"orc-co-bgDesktop\">\r\n {imgSrcDesktopBg && (\r\n <div className=\"orc-co-fillHost\">\r\n <img\r\n src={imgSrcDesktopBg}\r\n alt={`${imgAlt} fondo`}\r\n className=\"orc-co-bgDesktopImg\"\r\n />\r\n </div>\r\n )}\r\n\r\n {/* Bloque izquierdo: LOGO + TEXTO + BOTÓN */}\r\n <div className=\"orc-co-desktopContent\">\r\n {imgSrcDesktopLogo && (\r\n <img\r\n src={imgSrcDesktopLogo}\r\n alt={`${imgAlt} logo`}\r\n className=\"orc-co-logoImg\"\r\n />\r\n )}\r\n\r\n <p className=\"orc-co-captionDesktop\">{text}</p>\r\n\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </div>\r\n\r\n {/* MOBILE: barra inferior */}\r\n <div className=\"orc-co-bottom\">\r\n <p className=\"orc-co-caption\">{text}</p>\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default OraculoClubOlimpoVisual;\r\n","import { useState, useEffect} from \"react\";\r\n\r\nexport function redirectHomeWithOutcomes(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 = \"/deportes#in-play\";\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 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 { CombinadoEventProps, BetOffer} from \"../../interfaces/oraculo/InterfaceKambi\";\r\nimport {redirectHomeWithOutcomes} from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\nexport default function OraculoEventCombinadosCard({event}: CombinadoEventProps) {\r\nfunction processOutcome(event : any) {\r\n const apuestas = event.betoffers ?? [];\r\n const homeName = event.homeName;\r\n const awayName = event.awayName;\r\n\r\n const outcomes = apuestas.map((a : any) => {\r\n let best = a.outcomes[0];\r\n let value = \"\";\r\n\r\n let line = best?.line ? best.line / 1000 : \"\";\r\n \r\n if ([\"Más de\", \"Mas de\", \"Over\"].includes(best?.label)) {\r\n value = `Más de ${line}`;\r\n if (best?.participant) {\r\n value = `${best.participant} - ${value}`;\r\n }\r\n }\r\n else if ([\"Menos de\", \"Menos\"].includes(best?.label)) {\r\n value = `Menos de ${line}`;\r\n if (best?.participant) {\r\n value = `${best.participant} - ${value}`;\r\n }\r\n }\r\n \r\nelse if ([\"Sí\", \"No\"].includes(best?.label) ) {\r\n value = best?.label;\r\n if (best?.participant) {\r\n value = `${best.participant} - ${value}`;\r\n }\r\n}\r\n\r\n// ----- PRIORITY 3: DOUBLE CHANCE (1X, 12, X2) -----\r\nelse if ([\"1X\", \"12\", \"X2\"].includes(best?.label)) {\r\n \r\n if (best.label === \"1X\") {\r\n value = `${homeName} o Empate`;//event.participants?.[0]?.name || \r\n } else if (best.label === \"12\") {\r\n value = `${homeName} o ${awayName}`;\r\n } else if (best.label === \"X2\") {\r\n value = `${awayName} o Empate`;\r\n }\r\n\r\n}\r\n // ----- DEFAULT LOGIC -----\r\n else {\r\n if (best?.participant) value = best.participant;\r\n else value = best?.label ?? \"\";\r\n\r\n if (line !== \"\" && value === best.label) {\r\n value = `${best.label} ${line}`;\r\n }\r\n }\r\n\r\n return {\r\n id : best?.id ?? 0,\r\n value,\r\n label: a.criterion.label,\r\n odds: best?.odds ?? 0,\r\n bl: best?.label ?? 0,\r\n position: best?.position ?? 0,\r\n\r\n };\r\n });\r\n\r\n const total = outcomes.reduce((acc: any, o:any) => acc + o.odds, 0) / 1000;\r\n\r\n return {\r\n outcomes,\r\n total: total.toFixed(2),\r\n };\r\n}\r\nconst eventOutcomes = processOutcome(event)\r\n\r\n\r\n return (\r\n <div className={styles.card}>\r\n <div className={styles.combinadas}>\r\n <Stack direction=\"column\" spacing={0.5} useFlexGap>\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 <img loading=\"lazy\" src=\"/assets/img/home/Combinadas/line.png\" />\r\n\r\n <Stack direction=\"column\" spacing={0.5} useFlexGap>\r\n {eventOutcomes['outcomes'].sort((a: any, b: any) => a.position - b.position).map((a :any, i : number) => {\r\n\r\n return (\r\n <div className={styles.apuestaItem} key={i}>\r\n <div className={styles.lineContainer}>\r\n <div className={styles.circle} />\r\n {i < eventOutcomes.outcomes.length - 1 && <div className={styles.line} />}\r\n </div>\r\n\r\n <div className={styles.apuestaText}>\r\n <strong>\r\n {a['value']}\r\n </strong>{\" \"}\r\n | {a['label']}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </Stack>\r\n </Stack>\r\n </div>\r\n\r\n <button onClick={() => redirectHomeWithOutcomes(eventOutcomes?.outcomes?.map((o : any) => o?.id) ?? []) } className={styles.cuotaTotal}>\r\n <span>\r\n Cuota total: <strong>{(((event as any)['combinadoTotal'] ?? 0 ) / 1000).toFixed(2)}</strong>\r\n </span>\r\n <img loading=\"lazy\" src=\"/assets/img/home/Combinadas/cuotaTotal.svg\" alt=\"cuota total\" />\r\n</button>\r\n </div>\r\n );\r\n}\r\n\r\n","import React from \"react\";\r\nimport styles from \"./OraculoButtonBet.module.css\";\r\nimport { Link as MuiLink } from \"@mui/material\";\r\n\r\nexport interface OraculoButtonProps {\r\n children?: React.ReactNode;\r\n onClick?: any;\r\n href?: string;\r\n target?: React.HTMLAttributeAnchorTarget;\r\n rel?: string;\r\n type?: \"button\" | \"submit\" | \"reset\";\r\n disabled?: boolean;\r\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n fullWidth?: boolean;\r\n fullHeight?: boolean;\r\n className?: string;\r\n ariaLabel?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n iconOnly?: boolean;\r\n}\r\n\r\nexport default function OraculoButtonBet({\r\n children,\r\n onClick,\r\n href,\r\n target,\r\n rel,\r\n type = \"button\",\r\n disabled = false,\r\n variant = \"primary\",\r\n size,\r\n fullWidth = false,\r\n fullHeight = false,\r\n className = \"\",\r\n ariaLabel,\r\n leftIcon,\r\n rightIcon,\r\n iconOnly,\r\n}: OraculoButtonProps) {\r\n const hasText = !!children && children !== true;\r\n const hasLeft = !!leftIcon;\r\n const hasRight = !!rightIcon;\r\n const onlyOneIcon = (hasLeft ? 1 : 0) + (hasRight ? 1 : 0) === 1;\r\n const isIconOnly = iconOnly ?? (onlyOneIcon && !hasText);\r\n\r\n const cls = [\r\n styles[\"orc-btn\"], // base\r\n styles[`orc-btn--${variant}`], // variant primary/secondary/tertiary\r\n size ? styles[`orc-btn--${size}`] : \"\", // sm / md / lg\r\n fullWidth ? styles[\"orc-btn--full\"] : \"\",\r\n fullHeight ? styles[\"orc-btn--fullHeight\"] : \"\",\r\n isIconOnly ? styles[\"orc-btn--iconOnly\"] : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n const content = (\r\n <>\r\n {leftIcon && <span className={styles[\"orc-btn__icon\"]}>{leftIcon}</span>}\r\n {!isIconOnly && (\r\n <span className={styles[\"orc-btn__label\"]}>{children}</span>\r\n )}\r\n {rightIcon && <span className={styles[\"orc-btn__icon\"]}>{rightIcon}</span>}\r\n </>\r\n );\r\n\r\n const ariaDisabled = disabled ? true : undefined;\r\n\r\n if (href) {\r\n return (\r\n <MuiLink\r\n href={href}\r\n target={target}\r\n rel={rel}\r\n aria-label={ariaLabel}\r\n aria-disabled={ariaDisabled}\r\n tabIndex={ariaDisabled ? -1 : undefined}\r\n className={cls}\r\n onClick={ariaDisabled ? (e) => e.preventDefault() : onClick}\r\n >\r\n {content}\r\n </MuiLink>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type={type}\r\n onClick={onClick}\r\n disabled={!!ariaDisabled}\r\n aria-label={ariaLabel}\r\n className={cls}\r\n >\r\n {content}\r\n </button>\r\n );\r\n}\r\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\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 ?? []).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 ?? []).map((item : Outcome, index : number) => (\r\n <OraculoButtonBet key={index} variant=\"primary\" disabled={item.odds == undefined || selectedOffer?.cashOutStatus == 'SUSPENDED'} onClick={()=>{redirectHomeWithOutcomes(item.id);}} >\r\n {item.odds === undefined ? \"\" : (item.odds / 1000).toFixed(2)}\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\n\r\nexport default function OraculoEventSemanaCard({event, jersey} : SemanaEventProps ) {\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\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={()=>{redirectHomeWithOutcomes(item.id);}} >{(item.odds / 1000).toFixed(2)}</OraculoButton>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</OraculoGridGroup>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Stack>\r\n\t\t\t\t</Stack>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t);\r\n}","import React, { useRef, useState } from \"react\";\r\nimport { ChevronLeftRounded, ChevronRightRounded } from \"@mui/icons-material\";\r\nimport { OraculoSectionTitle, OraculoButton, OraculoCarousel } from \"../..\";\r\nimport {\r\n OraculoSeccionDestacadosItem,\r\n OraculoSeccionDestacadosProps,\r\n} from \"../../interfaces/oraculo/InterfaceDestacados\";\r\n\r\nexport default function OraculoSeccionDestacados({\r\n items,\r\n title = \"Destacados\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: OraculoSeccionDestacadosProps) {\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n const handlePrev = () => carouselRef.current?.prev();\r\n const handleNext = () => carouselRef.current?.next();\r\n\r\n const handleViewMore = () => {\r\n window.location.href = \"https://www.olimpo.bet/promociones\";\r\n };\r\n\r\n const redirectToPromotion = (promotion?: string) => {\r\n if (!promotion) return;\r\n if (typeof window === \"undefined\") return;\r\n\r\n const slug = encodeURIComponent(promotion);\r\n const url = `https://www.olimpo.bet/promociones/${slug}`;\r\n window.location.href = url;\r\n };\r\n\r\n const sectionClassName = className || undefined;\r\n\r\n return (\r\n <section className={sectionClassName} style={{ width: \"100%\" }}>\r\n <header\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto auto\",\r\n alignItems: \"center\",\r\n columnGap: 12,\r\n rowGap: 8,\r\n marginBottom: 16,\r\n }}\r\n >\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <div style={{ display: \"flex\", gap: 8 }}>\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 || isLoading}\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 || isLoading}\r\n />\r\n </div>\r\n\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </header>\r\n\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={2}\r\n gap=\"16px\"\r\n enableHorizontalWheel\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: true,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"start\",\r\n }}\r\n breakpoints={{\r\n 768: { perPage: 2, focus: \"start\" },\r\n 1024: { perPage: 2.5, focus: \"start\" },\r\n }}\r\n renderItem={(item: OraculoSeccionDestacadosItem) => (\r\n <div\r\n key={`${item.title}-${item.image}`}\r\n style={{\r\n textAlign: \"center\",\r\n marginTop: 16,\r\n cursor: \"pointer\",\r\n }}\r\n onClick={() => redirectToPromotion(item.promotion)}\r\n >\r\n <img\r\n src={`https://olimpo.bet${item.image !== \"\" ? item.image : item.summary_image}`}\r\n alt={item.title}\r\n style={{\r\n width: \"100%\",\r\n height:\r\n typeof window !== \"undefined\" && window.innerWidth < 768 ? \"80px\" : \"137px\",\r\n borderRadius: 8,\r\n display: \"block\",\r\n objectFit: \"cover\",\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </section>\r\n );\r\n}\r\n","\r\nconst KEY = \"__ORACULO_EXTRAS__\" as const;\r\n\r\ntype Store = {\r\n extras?: Record<string, unknown>;\r\n};\r\n\r\nfunction getStore(): Store {\r\n const g = globalThis as any;\r\n if (!g[KEY]) g[KEY] = {};\r\n return g[KEY] as Store;\r\n}\r\n\r\nexport function setOraculoExtras(extrasObj: Record<string, unknown>) {\r\n getStore().extras = extrasObj;\r\n}\r\nexport function getOraculoExtra<T = unknown>(key: string): T | undefined {\r\n return getStore().extras?.[key] as T | undefined;\r\n}\r\nexport function clearOraculoExtras() {\r\n delete (globalThis as any)[KEY];\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport OraculoGameRankCard from \"../../molecules/OraculoGameRankCard/OraculoGameRankCard\";\r\nimport { OraculoSeccionTopJuegosProps } from \"../../interfaces/oraculo/InterfaceTopJuegos\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\nexport default function OraculoSeccionTopJuegos({\r\n items,\r\n title = \"Top Juegos\",\r\n iconUrl,\r\n onCardClick,\r\n}: OraculoSeccionTopJuegosProps) {\r\n const normalizedItems = useMemo(\r\n () =>\r\n (items ?? [])\r\n .map((item, index) => ({\r\n ...item,\r\n orden: item.orden ?? index + 1,\r\n _originalIndex: index,\r\n }))\r\n .sort((a, b) => {\r\n if (a.orden != null && b.orden != null) return a.orden - b.orden;\r\n return a._originalIndex - b._originalIndex;\r\n }),\r\n [items]\r\n );\r\n\r\n const isLoading = !items || items.length === 0;\r\n const top6 = isLoading ? Array.from({ length: 6 }) : normalizedItems.slice(0, 6);\r\n\r\n const handleOpen = (juego: any) => {\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n showIframe?.();\r\n\r\n requestAnimationFrame(() => {\r\n loadMachine?.(juego, false, \"CASINO\");\r\n });\r\n };\r\n\r\n return (\r\n <section style={{ width: \"100%\" }}>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: {\r\n xs: \"repeat(3, minmax(0, 1fr))\",\r\n md: \"repeat(6, minmax(0, 1fr))\",\r\n },\r\n gap: { xs: 1.5, md: 2 },\r\n justifyItems: \"center\",\r\n width: \"100%\",\r\n }}\r\n >\r\n {top6.map((juego: any, index: number) => (\r\n <OraculoGameRankCard\r\n key={isLoading ? `sk-${index}` : (juego.machine ?? `${index}`)}\r\n imageUrl={isLoading ? \"\" : juego.background ? `https://olimpo.bet${juego.background}` : `https://olimpo.bet${juego.logo ?? \"\"}`}\r\n orden={isLoading ? index + 1 : juego.orden}\r\n loading={isLoading}\r\n onClick={\r\n isLoading\r\n ? undefined\r\n : () => {\r\n onCardClick?.(juego);\r\n handleOpen(juego);\r\n }\r\n }\r\n />\r\n ))}\r\n </Box>\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoLiveCasinoCard from \"../../molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard\";\r\nimport { OraculoSeccionCasinoEnVivoProps } from \"../../interfaces/oraculo/InterfaceCasinoEnVivo\";\r\nimport { OraculoGameItem } from \"../..\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) => g.orden ?? g.machine ?? idx;\r\n\r\nconst OraculoSeccionCasinoEnVivo: React.FC<OraculoSeccionCasinoEnVivoProps> = ({\r\n items,\r\n title = \"Casino en vivo\",\r\n subtitle = \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\",\r\n backgroundMobileUrl = \"\",\r\n backgroundDesktopUrl = \"\",\r\n onViewMore,\r\n className,\r\n}) => {\r\n const handleOpenLive = (juego: any) => {\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n // 1) Mostrar contenedor del iframe\r\n showIframe?.();\r\n\r\n // 2) Subir arriba (para que el iframe no aparezca “desde donde estabas”)\r\n if (typeof window !== \"undefined\") {\r\n window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n }\r\n\r\n // 3) Abrir juego con el flujo del host (mismo que casino/virtuales)\r\n // Espera 1 frame por si el DOM del iframe se monta/actualiza al mostrarlo\r\n requestAnimationFrame(() => {\r\n loadMachine?.(juego, false, \"casino_en_vivo\");\r\n });\r\n };\r\n\r\n return (\r\n <Box\r\n className={className}\r\n sx={{\r\n position: \"relative\",\r\n color: \"white\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Fondo */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n backgroundImage: {\r\n xs: `\r\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\r\n url('${backgroundMobileUrl}')\r\n `,\r\n md: `\r\n linear-gradient(to bottom, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\r\n url('${backgroundDesktopUrl}')\r\n `,\r\n },\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n backgroundRepeat: \"no-repeat\",\r\n zIndex: 0,\r\n }}\r\n />\r\n\r\n {/* Contenido */}\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n zIndex: 1,\r\n maxWidth: 1200,\r\n height: { xs: \"450px\", md: \"550px\" },\r\n mx: \"auto\",\r\n px: { xs: 2.5, md: 6 },\r\n display: \"flex\",\r\n flexDirection: { xs: \"column\", md: \"row\" },\r\n alignItems: { xs: \"center\", md: \"center\" },\r\n justifyContent: \"center\",\r\n gap: { xs: 0, md: 15 },\r\n textAlign: { xs: \"center\", md: \"left\" },\r\n }}\r\n >\r\n {/* Columna izquierda */}\r\n <Stack spacing={3} sx={{ maxWidth: { md: 280 } }}>\r\n <Typography\r\n variant=\"h4\"\r\n sx={{\r\n fontWeight: 800,\r\n fontSize: { xs: 24, md: 40 },\r\n WebkitTextStroke: \"0.5px rgba(255, 255, 255, .5)\",\r\n textShadow:\r\n \"0 0 2px rgba(255, 255, 255, .95),\" +\r\n \"0 0 4px rgba(255, 255, 255, .6),\" +\r\n \"0 1px 0 #898989\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 14, md: 18 },\r\n color: \"rgba(255,255,255,0.9)\",\r\n marginX: { xs: 4, md: 0 },\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {subtitle}\r\n </Typography>\r\n\r\n <Box sx={{ display: { xs: \"none\", md: \"block\" } }}>\r\n <OraculoButton\r\n variant=\"primary\"\r\n size=\"md\"\r\n onClick={() => onViewMore?.() || (window.location.href = \"https://www.olimpo.bet/casino-en-vivo\")}\r\n >\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Stack>\r\n\r\n {/* Lista de tarjetas */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: { xs: 2, md: 3 },\r\n justifyContent: \"center\",\r\n overflowX: { xs: \"auto\", md: \"visible\" },\r\n py: { xs: 3, md: 0 },\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {(items ?? []).slice(0, 3).map((juego, idx) => (\r\n <OraculoLiveCasinoCard\r\n key={getGameId(juego, idx)}\r\n logo={`https://olimpo.bet${juego.background ? juego.background : juego.logo ?? \"\"}`}\r\n provider={juego.provider}\r\n providerName={juego.web_name}\r\n machine={juego.machine}\r\n onClick={() => handleOpenLive(juego)}\r\n />\r\n ))}\r\n </Box>\r\n\r\n {/* Botón mobile */}\r\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\r\n <OraculoButton\r\n variant=\"primary\"\r\n size=\"lg\"\r\n onClick={() => onViewMore?.() || (window.location.href = \"https://www.olimpo.bet/casino-en-vivo\")}\r\n >\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionCasinoEnVivo;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\r\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\r\n\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, { OraculoGameSlideItem } from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionCasinoProps } from \"../../interfaces/oraculo/InterfaceCasino\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\ninterface CasinoSlide {\r\n id: string;\r\n kind: SlideKind;\r\n items: OraculoGameSlideItem[];\r\n}\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) => g.orden ?? g.machine ?? idx;\r\n\r\nconst buildCasinoSlides = (\r\n games: OraculoGameItem[],\r\n mosaicFirst = true,\r\n gridSize = 1\r\n): CasinoSlide[] => {\r\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\r\n id: getGameId(g, idx),\r\n imageUrl: g.logo ?? \"\",\r\n ...(g.background ? { background: g.background } : {}),\r\n }));\r\n\r\n if (!baseItems.length) return [];\r\n\r\n const slides: CasinoSlide[] = [];\r\n let start = 0;\r\n\r\n if (mosaicFirst) {\r\n const take = Math.min(baseItems.length, 1);\r\n slides.push({ id: \"mosaic-0\", kind: \"mosaic\", items: baseItems.slice(0, take) });\r\n start = take;\r\n }\r\n\r\n while (start < baseItems.length) {\r\n const end = Math.min(start + gridSize, baseItems.length);\r\n slides.push({ id: `grid-${start}`, kind: \"grid\", items: baseItems.slice(start, end) });\r\n start = end;\r\n }\r\n\r\n return slides;\r\n};\r\n\r\nconst OraculoSeccionCasino: React.FC<OraculoSeccionCasinoProps> = ({\r\n items,\r\n title = \"Casino\",\r\n iconUrl = \"/assets/img/home/Casino/diamante.svg\",\r\n onItemClick,\r\n onViewMore,\r\n mosaicFirst = true,\r\n gridSize = 1,\r\n}) => {\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\n const handlePrev = () => carouselRef.current?.prev();\r\n const handleNext = () => carouselRef.current?.next();\r\n\r\n const handleViewMore = () => {\r\n window.location.href = \"https://www.olimpo.bet/casino\";\r\n };\r\n\r\n const buildLoadingSlides = (mosaicFirst = true, gridSize = 4): CasinoSlide[] => {\r\n const mkItems = (n: number) =>\r\n Array.from({ length: n }, (_, i) => ({ id: `sk-${n}-${i}`, imageUrl: \"\" }));\r\n\r\n const slides: CasinoSlide[] = [];\r\n if (mosaicFirst) slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n return slides;\r\n };\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n const slides = isLoading\r\n ? buildLoadingSlides(mosaicFirst, gridSize)\r\n : buildCasinoSlides(items, mosaicFirst, gridSize);\r\n\r\n return (\r\n <section>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n {/* Header */}\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto auto\",\r\n alignItems: \"center\",\r\n columnGap: 1.5,\r\n rowGap: 1,\r\n }}\r\n >\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\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 </Box>\r\n\r\n <Box sx={{ justifySelf: \"end\" }}>\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n\r\n {/* Carousel (wheel interno por prop) */}\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={slides}\r\n perPage={1}\r\n gap=\"0px\"\r\n enableHorizontalWheel\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: true,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"start\",\r\n }}\r\n renderItem={(slide) => (\r\n <div style={{ alignSelf: \"start\" }}>\r\n <OraculoGameSlide\r\n items={slide.items}\r\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\r\n loading={isLoading}\r\n onClick={(itm) => {\r\n if (isLoading) return;\r\n\r\n const game = items.find((g, idx) => String(getGameId(g, idx)) === String(itm.id));\r\n if (!game) return;\r\n\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n showIframe?.();\r\n loadMachine?.(game, false, \"CASINO\");\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionCasino;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ChevronLeftRounded from \"@mui/icons-material/ChevronLeftRounded\";\r\nimport ChevronRightRounded from \"@mui/icons-material/ChevronRightRounded\";\r\n\r\nimport OraculoSectionTitle from \"../../atoms/OraculoSectionTitle/OraculoSectionTitle\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, { OraculoGameSlideItem } from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionVirtualesProps } from \"../../interfaces/oraculo/InterfaceVirtuales\";\r\nimport { getOraculoExtra } from \"../../utils/openMachineRegistry\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\r\ntype LoadMachineFn = (game: any, demo: boolean, source: string) => void;\r\n\r\ninterface VirtualSlide {\r\n id: string;\r\n kind: SlideKind;\r\n items: OraculoGameSlideItem[];\r\n}\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) => g.orden ?? g.machine ?? idx;\r\n\r\nconst buildVirtualSlides = (\r\n games: OraculoGameItem[],\r\n mosaicFirst = true,\r\n gridSize = 1\r\n): VirtualSlide[] => {\r\n const baseItems: OraculoGameSlideItem[] = games.map((g, idx) => ({\r\n id: getGameId(g, idx),\r\n imageUrl: g.logo ?? \"\",\r\n ...(g.background ? { background: g.background } : {}),\r\n }));\r\n\r\n if (!baseItems.length) return [];\r\n\r\n const slides: VirtualSlide[] = [];\r\n let start = 0;\r\n\r\n if (mosaicFirst) {\r\n const take = Math.min(baseItems.length, 1);\r\n slides.push({ id: \"mosaic-0\", kind: \"mosaic\", items: baseItems.slice(0, take) });\r\n start = take;\r\n }\r\n\r\n while (start < baseItems.length) {\r\n const end = Math.min(start + gridSize, baseItems.length);\r\n slides.push({ id: `grid-${start}`, kind: \"grid\", items: baseItems.slice(start, end) });\r\n start = end;\r\n }\r\n\r\n return slides;\r\n};\r\n\r\nconst buildLoadingVirtualSlides = (mosaicFirst = true, gridSize = 4): VirtualSlide[] => {\r\n const mkItems = (n: number) =>\r\n Array.from({ length: n }, (_, i) => ({ id: `sk-${n}-${i}`, imageUrl: \"\" }));\r\n\r\n const slides: VirtualSlide[] = [];\r\n if (mosaicFirst) slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n return slides;\r\n};\r\n\r\nconst OraculoSeccionVirtuales: React.FC<OraculoSeccionVirtualesProps> = ({\r\n items,\r\n title = \"Virtuales\",\r\n iconUrl = \"/assets/img/home/Virtuales/virtuales.svg\",\r\n onItemClick,\r\n onViewMore,\r\n mosaicFirst = true,\r\n gridSize = 1,\r\n}) => {\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\n const handlePrev = () => carouselRef.current?.prev();\r\n const handleNext = () => carouselRef.current?.next();\r\n\r\n const handleViewMore = () => {\r\n window.location.href = \"https://www.olimpo.bet/juegos-virtuales\";\r\n };\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n const slides = isLoading\r\n ? buildLoadingVirtualSlides(mosaicFirst, gridSize)\r\n : buildVirtualSlides(items, mosaicFirst, gridSize);\r\n\r\n return (\r\n <section>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n {/* Header */}\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto auto\",\r\n alignItems: \"center\",\r\n columnGap: 1.5,\r\n rowGap: 1,\r\n }}\r\n >\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box sx={{ display: \"flex\", gap: 1, justifyContent: \"flex-end\" }}>\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 </Box>\r\n\r\n <Box sx={{ justifySelf: \"end\" }}>\r\n <OraculoButton variant=\"secondary\" onClick={handleViewMore}>\r\n Ver más\r\n </OraculoButton>\r\n </Box>\r\n </Box>\r\n\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={slides}\r\n perPage={1}\r\n gap=\"0\"\r\n enableHorizontalWheel\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: true,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"start\",\r\n perMove: 1,\r\n }}\r\n renderItem={(slide) => (\r\n <div style={{ alignSelf: \"start\" }}>\r\n <OraculoGameSlide\r\n items={slide.items}\r\n layout={slide.kind === \"mosaic\" ? \"mosaic\" : \"grid\"}\r\n loading={isLoading}\r\n onClick={(itm) => {\r\n if (isLoading) return;\r\n\r\n const game = items.find((g, idx) => String(getGameId(g, idx)) === String(itm.id));\r\n if (!game) {\r\n console.warn(\"[virtuales] no se encontró game para id:\", itm.id);\r\n return;\r\n }\r\n\r\n const showIframe = getOraculoExtra<() => void>(\"showIframe\");\r\n const loadMachine = getOraculoExtra<LoadMachineFn>(\"loadMachine\");\r\n\r\n showIframe?.();\r\n loadMachine?.(game, false, \"VIRTUALES\");\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionVirtuales;\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\n\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoWelcomeBanner from \"../../molecules/OraculoWelcomeBanner/OraculoWelcomeBanner\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport { OraculoSeccionBonoProps, OraculoBonosItem } from \"../../interfaces/oraculo/InterfaceBonos\";\r\n\r\nconst buildSectionSx = (bgUrl: string) => ({\r\n position: \"relative\" as const,\r\n py: 8,\r\n color: \"#fff\",\r\n backgroundImage: `\r\n linear-gradient(to bottom,#121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to top, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to left, #121212 0%, rgba(18,18,18,0) 10%),\r\n linear-gradient(to right, #121212 0%, rgba(18,18,18,0) 10%),\r\n url(\"${bgUrl}\")\r\n `,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n backgroundSize: \"cover\",\r\n});\r\n\r\nconst headlineBaseSx = {\r\n textAlign: \"center\" as const,\r\n lineHeight: 1.1,\r\n mb: 1.5,\r\n};\r\n\r\nconst hlTopSx = {\r\n display: \"inline-block\",\r\n fontWeight: 600,\r\n fontSize: 24,\r\n};\r\n\r\nconst hlBottomSx = {\r\n display: \"inline-block\",\r\n fontSize: 24,\r\n lineHeight: 1.1,\r\n WebkitTextStroke: \"0.3px rgba(255, 255, 255, .5)\",\r\n textShadow: `\r\n 0 0 2px rgba(255, 255, 255, .95),\r\n 0 0 6px rgba(255, 255, 255, .6),\r\n 0 1px 0 rgba(137, 137, 137, .85)\r\n `,\r\n};\r\n\r\nconst OraculoSeccionBonoBienvenida: React.FC<OraculoSeccionBonoProps> = ({\r\n headline,\r\n headline2,\r\n items,\r\n backgroundImageUrl,\r\n}) => {\r\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\r\n const showDots = items.length > 1;\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const wheelHostRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const navRef = useRef(navState);\r\n useEffect(() => {\r\n navRef.current = navState;\r\n }, [navState]);\r\n\r\n const wheelLockRef = useRef(false);\r\n const wheelUnlockTimerRef = useRef<number | null>(null);\r\n\r\n const activeSlide = items?.[activeIndex];\r\n\r\n const bgUrl = useMemo(\r\n () => activeSlide?.backgroundImageUrl ?? backgroundImageUrl ?? \"\",\r\n [activeSlide, backgroundImageUrl]\r\n );\r\n\r\n const sectionSx = buildSectionSx(bgUrl);\r\n\r\n const isLoading = !items || items.length === 0;\r\n\r\n useEffect(() => {\r\n const el = wheelHostRef.current;\r\n if (!el) return;\r\n\r\n const THRESHOLD = 6;\r\n const INVERT = false;\r\n const LOCK_MS = 380;\r\n\r\n const onWheel = (e: WheelEvent) => {\r\n if (isLoading) return;\r\n if (e.ctrlKey) return;\r\n\r\n if (wheelLockRef.current) return;\r\n\r\n const dx = e.deltaX;\r\n const dy = e.deltaY;\r\n\r\n // solo horizontal\r\n if (Math.abs(dx) <= Math.abs(dy)) return;\r\n if (Math.abs(dx) < THRESHOLD) return;\r\n\r\n const dirNext = INVERT ? dx < 0 : dx > 0;\r\n\r\n // si no es loop, evitamos “rebotar” en bordes\r\n if (dirNext && navRef.current.isEnd) return;\r\n if (!dirNext && navRef.current.isStart) return;\r\n\r\n e.preventDefault();\r\n\r\n wheelLockRef.current = true;\r\n if (dirNext) carouselRef.current?.next();\r\n else carouselRef.current?.prev();\r\n\r\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\r\n wheelUnlockTimerRef.current = window.setTimeout(() => {\r\n wheelLockRef.current = false;\r\n }, LOCK_MS);\r\n };\r\n\r\n el.addEventListener(\"wheel\", onWheel, { passive: false });\r\n return () => {\r\n el.removeEventListener(\"wheel\", onWheel as any);\r\n if (wheelUnlockTimerRef.current) window.clearTimeout(wheelUnlockTimerRef.current);\r\n };\r\n }, [isLoading]);\r\n\r\n const renderSlide = (it: OraculoBonosItem, desktop: boolean) => {\r\n const hl1 = it.headline ?? headline;\r\n const hl2 = it.headline2 ?? headline2;\r\n\r\n if (!desktop) {\r\n return (\r\n <Box sx={{ textAlign: \"center\" }}>\r\n {(hl1 || hl2) && (\r\n <Box sx={headlineBaseSx}>\r\n {hl1 && (\r\n <Typography component=\"span\" sx={hlTopSx}>\r\n {hl1}\r\n </Typography>\r\n )}\r\n {hl2 && (\r\n <>\r\n <br />\r\n <Typography component=\"span\" sx={hlBottomSx}>\r\n {hl2}\r\n </Typography>\r\n </>\r\n )}\r\n </Box>\r\n )}\r\n\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <OraculoWelcomeBanner {...it} onButtonClick={it.onButtonClick} variant=\"small\" />\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box\r\n sx={{\r\n maxWidth: 1200,\r\n mx: \"auto\",\r\n px: 15,\r\n display: \"grid\",\r\n gridTemplateColumns: \"260px minmax(0, 1fr)\",\r\n alignItems: \"center\",\r\n columnGap: 6,\r\n }}\r\n >\r\n {(hl1 || hl2) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n minHeight: \"100%\",\r\n }}\r\n >\r\n <Box sx={{ ...headlineBaseSx, textAlign: \"left\", mb: 0 }}>\r\n {hl1 && (\r\n <Typography component=\"span\" sx={hlTopSx}>\r\n {hl1}\r\n </Typography>\r\n )}\r\n {hl2 && (\r\n <>\r\n <br />\r\n <Typography component=\"span\" sx={hlBottomSx}>\r\n {hl2}\r\n </Typography>\r\n </>\r\n )}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\r\n <Box sx={{ width: \"100%\", maxWidth: 600, mx: \"auto\" }}>\r\n <OraculoWelcomeBanner {...it} onButtonClick={it.onButtonClick} variant=\"large\" />\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n\r\n return (\r\n <Box component=\"section\" sx={sectionSx}>\r\n <div ref={wheelHostRef} style={{ width: \"100%\" }}>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={1}\r\n gap={\"0px\"}\r\n options={{\r\n autoWidth: false,\r\n // si quieres, puedes activar loop acá:\r\n // type: \"loop\",\r\n // perMove: 1,\r\n // focus: \"center\",\r\n // pagination: false,\r\n // arrows: false,\r\n // drag: true,\r\n }}\r\n renderItem={(it) => (\r\n <Box sx={{ width: \"100%\" }}>\r\n {renderSlide(it, !isMobile)}\r\n </Box>\r\n )}\r\n onMove={({ index, isStart, isEnd }: any) => {\r\n setActiveIndex(index);\r\n if (typeof isStart === \"boolean\" && typeof isEnd === \"boolean\") {\r\n setNavState({ isStart, isEnd });\r\n }\r\n }}\r\n />\r\n </div>\r\n\r\n {showDots && (\r\n <Box sx={{ mt: 2, display: \"flex\", justifyContent: \"center\" }}>\r\n <OraculoCarouselDots\r\n total={items.length}\r\n active={activeIndex}\r\n onSelect={(i) => {\r\n setActiveIndex(i);\r\n carouselRef.current?.go(i);\r\n }}\r\n />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionBonoBienvenida;\r\n","import React, { useLayoutEffect, useRef } from \"react\";\r\nimport \"./OraculoSeccionClubOlimpo.css\";\r\nimport OraculoClubOlimpoVisual from \"../../molecules/OraculoClubOlimpoVisual/OraculoClubOlimpoVisual\";\r\nimport { OraculoSeccionClubOlimpoItem } from \"../../interfaces/oraculo/InterfaceClubOlimpo\";\r\n\r\nexport interface OraculoSeccionClubOlimpoItems {\r\n className?: string;\r\n /** Si true, hace el efecto full-bleed (100vw centrado) */\r\n fullBleed?: boolean;\r\n /** Lista de variantes (puedes pasar 1 o varias). */\r\n items: OraculoSeccionClubOlimpoItem;\r\n /** Índice del item a mostrar si pasas varios. */\r\n selectedIndex?: number;\r\n /** aria-label de la sección (fallback al imgAlt del item seleccionado). */\r\n ariaLabel?: string;\r\n}\r\n\r\nconst OraculoSeccionClubOlimpo: React.FC<OraculoSeccionClubOlimpoItems> = ({\r\n className = \"\",\r\n fullBleed = true,\r\n items,\r\n selectedIndex = 0,\r\n ariaLabel,\r\n}) => {\r\n const rootRef = useRef<HTMLDivElement | null>(null);\r\n const bottomRef = useRef<HTMLDivElement | null>(null);\r\n\r\n if (!items ) return null;\r\n\r\n const onClick = () => {\r\n window.location.href = \"https://www.olimpo.bet/conoce-club-olimpo\";\r\n };\r\n\r\n const item = Array.isArray(items) \r\n ? items[selectedIndex]\r\n : items;\r\n\r\n useLayoutEffect(() => {\r\n if (!rootRef.current || !bottomRef.current) return;\r\n if (typeof ResizeObserver === \"undefined\") return;\r\n\r\n const root = rootRef.current;\r\n const bottom = bottomRef.current;\r\n\r\n const update = () => {\r\n root.style.setProperty(\r\n \"--orc-co-bottomH\",\r\n `${bottom.offsetHeight + 16}px`\r\n );\r\n };\r\n\r\n const ro = new ResizeObserver(update);\r\n ro.observe(bottom);\r\n update();\r\n\r\n return () => ro.disconnect();\r\n }, []);\r\n\r\n const rootClass = [\r\n \"orc-co-wrap\",\r\n fullBleed ? \"orc-co-fullBleed\" : \"\",\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <section\r\n ref={rootRef}\r\n className={rootClass}\r\n aria-label={ariaLabel || item.imgAlt || \"Club Olimpo\"}\r\n >\r\n <div ref={bottomRef}>\r\n <OraculoClubOlimpoVisual\r\n text={item.text}\r\n // onClick={item.onClick}\r\n onClick={onClick}\r\n imgAlt={item.imgAlt}\r\n imgSrcMobile={item.imgMobile}\r\n imgSrcDesktopBg={item.imgDesktopBg}\r\n imgSrcDesktopLogo={item.imgDesktopLogo}\r\n />\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionClubOlimpo;\r\n","import { useRef, useState, useEffect } 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\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\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState([]);\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 carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n carouselRef.current?.next();\r\n \r\n };\r\n\r\n const handleViewMore = () => {\r\n verMasSeccionCombinadas();\r\n };\r\n\r\n async function loadDataEventSpecial() {\r\n try {\r\n const listRes = await fetch(SPECIALS_GROUPS_URL);\r\n const listData = await listRes.json();\r\n\r\n const groupId = listData?.group?.groups?.[0]?.id;\r\n\r\n if (!groupId) {\r\n console.error(\"Could not extract group ID\");\r\n return;\r\n }\r\n\r\n const SPECIALS_URL = `https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/prepackcoupon/eventgroup/${groupId}.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764283566783&prePackCouponTags=CUSTOM`;\r\n\r\n const response = await fetch(SPECIALS_URL);\r\n const data = await response.json();\r\n\r\n setEvents(\r\n mergeEventOffers(data.events, data.betOffers, data.prePackCoupons)\r\n );\r\n } catch (e) {\r\n console.error(\"loadDataEventSpecial error:\", e);\r\n }\r\n}\r\n\r\n function mergeEventOffers(eventos:any, apuestas : any, prePackCoupons : any) {\r\n const results : any = [] ;\r\n\r\n for (const coupon of prePackCoupons) {\r\n // Build outcome set only for this coupon\r\n const usedOutcomeIds = getUsedOutcomeIds([coupon]);\r\n const reqs = extractRequirements(coupon);\r\n\r\n // Filter apuestas only using this coupon’s outcomes\r\n const apuestasByEvent = apuestas.reduce((acc:any, a:any) => {\r\n if (!acc[a.eventId]) acc[a.eventId] = [];\r\n\r\n const filteredOutcomes = a.outcomes.filter((o:any) =>\r\n usedOutcomeIds.has(o.id)\r\n );\r\n\r\n if (filteredOutcomes.length > 0) {\r\n const requiredIds = Array.from(\r\n reqs?.[0]?.requiredOutcomeIds ?? []\r\n );\r\n const outcomesWithPosition = filteredOutcomes.map((o: any) => ({\r\n ...o,\r\n position: requiredIds.indexOf(o.id)\r\n }))\r\n \r\n acc[a.eventId].push({\r\n ...a,\r\n outcomes: outcomesWithPosition\r\n });\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n // Extract required outcomes of THIS coupon\r\n\r\n // Now create duplicated event\r\n eventos.forEach((evento : any) => {\r\n if (evento.id !== coupon.prePackCouponRows[0].eventId) return;\r\n\r\n const eventOutcomeSet = usedOutcomeIds;\r\n\r\n let combinadoTotal = null;\r\n for (const r of reqs) {\r\n const fullMatch =\r\n [...r.requiredOutcomeIds].every(id => eventOutcomeSet.has(id));\r\n\r\n if (fullMatch) {\r\n combinadoTotal = r.decimal;\r\n break;\r\n }\r\n }\r\n\r\n results.push({\r\n ...evento,\r\n combinadoTotal,\r\n betoffers: apuestasByEvent[evento.id] || [],\r\n couponId: coupon.id // optional for tracking\r\n });\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction extractRequirements(coupon : any) {\r\n const reqs = [];\r\n\r\n for (const row of coupon.prePackCouponRows) {\r\n if (row.type === \"BET_BUILDER\" && row.group?.groups) {\r\n const requiredOutcomeIds = new Set();\r\n row.group.groups.forEach((g:any) => {\r\n g.outcomes?.forEach((o:any) => requiredOutcomeIds.add(o.id));\r\n });\r\n\r\n reqs.push({\r\n requiredOutcomeIds,\r\n decimal: row.odds.decimal\r\n });\r\n }\r\n }\r\n\r\n return reqs;\r\n}\r\n\r\nfunction getUsedOutcomeIds(prePackCoupons : any) {\r\n const allIds = new Set();\r\n\r\n for (const coupon of prePackCoupons) {\r\n for (const row of coupon.prePackCouponRows) {\r\n if (row.type === \"BET_BUILDER\" && row.group?.groups) {\r\n // Extract outcomes inside nested groups\r\n row.group.groups.forEach((g:any) => {\r\n g.outcomes?.forEach((o:any) => allIds.add(o.id));\r\n });\r\n }\r\n\r\n if (row.type === \"SIMPLE\" && row.outcome) {\r\n allIds.add(row.outcome.id);\r\n }\r\n }\r\n }\r\n return allIds;\r\n}\r\n\r\n useEffect(() => {\r\n loadDataEventSpecial();\r\n}, []);\r\n\r\n const sectionClassName = className || undefined;\r\n\r\n if (!events || 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 <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\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={events.filter(event => event['combinadoTotal'] !== null)}\r\n perPage={undefined}\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move' }}\r\n useIndexAsKey\r\n enableHorizontalWheel\r\n breakpoints={{\r\n 768: { perPage: 1.2, gap: \"12px\", padding: { left: \"0px\", right: \"0px\" }, }, \r\n }}\r\n renderItem={(p) => <OraculoEventCombinadasCard event={p} />}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport styles from \"./OraculoEventEnVivoCard.module.css\";\r\n\r\nexport default function OraculoEventEnVivoCardSkeleton({}) {\r\n return (\r\n <div\r\n className={styles.cardWrapper}\r\n >\r\n <Stack direction=\"column\" spacing={1}>\r\n\r\n {/* Header */}\r\n <Stack spacing={1} direction=\"row\" >\r\n <Skeleton variant=\"text\" width=\"60%\" height={24} />\r\n <Skeleton variant=\"text\" width=\"39%\" height={24} />\r\n </Stack>\r\n\r\n {/* Teams + Score */}\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n <Skeleton variant=\"text\" width={40} height={40} />\r\n <Skeleton variant=\"circular\" width={32} height={40} />\r\n </Stack>\r\n\r\n <Stack spacing={8} direction=\"row\" justifyContent=\"center\" alignItems=\"center\" >\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n <Skeleton variant=\"text\" width={40} height={16} />\r\n <Skeleton variant=\"text\" width={32} height={16} />\r\n </Stack>\r\n\r\n {/* Labels */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n <Skeleton variant=\"rounded\" width={88} height={16} />\r\n </Stack>\r\n\r\n {/* Buttons */}\r\n <Stack spacing={2} direction=\"row\">\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n <Skeleton variant=\"rounded\" width={88} height={32} />\r\n </Stack>\r\n\r\n </Stack>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./FadeItemWrapper.module.css\";\r\n\r\nexport default function FadeItemWrapper({ children }: { children: React.ReactNode }) {\r\n return <div className={styles.fadeWrapper}>{children}</div>;\r\n}\r\n","import { useRef, useState, useEffect, useCallback } 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\n\r\nimport React from \"react\";\r\nimport Stack from '@mui/material/Stack';\r\nimport { verMasSeccionEnVivo, fetchJerseys, useDebouncedValue } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\nexport default function OraculoSeccionEventoEnVivo({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl = 'https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/icon.svg',\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n\r\n const LIVE_EVENTS_URL = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true\"; //cada 20s\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[] | null>(null);\r\n const [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n const [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\r\n const fetchingRef = useRef(false);\r\n const [orderedEventIds, setOrderedEventIds] = useState<string[] | null>(null);\r\n const orderIdsFetchedRef = useRef(false);\r\n\r\n\r\n const debouncedVisibleRange = useDebouncedValue(visibleRange, 300);\r\n\r\n const handlePrev = () => {\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n carouselRef.current?.next();\r\n };\r\n\r\n const handleViewMore = () => {\r\n verMasSeccionEnVivo();\r\n };\r\n const blocked = [\"esports\", \"cyber\"];\r\n\r\n const filterFootballEvents = (events: any[]) =>\r\n events.filter(ev => {\r\n if (ev.event.sport !== \"FOOTBALL\") return false;\r\n\r\n const group = ev.event.group?.toLowerCase() || \"\";\r\n return !blocked.some(word => group.includes(word));\r\n });\r\n\r\n\r\n\r\n const loadData = useCallback(async () => {\r\n try {\r\n let orderIds = orderedEventIds;\r\n\r\n if (!orderIdsFetchedRef.current && orderedEventIds === null) {\r\n orderIdsFetchedRef.current = true;\r\n\r\n try {\r\n const response = await fetch(\r\n \"https://api.mktolimpo.com/api/kambi/eventos/orden\"\r\n );\r\n\r\n const json = response.ok ? await response.json() : null;\r\n orderIds = json?.data?.event_ids || [];\r\n } catch {\r\n orderIds = [];\r\n }\r\n\r\n setOrderedEventIds(orderIds);\r\n }\r\n\r\n const response = await fetch(LIVE_EVENTS_URL);\r\n const data = await response.json();\r\n const filteredEvents = filterFootballEvents(data.events);\r\n\r\n if (!orderIds || orderIds.length === 0) {\r\n setEvents(filteredEvents);\r\n return;\r\n }\r\n\r\n const orderMap = new Map(\r\n orderIds.map((id, index) => [String(id), index])\r\n );\r\n\r\n const sortedEvents = [...filteredEvents].sort((a, b) => {\r\n const aIndex = orderMap.get(String(a.event.id));\r\n const bIndex = orderMap.get(String(b.event.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 setEvents(sortedEvents);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}, [orderedEventIds]);\r\n\r\n\r\nuseEffect(() => {\r\n loadData();\r\n const interval = setInterval(loadData, 20000);\r\n return () => clearInterval(interval);\r\n}, [loadData]);\r\n\r\nuseEffect(() => {\r\n if (\r\n debouncedVisibleRange.start === null ||\r\n debouncedVisibleRange.end === null ||\r\n !events?.length ||\r\n fetchingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n const BUFFER = 3;\r\n const from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n const to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n const idsToFetch = events\r\n .slice(from, to + 1)\r\n .map(ev => ev?.event.id)\r\n .filter(Boolean)\r\n .filter(id => jerseys[id] === undefined);\r\n\r\n if (!idsToFetch.length) return;\r\n\r\n fetchingRef.current = true;\r\n\r\n fetchJerseys(idsToFetch)\r\n .then(res => {\r\n setJerseys(prev => ({\r\n ...prev,\r\n ...res.events,\r\n }));\r\n })\r\n .catch(e => {\r\n console.error(\"Jersey fetch error\", e);\r\n })\r\n .finally(() => {\r\n fetchingRef.current = false;\r\n });\r\n}, [debouncedVisibleRange, events, jerseys]);\r\n\r\n\r\n \r\n\r\n const sectionClassName = className || undefined;\r\n const isLoading = events === null;\r\n\r\nif (!isLoading && events.length === 0) {\r\n return null;\r\n}\r\n\r\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 <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\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={\r\n isLoading\r\n ? Array(4).fill({}) // show 4 skeleton slides\r\n : events.slice(0,20)\r\n }\r\n perPage={undefined}\r\n \r\n enableHorizontalWheel\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: 'move'}}\r\n breakpoints={{\r\n 400: { gap: \"4px\", focus: \"center\" }, \r\n 768: { gap: \"8px\", focus: \"center\" }, \r\n 1024: { gap: \"10px\" , focus: \"center\" },\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\r\n return isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCard\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\t\t\t\t\t\t\tsetNavState({ isStart, isEnd });\r\n\t\t\t\t\t\t\tsetVisibleRange({\r\n\t\t\t\t\t\t\t\tstart: visibleStart,\r\n\t\t\t\t\t\t\t\tend: visibleEnd,\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}}\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} 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 { verMasSeccionSemana, fetchJerseys, useDebouncedValue } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\n\tasync function fetchInBatches(urls: string[], batchSize = 2, signal: AbortSignal,) {\r\n\t\tconst results: any[] = [];\r\n\t\tfor (let i = 0; i < urls.length; i += batchSize) {\r\n\t\t\tif (signal.aborted) {\r\n\t\t\t\tthrow new DOMException(\"Aborted\", \"AbortError\");\r\n\t\t\t}\r\n\t\t\tconst batch = urls.slice(i, i + batchSize);\r\n\t\t\tconst responses = await Promise.all(\r\n\t\t\tbatch.map(u => fetch(u, { signal }).then(r => r.json()))\r\n\t\t\t);\r\n\t\t\tresults.push(...responses);\r\n\t\t}\r\n\t\treturn results;\r\n\t}\r\n\r\n\tfunction sortEvents(evs: any[]) {\r\n\t\treturn [...evs].sort(\r\n\t\t(a, b) => new Date(a.start).getTime() - new Date(b.start).getTime()\r\n\t\t);\r\n\t}\r\n\tfunction filterEventsWithinOneWeek(events: any[]) {\r\n\t\tconst now = new Date();\r\n\t\tconst oneWeekLater = new Date(now.getTime() + 20 * 24 * 60 * 60 * 1000);\r\n\r\n\t\treturn events.filter((event: any) => {\r\n\t\tif (!event.start) return false;\r\n\r\n\t\tconst eventDate = new Date(event.start);\r\n\t\treturn eventDate >= now && eventDate <= oneWeekLater;\r\n\t\t});\r\n\t}\r\n\tfunction mergeEventOffersOutcome(eventos : any, apuestas : any) {\r\n\t\tconst filtered = apuestas.filter((b:any) => b.betOfferType?.id === 2);\r\n\r\n\t\tconst apuestasByEvent = filtered.reduce((acc : any, b : any) => {\r\n\t\tif (!acc[b.eventId]) acc[b.eventId] = [];\r\n\t\tacc[b.eventId].push(b);\r\n\t\treturn acc;\r\n\t\t}, {});\r\n\r\n\t\treturn eventos\r\n\t\t.filter((evento : any) => apuestasByEvent[evento.id]) \r\n\t\t.map((evento: any) => ({\r\n\t\t\t...evento,\r\n\t\t\toutcome: apuestasByEvent[evento.id],\r\n\t\t}));\r\n\t}\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 \r\n\tconst WEEK_EVENTS_URL = 'https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group.json?channel_id=1&client_id=200&lang=es_PE&market=PE'\r\n\tconst carouselRef = useRef<any>(null);\r\n\tconst [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\tconst [events, setEvents] = useState<any[] | null>(null);\r\n\tconst pendingJerseysRef = useRef<Set<number>>(new Set());\r\n\tconst [jerseys, setJerseys] = useState<Record<number, any>>({});\r\n\tconst [visibleRange, setVisibleRange] = useState<{start: number | null;end: number | null;}>({ start: null, end: null });\r\n\tconst COMMON_QUERY = \"channel_id=1&client_id=200&competitionId=undefined&lang=es_PE&market=PE&useCombined=true\";\r\n\tconst debouncedVisibleRange = useDebouncedValue(visibleRange, 250);\r\n const fetchingRef = useRef(false);\r\n\r\n\tconst handleViewMore = () => {\r\n\t\t\tverMasSeccionSemana();\r\n\t};\r\n\r\n\tasync function loadDataWeekEvent(signal: AbortSignal) {\r\n\t\tlet orderedGroupIds: string[] = [];\r\n\t\tlet orderedEventIds: string[] = []\r\n\t\ttry {\r\n\t\tconst orderResponse = await fetch(\r\n\t\t\t\"https://api.mktolimpo.com/api/kambi/eventos/orden\",\r\n \t\t{ signal }\r\n\t\t);\r\n\r\n\t\tif (orderResponse.ok) {\r\n\t\t\tconst orderJson = await orderResponse.json();\r\n\t\t\torderedGroupIds = orderJson?.data?.group_ids || [];\r\n\t\t\torderedEventIds = orderJson?.data?.event_ids || [];\r\n\t\t}\r\n\t\t} catch (e: any) {\r\n\t\t\tif (e.name !== \"AbortError\") {\r\n\t\t\tconsole.warn(\"Order API not available, using default group order\");\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(WEEK_EVENTS_URL, { signal });\r\n\t\t\tconst data = await response.json();\r\n\t\t\tconst football = data.group.groups.find(\r\n\t\t\t(g : any) => g.englishName === \"Football\"\r\n\t\t\t);\r\n\r\n\t\t\tif (!football || !Array.isArray(football.groups)) {\r\n\t\t\t\tconsole.error(\"Football groups not found\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet groups = [...football.groups];\r\n\r\n\t\t\t// 3️⃣ Apply group_ids order\r\n\t\t\tif (orderedGroupIds.length > 0) {\r\n\t\t\tconst orderMap = new Map(\r\n\t\t\t\torderedGroupIds.map((id, index) => [id, index])\r\n\t\t\t);\r\n\r\n\t\t\tgroups.sort((a: any, b: any) => {\r\n\t\t\t\tconst aIndex = orderMap.get(String(a.id));\r\n\t\t\t\tconst bIndex = orderMap.get(String(b.id));\r\n\r\n\t\t\t\tif (aIndex !== undefined && bIndex !== undefined) {\r\n\t\t\t\treturn aIndex - bIndex;\r\n\t\t\t\t}\r\n\t\t\t\tif (aIndex !== undefined) return -1;\r\n\t\t\t\tif (bIndex !== undefined) return 1;\r\n\t\t\t\treturn 0;\r\n\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst N = 5; \r\n\r\n\t\t\tconst firstGroups = groups.slice(0, N);\r\n\r\n\t\t\tconst buildUrls = (group : any) => {\r\n\t\t\t\tconst base = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football\";\r\n\r\n\t\t\t\tif (group.groups && group.groups.length > 0) {\r\n\t\t\t\tconst sub = group.groups[0]; // ONLY FIRST child\r\n\t\t\t\treturn [\r\n\t\t\t\t\t`${base}/${group.termKey}/${sub.termKey}/all/matches.json?${COMMON_QUERY}`\r\n\t\t\t\t];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn [\r\n\t\t\t\t\t`${base}/${group.termKey}/all/all/matches.json?${COMMON_QUERY}`\r\n\t\t\t\t];\r\n\t\t\t};\r\n\r\n\t\t\tconst urls = firstGroups.flatMap(buildUrls);\r\n\r\n\t\t\tloadAllGroupEvents(urls, orderedEventIds, signal\r\n\r\n\t\t\t)\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\tasync function loadAllGroupEvents(urls : any, orderEvents : any, signal: AbortSignal) {\r\n\t\ttry {\r\n\t\t\tconst responses = await fetchInBatches(urls, 2, signal);\r\n\r\n\t\t\tlet allEvents : any = [];\r\n\t\t\tlet allBetOffers : any = [];\r\n\r\n\t\t\tresponses.forEach(data => {\r\n\t\t\t\tif (!data.events) return;\r\n\r\n\t\t\t\tallEvents.push(...data.events.map((item: any) => item.event));\r\n\t\t\t\tallBetOffers.push(...data.events.flatMap((item:any) => item.betOffers || []));\r\n\t\t\t});\r\n\r\n\t\t\tconst merged = mergeEventOffersOutcome(allEvents, allBetOffers);\r\n\t\t\tconst finalEvents = sortEvents(filterEventsWithinOneWeek(merged));\r\n\r\n\t\t\tlet orderedEvents = finalEvents;\r\n\r\n\t\t\tif (orderEvents.length > 0) {\r\n\t\t\t\t\tconst orderMap = new Map<string, number>(\r\n\t\t\t\torderEvents.map((id: number | string, index: number) => [\r\n\t\t\t\t\tString(id),\r\n\t\t\t\t\tindex,\r\n\t\t\t\t])\r\n\t\t\t);\r\n\t\t\torderedEvents = [...finalEvents].sort((a, b) => {\r\n\t\t\t\tconst aIndex = orderMap.get(String(a.id));\r\n\t\t\t\tconst bIndex = orderMap.get(String(b.id));\r\n\r\n\t\t\t\tif (aIndex !== undefined && bIndex !== undefined) {\r\n\t\t\t\t\treturn aIndex - bIndex;\r\n\t\t\t\t}\r\n\t\t\t\tif (aIndex !== undefined) return -1;\r\n\t\t\t\tif (bIndex !== undefined) return 1;\r\n\t\t\t\treturn 0;\r\n\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t\tif (signal.aborted) return;\r\n\t\t\tsetEvents(orderedEvents);\r\n\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Error loading events:\", error);\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\r\n \tuseEffect(() => {\r\n\t\tif (!items) return;\r\n\r\n\t\tconst controller = new AbortController();\r\n\r\n\t\tloadDataWeekEvent(controller.signal);\r\n\r\n\t\treturn () => {\r\n\t\t\tcontroller.abort();\r\n\t\t};\r\n\t}, [items]);\r\n\r\n\r\nuseEffect(() => {\r\n\r\n\tif (\r\n\t debouncedVisibleRange.start === null ||\r\n\t debouncedVisibleRange.end === null ||\r\n\t !events?.length ||\r\n\t fetchingRef.current\r\n\t) {\r\n\t return;\r\n\t}\r\n\r\n const BUFFER = 2;\r\n\tconst from = Math.max(0, debouncedVisibleRange.start - BUFFER);\r\n\tconst to = Math.min(events.length - 1, debouncedVisibleRange.end + BUFFER);\r\n\r\n\tconst idsToFetch = events\r\n\t .slice(from, to + 1)\r\n\t .map(ev => ev?.id)\r\n\t .filter(Boolean)\r\n\t .filter(id => jerseys[id] === undefined);\r\n\tif (!idsToFetch.length) return;\r\n\r\n\tlet cancelled = false;\r\n\tfetchingRef.current = true;\r\n\r\n\t(async () => {\r\n\t try {\r\n\t const res = await fetchJerseys(idsToFetch);\r\n\r\n\t if (!cancelled) {\r\n\t\tsetJerseys(prev => ({\r\n\t\t...prev,\r\n\t\t...res.events,\r\n\t\t}));\r\n\t }\r\n\t } catch (e) {\r\n\t console.error(\"Jersey fetch error\", e);\r\n\t } finally {\r\n\t fetchingRef.current = false;\r\n\t }\r\n\t})();\r\n\r\n\treturn () => {\r\n\t cancelled = true;\r\n\t};\r\n }, [debouncedVisibleRange, events]);\r\n\tconst sectionClassName = className || undefined;\r\n\t\tconst sectionStyle : React.CSSProperties = { paddingLeft: 0, width: \"100%\", boxSizing: \"border-box\"};\r\n\r\n const isLoading = events === null;\r\n\r\nif (!isLoading && events.length === 0) {\r\n return null;\r\n}\r\n\r\n\r\n\treturn (\r\n\t\t<section className={sectionClassName} style={sectionStyle}>\r\n\r\n\t\t\t<div className={styles.wrapper}>\r\n\t\t\t\t<div className={styles.container}>\r\n\r\n\t\t\t\t\t<Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n\t\t\t\t\t\t<OraculoSectionTitle title=\"Eventos de la semana\" />\r\n\t\t\t\t\t\t<div className={styles.buttonWrapper}>\r\n\t\t\t\t\t\t<OraculoButton variant=\"secondary\" size=\"lg\" fullWidth onClick={() => {handleViewMore() }} >Ver más</OraculoButton>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</Stack>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div style={{ minWidth: '180px' }}>\r\n\r\n\t\t\t\r\n\t\t\t\t\t<OraculoCarousel\r\n\t\t\t\t\t\tref={carouselRef}\r\n\t\t\t\t\t\titems={\r\n\t\t\t\t\t\tisLoading\r\n\t\t\t\t\t\t\t? Array(6).fill({}) // show 4 skeleton slides\r\n\t\t\t\t\t\t\t: events.slice(0, 20)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tperPage={3.5}\r\n\t\t\t\t\t\tgap=\"16px\"\r\n\t\t\t\t\t\tenableHorizontalWheel\r\n\t\t\t\t\t\toptions={{ autoWidth: true, trimSpace: true }}\r\n\t\t\t\t\t\tbreakpoints={{\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t1024:{ perPage: 1.4, gap: \"8px\", focus: \"center\", padding: { left: \"8px\", right: \"8px\" }, }, \r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\trenderItem={(p) => {\r\n\t\t\t const eventId = p.id ;\r\n const jersey =\r\n eventId in jerseys ? jerseys[eventId] : undefined;\r\n\t\t\t\t\t\t\treturn isLoading ? (\r\n\t\t\t\t\t\t\t\t<FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t\t<OraculoEventSemanaCardSkeleton />\r\n\t\t\t\t\t\t\t\t</FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t\t<OraculoEventSemanaCard event ={p} jersey={jersey} />\r\n\t\t\t\t\t\t\t\t</FadeItemWrapper>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMove={({ isStart, isEnd, visibleStart, visibleEnd }) => {\r\n\t\t\t\t\t\t\tsetNavState({ isStart, isEnd });\r\n\t\t\t\t\t\t\tsetVisibleRange({\r\n\t\t\t\t\t\t\t\tstart: visibleStart,\r\n\t\t\t\t\t\t\t\tend: visibleEnd,\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</section>\r\n\t);\r\n}\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport { useCaptureInteraction } from \"@olimpo/capture-client\";\r\n\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport OraculoCarousel, { OraculoCarouselRef } from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport {\r\n OraculoBannerItem,\r\n OraculoSeccionBannersProps,\r\n} from \"../../interfaces/oraculo/InterfaceBanner\";\r\n\r\nexport default function OraculoSeccionBanners({\r\n backgrounds,\r\n items,\r\n}: OraculoSeccionBannersProps) {\r\n const [activeDot, setActiveDot] = useState(0);\r\n const captureInteraction = useCaptureInteraction();\r\n\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const isMounted = useRef(false); // ✅ Marcar cuando está completamente montado\r\n const isAutoplayRef = useRef(false); // ✅ Marcar cuando el cambio es por autoplay\r\n\r\n const totalDots = backgrounds?.length || 1;\r\n const isLoading = !backgrounds || backgrounds.length === 0;\r\n\r\n // ✅ Marcar el componente como montado después del primer render\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n isMounted.current = true;\r\n }, 500); // Esperar 500ms después del mount\r\n return () => clearTimeout(timer);\r\n }, []);\r\n\r\n // ✅ Función para capturar clicks en banners\r\n const handleBannerClick = (bg: OraculoBannerItem, index: number) => {\r\n captureInteraction({\r\n element: \"banner_carousel\",\r\n label: `Banner click: Banner ${index + 1}`,\r\n target: bg.href || \"no_url\",\r\n event_type: \"click\",\r\n module_id: 301, // Ajusta según tu sistema de módulos\r\n metadata: {\r\n location:\r\n typeof globalThis !== \"undefined\" && globalThis.location\r\n ? globalThis.location.pathname\r\n : \"\",\r\n banner_position: index + 1,\r\n banner_total: backgrounds?.length || 0,\r\n },\r\n tags: {\r\n banner_type: \"carousel\",\r\n banner_target: \"_self\",\r\n banner_url: bg.href || \"no_url\",\r\n },\r\n });\r\n };\r\n\r\n // ✅ Función para capturar clicks en items del menu\r\n const handleMenuItemClick = (item: OraculoBannerItem) => {\r\n captureInteraction({\r\n element: \"banner_menu_item\",\r\n label: `Menu item click: ${item.label || item.id}`,\r\n target: item.href || \"action\",\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 item_id: item.id,\r\n },\r\n tags: {\r\n item_label: item.label || \"no_label\",\r\n },\r\n });\r\n\r\n // Ejecutar la acción original\r\n if (item.onClick) {\r\n item.onClick();\r\n return;\r\n }\r\n\r\n if (item.href) {\r\n if (typeof globalThis !== \"undefined\" && globalThis.location) {\r\n globalThis.location.assign(item.href);\r\n }\r\n }\r\n };\r\n\r\n // ✅ Capturar cambios de slide en el carrusel\r\n const handleSlideChange = (index: number) => {\r\n const safe = ((index % totalDots) + totalDots) % totalDots;\r\n setActiveDot(safe);\r\n\r\n // ✅ Solo capturar si el componente está completamente montado (evita capturas en load)\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n\r\n // ✅ No capturar si el cambio es por autoplay\r\n if (isAutoplayRef.current) {\r\n isAutoplayRef.current = false; // Resetear para próximo evento\r\n return;\r\n }\r\n\r\n captureInteraction({\r\n element: \"banner_carousel\",\r\n label: `Banner view: Slide ${safe + 1}`,\r\n target: backgrounds?.[safe]?.href || \"no_url\",\r\n event_type: \"view\",\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 slide_index: safe + 1,\r\n total_slides: totalDots,\r\n interaction_type: \"manual_slide\",\r\n },\r\n tags: {\r\n banner_position: String(safe + 1),\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (isLoading) return;\r\n if (!backgrounds || backgrounds.length <= 1) return;\r\n\r\n const id = window.setInterval(() => {\r\n isAutoplayRef.current = true; // ✅ Marcar que el siguiente cambio es autoplay\r\n carouselRef.current?.next();\r\n }, 5000);\r\n\r\n return () => window.clearInterval(id);\r\n }, [isLoading, backgrounds?.length]);\r\n\r\n\r\n return (\r\n <Box\r\n component=\"section\"\r\n sx={{\r\n position: \"relative\",\r\n overflow: \"visible\",\r\n }}\r\n >\r\n {/* Carrusel de backgrounds */}\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n height: { xs: 300, sm: 360, md: 420 },\r\n borderRadius: 0,\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={backgrounds}\r\n perPage={1}\r\n gap=\"0px\"\r\n enableHorizontalWheel\r\n options={{\r\n type: \"loop\",\r\n perMove: 1,\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"center\",\r\n }}\r\n onMove={({ index }) => {\r\n const safe = ((index % totalDots) + totalDots) % totalDots;\r\n setActiveDot(safe);\r\n handleSlideChange(index); // ✅ Capturar cambio de slide\r\n }}\r\n renderItem={(bg, idx) => (\r\n <Box\r\n component=\"a\"\r\n href={bg.href}\r\n target={bg.target ?? \"_self\"}\r\n rel={bg.target === \"_blank\" ? \"noopener noreferrer\" : undefined}\r\n onClick={() => {\r\n // ✅ Capturar click en banner\r\n handleBannerClick(bg, idx);\r\n }}\r\n sx={{\r\n position: \"relative\",\r\n height: { xs: 300, sm: 360, md: 420 },\r\n display: \"block\",\r\n textDecoration: \"none\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <Box\r\n component=\"picture\"\r\n sx={{ position: \"absolute\", inset: 0, lineHeight: 0 }}\r\n >\r\n <source srcSet={bg.desktopSrc} media=\"(min-width:800px)\" />\r\n <source srcSet={bg.mobileSrc} media=\"(max-width:799px)\" />\r\n <Box\r\n component=\"img\"\r\n src={bg.fallbackSrc ?? bg.desktopSrc}\r\n alt=\"\"\r\n aria-hidden\r\n loading=\"lazy\"\r\n sx={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n }}\r\n />\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n inset: 0,\r\n pointerEvents: \"none\",\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n top: \"40%\",\r\n background:\r\n \"linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(18,18,18,0.85) 80%, #121212 100%)\",\r\n },\r\n }}\r\n />\r\n </Box>\r\n )}\r\n />\r\n\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n left: 0,\r\n right: 0,\r\n bottom: 72,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n zIndex: 2,\r\n }}\r\n >\r\n <OraculoCarouselDots total={totalDots} active={activeDot} />\r\n </Box>\r\n </Box>\r\n\r\n {/* Dock de items */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n bottom: { xs: -12, sm: 0 },\r\n left: 120,\r\n right: 120,\r\n \"@media (max-width:1024px)\": {\r\n left: 24,\r\n right: 24,\r\n },\r\n backgroundColor: \"#363636\",\r\n borderRadius: 2,\r\n p: 1.5,\r\n display: \"flex\",\r\n justifyContent: \"space-around\",\r\n alignItems: \"center\",\r\n boxShadow: \"0 10px 24px rgba(0,0,0,.35)\",\r\n zIndex: 3,\r\n }}\r\n >\r\n {items?.map((item: OraculoBannerItem) => (\r\n <Box\r\n key={item.id}\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: { xs: \"column\", md: \"row\" },\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: { xs: 0.5, md: 1 },\r\n color: \"#FFFFFF\",\r\n minWidth: 0,\r\n cursor: item.onClick || item.href ? \"pointer\" : \"default\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n onClick={() => handleMenuItemClick(item)} // ✅ Capturar click en menu item\r\n >\r\n {item.icon && (\r\n <Box\r\n component=\"img\"\r\n src={item.icon}\r\n alt={item.label || `icon-${item.id}`}\r\n sx={{\r\n width: { xs: 20, sm: 22, md: 24 },\r\n height: { xs: 20, sm: 22, md: 24 },\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n )}\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 10, sm: 11, md: 12 },\r\n fontWeight: 600,\r\n color: \"#E0E0E0\",\r\n textAlign: \"center\",\r\n }}\r\n >\r\n {item.label}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { Box, Stack, Typography } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport OraculoLogoMediosPago from \"../../atoms/OraculoLogo/OraculoLogoMediosPago\";\r\n\r\ntype LogoType = {\r\n src: string;\r\n alt: string;\r\n};\r\n\r\ntype Props = {\r\n title?: string;\r\n items?: LogoType[]; // <-- ahora solo 1 arreglo\r\n};\r\n\r\n// 7 items (ejemplo)\r\nconst DEFAULT_ITEMS: LogoType[] = [\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/IBK.svg\", alt: \"Interbank\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/Yape.svg\", alt: \"Yape\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/BCP.png\", alt: \"BCP\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/pagoEfectivo.png\", alt: \"PagoEfectivo\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/tupay.svg\", alt: \"Tupay\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/monnet.svg\", alt: \"Monnet\" },\r\n { src: \"https://stg-www.contodobet.com/static/img/landing/MediosPago/niubiz.svg\", alt: \"Niubiz\" },\r\n];\r\n\r\nexport default function OraculoSeccionMediosPago({\r\n title = \"Medios de pago\",\r\n items = DEFAULT_ITEMS,\r\n}: Props) {\r\n // 4/3 cuando son 7\r\n const split = Math.ceil(items.length / 2);\r\n const row1 = items.slice(0, split);\r\n const row2 = items.slice(split);\r\n\r\n return (\r\n <Box component=\"section\" aria-labelledby=\"mp-title\" sx={{ color: \"#fff\" }}>\r\n <Typography\r\n id=\"mp-title\"\r\n variant=\"h6\"\r\n sx={{\r\n fontWeight: 800,\r\n fontSize: { xs: 20, md: 32 },\r\n textAlign: \"center\",\r\n mb: 1.5,\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n\r\n <Box\r\n sx={{\r\n width: \"288px\",\r\n height: \"2px\",\r\n mx: \"auto\",\r\n mb: 3,\r\n opacity: 0.95,\r\n filter: \"blur(0.2px)\",\r\n background:\r\n \"linear-gradient(90deg, rgba(0,0,0,0) 0%, #1dd75b 18%, #23d46b 50%, #1dd75b 82%, rgba(0,0,0,0) 100%)\",\r\n }}\r\n />\r\n\r\n {/* 2 filas SIEMPRE (móvil y desktop) */}\r\n <Stack spacing={{ xs: 2, md: 3 }} alignItems=\"center\">\r\n <Stack\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n gap={{ xs: 2, md: 3 }}\r\n flexWrap=\"wrap\"\r\n >\r\n {row1.map((l, idx) => (\r\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\r\n ))}\r\n </Stack>\r\n\r\n <Stack\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n gap={{ xs: 2, md: 3 }}\r\n flexWrap=\"wrap\"\r\n >\r\n {row2.map((l, idx) => (\r\n <OraculoLogoMediosPago key={`${l.alt}-${l.src}-${idx}`} {...l} />\r\n ))}\r\n </Stack>\r\n </Stack>\r\n </Box>\r\n );\r\n}\r\n","import OraculoSeccionBonoBienvenida from \"../organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida\";\r\nimport OraculoSeccionTopJuegos from \"../organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos\";\r\nimport OraculoSeccionCasino from \"../organisms/OraculoSeccionCasino/OraculoSeccionCasino\";\r\nimport OraculoSeccionCasinoEnVivo from \"../organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo\";\r\nimport OraculoSeccionVirtuales from \"../organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales\";\r\nimport OraculoSeccionClubOlimpo from \"../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo\";\r\nimport OraculoSeccionDestacados from \"../organisms/OraculoSeccionDestacados/OraculoSeccionDestacados\";\r\nimport OraculoSeccionBanners from \"../organisms/OraculoSeccionBanners/OraculoSeccionBanners\";\r\nimport OraculoSeccionMediosPago from \"../organisms/OraculoSeccionMediosPago/OraculoSeccionMediosPago\";\r\nimport OraculoSeccionEventoCombinadas from \"../organisms/OraculoSeccionEventoCombinadas/OraculoSeccionEventoCombinadas\";\r\nimport OraculoSeccionEventoEnVivo from \"../organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo\";\r\nimport OraculoSeccionEventoSemana from \"../organisms/OraculoSeccionEventoSemana/OraculoSeccionEventoSemana\";\r\n\r\nimport React from \"react\";\r\n\r\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\r\n\r\nexport const Landing: LandingComponentMap = {\r\n OraculoSeccionDestacados,\r\n OraculoSeccionTopJuegos,\r\n OraculoSeccionCasinoEnVivo,\r\n OraculoSeccionCasino,\r\n OraculoSeccionVirtuales,\r\n OraculoSeccionClubOlimpo,\r\n OraculoSeccionBonoBienvenida,\r\n OraculoSeccionBanners,\r\n OraculoSeccionMediosPago,\r\n OraculoSeccionEventoEnVivo,\r\n OraculoSeccionEventoSemana,\r\n OraculoSeccionEventoCombinadas,\r\n};","export const LANDING_FALLBACK_JSON = {\r\n sections:\r\n[\r\n {\r\n \"variableName2\": \"backgrounds\",\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"variableName\": \"items\",\r\n \"dataMode\": \"manual\",\r\n \"title\": \"Banners\",\r\n \"visible\": true,\r\n \"id\": 9,\r\n \"manualItems\": [\r\n {\r\n \"id\": \"724a1dc0-d55b-4443-a580-cad22e328536\",\r\n \"fields\": [\r\n {\r\n \"type\": \"string\",\r\n \"id\": \"abb2c3d6-d5c5-47ee-8ffa-c764a8bc731e\",\r\n \"isImage\": false,\r\n \"required\": true,\r\n \"value\": \"1\",\r\n \"name\": \"id\"\r\n },\r\n {\r\n \"name\": \"label\",\r\n \"isImage\": false,\r\n \"value\": \"POR INICIAR\",\r\n \"required\": false,\r\n \"id\": \"549c02bf-56b5-4652-93d9-46b9451bac39\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"id\": \"c6538242-1974-4bed-aed3-703a111987b5\",\r\n \"maxSizeMB\": 0.2,\r\n \"required\": true,\r\n \"isImage\": true,\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/clock.svg\",\r\n \"name\": \"icon\"\r\n },\r\n {\r\n \"id\": \"7d564f31-69ff-4f32-983b-46d28ced4a18\",\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"value\": \"https://www.olimpo.bet/deportes#starting-soon\",\r\n \"isImage\": false,\r\n \"name\": \"href\"\r\n }\r\n ]\r\n },\r\n {\r\n \"fields\": [\r\n {\r\n \"type\": \"string\",\r\n \"isImage\": false,\r\n \"id\": \"45c50e08-560e-42cb-8be1-e9722f69c8a0\",\r\n \"required\": true,\r\n \"name\": \"id\",\r\n \"value\": \"2\"\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"name\": \"label\",\r\n \"isImage\": false,\r\n \"value\": \"EXPLORAR\",\r\n \"required\": false,\r\n \"id\": \"2eec0f3d-0126-4960-8ec0-17cc92b5eb43\"\r\n },\r\n {\r\n \"maxSizeMB\": 0.2,\r\n \"isImage\": true,\r\n \"required\": true,\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/icon2.svg\",\r\n \"id\": \"5530e6bd-d2b2-4045-9371-722e23d96e14\",\r\n \"type\": \"string\",\r\n \"name\": \"icon\"\r\n },\r\n {\r\n \"id\": \"7e5375ad-ecbb-4354-868a-b9323bcfd053\",\r\n \"required\": false,\r\n \"name\": \"href\",\r\n \"isImage\": false,\r\n \"type\": \"string\",\r\n \"value\": \"https://www.olimpo.bet/deportes#sports/a-z\"\r\n }\r\n ],\r\n \"id\": \"ad0df0e2-c8ce-4524-b05a-2a29578aba11\"\r\n },\r\n {\r\n \"id\": \"966bc1fc-0b1a-4a50-a4a2-964262922c3d\",\r\n \"fields\": [\r\n {\r\n \"isImage\": false,\r\n \"required\": true,\r\n \"id\": \"fc35f393-6692-4d25-a534-d51f4bd6d9a2\",\r\n \"value\": \"3\",\r\n \"name\": \"id\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"isImage\": false,\r\n \"name\": \"label\",\r\n \"value\": \"TOP JUEGOS\",\r\n \"id\": \"a323e324-cf04-4178-b2c2-596d51564123\",\r\n \"type\": \"string\",\r\n \"required\": false\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"name\": \"icon\",\r\n \"maxSizeMB\": 0.2,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765981473501-icon3.svg\",\r\n \"id\": \"6ede5815-7336-40fa-99f2-57ac6cb938cd\",\r\n \"required\": true,\r\n \"isImage\": true\r\n },\r\n {\r\n \"required\": false,\r\n \"id\": \"26a486fd-31e6-4ed4-ab83-0f9a7bf6adc4\",\r\n \"value\": \"https://www.olimpo.bet/casino\",\r\n \"isImage\": false,\r\n \"name\": \"href\",\r\n \"type\": \"string\"\r\n }\r\n ]\r\n },\r\n {\r\n \"id\": \"31e00ff9-f2dd-4942-bff3-919902fde880\",\r\n \"fields\": [\r\n {\r\n \"id\": \"fbec2c21-cf32-426f-910b-9c78a6cd714c\",\r\n \"required\": true,\r\n \"isImage\": false,\r\n \"value\": \"4\",\r\n \"name\": \"id\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"isImage\": false,\r\n \"name\": \"label\",\r\n \"type\": \"string\",\r\n \"value\": \"MISIONES\",\r\n \"required\": false,\r\n \"id\": \"2de80dbf-998b-4bc7-8383-4b69746ef155\"\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"id\": \"686c62bd-ea86-4aeb-97b7-6f1488912066\",\r\n \"required\": true,\r\n \"isImage\": true,\r\n \"maxSizeMB\": 0.2,\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/icon3.svg\",\r\n \"name\": \"icon\"\r\n },\r\n {\r\n \"id\": \"4b72f490-75e4-458e-a4b5-68f0736a25d4\",\r\n \"isImage\": false,\r\n \"required\": false,\r\n \"type\": \"string\",\r\n \"value\": \"https://www.olimpo.bet/private/misiones\",\r\n \"name\": \"href\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"manualScalarFields\": [\r\n {\r\n \"id\": \"7ee165a0-1268-4825-82df-9fef9857f535\",\r\n \"type\": \"string\",\r\n \"isImage\": false,\r\n \"value\": \"\",\r\n \"required\": false,\r\n \"name\": \"groups\"\r\n }\r\n ],\r\n \"order\": 1,\r\n \"manualItems2\": [\r\n {\r\n \"id\": \"13b35362-5695-4687-b6a8-645f8effd264\",\r\n \"fields\": [\r\n {\r\n \"isImage\": true,\r\n \"name\": \"desktopSrc\",\r\n \"id\": \"eea41214-3c26-41e9-a908-d87327147396\",\r\n \"maxSizeMB\": 2,\r\n \"type\": \"string\",\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768333229541-banner032.webp\",\r\n \"required\": false\r\n },\r\n {\r\n \"maxSizeMB\": 2,\r\n \"isImage\": true,\r\n \"type\": \"string\",\r\n \"name\": \"mobileSrc\",\r\n \"id\": \"b393dfd3-c085-43e0-b68a-97cc04c06b6a\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\r\n \"required\": false\r\n },\r\n {\r\n \"maxSizeMB\": 2,\r\n \"id\": \"2616b944-7cd1-4919-bc56-38ddb1a3093b\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\r\n \"isImage\": true,\r\n \"name\": \"fallbackSrc\",\r\n \"type\": \"string\",\r\n \"required\": false\r\n },\r\n {\r\n \"name\": \"href\",\r\n \"id\": \"54689f0e-f698-48a1-9d84-d13a397e24ea\",\r\n \"required\": false,\r\n \"value\": \"\",\r\n \"type\": \"string\",\r\n \"isImage\": false\r\n }\r\n ]\r\n },\r\n {\r\n \"id\": \"024f8130-91e1-4296-b826-cffa32ab1a96\",\r\n \"fields\": [\r\n {\r\n \"maxSizeMB\": 2,\r\n \"isImage\": true,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852295069-ftd_web_captacion60.jpg\",\r\n \"name\": \"desktopSrc\",\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"id\": \"1ebab59e-f706-4795-81cb-7accfc9f33d7\"\r\n },\r\n {\r\n \"id\": \"bdebd1b0-d633-4b9e-9247-8e769cdc5b3b\",\r\n \"type\": \"string\",\r\n \"isImage\": true,\r\n \"required\": false,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852302781-ftd_mobile_captacion60.jpg\",\r\n \"maxSizeMB\": 2,\r\n \"name\": \"mobileSrc\"\r\n },\r\n {\r\n \"isImage\": true,\r\n \"maxSizeMB\": 2,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768852309554-ftd_web_captacion60.jpg\",\r\n \"id\": \"4bc20da7-b769-43dd-ba2e-ee9261ec73d7\",\r\n \"name\": \"fallbackSrc\",\r\n \"type\": \"string\",\r\n \"required\": false\r\n },\r\n {\r\n \"id\": \"b85e737d-97ec-430c-b819-ba6e91a25372\",\r\n \"type\": \"string\",\r\n \"isImage\": false,\r\n \"required\": false,\r\n \"value\": \"\",\r\n \"name\": \"href\"\r\n }\r\n ]\r\n },\r\n {\r\n \"id\": \"cbd24716-9770-418f-aa87-ae60e7e9e0ee\",\r\n \"fields\": [\r\n {\r\n \"maxSizeMB\": 2,\r\n \"required\": false,\r\n \"name\": \"desktopSrc\",\r\n \"type\": \"string\",\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831142801-ftd_web_tenismasters.jpg\",\r\n \"id\": \"fa31486e-ec9b-4c99-b870-396d25bc66d6\",\r\n \"isImage\": true\r\n },\r\n {\r\n \"isImage\": true,\r\n \"name\": \"mobileSrc\",\r\n \"id\": \"954a4363-1373-44f2-b677-1bea66882838\",\r\n \"maxSizeMB\": 2,\r\n \"type\": \"string\",\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831155101-ftd_mobile_tenismasters.jpg\",\r\n \"required\": false\r\n },\r\n {\r\n \"required\": false,\r\n \"type\": \"string\",\r\n \"id\": \"be8789e8-cbf6-49c1-9ae5-ebc958404369\",\r\n \"maxSizeMB\": 2,\r\n \"name\": \"fallbackSrc\",\r\n \"isImage\": true,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831198671-ftd_web_tenismasters.jpg\"\r\n },\r\n {\r\n \"value\": \"https://www.olimpo.bet/torneos/Torneo_Olimpo_Tennis\",\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"isImage\": false,\r\n \"id\": \"142b0cb2-e255-4240-aea1-807a67321e34\",\r\n \"name\": \"href\"\r\n }\r\n ]\r\n },\r\n {\r\n \"fields\": [\r\n {\r\n \"required\": false,\r\n \"isImage\": true,\r\n \"id\": \"4414dbe4-67b3-428c-9d9d-920fff30956a\",\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831210432-ftd_web_verano.jpg\",\r\n \"type\": \"string\",\r\n \"maxSizeMB\": 2,\r\n \"name\": \"desktopSrc\"\r\n },\r\n {\r\n \"required\": false,\r\n \"isImage\": true,\r\n \"id\": \"b74d7582-94be-4608-8cdc-e6f8cab3e115\",\r\n \"name\": \"mobileSrc\",\r\n \"type\": \"string\",\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831218073-ftd_mobile_verano.jpg\",\r\n \"maxSizeMB\": 2\r\n },\r\n {\r\n \"id\": \"ada12745-3851-4a86-912c-2c9ec7c3e5de\",\r\n \"maxSizeMB\": 2,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831228250-ftd_web_verano.jpg\",\r\n \"name\": \"fallbackSrc\",\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"isImage\": true\r\n },\r\n {\r\n \"value\": \"https://www.olimpo.bet/torneos/Endorphina_09012026_Casino\",\r\n \"isImage\": false,\r\n \"required\": false,\r\n \"name\": \"href\",\r\n \"type\": \"string\",\r\n \"id\": \"e23e8b63-0ca4-436f-b53a-1bdf8d6442a6\"\r\n }\r\n ],\r\n \"id\": \"0d5ffdb1-d55f-47b6-9e61-e6b571bf2db2\"\r\n },\r\n {\r\n \"id\": \"cf073698-ff54-4a9e-9c4f-c34b6987e8b5\",\r\n \"fields\": [\r\n {\r\n \"type\": \"string\",\r\n \"isImage\": true,\r\n \"required\": false,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831260900-ftd_web_virtuales.jpg\",\r\n \"maxSizeMB\": 2,\r\n \"name\": \"desktopSrc\",\r\n \"id\": \"1a1ef092-aff6-49c5-81be-7d76c6ac94e1\"\r\n },\r\n {\r\n \"required\": false,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831267161-ftd_mobile_virtuales.jpg\",\r\n \"isImage\": true,\r\n \"type\": \"string\",\r\n \"maxSizeMB\": 2,\r\n \"name\": \"mobileSrc\",\r\n \"id\": \"901cc080-4907-47a8-8b2e-73a7b9fc27a3\"\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"name\": \"fallbackSrc\",\r\n \"isImage\": true,\r\n \"id\": \"8f97418b-6f27-4231-b6f8-e01e1d3c94f8\",\r\n \"maxSizeMB\": 2,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768831274473-ftd_web_virtuales.jpg\",\r\n \"required\": false\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"value\": \"https://www.olimpo.bet/torneos/Torneo_Lo_Mejor_De_Virtuales\",\r\n \"required\": false,\r\n \"name\": \"href\",\r\n \"isImage\": false,\r\n \"id\": \"a140f16d-8af9-474a-a77c-6ddc1651b3e5\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"componentKey\": \"OraculoSeccionBanners\"\r\n },\r\n {\r\n \"visible\": true,\r\n \"dataMode\": \"url\",\r\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true%22\",\r\n \"variableName\": \"items\",\r\n \"apiParams\": [],\r\n \"id\": 2,\r\n \"componentKey\": \"OraculoSeccionEventoEnVivo\",\r\n \"order\": 2,\r\n \"manualScalarFields\": [\r\n {\r\n \"isUrl\": false,\r\n \"id\": \"7fc591db-555b-49b2-a3ad-30aa66eff17b\",\r\n \"required\": true,\r\n \"name\": \"title\",\r\n \"type\": \"string\",\r\n \"value\": \"En vivo\"\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"value\": \"https://stg-www.contodobet.com/assets/img/home/EnVivo/icon.svg\",\r\n \"name\": \"iconUrl\",\r\n \"isUrl\": true,\r\n \"required\": false,\r\n \"id\": \"db4b6355-ed6c-4265-ad78-d8fffb660997\"\r\n },\r\n {\r\n \"required\": false,\r\n \"value\": \"\",\r\n \"type\": \"function\",\r\n \"id\": \"e4647a65-2e60-4243-bab4-25b7ba8461f8\",\r\n \"isUrl\": false,\r\n \"name\": \"onViewMore\"\r\n },\r\n {\r\n \"id\": \"a16ab6c6-321c-4ebe-bd36-a85ad49edf3e\",\r\n \"type\": \"string\",\r\n \"isUrl\": false,\r\n \"required\": false,\r\n \"value\": \"\",\r\n \"name\": \"className\"\r\n }\r\n ],\r\n \"title\": \"Eventos en vivo\",\r\n \"apiMethod\": \"GET\",\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\"\r\n },\r\n {\r\n \"visible\": true,\r\n \"manualScalarFields\": [\r\n {\r\n \"name\": \"title\",\r\n \"required\": true,\r\n \"value\": \"Casino\",\r\n \"id\": \"c2046b5a-4d30-46ff-9513-e15a6e0b0a7e\",\r\n \"isImage\": false,\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"required\": true,\r\n \"type\": \"string\",\r\n \"maxSizeMB\": 0.2,\r\n \"name\": \"iconUrl\",\r\n \"isImage\": true,\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Casino/diamante.svg\",\r\n \"id\": \"9c5964ca-ce84-4c47-86ec-b34d7f3a5793\"\r\n },\r\n {\r\n \"id\": \"1c32ea69-598b-4f80-81e4-709d887c12c1\",\r\n \"value\": \"true\",\r\n \"name\": \"mosaicFirst\",\r\n \"required\": false,\r\n \"type\": \"boolean\",\r\n \"isImage\": false\r\n },\r\n {\r\n \"value\": \"4\",\r\n \"type\": \"number\",\r\n \"required\": false,\r\n \"name\": \"gridSize\",\r\n \"id\": \"5c3c60eb-cf49-4083-ab83-67d65f829554\",\r\n \"isImage\": false\r\n },\r\n {\r\n \"value\": \"\",\r\n \"name\": \"groups\",\r\n \"isImage\": false,\r\n \"id\": \"c4d4c4b9-0c93-4aca-a61f-042e52fd9254\",\r\n \"required\": false,\r\n \"type\": \"string\"\r\n }\r\n ],\r\n \"variableName\": \"items\",\r\n \"componentKey\": \"OraculoSeccionCasino\",\r\n \"order\": 3,\r\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\r\n \"apiParams\": [\r\n {\r\n \"value\": \"OLI\",\r\n \"key\": \"company\",\r\n \"id\": \"2af22a50-07e2-4a48-8569-90c79827f3e7\"\r\n },\r\n {\r\n \"key\": \"lobby\",\r\n \"id\": \"efa2def8-eeb4-4fcc-80f6-32c24e7804e6\",\r\n \"value\": \"HOME_CASINO\"\r\n }\r\n ],\r\n \"id\": 4,\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"apiMethod\": \"GET\",\r\n \"dataMode\": \"url\",\r\n \"title\": \"Casino\"\r\n },\r\n {\r\n \"title\": \"Eventos Combinadas\",\r\n \"id\": 1,\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"apiParams\": [],\r\n \"apiMethod\": \"GET\",\r\n \"order\": 4,\r\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/group/prepackcoupon.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764284658793&prePackCouponTags=CUSTOM\",\r\n \"manualScalarFields\": [\r\n {\r\n \"required\": true,\r\n \"id\": \"33e5944d-b5be-4971-8c10-65aa6b71051c\",\r\n \"name\": \"title\",\r\n \"type\": \"string\",\r\n \"value\": \"Combinadas\",\r\n \"isImage\": false\r\n },\r\n {\r\n \"id\": \"95cd1489-206c-4a72-b4bd-b65161089f73\",\r\n \"isImage\": true,\r\n \"name\": \"iconUrl\",\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1765894618836-frame181009.svg\",\r\n \"type\": \"string\",\r\n \"dimensions\": \"40x40\",\r\n \"required\": false,\r\n \"maxSizeMB\": 0.2\r\n },\r\n {\r\n \"name\": \"className\",\r\n \"value\": \"\",\r\n \"id\": \"af234a92-41ad-4ff1-bfbb-ac63a9af19f7\",\r\n \"type\": \"string\",\r\n \"isImage\": false,\r\n \"required\": false\r\n },\r\n {\r\n \"value\": \"\",\r\n \"required\": false,\r\n \"name\": \"groups\",\r\n \"isImage\": false,\r\n \"id\": \"52f226c8-6456-4395-b72d-d140af6fa46d\",\r\n \"type\": \"string\"\r\n }\r\n ],\r\n \"dataMode\": \"url\",\r\n \"variableName\": \"items\",\r\n \"visible\": true,\r\n \"componentKey\": \"OraculoSeccionEventoCombinadas\"\r\n },\r\n {\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764401676636&startTime=2025-11-29T06:00:00.000Z&endTime=2026-06-25T15:00:00.000Z&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions\",\r\n \"dataMode\": \"url\",\r\n \"title\": \"Eventos de la semana\",\r\n \"order\": 5,\r\n \"apiParams\": [],\r\n \"variableName\": \"items\",\r\n \"apiMethod\": \"GET\",\r\n \"visible\": true,\r\n \"id\": 3,\r\n \"componentKey\": \"OraculoSeccionEventoSemana\",\r\n \"manualScalarFields\": [\r\n {\r\n \"id\": \"7a3de844-5727-4043-be42-7f965e2aa249\",\r\n \"isUrl\": false,\r\n \"value\": \"Eventos esta semana\",\r\n \"required\": false,\r\n \"name\": \"title\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"value\": \"\",\r\n \"isUrl\": true,\r\n \"required\": false,\r\n \"id\": \"2895f65f-e75b-4116-958d-04d4c34f16fe\",\r\n \"name\": \"iconUrl\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"type\": \"function\",\r\n \"required\": false,\r\n \"value\": \"\",\r\n \"id\": \"d973d3ee-721e-4d76-888c-6ad8b7bb3414\",\r\n \"isUrl\": false,\r\n \"name\": \"onViewMore\"\r\n },\r\n {\r\n \"required\": false,\r\n \"type\": \"string\",\r\n \"value\": \"\",\r\n \"name\": \"className\",\r\n \"id\": \"c062fe02-c069-49fb-aae6-d39aa3fde89c\",\r\n \"isUrl\": false\r\n }\r\n ]\r\n },\r\n {\r\n \"componentKey\": \"OraculoSeccionBonoBienvenida\",\r\n \"visible\": false,\r\n \"order\": 6,\r\n \"manualScalarFields\": [\r\n {\r\n \"id\": \"fec2252c-2c2d-448d-8775-9d073bd8def9\",\r\n \"value\": \"Te damos la\",\r\n \"name\": \"headline\",\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"isUrl\": false\r\n },\r\n {\r\n \"name\": \"headline2\",\r\n \"required\": false,\r\n \"id\": \"17e045d1-8ddb-46bc-b3ae-ae0c7ffc5952\",\r\n \"isUrl\": false,\r\n \"value\": \"bienvenida al club\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"isUrl\": true,\r\n \"name\": \"backgroundImageUrl\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondobg.png\",\r\n \"id\": \"cae601b0-ed5d-4b97-9e1f-1816d7986c6b\"\r\n }\r\n ],\r\n \"variableName\": \"items\",\r\n \"title\": \"Bono Bienvenida\",\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"manualItems\": [\r\n {\r\n \"id\": \"8677b338-7d12-4ba9-a95f-d34ed71d92b0\",\r\n \"fields\": [\r\n {\r\n \"value\": \"Recibe\",\r\n \"type\": \"string\",\r\n \"name\": \"title\",\r\n \"isUrl\": false,\r\n \"required\": true,\r\n \"id\": \"e015fc5e-983e-4096-b82e-6d5ed9957dd5\"\r\n },\r\n {\r\n \"value\": \"S/60\",\r\n \"required\": false,\r\n \"name\": \"amount\",\r\n \"type\": \"string\",\r\n \"id\": \"00b69888-d8ee-4bae-943c-be4e0dead26b\",\r\n \"isUrl\": false\r\n },\r\n {\r\n \"name\": \"subtitle\",\r\n \"required\": false,\r\n \"isUrl\": false,\r\n \"id\": \"376cd731-4a20-4435-a5ee-351ac55d4351\",\r\n \"value\": \"SIN ROLLOVER\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"value\": \"Hazlo aquí\",\r\n \"name\": \"buttonText\",\r\n \"required\": true,\r\n \"id\": \"3b73cff5-cb30-4b00-9b41-305455334e56\",\r\n \"type\": \"string\",\r\n \"isUrl\": false\r\n },\r\n {\r\n \"isUrl\": true,\r\n \"type\": \"string\",\r\n \"required\": true,\r\n \"name\": \"backgroundImage\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\r\n \"id\": \"89710b59-2a6a-4de8-be9a-7d9274bad84b\"\r\n },\r\n {\r\n \"isUrl\": false,\r\n \"name\": \"onButtonClick\",\r\n \"value\": \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\",\r\n \"type\": \"function\",\r\n \"required\": false,\r\n \"id\": \"e7ceaadc-b203-4587-856b-b9015201a43f\"\r\n }\r\n ]\r\n },\r\n {\r\n \"fields\": [\r\n {\r\n \"id\": \"81e1730c-0f9b-4ab9-a4df-f36c974ae99d\",\r\n \"required\": true,\r\n \"type\": \"string\",\r\n \"name\": \"title\",\r\n \"value\": \"Regístrate y recibe\",\r\n \"isUrl\": false\r\n },\r\n {\r\n \"required\": false,\r\n \"value\": \"S/40\",\r\n \"name\": \"amount\",\r\n \"type\": \"string\",\r\n \"isUrl\": false,\r\n \"id\": \"c1e96d9b-e7c7-4bb7-a8db-b67c32dcae32\"\r\n },\r\n {\r\n \"required\": false,\r\n \"isUrl\": false,\r\n \"name\": \"subtitle\",\r\n \"value\": \"SIN ROLLOVER\",\r\n \"type\": \"string\",\r\n \"id\": \"93242ead-5f09-4966-9484-471b27859c31\"\r\n },\r\n {\r\n \"id\": \"0d97802b-7aaf-4ae3-b513-8a5a469e5d5d\",\r\n \"value\": \"Hazlo aquí\",\r\n \"name\": \"buttonText\",\r\n \"type\": \"string\",\r\n \"isUrl\": false,\r\n \"required\": true\r\n },\r\n {\r\n \"required\": true,\r\n \"isUrl\": true,\r\n \"id\": \"541fcdc8-07a7-47b8-9a33-d22cb865823c\",\r\n \"name\": \"backgroundImage\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Bonos/Fondo.png\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"isUrl\": false,\r\n \"name\": \"onButtonClick\",\r\n \"id\": \"b8c4b96c-0807-4040-8c3e-8392fb278aab\",\r\n \"required\": false,\r\n \"type\": \"function\",\r\n \"value\": \"window.location='https://www.olimpo.bet/promociones/Adq_Recibe30Flex_AAP100'\"\r\n }\r\n ],\r\n \"id\": \"6707ce1d-064a-43af-8679-712c7235873a\"\r\n }\r\n ],\r\n \"id\": 11,\r\n \"dataMode\": \"manual\"\r\n },\r\n {\r\n \"dataMode\": \"url\",\r\n \"componentKey\": \"OraculoSeccionCasinoEnVivo\",\r\n \"order\": 7,\r\n \"title\": \"Casino en vivo\",\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"id\": 12,\r\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\r\n \"apiMethod\": \"POST\",\r\n \"manualScalarFields\": [\r\n {\r\n \"isImage\": false,\r\n \"value\": \"Casino en vivo\",\r\n \"type\": \"string\",\r\n \"name\": \"title\",\r\n \"id\": \"52e655b4-7259-4f7f-9017-dafe24247810\",\r\n \"required\": true\r\n },\r\n {\r\n \"required\": false,\r\n \"isImage\": false,\r\n \"id\": \"e299d500-abdc-4577-bb38-1943b6f02dfd\",\r\n \"name\": \"subtitle\",\r\n \"type\": \"string\",\r\n \"value\": \"Disfruta la emoción en tus juegos favoritos y gana en tiempo real.\"\r\n },\r\n {\r\n \"isImage\": true,\r\n \"dimensions\": \"1080x1920\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoMobile.png\",\r\n \"name\": \"backgroundMobileUrl\",\r\n \"required\": false,\r\n \"id\": \"6dcfd666-c2db-4a19-9fbf-08167bf56ae0\",\r\n \"type\": \"string\",\r\n \"maxSizeMB\": 2\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"maxSizeMB\": 2,\r\n \"name\": \"backgroundDesktopUrl\",\r\n \"isImage\": true,\r\n \"id\": \"2aa55855-0865-4cf1-a1ee-e52db864c6b4\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/CasinoEnVivo/FondoDesktop.png\",\r\n \"dimensions\": \"1920x1080\",\r\n \"required\": false\r\n },\r\n {\r\n \"isImage\": false,\r\n \"name\": \"groups\",\r\n \"type\": \"string\",\r\n \"value\": \"\",\r\n \"id\": \"e1599845-59d4-4320-903b-3857453b4322\",\r\n \"required\": false\r\n }\r\n ],\r\n \"variableName\": \"items\",\r\n \"apiParams\": [\r\n {\r\n \"key\": \"company\",\r\n \"value\": \"OLI\",\r\n \"id\": \"2822fa64-0e89-43ea-9c80-ee77076c95bd\"\r\n },\r\n {\r\n \"key\": \"lobby\",\r\n \"value\": \"HOME_CASINOENVIVO\",\r\n \"id\": \"2d6f8267-0468-4320-976d-b01df40e8ca3\"\r\n }\r\n ],\r\n \"visible\": true\r\n },\r\n {\r\n \"order\": 8,\r\n \"title\": \"Oraculo Seccion Top Juegos\",\r\n \"visible\": true,\r\n \"dataMode\": \"url\",\r\n \"apiMethod\": \"GET\",\r\n \"componentKey\": \"OraculoSeccionTopJuegos\",\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"manualScalarFields\": [\r\n {\r\n \"isImage\": false,\r\n \"value\": \"Top juegos\",\r\n \"type\": \"string\",\r\n \"required\": true,\r\n \"name\": \"title\",\r\n \"id\": \"a01c36e7-a551-4c92-89e0-e9eabcdbe344\"\r\n },\r\n {\r\n \"required\": true,\r\n \"type\": \"string\",\r\n \"id\": \"1960df1d-b07e-4461-b55f-39834ac30d8e\",\r\n \"maxSizeMB\": 0.2,\r\n \"value\": \"https://imagenesolimpo.s3.us-east-1.amazonaws.com/landing/1768597100868-virtuales.webp\",\r\n \"isImage\": true,\r\n \"name\": \"iconUrl\"\r\n },\r\n {\r\n \"value\": \"\",\r\n \"name\": \"groups\",\r\n \"isImage\": false,\r\n \"type\": \"string\",\r\n \"id\": \"63dab0f6-b4d1-47af-b1e7-d3dcf4c69c4e\",\r\n \"required\": false\r\n }\r\n ],\r\n \"apiParams\": [\r\n {\r\n \"id\": \"2bcfd8cd-8f1f-474f-beb4-170477acf9bd\",\r\n \"value\": \"OLI\",\r\n \"key\": \"company\"\r\n },\r\n {\r\n \"id\": \"dac0b2d9-f00d-4979-9deb-31c6f66b1899\",\r\n \"key\": \"lobby\",\r\n \"value\": \"HOME_TOPJUEGOS\"\r\n }\r\n ],\r\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\",\r\n \"id\": 13,\r\n \"variableName\": \"items\"\r\n },\r\n {\r\n \"apiMethod\": \"GET\",\r\n \"componentKey\": \"OraculoSeccionDestacados\",\r\n \"id\": 6,\r\n \"variableName\": \"items\",\r\n \"title\": \"Promociones \\\"Lo nuevo\\\"\",\r\n \"order\": 9,\r\n \"apiParams\": [\r\n {\r\n \"id\": \"a2ee1b32-dc39-434f-9358-920e6c7bba0b\",\r\n \"value\": \"OLI\",\r\n \"key\": \"company\"\r\n },\r\n {\r\n \"id\": \"16715513-30a1-4955-8e94-a4deee4722ba\",\r\n \"value\": \"DESTACADOS\",\r\n \"key\": \"lobby\"\r\n }\r\n ],\r\n \"dataMode\": \"url\",\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getPromotionsLobby\",\r\n \"manualScalarFields\": [\r\n {\r\n \"id\": \"f131acc5-a298-4583-9952-c0747dc1f1af\",\r\n \"name\": \"title\",\r\n \"type\": \"string\",\r\n \"value\": \"Lo nuevo\",\r\n \"required\": true,\r\n \"isImage\": false\r\n },\r\n {\r\n \"id\": \"8f0dadc8-ff0f-4074-870f-2bbcd9f38cab\",\r\n \"required\": true,\r\n \"name\": \"iconUrl\",\r\n \"type\": \"string\",\r\n \"maxSizeMB\": 0.2,\r\n \"dimensions\": \"40x40\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Destacados/starIcon.svg\",\r\n \"isImage\": true\r\n },\r\n {\r\n \"isImage\": false,\r\n \"type\": \"string\",\r\n \"name\": \"className\",\r\n \"value\": \"\",\r\n \"required\": false,\r\n \"id\": \"39cd368d-0003-4145-88a9-f22b1a4ef32b\"\r\n },\r\n {\r\n \"isImage\": false,\r\n \"type\": \"string\",\r\n \"value\": \"\",\r\n \"name\": \"groups\",\r\n \"required\": false,\r\n \"id\": \"a9e218fd-9cc6-432f-a7bf-c119581e6927\"\r\n }\r\n ],\r\n \"visible\": true\r\n },\r\n {\r\n \"title\": \"Club Olimpo\",\r\n \"componentKey\": \"OraculoSeccionClubOlimpo\",\r\n \"dataMode\": \"manual\",\r\n \"visible\": true,\r\n \"variableName\": \"items\",\r\n \"manualItems\": [\r\n {\r\n \"fields\": [\r\n {\r\n \"required\": true,\r\n \"id\": \"65b37bc4-f480-4409-afd7-ff8b83c722e0\",\r\n \"value\": \"¡Canjea bonos, productos y las mejores experiencias!\",\r\n \"isUrl\": false,\r\n \"name\": \"text\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"id\": \"cdc8fb20-5c5a-4165-93be-4df1026cdcee\",\r\n \"required\": false,\r\n \"name\": \"buttonLabel\",\r\n \"value\": \"Vamos\",\r\n \"type\": \"string\",\r\n \"isUrl\": false\r\n },\r\n {\r\n \"value\": \"\",\r\n \"name\": \"imgAlt\",\r\n \"type\": \"string\",\r\n \"required\": false,\r\n \"id\": \"9f25442e-caeb-4fab-9bea-b91f1aef97eb\",\r\n \"isUrl\": false\r\n },\r\n {\r\n \"id\": \"259ffa74-7e4f-48e6-90da-4837f2c37fe9\",\r\n \"isUrl\": true,\r\n \"name\": \"imgMobile\",\r\n \"type\": \"string\",\r\n \"required\": true,\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/FondoMobile.png\"\r\n },\r\n {\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/FondoDesktop.png\",\r\n \"id\": \"e7812141-42d8-419f-9d15-b8711139e980\",\r\n \"required\": false,\r\n \"type\": \"string\",\r\n \"isUrl\": true,\r\n \"name\": \"imgDesktopBg\"\r\n },\r\n {\r\n \"name\": \"imgDesktopLogo\",\r\n \"id\": \"622d860b-9f9f-462a-a675-3768d6daf3c3\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/ClubOlimpo/Logo.png\",\r\n \"required\": false,\r\n \"type\": \"string\",\r\n \"isUrl\": true\r\n },\r\n {\r\n \"name\": \"onClick\",\r\n \"id\": \"cc465fd9-907d-427a-b5bb-e0963bdd833a\",\r\n \"value\": \"\",\r\n \"required\": false,\r\n \"type\": \"function\",\r\n \"isUrl\": false\r\n }\r\n ],\r\n \"id\": \"03e20297-c0fa-4382-85b2-54eaa9325be1\"\r\n }\r\n ],\r\n \"id\": 8,\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"order\": 10\r\n },\r\n {\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\",\r\n \"dataMode\": \"url\",\r\n \"title\": \"Virtuales\",\r\n \"order\": 11,\r\n \"variableName\": \"items\",\r\n \"componentKey\": \"OraculoSeccionVirtuales\",\r\n \"id\": 7,\r\n \"apiParams\": [\r\n {\r\n \"value\": \"OLI\",\r\n \"key\": \"company\",\r\n \"id\": \"de915e1d-1742-4383-bd83-ed96fda1145a\"\r\n },\r\n {\r\n \"key\": \"lobby\",\r\n \"value\": \"HOME_VIRTUALES\",\r\n \"id\": \"039b41a3-4e94-4a52-8798-e78d8651c090\"\r\n }\r\n ],\r\n \"apiMethod\": \"GET\",\r\n \"manualScalarFields\": [\r\n {\r\n \"required\": true,\r\n \"name\": \"title\",\r\n \"id\": \"f6b16510-51db-4124-864d-2d12a0bb1b23\",\r\n \"value\": \"Virtuales\",\r\n \"type\": \"string\",\r\n \"isImage\": false\r\n },\r\n {\r\n \"type\": \"string\",\r\n \"id\": \"f9686ddc-f673-4784-8025-df26f48cc04f\",\r\n \"value\": \"https://stg-www.contodobet.com/static/img/landing/Virtuales/virtuales.svg\",\r\n \"maxSizeMB\": 0.2,\r\n \"required\": true,\r\n \"isImage\": true,\r\n \"name\": \"iconUrl\"\r\n },\r\n {\r\n \"type\": \"boolean\",\r\n \"id\": \"4c4f348c-cb17-4fd6-bc4d-f816a42da249\",\r\n \"name\": \"mosaicFirst\",\r\n \"isImage\": false,\r\n \"value\": \"true\",\r\n \"required\": false\r\n },\r\n {\r\n \"id\": \"c264c9c3-7178-4961-b366-163d9b818800\",\r\n \"type\": \"number\",\r\n \"name\": \"gridSize\",\r\n \"value\": \"4\",\r\n \"required\": false,\r\n \"isImage\": false\r\n },\r\n {\r\n \"id\": \"2310900e-68ce-4a64-89da-e0976d172fee\",\r\n \"required\": false,\r\n \"type\": \"string\",\r\n \"value\": \"\",\r\n \"isImage\": false,\r\n \"name\": \"groups\"\r\n }\r\n ],\r\n \"visible\": true,\r\n \"apiUrl\": \"https://wallet-pe.olimpo.bet/api/contents/getLobby\"\r\n },\r\n {\r\n \"title\": \"Medios de Pago\",\r\n \"id\": 10,\r\n \"order\": 12,\r\n \"componentKey\": \"OraculoSeccionMediosPago\",\r\n \"visible\": true,\r\n \"updatedAt\": \"2026-01-22T04:11:09.501Z\"\r\n }\r\n],\r\n}","\"use client\";\r\nimport React, { useEffect, useState, useMemo } from \"react\";\r\nimport { Container, Stack, useMediaQuery } from \"@mui/material\";\r\nimport { doc, onSnapshot, Firestore } from \"firebase/firestore\";\r\n// import \"@splidejs/react-splide/css\";\r\n\r\nimport { Landing } from \"./landingRegistry\";\r\nimport { clearOraculoExtras, setOraculoExtras } from \"../utils/openMachineRegistry\";\r\n// import \"../index.css\"\r\nimport { LANDING_FALLBACK_JSON } from \"../config/json_configuration\";\r\n// Para testear captura\r\n// import { OlimpoErrorClient, type SessionProvider } from \"@olimpo/capture-client\";\r\n\r\nexport type LandingComponentMap = Record<string, React.ComponentType<any>>;\r\n\r\n// Es componente React si es función o componente objeto (MUI, etc.)\r\nconst isComponent = (val: any) =>\r\n typeof val === \"function\" ||\r\n (val && typeof val === \"object\" && \"$$typeof\" in val);\r\n\r\n// En oraculo-ui los organismos de landing se llaman OraculoSeccionXXX\r\nconst isSectionName = (key: string) => /^OraculoSeccion[A-Z]/.test(key);\r\n\r\nfunction normalizeLandingJsonToSections(rawJson: any): OraculoPageLandingPreviewSection[] {\r\n // Caso 1: tu JSON ya trae sections como array\r\n if (rawJson && Array.isArray(rawJson.sections)) {\r\n return rawJson.sections\r\n .slice()\r\n .sort((a: any, b: any) => (a.order ?? 0) - (b.order ?? 0))\r\n .map((s: any, i: number) => ({ ...s, order: i + 1 }));\r\n }\r\n\r\n // Caso 2: tu JSON NO trae sections, sino keys/otra estructura:\r\n // EJEMPLO: rawJson.components = [{componentKey, visible, ...}]\r\n if (rawJson && Array.isArray(rawJson.components)) {\r\n return rawJson.components.map((c: any, i: number) => ({\r\n id: c.id ?? i + 1,\r\n title: c.title ?? \"\",\r\n componentKey: c.componentKey,\r\n visible: c.visible ?? true,\r\n order: i + 1,\r\n props: c.props ?? {},\r\n apiUrl: c.apiUrl ?? \"\",\r\n dataMode: c.dataMode,\r\n variableName: c.variableName,\r\n manualItems: c.manualItems,\r\n apiMethod: c.apiMethod,\r\n apiParams: c.apiParams,\r\n }));\r\n }\r\n\r\n // Si no matchea nada, retorna vacío\r\n return [];\r\n}\r\n\r\nexport const LandingComponents: LandingComponentMap = Object.fromEntries(\r\n Object.entries(Landing).filter(\r\n ([key, val]) => isSectionName(key) && isComponent(val)\r\n )\r\n) as LandingComponentMap;\r\n\r\n// Section item model mirrors Firestore persisted structure\r\nexport type OraculoPageLandingPreviewSection = {\r\n id: number;\r\n title: string;\r\n componentKey: string;\r\n visible: boolean;\r\n order: number;\r\n props?: Record<string, unknown>;\r\n apiUrl?: string;\r\n dataMode?: \"url\" | \"manual\";\r\n variableName?: string;\r\n manualItems?: { fields: { name: string; type: string; value: string }[] }[];\r\n variableName2?: string;\r\n manualItems2?: { fields: { name: string; type: string; value: string }[] }[];\r\n manualScalarFields?: { name: string; type: string; value: string }[];\r\n apiMethod?: \"GET\" | \"POST\";\r\n apiParams?: { id: string; key: string; value: string }[];\r\n};\r\n\r\nexport type OpenMachineFn = (\r\n machine_name: string,\r\n provider: any,\r\n machine: any,\r\n external_id: any,\r\n type: any,\r\n demo: any,\r\n source: string\r\n) => void;\r\n\r\nexport type OraculoExtras = Array<[string, unknown]>;\r\n\r\nconst extrasToObject = (extras?: OraculoExtras): Record<string, unknown> => {\r\n try {\r\n return Object.fromEntries(extras ?? []);\r\n } catch (e) {\r\n console.warn(\"[oraculo] extras inválidos. Debe ser Array<[string, unknown]>\", extras);\r\n return {};\r\n }\r\n};\r\n\r\nconst asComponent = <T,>(val: unknown): T | undefined =>\r\n typeof val === \"function\" ? (val as T) : undefined;\r\n\r\nconst asFn = <T extends Function>(val: unknown): T | undefined =>\r\n typeof val === \"function\" ? (val as T) : undefined;\r\n\r\n/** Payload bruto obtenido por fetch o construido manualmente */\r\ntype SectionPayload =\r\n | Record<string, unknown>\r\n | Array<unknown>\r\n | null\r\n | undefined;\r\n\r\nexport interface OraculoPageLandingPreviewProps {\r\n /** Optional override: if provided, renders these sections instead of fetching Firestore */\r\n sectionsOverride?: OraculoPageLandingPreviewSection[];\r\n /** Firestore document id (default 'home') */\r\n docId?: string;\r\n /** Instancia de Firestore proporcionada por la app que consume el paquete */\r\n db: Firestore;\r\n /** Componente que se renderizará mientras carga */\r\n loader?: React.ComponentType<any>;\r\n // Optional extras\r\n extras?: OraculoExtras;\r\n}\r\n\r\nclass HttpError extends Error {\r\n constructor(\r\n public status: number,\r\n public url: string,\r\n public statusText: string\r\n ) {\r\n super(`HTTP ${status} ${statusText}`);\r\n this.name = \"HttpError\";\r\n }\r\n}\r\n\r\ntype ComponentMap = Record<\r\n string,\r\n React.ComponentType<Record<string, unknown>>\r\n>;\r\n\r\nconst noMostrarSinItems = [\r\n \"OraculoSeccionEventoEnVivo\",\r\n \"OraculoSeccionEventoSemana\",\r\n \"OraculoSeccionEventoCombinadas\",\r\n];\r\n\r\nconst OraculoPageLandingPreview: React.FC<OraculoPageLandingPreviewProps> = ({\r\n sectionsOverride,\r\n docId = \"home\",\r\n db,\r\n extras,\r\n loader\r\n}) => {\r\n const extrasObj = useMemo(() => extrasToObject(extras), [extras]);\r\n\r\n const Loader = loader || extrasObj[\"loader\"] as React.ComponentType<any> | undefined;\r\n \r\n\r\n const [sections, setSections] = useState<OraculoPageLandingPreviewSection[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [sectionDataMap, setSectionDataMap] = useState<\r\n Record<number, SectionPayload>\r\n >({});\r\n const [sectionLoadingMap, setSectionLoadingMap] = useState<\r\n Record<number, boolean>\r\n >({});\r\n const [sectionErrorMap, setSectionErrorMap] = useState<\r\n Record<number, string>\r\n >({});\r\n\r\n const isDesktop = useMediaQuery(\"(min-width:1024px)\");\r\n\r\n // Fetch sections from Firestore unless override provided\r\n useEffect(() => {\r\n if (sectionsOverride) return;\r\n if (!db) {\r\n console.warn(\"[landing] sin db -> fallback json\");\r\n setSections(normalizeLandingJsonToSections(LANDING_FALLBACK_JSON));\r\n return;\r\n }\r\n\r\n const applyFallback = (reason: string, extra?: unknown) => {\r\n console.warn(\"[landing] FALLBACK:\", reason, extra ?? \"\");\r\n setSections(normalizeLandingJsonToSections(LANDING_FALLBACK_JSON));\r\n setLoading(false);\r\n };\r\n\r\n // ✅ prueba rápida sin romper nada:\r\n if (process.env.NEXT_PUBLIC_LANDING_FORCE_FALLBACK === \"1\") {\r\n setLoading(true);\r\n applyFallback(\"forzado por env\");\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n\r\n const unsubscribe = onSnapshot(\r\n doc(db, \"landings\", docId),\r\n (snap) => {\r\n try {\r\n if (!snap.exists()) {\r\n applyFallback(`doc landings/${docId} no existe`);\r\n return;\r\n }\r\n\r\n const rawJson = snap.data();\r\n const normalized = normalizeLandingJsonToSections(rawJson);\r\n\r\n if (!normalized.length) {\r\n applyFallback(\"JSON inválido o sin secciones normalizables\", rawJson);\r\n return;\r\n }\r\n\r\n console.log(\"[landing] Firestore OK (json grande):\", rawJson);\r\n setSections(normalized);\r\n } catch (e) {\r\n applyFallback(\"error procesando snapshot\", e);\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n (error) => {\r\n applyFallback(\"error onSnapshot\", error);\r\n }\r\n );\r\n\r\n return () => unsubscribe();\r\n }, [sectionsOverride, docId, db]);\r\n\r\n useEffect(() => {\r\n setOraculoExtras(extrasObj);\r\n return () => clearOraculoExtras();\r\n }, [extrasObj]);\r\n\r\n useEffect(() => {\r\n // preload all components used in sections\r\n const effectiveSections = sectionsOverride\r\n ? sectionsOverride.slice()\r\n : sections.slice();\r\n const toLoad = effectiveSections\r\n .map((s) => s.componentKey)\r\n .filter((key) => !!key);\r\n\r\n if (toLoad.length === 0) return;\r\n\r\n }, [sectionsOverride, sections]);\r\n\r\n const fetchSectionData = async (\r\n section: OraculoPageLandingPreviewSection\r\n ): Promise<SectionPayload> => {\r\n\r\n if (noMostrarSinItems.includes(section.componentKey)) {\r\n return {\r\n // whatever empty structure your UI expects\r\n items: [],\r\n events: [],\r\n data: {},\r\n } as SectionPayload;\r\n }\r\n\r\n const rawUrl = (section.apiUrl || \"\").trim();\r\n if (!rawUrl) return undefined;\r\n\r\n const method = section.apiMethod || \"GET\";\r\n const params = section.apiParams || [];\r\n\r\n let url = rawUrl;\r\n let body: BodyInit | undefined;\r\n let headers: HeadersInit | undefined;\r\n\r\n if (method === \"GET\") {\r\n const u = new URL(\r\n rawUrl,\r\n typeof window == \"undefined\"\r\n ? \"http://localhost\"\r\n : window.location.origin\r\n );\r\n for (const p of params) {\r\n if (!p.key) continue;\r\n u.searchParams.append(p.key, p.value);\r\n }\r\n url = u.toString();\r\n } else {\r\n // application/x-www-form-urlencoded\r\n const encoded = new URLSearchParams();\r\n for (const p of params) {\r\n if (!p.key) continue;\r\n // el value se manda tal cual; URLSearchParams se encarga del %7B%22...%7D\r\n encoded.append(p.key, p.value);\r\n }\r\n body = encoded.toString();\r\n headers = {\r\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\r\n };\r\n }\r\n\r\n const res = await fetch(url, {\r\n method,\r\n headers,\r\n body,\r\n });\r\n\r\n if (!res.ok) throw new HttpError(res.status, url, res.statusText);\r\n return res.json();\r\n };\r\n\r\n // Use override if provided\r\n const effectiveSections = useMemo(\r\n () => (sectionsOverride ? sectionsOverride.slice() : sections.slice()),\r\n [sectionsOverride, sections]\r\n );\r\n\r\n const fetchedKeysRef = React.useRef<Set<string>>(new Set());\r\n\r\n useEffect(() => {\r\n const fetchables = effectiveSections\r\n .map((s) => ({ s, url: (s.apiUrl || \"\").trim() }))\r\n .filter(({ url }) => !!url);\r\n\r\n if (!fetchables.length) return;\r\n\r\n for (const { s, url } of fetchables) {\r\n const key = `${s.id}|${url}`;\r\n if (fetchedKeysRef.current.has(key)) continue;\r\n fetchedKeysRef.current.add(key);\r\n\r\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: true }));\r\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: \"\" }));\r\n\r\n (async () => {\r\n try {\r\n const json = await fetchSectionData(s);\r\n setSectionDataMap((prev) => ({ ...prev, [s.id]: json }));\r\n } catch (err: unknown) {\r\n let message = \"Error desconocido\";\r\n if (err instanceof HttpError) {\r\n message = `Error HTTP ${err.status} (${err.statusText}) en ${err.url}`;\r\n } else if (err instanceof SyntaxError) {\r\n message = \"Respuesta no es JSON válido\";\r\n } else if (err instanceof TypeError) {\r\n message = \"Fallo de red / CORS / conexión\";\r\n } else if (typeof err === \"string\") {\r\n message = err.toString();\r\n }\r\n setSectionErrorMap((prev) => ({ ...prev, [s.id]: message }));\r\n } finally {\r\n setSectionLoadingMap((prev) => ({ ...prev, [s.id]: false }));\r\n }\r\n })();\r\n }\r\n }, [effectiveSections]);\r\n\r\n const orderedVisible = useMemo(\r\n () =>\r\n effectiveSections\r\n .filter((s) => s.visible)\r\n .sort((a, b) => a.order - b.order),\r\n [effectiveSections]\r\n );\r\n\r\n const toManualArray = (\r\n items:\r\n | { fields: { name: string; type: string; value: string }[] }[]\r\n | undefined\r\n ): Array<Record<string, unknown>> => {\r\n if (!Array.isArray(items)) return [];\r\n return items.map((it) => {\r\n const obj: Record<string, unknown> = {};\r\n for (const f of it.fields || []) {\r\n const t = (f.type || \"string\").toLowerCase();\r\n if (t === \"number\") {\r\n const val = String(f.value || \"\").trim();\r\n if (val !== \"\") {\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n obj[f.name] = num;\r\n }\r\n }\r\n } else if (t === \"boolean\")\r\n obj[f.name] = String(f.value).toLowerCase() === \"true\";\r\n else if (t === \"function\") {\r\n const body = String(f.value || \"\").trim();\r\n if (body) {\r\n try {\r\n // ✅ Explicit function type\r\n const fn = new Function(body) as () => unknown;\r\n obj[f.name] = fn;\r\n } catch (e) {\r\n console.error(`❌ Error creando función en item '${f.name}':`, e);\r\n }\r\n }\r\n } else obj[f.name] = f.value;\r\n }\r\n return obj;\r\n });\r\n };\r\n\r\n const toManualScalars = (\r\n fields: { name: string; type: string; value: string }[] | undefined\r\n ): Record<string, unknown> => {\r\n const out: Record<string, unknown> = {};\r\n if (!Array.isArray(fields)) return out;\r\n for (const f of fields) {\r\n if (!f.name) continue;\r\n const t = (f.type || \"string\").toLowerCase();\r\n if (t === \"number\") {\r\n // Si el valor está vacío o es inválido, NO agregar el prop (usar default del componente)\r\n const val = String(f.value || \"\").trim();\r\n if (val !== \"\") {\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n out[f.name] = num;\r\n }\r\n }\r\n } else if (t === \"boolean\")\r\n out[f.name] = String(f.value).toLowerCase() === \"true\";\r\n else if (t === \"function\") {\r\n const body = String(f.value || \"\").trim();\r\n if (body) {\r\n try {\r\n // ✅ Explicit function type\r\n const fn = new Function(body) as () => unknown;\r\n out[f.name] = fn;\r\n } catch (e) {\r\n console.error(`❌ Error creando función en item '${f.name}':`, e);\r\n }\r\n }\r\n } else out[f.name] = f.value;\r\n }\r\n return out;\r\n };\r\n\r\n const mapPayloadToProps = (\r\n payload: SectionPayload,\r\n manual: { arr?: unknown[]; variableName?: string } | null,\r\n base?: Record<string, unknown>\r\n ): Record<string, unknown> => {\r\n const merged: Record<string, unknown> = base ? { ...base } : {};\r\n if (manual) {\r\n const name = (manual.variableName || \"items\").trim() || \"items\";\r\n merged[name] = manual.arr || [];\r\n return merged;\r\n }\r\n const pl = payload;\r\n const isArr = Array.isArray(pl);\r\n const obj =\r\n !isArr && typeof pl === \"object\" && pl !== null ? pl : undefined;\r\n const arrData =\r\n obj && Array.isArray((obj as any).lobby || (obj as any).items)\r\n ? (((obj as any).lobby || (obj as any).items) as unknown[])\r\n : undefined;\r\n const choose = (fallback: unknown[]) => (isArr ? pl : arrData || fallback);\r\n merged.items = choose(arrData || []);\r\n return merged;\r\n };\r\n\r\n const buildCompProps = (\r\n s: OraculoPageLandingPreviewSection\r\n ): Record<string, unknown> => {\r\n const hasUrl = !!s.apiUrl?.trim();\r\n const payload: SectionPayload = hasUrl ? sectionDataMap[s.id] : undefined;\r\n let compProps: Record<string, unknown> = s.props ? { ...s.props } : {};\r\n const scalars = toManualScalars(s.manualScalarFields);\r\n if (\r\n noMostrarSinItems.includes(s.componentKey)\r\n ) {\r\n //console.log(payload);\r\n return { items: payload, ...compProps, ...scalars };\r\n }\r\n\r\n compProps = { ...compProps, ...scalars };\r\n if (hasUrl) compProps = mapPayloadToProps(payload, null, compProps);\r\n else if (s.dataMode === \"manual\") {\r\n const arr = toManualArray(s.manualItems);\r\n compProps = mapPayloadToProps(\r\n null,\r\n { arr, variableName: s.variableName },\r\n compProps\r\n );\r\n\r\n // Si existe variableName2 y manualItems2, agregar también ese prop\r\n if (s.variableName2 && s.manualItems2) {\r\n const arr2 = toManualArray(s.manualItems2);\r\n const varName2 = (s.variableName2 || \"items2\").trim() || \"items2\";\r\n compProps[varName2] = arr2;\r\n }\r\n }\r\n\r\n return compProps;\r\n };\r\n\r\n const renderStatusBox = (\r\n key: number,\r\n type: \"loading\" | \"error\" | \"component\",\r\n message: string\r\n ) => {\r\n const colorMap: Record<string, string> = {\r\n loading: \"bg-blue-100 text-blue-800\",\r\n error: \"bg-red-100 text-red-800\",\r\n component: \"bg-yellow-100 text-yellow-800\",\r\n };\r\n return (\r\n <div key={key} className={`mx-4 p-4 rounded ${colorMap[type]}`}>\r\n {message}\r\n </div>\r\n );\r\n };\r\n\r\n const renderSingleSection = (s: OraculoPageLandingPreviewSection) => {\r\n const rawKey = s.componentKey;\r\n\r\n const Comp = LandingComponents[rawKey];\r\n\r\n if (!Comp) {\r\n console.warn(`No hay componente registrado para \"${rawKey}\"`);\r\n return renderStatusBox(\r\n s.id,\r\n \"component\",\r\n `Componente \"${rawKey}\" no encontrado`\r\n );\r\n }\r\n\r\n const hasUrl = !!s.apiUrl?.trim();\r\n const payload = hasUrl ? sectionDataMap[s.id] : undefined;\r\n const loadingSec = hasUrl ? !!sectionLoadingMap[s.id] : false;\r\n const errorSec = hasUrl ? sectionErrorMap[s.id] : \"\";\r\n\r\n if (hasUrl) {\r\n if (loadingSec && !payload)\r\n return renderStatusBox(\r\n s.id,\r\n \"loading\",\r\n `Cargando datos desde ${s.apiUrl}...`\r\n );\r\n if (errorSec && !payload)\r\n return renderStatusBox(\r\n s.id,\r\n \"error\",\r\n `Error cargando ${s.apiUrl}: ${errorSec}`\r\n );\r\n }\r\n\r\n const compProps = buildCompProps(s);\r\n const fullBleedComponents = new Set([\r\n \"OraculoSeccionBanners\",\r\n \"OraculoSeccionBonoBienvenida\",\r\n \"OraculoSeccionCasinoEnVivo\",\r\n !isDesktop ? \"OraculoSeccionClubOlimpo\" : \"\",\r\n ]);\r\n const isFullBleed = fullBleedComponents.has(s.componentKey);\r\n\r\n const paddingX = isDesktop ? 120 : 24;\r\n\r\n const wrapperStyle: React.CSSProperties = isFullBleed\r\n ? {\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n }\r\n : {\r\n paddingLeft: paddingX,\r\n paddingRight: paddingX,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n };\r\n\r\n // if (\r\n // noMostrarSinItems.includes(s.componentKey)\r\n // ) {\r\n // //console.log(payload);\r\n // return (<Comp key={s.id}{...compProps} />);\r\n // }\r\n return (\r\n <div key={s.id} style={wrapperStyle} className=\"oraculo-section-wrapper\">\r\n <Comp {...compProps} />\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * para testear captura\r\n useEffect(() => {\r\n // ✅ Inicializar OlimpoErrorClient con la API configurada\r\n const sessionProvider: SessionProvider = {\r\n getUser: () => ({\r\n user: \"test\",\r\n email: \"test@latinka.com.pe\",\r\n alias: \"test\",\r\n groups: [\r\n 3,\r\n 5,\r\n ]\r\n })\r\n };\r\n \r\n if (!OlimpoErrorClient.isInitialized()) {\r\n OlimpoErrorClient.init({\r\n apiUrl: process.env.NEXT_PUBLIC_OLIMPO_API,\r\n projectSlug: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_PROJECT_SLUG,\r\n environmentName: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_ENVIRONMENT_NAME,\r\n token: process.env.NEXT_PUBLIC_OLIMPO_CAPTURE_ERROR_TOKEN,\r\n country: process.env.NEXT_PUBLIC_COUNTRY,\r\n sessionProvider: sessionProvider\r\n });\r\n }\r\n }, []);\r\n */\r\n\r\n if (loading && !sectionsOverride)\r\n return Loader ? <Loader /> : <div>Cargando...</div>;\r\n\r\n if (!loading && !sectionsOverride && sections.length === 0) {\r\n return (\r\n <div className=\"text-xs text-gray-500\">Sin secciones (Firestore)</div>\r\n );\r\n }\r\n\r\n return (\r\n <Container\r\n className=\"oli-font\"\r\n maxWidth={false}\r\n disableGutters\r\n sx={{\r\n backgroundColor: \"#121212\",\r\n position: \"relative\",\r\n pb: 5,\r\n // pt: 5,\r\n width: \"100%\",\r\n maxWidth: \"100%\",\r\n overflowX: \"hidden\",\r\n }}\r\n >\r\n <Stack\r\n direction=\"column\"\r\n spacing={isDesktop ? 8 : 5}\r\n useFlexGap\r\n >\r\n {orderedVisible.map(renderSingleSection)}\r\n </Stack>\r\n </Container>\r\n );\r\n};\r\n\r\nexport default OraculoPageLandingPreview;\r\n"],"names":["OraculoButton","children","onClick","href","target","rel","type","disabled","variant","size","fullWidth","fullHeight","className","ariaLabel","leftIcon","rightIcon","iconOnly","hasText","onlyOneIcon","isIconOnly","cls","content","jsxs","Fragment","jsx","ariaDisabled","MuiLink","e","OraculoSectionTitle","title","iconUrl","wrapperClass","OraculoCarouselDots","total","active","onSelect","rootClass","_","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","rafRef","useRef","useEffect","host","onWheel","splide","deltaX","deltaY","direction","Splide","SplideRaw","SplideSlide","SplideSlideRaw","OraculoCarousel","forwardRef","items","renderItem","perPage","breakpoints","options","onMove","useIndexAsKey","enableHorizontalWheel","ref","wheelHostRef","prevLengthRef","useImperativeHandle","_a","index","getVisibleRange","Slides","Controller","track","trackWidth","visibleStart","currentWidth","visibleEnd","i","slide","hasOverflow","list","handleMove","useCallback","isStart","isEnd","React","lengthChanged","handleResize","handleMounted","mergedOptions","item","OraculoGameCard","imageUrl","fillParent","dim","handleButtonClick","sizeStyles","OraculoGameRankCard","orden","loading","sizes","getVal","k","def","_b","_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","outcomes","arr","verMasSeccionEnVivo","verMasSeccionSemana","verMasSeccionCombinadas","fetchJerseys","eventIds","useDebouncedValue","delay","debounced","setDebounced","useState","id","OraculoEventCombinadosCard","event","processOutcome","apuestas","homeName","awayName","a","best","line","_e","acc","o","eventOutcomes","Stack","b","OraculoButtonBet","DEFAULT_HOME_JERSEY","DEFAULT_AWAY_JERSEY","getTeamJersey","jerseyEvent","side","role","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","OraculoEventHeader","_g","_f","_i","_h","_j","_k","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","isLoading","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","url","sectionClassName","ChevronLeftRounded","ChevronRightRounded","KEY","getStore","g","setOraculoExtras","extrasObj","getOraculoExtra","key","clearOraculoExtras","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","top6","handleOpen","juego","showIframe","loadMachine","getGameId","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","handleOpenLive","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","isMobile","useMediaQuery","showDots","activeIndex","setActiveIndex","navRef","wheelLockRef","wheelUnlockTimerRef","activeSlide","sectionSx","el","THRESHOLD","LOCK_MS","dx","dy","dirNext","renderSlide","desktop","hl1","hl2","OraculoSeccionClubOlimpo","fullBleed","selectedIndex","rootRef","bottomRef","useLayoutEffect","root","bottom","update","ro","OraculoSeccionEventoCombinadas","events","setEvents","SPECIALS_GROUPS_URL","loadDataEventSpecial","listData","groupId","SPECIALS_URL","data","mergeEventOffers","eventos","prePackCoupons","results","coupon","usedOutcomeIds","getUsedOutcomeIds","reqs","extractRequirements","apuestasByEvent","filteredOutcomes","requiredIds","outcomesWithPosition","evento","eventOutcomeSet","combinadoTotal","row","requiredOutcomeIds","allIds","p","OraculoEventCombinadasCard","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","jerseys","setJerseys","visibleRange","setVisibleRange","fetchingRef","orderedEventIds","setOrderedEventIds","orderIdsFetchedRef","debouncedVisibleRange","blocked","filterFootballEvents","ev","group","word","loadData","orderIds","response","json","filteredEvents","orderMap","sortedEvents","aIndex","bIndex","interval","BUFFER","from","to","idsToFetch","res","prev","eventId","OraculoEventSemanaCardSkeleton","fetchInBatches","urls","batchSize","signal","batch","responses","u","sortEvents","evs","filterEventsWithinOneWeek","now","oneWeekLater","eventDate","mergeEventOffersOutcome","OraculoSeccionEventoSemana","WEEK_EVENTS_URL","COMMON_QUERY","loadDataWeekEvent","orderedGroupIds","orderResponse","orderJson","football","groups","firstGroups","buildUrls","sub","loadAllGroupEvents","orderEvents","allEvents","allBetOffers","merged","finalEvents","orderedEvents","error","controller","cancelled","sectionStyle","OraculoSeccionBanners","backgrounds","activeDot","setActiveDot","captureInteraction","useCaptureInteraction","isMounted","isAutoplayRef","totalDots","timer","handleBannerClick","bg","handleMenuItemClick","handleSlideChange","safe","DEFAULT_ITEMS","OraculoSeccionMediosPago","split","row1","row2","l","Landing","LANDING_FALLBACK_JSON","isComponent","val","isSectionName","normalizeLandingJsonToSections","rawJson","s","c","LandingComponents","extrasToObject","extras","HttpError","status","statusText","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","docId","db","loader","Loader","sections","setSections","setLoading","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","applyFallback","reason","extra","unsubscribe","onSnapshot","doc","snap","normalized","fetchSectionData","section","rawUrl","method","params","body","headers","encoded","effectiveSections","fetchedKeysRef","fetchables","err","message","orderedVisible","toManualArray","obj","f","t","num","fn","toManualScalars","fields","out","mapPayloadToProps","payload","manual","pl","isArr","arrData","choose","fallback","buildCompProps","hasUrl","compProps","scalars","arr2","varName2","renderStatusBox","colorMap","renderSingleSection","rawKey","Comp","loadingSec","errorSec","isFullBleed","paddingX","wrapperStyle","Container"],"mappings":"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"}