oraculo-ui 0.1.76 → 0.1.78

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/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\n\r\nexport interface OraculoEventTeamInfoProps {\r\n name: string;\r\n jersey?: {\r\n base: string;\r\n sleeve: string;\r\n number?: string;\r\n type?: \"short_sleeves\" | \"long_sleeves\";\r\n real?: boolean;\r\n };\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\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\n const 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 currentWidth += slide.slide.getBoundingClientRect().width;\r\n\r\n if (currentWidth > trackWidth) {\r\n break;\r\n }\r\n\r\n visibleEnd = i;\r\n }\r\n\r\n return { visibleStart, visibleEnd };\r\n};\r\n\r\nconst handleMove = useCallback((splide: any) => {\r\n const controller = splide.Components.Controller;\r\n\r\n const index = controller.getIndex(); // real current index\r\n const end = controller.getEnd(); // real max reachable index\r\n\r\n const isStart = index === 0;\r\n const isEnd = index >= end;\r\n\r\n const total = splide.Components.Slides.getLength(); // real total slides\r\n const { visibleStart, visibleEnd } = getVisibleRange(splide);\r\n\r\n onMove?.({ index, isStart, isEnd, total, visibleEnd, visibleStart});\r\n}, [onMove]);\r\n\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 >\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","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\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={jersey?.home?.player}/>\r\n <OraculoEventScore text={(liveData?.score?.home ?? 0) + \":\"+ (liveData?.score?.away ?? 0)} name=\"En vivo\" />\r\n <OraculoEventTeamInfo name={event?.awayName} jersey={jersey?.away?.player} />\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\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={jersey?.home?.player} />\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={jersey?.away?.player} />\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 = 4\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, 5);\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 = 4,\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 = 4\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, 5);\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 = 4,\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[]>([]);\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\nconst requestedJerseysRef = useRef(new Set<number>());\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 = 1;\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 || events.length === 0;\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 = jerseys[eventId];\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?.jerseys}\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[]>([]);\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 = 1;\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\tconst isLoading = !events || events.length === 0;\r\n\r\n\tconst sectionStyle : React.CSSProperties = { paddingLeft: 0, width: \"100%\", boxSizing: \"border-box\"};\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\t\t\t\tconst eventId = p.id;\r\n\t\t\t\t\t\t\tconst jersey = jerseys[eventId];\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?.jerseys} />\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 }, 3000);\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","useImperativeHandle","_a","index","getVisibleRange","Slides","Controller","track","trackWidth","visibleStart","currentWidth","visibleEnd","i","slide","handleMove","useCallback","controller","end","isStart","isEnd","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","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","OraculoEventHeader","_f","_h","_g","_j","_i","_k","_l","_m","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","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","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","React","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/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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"}