oraculo-ui 0.1.60 → 0.1.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +6 -6
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.es.js +1057 -1047
- package/dist/index.es.js.map +1 -1
- package/dist/templates/OraculoPageLandingPreview.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/atoms/OraculoButton/OraculoButton.tsx","../src/atoms/OraculoSectionTitle/OraculoSectionTitle.tsx","../src/atoms/OraculoCarouselDots/OraculoCarouselDots.tsx","../src/atoms/OraculoGridGroup/OraculoGridGroup.tsx","../src/atoms/OraculoLogo/OraculoLogoMediosPago.tsx","../src/atoms/OraculoEvent/OraculoEventTitle.tsx","../src/atoms/OraculoEvent/OraculoEventStatusBadge.tsx","../src/atoms/OraculoEvent/OraculoEventStatus.tsx","../src/atoms/OraculoEvent/OraculoEventHeader.tsx","../src/atoms/OraculoEvent/OraculoEventLabel.tsx","../src/atoms/OraculoEvent/OraculoEventLeague.tsx","../src/atoms/OraculoEvent/OraculoEventScore.tsx","../src/atoms/OraculoEvent/OraculoEventTeamInfo.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/redirectToGame.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: 80, md: 160 }, // 80 en móvil, 160 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 \"./OraculoEventTeamInfo.module.css\";\r\n\r\nexport interface OraculoEventTeamInfoProps {\r\n name: string;\r\n logo: string;\r\n size?: \"regular\" | \"compact\";\r\n}\r\n\r\n\r\nexport default function OraculoEventTeamInfo({ name, logo, size = \"regular\" } : OraculoEventTeamInfoProps) {\r\n return (\r\n <div className={`oli-font ${styles.team} ${styles[size]}`}>\r\n <img loading=\"lazy\" src={logo} alt={name} className={styles.logo} />\r\n <span className={styles.name}>{name}</span>\r\n </div>\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\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 }) => void;\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 },\r\n ref\r\n ) => {\r\n const splideRef = useRef<any>(null);\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 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\r\n onMove?.({ index, isStart, isEnd, total });\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\r\n return (\r\n <div 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","export 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}","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 } : EnVivoEventProps) {\r\n\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\r\n name={event.homeName}\r\n logo=\"https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/Juventus.png\"\r\n />\r\n <OraculoEventScore text={(liveData?.score?.home ?? 0) + \":\"+ (liveData?.score?.away ?? 0)} name=\"En vivo\" />\r\n <OraculoEventTeamInfo name={event.awayName} logo=\"https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/Racing.png\" />\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\n\r\nimport styles from \"./OraculoEventSemanaCard.module.css\";\r\n\r\nimport { SemanaEventProps } from \"../../interfaces/oraculo/InterfaceKambi\";\r\n\r\nexport default function OraculoEventSemanaCard({event} : SemanaEventProps ) {\r\nfunction formatDate(dateString : string): string {\r\n const date = new Date(dateString);\r\n\r\n const dayShort = date.toLocaleDateString(\"es-ES\", {\r\n weekday: \"short\"\r\n }).toUpperCase();\r\n\r\n const day = date.getDate().toString().padStart(2, \"0\");\r\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\");\r\n\r\n let time = date.toLocaleTimeString(\"es-PE\", {\r\n hour: \"numeric\",\r\n minute: \"2-digit\",\r\n hour12: true\r\n }).toUpperCase();\r\n\r\n // Remove dots from A. M. / P. M.\r\n time = time.replace(/\\./g, \"\").replace(/A\\s*M/i, \"AM\").replace(/P\\s*M/i, \"PM\");\r\n\r\n return `${dayShort} ${day}/${month} | ${time}`;\r\n}\r\n\r\n return (\r\n <div className={styles.cardContainer}>\r\n <OraculoEventLeague title={event?.group ?? ''} />\r\n <div className={styles.cardBackground} >\r\n \r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n\r\n <Stack direction=\"column\" spacing={1} useFlexGap> \r\n \r\n <div className={styles.equipos}>\r\n <OraculoEventTeamInfo name={event.awayName} logo=\"https://stg-www.contodobet.com/static/img/landing/EventoSemana/Flamengo.png\" size=\"compact\" />\r\n <OraculoEventScore text={'vs.'} name=\"\" size=\"small\"/>\r\n <OraculoEventTeamInfo name={event.homeName} logo=\"https://stg-www.contodobet.com/static/img/landing/EventoSemana/RealMadrid.png\" size=\"compact\" />\r\n </div>\r\n\r\n <OraculoEventDate text={formatDate(event.start)} />\r\n\r\n </Stack>\r\n\r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap> \r\n <OraculoGridGroup spacing={1}>\r\n {(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n <OraculoEventLabel key={index} text={item.label.toUpperCase()} />\r\n ))}\r\n </OraculoGridGroup>\r\n \r\n <div className={styles.jugadas}>\r\n <OraculoGridGroup spacing={1}>\r\n {(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n <OraculoButton key={index} variant=\"primary\" fullHeight onClick={()=>{redirectHomeWithOutcomes(item.id);}} >{(item.odds / 1000).toFixed(2)}</OraculoButton>\r\n ))}\r\n </OraculoGridGroup>\r\n </div>\r\n </Stack>\r\n </Stack>\r\n </div>\r\n </div>\r\n \r\n );\r\n}","import { useRef, useState } 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 React from \"react\";\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 handlePrev = () => {\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n carouselRef.current?.next();\r\n console.log(\"items: \", items);\r\n };\r\n\r\n const handleViewMore = () => {\r\n // onViewMore?.();\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\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}\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 </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 options={{ \r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: false,\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: 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","import { OraculoGameItem } from \"../interfaces/oraculo/InterfaceGameItem\";\r\n\r\nexport type OlimpoGameBasePath = \"/casino\" | \"/juegos-virtuales\" | \"/casino-en-vivo\";\r\n\r\ntype RedirectOptions = {\r\n basePath?: OlimpoGameBasePath; // default: \"/casino\"\r\n src?: string; // tracking opcional\r\n demo?: boolean; // opcional: &demo=1\r\n host?: string; // default: https://www.olimpo.bet\r\n};\r\n\r\nexport function redirectToGame(\r\n game: OraculoGameItem,\r\n {\r\n basePath = \"/casino\",\r\n src,\r\n demo = false,\r\n host = \"https://www.olimpo.bet\",\r\n }: RedirectOptions = {}\r\n) {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const machine = game?.machine;\r\n if (!machine) return;\r\n\r\n const params = new URLSearchParams();\r\n params.set(\"machine\", String(machine));\r\n if (demo) params.set(\"demo\", \"1\");\r\n\r\n window.location.href = `${host}${basePath}?${params.toString()}`;\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 { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { redirectToGame } from \"../../utils/redirectToGame\";\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 // si no viene orden, usamos el índice (1-based)\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\r\n const top6 = isLoading ? Array.from({ length: 6 }) : normalizedItems.slice(0, 6);\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 ? \"\" : `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 if (onCardClick) onCardClick(juego);\r\n else redirectToGame(juego, { basePath: \"/casino\"});\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 { redirectToGame } from \"../../utils/redirectToGame\";\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) =>\r\n 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 onCardClick,\r\n onViewMore,\r\n className,\r\n}) => {\r\n console.log(\"items: \", items);\r\n \r\n return (\r\n <Box\r\n className={className}\r\n sx={{\r\n position: \"relative\",\r\n // width: \"100vw\",\r\n // left: \"50%\",\r\n // right: \"50%\",\r\n // transform: \"translateX(-50%)\",\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={() => \r\n onViewMore?.() || \r\n (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.logo ?? \"\"}`}\r\n provider={juego.provider}\r\n providerName={juego.web_name}\r\n machine={juego.machine}\r\n onClick={() => {\r\n // if (onCardClick) {\r\n // onCardClick(juego, idx); // usa handler del host\r\n // } else {\r\n redirectToGame(juego, { basePath: \"/casino-en-vivo\" });\r\n // }\r\n }}\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={() => \r\n onViewMore?.() || \r\n (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, { 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, {\r\n OraculoCarouselRef,\r\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, {\r\n OraculoGameSlideItem,\r\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionCasinoProps } from \"../../interfaces/oraculo/InterfaceCasino\";\r\nimport { redirectToGame } from \"../../utils/redirectToGame\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\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) =>\r\n 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 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({\r\n id: \"mosaic-0\",\r\n kind: \"mosaic\",\r\n items: baseItems.slice(0, take),\r\n });\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({\r\n id: `grid-${start}`,\r\n kind: \"grid\",\r\n items: baseItems.slice(start, end),\r\n });\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 slides = buildCasinoSlides(items, mosaicFirst, gridSize);\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 // onViewMore?.();\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\r\n if (mosaicFirst) {\r\n slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n }\r\n\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n\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 tipo GridGroup 1fr auto auto */}\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\r\n title={title}\r\n iconUrl={iconUrl}\r\n size=\"md\"\r\n />\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n justifyContent: \"flex-end\",\r\n }}\r\n >\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=\"0px\"\r\n options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: false,\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 const game = items.find((g, idx) =>\r\n getGameId(g, idx) === itm.id\r\n );\r\n\r\n if (isLoading) return;\r\n if (!game) return;\r\n\r\n // if (onItemClick) {\r\n // onItemClick(game);\r\n // } else {\r\n // redirectToGameFromItem(game);\r\n redirectToGame(game, { basePath: \"/casino\" });\r\n // }\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, { 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, {\r\n OraculoCarouselRef,\r\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, {\r\n OraculoGameSlideItem,\r\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionVirtualesProps } from \"../../interfaces/oraculo/InterfaceVirtuales\";\r\nimport { redirectToGame } from \"../../utils/redirectToGame\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\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) =>\r\n 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 }));\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({\r\n id: \"mosaic-0\",\r\n kind: \"mosaic\",\r\n items: baseItems.slice(0, take),\r\n });\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({\r\n id: `grid-${start}`,\r\n kind: \"grid\",\r\n items: baseItems.slice(start, end),\r\n });\r\n start = end;\r\n }\r\n\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 slides = buildVirtualSlides(items, mosaicFirst, gridSize);\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 // onViewMore?.();\r\n window.location.href = \"https://www.olimpo.bet/juegos-virtuales\";\r\n };\r\n\r\n const buildLoadingVirtualSlides = (\r\n mosaicFirst = true,\r\n gridSize = 4\r\n ): 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\r\n if (mosaicFirst) {\r\n slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n }\r\n\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n\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 ? 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 (equivalente a tu GridGroup 1fr auto auto) */}\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\r\n title={title}\r\n iconUrl={iconUrl}\r\n size=\"md\"\r\n />\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n justifyContent: \"flex-end\",\r\n }}\r\n >\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 options={{\r\n autoWidth: true,\r\n gap: \"12px\",\r\n trimSpace: false,\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 const game = items.find((g, idx) =>\r\n getGameId(g, idx) === itm.id\r\n );\r\n if (isLoading) return;\r\n if (!game) return;\r\n\r\n // if (onItemClick) {\r\n // onItemClick(game);\r\n // } else {\r\n redirectToGame(game, { basePath: \"/casino\" });\r\n // }\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) =>\r\n setNavState({ isStart, isEnd })\r\n }\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionVirtuales;\r\n","import React, { useRef, useState, useMemo } 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\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [activeIndex, setActiveIndex] = useState(0);\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 renderSlide = (it: OraculoBonosItem, desktop: boolean) => {\r\n const hl1 = it.headline ?? headline;\r\n const hl2 = it.headline2 ?? headline2;\r\n\r\n // --- MOBILE: MISMO CONCEPTO (headline arriba + card abajo centrado) ---\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\r\n {...it}\r\n onButtonClick={it.onButtonClick}\r\n variant=\"small\"\r\n />\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // --- DESKTOP: TU MISMO GRID (260px + banner centrado) ---\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\r\n {...it}\r\n onButtonClick={it.onButtonClick}\r\n variant=\"large\"\r\n />\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 <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={1}\r\n gap={\"0px\"}\r\n options={{ autoWidth: false }}\r\n renderItem={(it) => (\r\n <Box sx={{ width: \"100%\" }}>\r\n {renderSlide(it, !isMobile)}\r\n </Box>\r\n )}\r\n onMove={({ index }) => {\r\n setActiveIndex(index);\r\n }}\r\n />\r\n\r\n {/* ✅ Dots centrados respecto a TODA la secció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 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 } 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 } 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([]);\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\r\n async function loadData() {\r\n try {\r\n const response = await fetch(LIVE_EVENTS_URL);\r\n const data = await response.json();\r\n setEvents(data.events); \r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n\r\nuseEffect(() => {\r\n loadData(); \r\n\r\n const interval = setInterval(() => {\r\n loadData();\r\n }, 20000); \r\n\r\n return () => clearInterval(interval);\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\r\n ?.filter((ev: any) => ev.event.sport === \"FOOTBALL\")\r\n .sort(\r\n (a: any, b: any) =>\r\n new Date(b.event.start).getTime() -\r\n new Date(a.event.start).getTime()\r\n )\r\n }\r\n perPage={undefined}\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 isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCard {...p} />\r\n </FadeItemWrapper>\r\n )\r\n }\r\n\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\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 } 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 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 } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\nexport default function OraculoSeccionEventoSemana({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n \r\n const 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 const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[]>([]);\r\n\r\n function sortEvents(evs: any[]) {\r\n return [...evs].sort(\r\n (a, b) => new Date(a.start).getTime() - new Date(b.start).getTime()\r\n );\r\n }\r\n\r\n function filterEventsWithinOneWeek(events: any[]) {\r\n const now = new Date();\r\n const oneWeekLater = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); // 7 days\r\n\r\n return events.filter((event: any) => {\r\n if (!event.start) return false;\r\n\r\n const eventDate = new Date(event.start);\r\n return eventDate >= now && eventDate <= oneWeekLater;\r\n });\r\n }\r\n\r\n const handleViewMore = () => {\r\n verMasSeccionSemana();\r\n };\r\n\r\n async function loadDataWeekEvent() {\r\n try {\r\n const response = await fetch(WEEK_EVENTS_URL);\r\n const data = await response.json();\r\n const football = data.group.groups.find(\r\n (g : any) => g.englishName === \"Football\"\r\n );\r\n\r\n if (!football || !Array.isArray(football.groups)) {\r\n console.error(\"Football groups not found\");\r\n return;\r\n }\r\n\r\n const N = 5; \r\n\r\n const firstGroups = football.groups.slice(0, N);\r\n\r\n\r\n const buildUrls = (group : any) => {\r\n const base = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football\";\r\n\r\n if (group.groups && group.groups.length > 0) {\r\n const sub = group.groups[0]; // ONLY FIRST child\r\n return [\r\n `${base}/${group.termKey}/${sub.termKey}/all/matches.json?channel_id=1&channel_id=1&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true`\r\n ];\r\n }\r\n\r\n return [\r\n `${base}/${group.termKey}/all/all/matches.json?channel_id=1&channel_id=1&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true`\r\n ];\r\n };\r\n\r\n const urls = firstGroups.flatMap(buildUrls);\r\n\r\n loadAllGroupEvents(urls)\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\n async function loadAllGroupEvents(urls : any) {\r\n try {\r\n const responses = await Promise.all(\r\n urls.map((url: any) => fetch(url).then(res => res.json()))\r\n );\r\n\r\n let allEvents : any = [];\r\n let allBetOffers : any = [];\r\n\r\n responses.forEach(data => {\r\n if (!data.events) return;\r\n\r\n allEvents.push(...data.events.map((item: any) => item.event));\r\n allBetOffers.push(...data.events.flatMap((item:any) => item.betOffers || []));\r\n });\r\n\r\n // Final merged list\r\n const merged = mergeEventOffersOutcome(allEvents, allBetOffers);\r\n\r\n setEvents(sortEvents(filterEventsWithinOneWeek(merged)));\r\n\r\n } catch (error) {\r\n console.error(\"Error loading events:\", error);\r\n }\r\n}\r\n\r\n function mergeEventOffersOutcome(eventos : any, apuestas : any) {\r\n const filtered = apuestas.filter((b:any) => b.betOfferType?.id === 2);\r\n\r\n const apuestasByEvent = filtered.reduce((acc : any, b : any) => {\r\n if (!acc[b.eventId]) acc[b.eventId] = [];\r\n acc[b.eventId].push(b);\r\n return acc;\r\n }, {});\r\n\r\n return eventos\r\n .filter((evento : any) => apuestasByEvent[evento.id]) \r\n .map((evento: any) => ({\r\n ...evento,\r\n outcome: apuestasByEvent[evento.id],\r\n }));\r\n }\r\n\r\n useEffect(() => {\r\n if (items ) {\r\n loadDataWeekEvent();\r\n }\r\n}, [items]);\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 width: \"100%\",\r\n boxSizing: \"border-box\"}}>\r\n <div className={styles.wrapper}>\r\n\r\n <div className={styles.container}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <OraculoSectionTitle title=\"Eventos de la semana\" />\r\n <div className={styles.buttonWrapper}>\r\n <OraculoButton variant=\"secondary\" size=\"lg\" fullWidth onClick={() => {handleViewMore() }} >Ver más</OraculoButton>\r\n </div>\r\n </Stack>\r\n </div>\r\n\r\n <div style={{ minWidth: '180px' }}>\r\n\r\n \r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={\r\n isLoading\r\n ? Array(6).fill({}) // show 4 skeleton slides\r\n : events\r\n }\r\n perPage={3.5}\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: true }}\r\n breakpoints={{\r\n \r\n 1024:{ perPage: 1.4, gap: \"8px\", focus: \"center\", padding: { left: \"8px\", right: \"8px\" }, }, \r\n }}\r\n renderItem={(p) =>\r\n isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventSemanaCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <OraculoEventSemanaCard event ={p} />\r\n </FadeItemWrapper>\r\n )\r\n }\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport OraculoCarousel 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\r\n const totalDots = backgrounds?.length || 1;\r\n\r\n return (\r\n <Box\r\n component=\"section\"\r\n sx={{\r\n position: \"relative\",\r\n // width: \"100vw\",\r\n // left: \"50%\",\r\n // right: \"50%\",\r\n // transform: \"translateX(-50%)\",\r\n\r\n overflow: \"visible\",\r\n // pb: { xs: 7, sm: 8 },\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 items={backgrounds}\r\n perPage={0}\r\n gap=\"0px\"\r\n options={{\r\n type: \"loop\",\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"center\",\r\n // left: 0,\r\n // right: 0,\r\n }}\r\n onMove={({ index }) => setActiveDot(index)}\r\n renderItem={(bg) => (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n height: { xs: 300, sm: 360, md: 420 },\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\r\n srcSet={bg.desktopSrc}\r\n media=\"(min-width:800px)\"\r\n />\r\n <source\r\n srcSet={bg.mobileSrc}\r\n media=\"(max-width:799px)\"\r\n />\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\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: 10, sm: 10 },\r\n\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\r\n backgroundColor: \"#363636\",\r\n borderRadius: 2,\r\n py: { xs: 0.8, md: 1.2 },\r\n px: { xs: 1.5, md: 2 },\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 return;\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 rows?: LogoType[][];\r\n};\r\n\r\nconst DEFAULT_ROWS: LogoType[][] = [\r\n [\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 ],\r\n [\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\n\r\nexport default function OraculoSeccionMediosPago({\r\n title = \"Medios de pago\",\r\n rows = DEFAULT_ROWS,\r\n}: Props) {\r\n // aplanado para la grilla\r\n const flat = rows.flat();\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 {/* underbar con gradiente, sin CSS */}\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 {/* móvil: usa tus filas originales */}\r\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\r\n {rows.map((r, i) => (\r\n <Stack\r\n key={i}\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n gap={2.5} // ~20px\r\n flexWrap=\"wrap\"\r\n >\r\n {r.map((l) => (\r\n <OraculoLogoMediosPago key={`${l.src}-${l.alt}`} {...l} />\r\n ))}\r\n </Stack>\r\n ))}\r\n </Box>\r\n\r\n {/* desktop: grilla auto-fit */}\r\n <Box\r\n sx={{\r\n mt: 3,\r\n display: { xs: \"none\", md: \"grid\" },\r\n gap: { xs: 2.5, md: 2.75 },\r\n justifyItems: \"center\",\r\n alignItems: \"center\",\r\n gridTemplateColumns: { md: \"repeat(auto-fit, 160px)\"},\r\n justifyContent: { md: \"center\" },\r\n }}\r\n >\r\n {flat.map((l) => (\r\n <OraculoLogoMediosPago key={`${l.src}-${l.alt}`} {...l} />\r\n ))}\r\n </Box>\r\n\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\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\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}\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}) => {\r\n const [sections, setSections] = useState<OraculoPageLandingPreviewSection[]>(\r\n []\r\n );\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 \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 // 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}>\r\n <Comp {...compProps} />\r\n </div>\r\n );\r\n };\r\n\r\n if (loading && !sectionsOverride)\r\n return <div className=\"text-xs text-gray-400\">Cargando preview...</div>;\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 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 direction=\"column\" spacing={8} useFlexGap>\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","_","i","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","OraculoEventTeamInfo","logo","Splide","SplideRaw","SplideSlide","SplideSlideRaw","OraculoCarousel","forwardRef","items","renderItem","perPage","breakpoints","options","onMove","useIndexAsKey","ref","splideRef","useRef","useImperativeHandle","_a","index","handleMove","useCallback","splide","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","Skeleton","OraculoLiveCasinoCard","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","OraculoEventCombinadosCard","event","processOutcome","apuestas","homeName","awayName","a","best","line","_e","acc","o","eventOutcomes","Stack","b","OraculoButtonBet","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","OraculoEventHeader","_f","_g","_h","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","useState","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","url","sectionClassName","ChevronLeftRounded","ChevronRightRounded","redirectToGame","game","basePath","demo","host","params","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","isLoading","top6","juego","getGameId","g","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","OraculoSeccionCasino","onItemClick","buildLoadingSlides","mkItems","n","slide","itm","buildVirtualSlides","OraculoSeccionVirtuales","buildLoadingVirtualSlides","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","isMobile","useMediaQuery","showDots","activeIndex","setActiveIndex","activeSlide","sectionSx","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","id","row","requiredOutcomeIds","allIds","useEffect","p","OraculoEventCombinadasCard","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","loadData","interval","ev","OraculoEventSemanaCardSkeleton","OraculoSeccionEventoSemana","WEEK_EVENTS_URL","sortEvents","evs","filterEventsWithinOneWeek","now","oneWeekLater","eventDate","loadDataWeekEvent","football","firstGroups","buildUrls","group","base","sub","urls","loadAllGroupEvents","responses","res","allEvents","allBetOffers","merged","mergeEventOffersOutcome","error","OraculoSeccionBanners","backgrounds","activeDot","setActiveDot","totalDots","bg","DEFAULT_ROWS","OraculoSeccionMediosPago","rows","flat","l","Landing","isComponent","val","isSectionName","key","LandingComponents","HttpError","status","statusText","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","docId","db","sections","setSections","setLoading","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","unsubscribe","onSnapshot","doc","snap","fetched","s","fetchSectionData","section","rawUrl","method","body","headers","u","encoded","effectiveSections","fetchedKeysRef","React","fetchables","prev","json","err","message","orderedVisible","toManualArray","obj","t","num","fn","toManualScalars","fields","out","f","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/OraculoEventTeamInfo.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/redirectToGame.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: 80, md: 160 }, // 80 en móvil, 160 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 \"./OraculoEventTeamInfo.module.css\";\r\n\r\nexport interface OraculoEventTeamInfoProps {\r\n name: string;\r\n logo: string;\r\n size?: \"regular\" | \"compact\";\r\n}\r\n\r\n\r\nexport default function OraculoEventTeamInfo({ name, logo, size = \"regular\" } : OraculoEventTeamInfoProps) {\r\n return (\r\n <div className={`oli-font ${styles.team} ${styles[size]}`}>\r\n <img loading=\"lazy\" src={logo} alt={name} className={styles.logo} />\r\n <span className={styles.name}>{name}</span>\r\n </div>\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\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 }) => void;\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 },\r\n ref\r\n ) => {\r\n const splideRef = useRef<any>(null);\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 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\r\n onMove?.({ index, isStart, isEnd, total });\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\r\n return (\r\n <div 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","export 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}","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 } : EnVivoEventProps) {\r\n\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\r\n name={event.homeName}\r\n logo=\"https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/Juventus.png\"\r\n />\r\n <OraculoEventScore text={(liveData?.score?.home ?? 0) + \":\"+ (liveData?.score?.away ?? 0)} name=\"En vivo\" />\r\n <OraculoEventTeamInfo name={event.awayName} logo=\"https://stg-www.contodobet.com/static/img/landing/EventoEnVivo/Racing.png\" />\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\n\r\nimport styles from \"./OraculoEventSemanaCard.module.css\";\r\n\r\nimport { SemanaEventProps } from \"../../interfaces/oraculo/InterfaceKambi\";\r\n\r\nexport default function OraculoEventSemanaCard({event} : SemanaEventProps ) {\r\nfunction formatDate(dateString : string): string {\r\n const date = new Date(dateString);\r\n\r\n const dayShort = date.toLocaleDateString(\"es-ES\", {\r\n weekday: \"short\"\r\n }).toUpperCase();\r\n\r\n const day = date.getDate().toString().padStart(2, \"0\");\r\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\");\r\n\r\n let time = date.toLocaleTimeString(\"es-PE\", {\r\n hour: \"numeric\",\r\n minute: \"2-digit\",\r\n hour12: true\r\n }).toUpperCase();\r\n\r\n // Remove dots from A. M. / P. M.\r\n time = time.replace(/\\./g, \"\").replace(/A\\s*M/i, \"AM\").replace(/P\\s*M/i, \"PM\");\r\n\r\n return `${dayShort} ${day}/${month} | ${time}`;\r\n}\r\n\r\n return (\r\n <div className={styles.cardContainer}>\r\n <OraculoEventLeague title={event?.group ?? ''} />\r\n <div className={styles.cardBackground} >\r\n \r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap>\r\n\r\n <Stack direction=\"column\" spacing={1} useFlexGap> \r\n \r\n <div className={styles.equipos}>\r\n <OraculoEventTeamInfo name={event.awayName} logo=\"https://stg-www.contodobet.com/static/img/landing/EventoSemana/Flamengo.png\" size=\"compact\" />\r\n <OraculoEventScore text={'vs.'} name=\"\" size=\"small\"/>\r\n <OraculoEventTeamInfo name={event.homeName} logo=\"https://stg-www.contodobet.com/static/img/landing/EventoSemana/RealMadrid.png\" size=\"compact\" />\r\n </div>\r\n\r\n <OraculoEventDate text={formatDate(event.start)} />\r\n\r\n </Stack>\r\n\r\n <Stack direction=\"column\" spacing={{ xs: 0.5, md: 1 }} useFlexGap> \r\n <OraculoGridGroup spacing={1}>\r\n {(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n <OraculoEventLabel key={index} text={item.label.toUpperCase()} />\r\n ))}\r\n </OraculoGridGroup>\r\n \r\n <div className={styles.jugadas}>\r\n <OraculoGridGroup spacing={1}>\r\n {(event?.outcome?.[0]?.outcomes ?? []).map((item, index) => (\r\n <OraculoButton key={index} variant=\"primary\" fullHeight onClick={()=>{redirectHomeWithOutcomes(item.id);}} >{(item.odds / 1000).toFixed(2)}</OraculoButton>\r\n ))}\r\n </OraculoGridGroup>\r\n </div>\r\n </Stack>\r\n </Stack>\r\n </div>\r\n </div>\r\n \r\n );\r\n}","import { useRef, useState } 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 React from \"react\";\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 handlePrev = () => {\r\n carouselRef.current?.prev();\r\n };\r\n\r\n const handleNext = () => {\r\n carouselRef.current?.next();\r\n console.log(\"items: \", items);\r\n };\r\n\r\n const handleViewMore = () => {\r\n // onViewMore?.();\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\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}\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 </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 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: 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","import { OraculoGameItem } from \"../interfaces/oraculo/InterfaceGameItem\";\r\n\r\nexport type OlimpoGameBasePath = \"/casino\" | \"/juegos-virtuales\" | \"/casino-en-vivo\";\r\n\r\ntype RedirectOptions = {\r\n basePath?: OlimpoGameBasePath; // default: \"/casino\"\r\n src?: string; // tracking opcional\r\n demo?: boolean; // opcional: &demo=1\r\n host?: string; // default: https://www.olimpo.bet\r\n};\r\n\r\nexport function redirectToGame(\r\n game: OraculoGameItem,\r\n {\r\n basePath = \"/casino\",\r\n src,\r\n demo = false,\r\n host = \"https://www.olimpo.bet\",\r\n }: RedirectOptions = {}\r\n) {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const machine = game?.machine;\r\n if (!machine) return;\r\n\r\n const params = new URLSearchParams();\r\n params.set(\"machine\", String(machine));\r\n if (demo) params.set(\"demo\", \"1\");\r\n\r\n window.location.href = `${host}${basePath}?${params.toString()}`;\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 { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { redirectToGame } from \"../../utils/redirectToGame\";\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 // si no viene orden, usamos el índice (1-based)\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\r\n const top6 = isLoading ? Array.from({ length: 6 }) : normalizedItems.slice(0, 6);\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 ? \"\" : `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 if (onCardClick) onCardClick(juego);\r\n else redirectToGame(juego, { basePath: \"/casino\"});\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 { redirectToGame } from \"../../utils/redirectToGame\";\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) =>\r\n 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 onCardClick,\r\n onViewMore,\r\n className,\r\n}) => {\r\n console.log(\"items: \", items);\r\n \r\n return (\r\n <Box\r\n className={className}\r\n sx={{\r\n position: \"relative\",\r\n // width: \"100vw\",\r\n // left: \"50%\",\r\n // right: \"50%\",\r\n // transform: \"translateX(-50%)\",\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={() => \r\n onViewMore?.() || \r\n (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.logo ?? \"\"}`}\r\n provider={juego.provider}\r\n providerName={juego.web_name}\r\n machine={juego.machine}\r\n onClick={() => {\r\n // if (onCardClick) {\r\n // onCardClick(juego, idx); // usa handler del host\r\n // } else {\r\n redirectToGame(juego, { basePath: \"/casino-en-vivo\" });\r\n // }\r\n }}\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={() => \r\n onViewMore?.() || \r\n (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, { 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, {\r\n OraculoCarouselRef,\r\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, {\r\n OraculoGameSlideItem,\r\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionCasinoProps } from \"../../interfaces/oraculo/InterfaceCasino\";\r\nimport { redirectToGame } from \"../../utils/redirectToGame\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\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) =>\r\n 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 // 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({\r\n id: \"mosaic-0\",\r\n kind: \"mosaic\",\r\n items: baseItems.slice(0, take),\r\n });\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({\r\n id: `grid-${start}`,\r\n kind: \"grid\",\r\n items: baseItems.slice(start, end),\r\n });\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 slides = buildCasinoSlides(items, mosaicFirst, gridSize);\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 // onViewMore?.();\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\r\n if (mosaicFirst) {\r\n slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n }\r\n\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n\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 tipo GridGroup 1fr auto auto */}\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\r\n title={title}\r\n iconUrl={iconUrl}\r\n size=\"md\"\r\n />\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n justifyContent: \"flex-end\",\r\n }}\r\n >\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=\"0px\"\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 const game = items.find((g, idx) =>\r\n getGameId(g, idx) === itm.id\r\n );\r\n\r\n if (isLoading) return;\r\n if (!game) return;\r\n\r\n // if (onItemClick) {\r\n // onItemClick(game);\r\n // } else {\r\n // redirectToGameFromItem(game);\r\n redirectToGame(game, { basePath: \"/casino\" });\r\n // }\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, { 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, {\r\n OraculoCarouselRef,\r\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoGameSlide, {\r\n OraculoGameSlideItem,\r\n} from \"../../molecules/OraculoGameSlide/OraculoGameSlide\";\r\nimport { OraculoGameItem } from \"../../interfaces/oraculo/InterfaceGameItem\";\r\nimport { OraculoSeccionVirtualesProps } from \"../../interfaces/oraculo/InterfaceVirtuales\";\r\nimport { redirectToGame } from \"../../utils/redirectToGame\";\r\n\r\ntype SlideKind = \"mosaic\" | \"grid\";\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) =>\r\n 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 // 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({\r\n id: \"mosaic-0\",\r\n kind: \"mosaic\",\r\n items: baseItems.slice(0, take),\r\n });\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({\r\n id: `grid-${start}`,\r\n kind: \"grid\",\r\n items: baseItems.slice(start, end),\r\n });\r\n start = end;\r\n }\r\n\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 slides = buildVirtualSlides(items, mosaicFirst, gridSize);\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 // onViewMore?.();\r\n window.location.href = \"https://www.olimpo.bet/juegos-virtuales\";\r\n };\r\n\r\n const buildLoadingVirtualSlides = (\r\n mosaicFirst = true,\r\n gridSize = 4\r\n ): 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\r\n if (mosaicFirst) {\r\n slides.push({ id: \"mosaic-loading\", kind: \"mosaic\", items: mkItems(5) });\r\n }\r\n\r\n slides.push({ id: \"grid-loading\", kind: \"grid\", items: mkItems(gridSize) });\r\n\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 ? 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 (equivalente a tu GridGroup 1fr auto auto) */}\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\r\n title={title}\r\n iconUrl={iconUrl}\r\n size=\"md\"\r\n />\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n gap: 1,\r\n justifyContent: \"flex-end\",\r\n }}\r\n >\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 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 const game = items.find((g, idx) =>\r\n getGameId(g, idx) === itm.id\r\n );\r\n if (isLoading) return;\r\n if (!game) return;\r\n\r\n // if (onItemClick) {\r\n // onItemClick(game);\r\n // } else {\r\n redirectToGame(game, { basePath: \"/casino\" });\r\n // }\r\n }}\r\n />\r\n </div>\r\n )}\r\n onMove={({ isStart, isEnd }) =>\r\n setNavState({ isStart, isEnd })\r\n }\r\n />\r\n </Stack>\r\n </section>\r\n );\r\n};\r\n\r\nexport default OraculoSeccionVirtuales;\r\n","import React, { useRef, useState, useMemo } 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\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [activeIndex, setActiveIndex] = useState(0);\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 renderSlide = (it: OraculoBonosItem, desktop: boolean) => {\r\n const hl1 = it.headline ?? headline;\r\n const hl2 = it.headline2 ?? headline2;\r\n\r\n // --- MOBILE: MISMO CONCEPTO (headline arriba + card abajo centrado) ---\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\r\n {...it}\r\n onButtonClick={it.onButtonClick}\r\n variant=\"small\"\r\n />\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // --- DESKTOP: TU MISMO GRID (260px + banner centrado) ---\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\r\n {...it}\r\n onButtonClick={it.onButtonClick}\r\n variant=\"large\"\r\n />\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 <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={1}\r\n gap={\"0px\"}\r\n options={{ autoWidth: false }}\r\n renderItem={(it) => (\r\n <Box sx={{ width: \"100%\" }}>\r\n {renderSlide(it, !isMobile)}\r\n </Box>\r\n )}\r\n onMove={({ index }) => {\r\n setActiveIndex(index);\r\n }}\r\n />\r\n\r\n {/* ✅ Dots centrados respecto a TODA la secció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 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 } 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 } 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([]);\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\r\n async function loadData() {\r\n try {\r\n const response = await fetch(LIVE_EVENTS_URL);\r\n const data = await response.json();\r\n setEvents(data.events); \r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n\r\nuseEffect(() => {\r\n loadData(); \r\n\r\n const interval = setInterval(() => {\r\n loadData();\r\n }, 20000); \r\n\r\n return () => clearInterval(interval);\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\r\n ?.filter((ev: any) => ev.event.sport === \"FOOTBALL\")\r\n .sort(\r\n (a: any, b: any) =>\r\n new Date(b.event.start).getTime() -\r\n new Date(a.event.start).getTime()\r\n )\r\n }\r\n perPage={undefined}\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 isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <OraculoEventEnVivoCard {...p} />\r\n </FadeItemWrapper>\r\n )\r\n }\r\n\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\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 } 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 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 } from \"../../atoms/OraculoEvent/KambiOpenBet\";\r\n\r\nexport default function OraculoSeccionEventoSemana({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n \r\n const 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 const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [events, setEvents] = useState<any[]>([]);\r\n\r\n function sortEvents(evs: any[]) {\r\n return [...evs].sort(\r\n (a, b) => new Date(a.start).getTime() - new Date(b.start).getTime()\r\n );\r\n }\r\n\r\n function filterEventsWithinOneWeek(events: any[]) {\r\n const now = new Date();\r\n const oneWeekLater = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); // 7 days\r\n\r\n return events.filter((event: any) => {\r\n if (!event.start) return false;\r\n\r\n const eventDate = new Date(event.start);\r\n return eventDate >= now && eventDate <= oneWeekLater;\r\n });\r\n }\r\n\r\n const handleViewMore = () => {\r\n verMasSeccionSemana();\r\n };\r\n\r\n async function loadDataWeekEvent() {\r\n try {\r\n const response = await fetch(WEEK_EVENTS_URL);\r\n const data = await response.json();\r\n const football = data.group.groups.find(\r\n (g : any) => g.englishName === \"Football\"\r\n );\r\n\r\n if (!football || !Array.isArray(football.groups)) {\r\n console.error(\"Football groups not found\");\r\n return;\r\n }\r\n\r\n const N = 5; \r\n\r\n const firstGroups = football.groups.slice(0, N);\r\n\r\n\r\n const buildUrls = (group : any) => {\r\n const base = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football\";\r\n\r\n if (group.groups && group.groups.length > 0) {\r\n const sub = group.groups[0]; // ONLY FIRST child\r\n return [\r\n `${base}/${group.termKey}/${sub.termKey}/all/matches.json?channel_id=1&channel_id=1&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true`\r\n ];\r\n }\r\n\r\n return [\r\n `${base}/${group.termKey}/all/all/matches.json?channel_id=1&channel_id=1&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true`\r\n ];\r\n };\r\n\r\n const urls = firstGroups.flatMap(buildUrls);\r\n\r\n loadAllGroupEvents(urls)\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\n async function loadAllGroupEvents(urls : any) {\r\n try {\r\n const responses = await Promise.all(\r\n urls.map((url: any) => fetch(url).then(res => res.json()))\r\n );\r\n\r\n let allEvents : any = [];\r\n let allBetOffers : any = [];\r\n\r\n responses.forEach(data => {\r\n if (!data.events) return;\r\n\r\n allEvents.push(...data.events.map((item: any) => item.event));\r\n allBetOffers.push(...data.events.flatMap((item:any) => item.betOffers || []));\r\n });\r\n\r\n // Final merged list\r\n const merged = mergeEventOffersOutcome(allEvents, allBetOffers);\r\n\r\n setEvents(sortEvents(filterEventsWithinOneWeek(merged)));\r\n\r\n } catch (error) {\r\n console.error(\"Error loading events:\", error);\r\n }\r\n}\r\n\r\n function mergeEventOffersOutcome(eventos : any, apuestas : any) {\r\n const filtered = apuestas.filter((b:any) => b.betOfferType?.id === 2);\r\n\r\n const apuestasByEvent = filtered.reduce((acc : any, b : any) => {\r\n if (!acc[b.eventId]) acc[b.eventId] = [];\r\n acc[b.eventId].push(b);\r\n return acc;\r\n }, {});\r\n\r\n return eventos\r\n .filter((evento : any) => apuestasByEvent[evento.id]) \r\n .map((evento: any) => ({\r\n ...evento,\r\n outcome: apuestasByEvent[evento.id],\r\n }));\r\n }\r\n\r\n useEffect(() => {\r\n if (items ) {\r\n loadDataWeekEvent();\r\n }\r\n}, [items]);\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 width: \"100%\",\r\n boxSizing: \"border-box\"}}>\r\n <div className={styles.wrapper}>\r\n\r\n <div className={styles.container}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n <OraculoSectionTitle title=\"Eventos de la semana\" />\r\n <div className={styles.buttonWrapper}>\r\n <OraculoButton variant=\"secondary\" size=\"lg\" fullWidth onClick={() => {handleViewMore() }} >Ver más</OraculoButton>\r\n </div>\r\n </Stack>\r\n </div>\r\n\r\n <div style={{ minWidth: '180px' }}>\r\n\r\n \r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={\r\n isLoading\r\n ? Array(6).fill({}) // show 4 skeleton slides\r\n : events\r\n }\r\n perPage={3.5}\r\n gap=\"16px\"\r\n options={{ autoWidth: true, trimSpace: true }}\r\n breakpoints={{\r\n \r\n 1024:{ perPage: 1.4, gap: \"8px\", focus: \"center\", padding: { left: \"8px\", right: \"8px\" }, }, \r\n }}\r\n renderItem={(p) =>\r\n isLoading ? (\r\n <FadeItemWrapper>\r\n <OraculoEventSemanaCardSkeleton />\r\n </FadeItemWrapper>\r\n ) : (\r\n <FadeItemWrapper>\r\n <OraculoEventSemanaCard event ={p} />\r\n </FadeItemWrapper>\r\n )\r\n }\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport OraculoCarousel 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\r\n const totalDots = backgrounds?.length || 1;\r\n\r\n return (\r\n <Box\r\n component=\"section\"\r\n sx={{\r\n position: \"relative\",\r\n // width: \"100vw\",\r\n // left: \"50%\",\r\n // right: \"50%\",\r\n // transform: \"translateX(-50%)\",\r\n\r\n overflow: \"visible\",\r\n // pb: { xs: 7, sm: 8 },\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 items={backgrounds}\r\n perPage={0}\r\n gap=\"0px\"\r\n options={{\r\n type: \"loop\",\r\n pagination: false,\r\n arrows: false,\r\n drag: true,\r\n focus: \"center\",\r\n // left: 0,\r\n // right: 0,\r\n }}\r\n onMove={({ index }) => setActiveDot(index)}\r\n renderItem={(bg) => (\r\n <Box\r\n sx={{\r\n position: \"relative\",\r\n height: { xs: 300, sm: 360, md: 420 },\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\r\n srcSet={bg.desktopSrc}\r\n media=\"(min-width:800px)\"\r\n />\r\n <source\r\n srcSet={bg.mobileSrc}\r\n media=\"(max-width:799px)\"\r\n />\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\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: 0, sm: 12 },\r\n\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\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 return;\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 rows?: LogoType[][];\r\n};\r\n\r\nconst DEFAULT_ROWS: LogoType[][] = [\r\n [\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 ],\r\n [\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\n\r\nexport default function OraculoSeccionMediosPago({\r\n title = \"Medios de pago\",\r\n rows = DEFAULT_ROWS,\r\n}: Props) {\r\n // aplanado para la grilla\r\n const flat = rows.flat();\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 {/* underbar con gradiente, sin CSS */}\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 {/* móvil: usa tus filas originales */}\r\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\r\n {rows.map((r, i) => (\r\n <Stack\r\n key={i}\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n gap={2.5} // ~20px\r\n flexWrap=\"wrap\"\r\n >\r\n {r.map((l) => (\r\n <OraculoLogoMediosPago key={`${l.src}-${l.alt}`} {...l} />\r\n ))}\r\n </Stack>\r\n ))}\r\n </Box>\r\n\r\n {/* desktop: grilla auto-fit */}\r\n <Box\r\n sx={{\r\n mt: 3,\r\n display: { xs: \"none\", md: \"grid\" },\r\n gap: { xs: 2.5, md: 2.75 },\r\n justifyItems: \"center\",\r\n alignItems: \"center\",\r\n gridTemplateColumns: { md: \"repeat(auto-fit, 160px)\"},\r\n justifyContent: { md: \"center\" },\r\n }}\r\n >\r\n {flat.map((l) => (\r\n <OraculoLogoMediosPago key={`${l.src}-${l.alt}`} {...l} />\r\n ))}\r\n </Box>\r\n\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\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\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 // Optional custom loader component while fetching data\r\n loader?: React.ComponentType<any>;\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 loader: Loader,\r\n}) => {\r\n const [sections, setSections] = useState<OraculoPageLandingPreviewSection[]>(\r\n []\r\n );\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 \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 // 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}>\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","_","i","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","OraculoEventTeamInfo","logo","Splide","SplideRaw","SplideSlide","SplideSlideRaw","OraculoCarousel","forwardRef","items","renderItem","perPage","breakpoints","options","onMove","useIndexAsKey","ref","splideRef","useRef","useImperativeHandle","_a","index","handleMove","useCallback","splide","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","Skeleton","OraculoLiveCasinoCard","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","OraculoEventCombinadosCard","event","processOutcome","apuestas","homeName","awayName","a","best","line","_e","acc","o","eventOutcomes","Stack","b","OraculoButtonBet","OraculoEventEnVivoCard","liveData","betOffers","selectedOffer","offer","OraculoEventHeader","_f","_g","_h","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","useState","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","url","sectionClassName","ChevronLeftRounded","ChevronRightRounded","redirectToGame","game","basePath","demo","host","params","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","isLoading","top6","juego","getGameId","g","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","OraculoSeccionCasino","onItemClick","buildLoadingSlides","mkItems","n","slide","itm","buildVirtualSlides","OraculoSeccionVirtuales","buildLoadingVirtualSlides","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","isMobile","useMediaQuery","showDots","activeIndex","setActiveIndex","activeSlide","sectionSx","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","id","row","requiredOutcomeIds","allIds","useEffect","p","OraculoEventCombinadasCard","OraculoEventEnVivoCardSkeleton","FadeItemWrapper","OraculoSeccionEventoEnVivo","LIVE_EVENTS_URL","loadData","interval","ev","OraculoEventSemanaCardSkeleton","OraculoSeccionEventoSemana","WEEK_EVENTS_URL","sortEvents","evs","filterEventsWithinOneWeek","now","oneWeekLater","eventDate","loadDataWeekEvent","football","firstGroups","buildUrls","group","base","sub","urls","loadAllGroupEvents","responses","res","allEvents","allBetOffers","merged","mergeEventOffersOutcome","error","OraculoSeccionBanners","backgrounds","activeDot","setActiveDot","totalDots","bg","DEFAULT_ROWS","OraculoSeccionMediosPago","rows","flat","l","Landing","isComponent","val","isSectionName","key","LandingComponents","HttpError","status","statusText","noMostrarSinItems","OraculoPageLandingPreview","sectionsOverride","docId","db","Loader","sections","setSections","setLoading","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","isDesktop","unsubscribe","onSnapshot","doc","snap","fetched","s","fetchSectionData","section","rawUrl","method","body","headers","u","encoded","effectiveSections","fetchedKeysRef","React","fetchables","prev","json","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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"}
|