oraculo-ui 0.1.44 → 0.1.46
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.d.ts +3 -1
- package/dist/index.es.js +1061 -959
- package/dist/index.es.js.map +1 -1
- package/dist/interfaces/oraculo/InterfaceClubOlimpo.d.ts +3 -5
- 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/molecules/OraculoEventCard/OraculoEventCombinadasCard.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCard.tsx","../src/atoms/OraculoEvent/OraculoEventDate.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCard.tsx","../src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx","../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/organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo.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\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=\"oli-font\"\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n color: \"#fff\",\r\n }}\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 style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n }}\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\r\n style={{\r\n fontWeight: 400,\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n }}\r\n >\r\n {subtitle}\r\n </span>\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 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?: boolean;\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\n const handleMove = useCallback(\r\n (splide: any) => {\r\n const index = splide.index;\r\n const total = splide.length;\r\n const currentPerPage = splide.options.perPage || 1;\r\n const isStart = index === 0;\r\n const isEnd = index >= total - currentPerPage;\r\n\r\n onMove?.({ index, isStart, isEnd, total });\r\n },\r\n [onMove]\r\n );\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 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\r\nexport default function OraculoGameRankCard({\r\n imageUrl,\r\n orden = 1,\r\n onClick,\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 >\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 <OraculoGameCard\r\n imageUrl={imageUrl}\r\n onClick={onClick}\r\n size=\"lg\"\r\n fillParent\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 OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\r\n\r\nexport interface OraculoGameSlideItem {\r\n id: string | number;\r\n imageUrl: 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\r\nconst GAP = 12; // px\r\n\r\nconst OraculoGameSlide: React.FC<OraculoGameSlideProps> = ({\r\n items,\r\n layout = \"grid\",\r\n onClick,\r\n}) => {\r\n // layout especial: 1 grande + hasta 4 pequeños\r\n if (layout === \"mosaic\") {\r\n const big = items[0];\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 <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${big.imageUrl ?? \"\"}`}\r\n size=\"lg\"\r\n fillParent\r\n onClick={() => onClick?.(big, 0)}\r\n />\r\n </Box>\r\n )}\r\n\r\n {smalls.map((it, index) => (\r\n <Box\r\n key={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 <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index + 1)}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n // layout grid 2x2\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 {items.map((it, index) => (\r\n <Box\r\n key={it.id ?? index}\r\n sx={{\r\n overflow: \"hidden\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index)}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n\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 lg: 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 lg: 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 lg: \"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, lg: 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, lg: 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, lg: 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 {imgSrcDesktopLogo && (\r\n <div className=\"orc-co-logo\">\r\n <img\r\n src={imgSrcDesktopLogo}\r\n alt={`${imgAlt} logo`}\r\n className=\"orc-co-logoImg\"\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"orc-co-desktopContent\">\r\n <p className=\"orc-co-captionDesktop\">{text}</p>\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </div>\r\n\r\n {/* MOBILE: barra inferior */}\r\n <div className=\"orc-co-bottom\">\r\n <p className=\"orc-co-caption\">{text}</p>\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default OraculoClubOlimpoVisual;\r\n","import 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\n\r\nexport default function OraculoEventCombinadosCard({event}: CombinadoEventProps) {\r\n\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 };\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 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 src=\"/assets/img/home/Combinadas/line.png\" />\r\n\r\n <Stack direction=\"column\" spacing={0.5} useFlexGap>\r\n {eventOutcomes['outcomes'].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={() => console.log(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 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 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 OraculoEventHeader from \"../../atoms/OraculoEvent/OraculoEventHeader\";\r\nimport Stack from '@mui/material/Stack';\r\n\r\nimport { EnVivoEventProps, Outcome } from \"../../interfaces/oraculo/InterfaceKambi\";\r\n\r\nexport default function OraculoEventEnVivoCard({ event, liveData , betOffers ,fondo = \"/assets/img/home/EnVivo/fondo.png\" } : EnVivoEventProps) {\r\n return (\r\n <div style={{\r\n backgroundImage: `url(${fondo})`,\r\n backgroundSize: \"cover\",\r\n height: '160px',\r\n width: '296px',\r\n padding: \"12px 16px\",\r\n borderRadius: \"16px\",\r\n }}>\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 ?? ''}\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=\"/assets/img/home/EnVivo/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=\"/assets/img/home/EnVivo/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 {(betOffers?.[0]?.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 {(betOffers?.[0]?.outcomes ?? []).map((item : Outcome, index : number) => (\r\n <OraculoButton key={index} variant=\"primary\" disabled={item.odds == undefined} onClick={()=>{console.log(item.id);}} >\r\n {item.odds === undefined ? \"X\" : (item.odds / 1000).toFixed(2)}\r\n </OraculoButton>\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\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 <OraculoGridGroup spacing={1} columns=\"1fr auto 1fr\">\r\n <OraculoEventTeamInfo name={event.awayName} logo=\"/assets/img/home/EventoSemana/Flamengo.png\" size=\"compact\"\r\n />\r\n <OraculoEventScore text={'vs.'} name=\"\" size=\"small\"/>\r\n <OraculoEventTeamInfo name={event.homeName} logo=\"/assets/img/home/EventoSemana/RealMadrid.png\" size=\"compact\" />\r\n </OraculoGridGroup>\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={()=>{console.log(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\r\n const handleViewMore = () => {\r\n onViewMore?.();\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={3.395}\r\n gap=\"16px\"\r\n options={{ autoWidth: false }}\r\n breakpoints={{\r\n 768: { perPage: 1.15, 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 }}\r\n >\r\n <img\r\n // src={item.image}\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 // minHeight: \"150px\",\r\n // maxHeight: \"150px\",\r\n height: \"150px\",\r\n borderRadius: 8,\r\n display: \"block\",\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 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\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\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 // si ambos tienen orden, comparamos por orden\r\n if (a.orden != null && b.orden != null) return a.orden - b.orden;\r\n // si falta alguno, caemos al orden de llegada\r\n return a._originalIndex - b._originalIndex;\r\n }),\r\n [items]\r\n );\r\n\r\n return (\r\n <section style={{ width: \"100%\" }}>\r\n <Stack direction=\"column\" spacing={2} useFlexGap>\r\n <OraculoSectionTitle title={title} iconUrl={iconUrl} size=\"md\" />\r\n\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: {\r\n xs: \"repeat(3, minmax(0, 1fr))\",\r\n md: \"repeat(6, minmax(0, 1fr))\",\r\n },\r\n gap: { xs: 1.5, md: 2 },\r\n justifyItems: \"center\",\r\n width: \"100%\",\r\n }}\r\n >\r\n {normalizedItems.slice(0, 6).map((juego) => (\r\n <OraculoGameRankCard\r\n key={juego.machine}\r\n imageUrl={`https://olimpo.bet${juego.logo ?? \"\"}`}\r\n orden={juego.orden}\r\n onClick={() => onCardClick?.(juego)}\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\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 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: título + texto + botón desktop */}\r\n <Stack spacing={3} sx={{ maxWidth: { md: 280 } }}>\r\n <Typography\r\n variant=\"h4\"\r\n sx={{\r\n fontWeight: 800,\r\n fontSize: { xs: 24, md: 40 },\r\n WebkitTextStroke: \"0.5px rgba(255, 255, 255, .5)\",\r\n textShadow:\r\n \"0 0 2px rgba(255, 255, 255, .95),\" +\r\n \"0 0 4px rgba(255, 255, 255, .6),\" +\r\n \"0 1px 0 #898989\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n\r\n <Typography\r\n sx={{\r\n fontSize: { xs: 14, md: 18 },\r\n color: \"rgba(255,255,255,0.9)\",\r\n marginX: { xs: 4, md: 0 },\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n {subtitle}\r\n </Typography>\r\n\r\n <Box sx={{ display: { xs: \"none\", md: \"block\" } }}>\r\n <OraculoButton\r\n variant=\"primary\"\r\n size=\"md\"\r\n onClick={() => onViewMore?.()}\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={juego.orden ?? 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={() => onCardClick?.(juego, idx)}\r\n />\r\n ))}\r\n </Box>\r\n\r\n {/* Botón mobile */}\r\n <Box sx={{ display: { xs: \"block\", md: \"none\" } }}>\r\n <OraculoButton\r\n variant=\"primary\"\r\n size=\"lg\"\r\n onClick={() => onViewMore?.()}\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\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\n/**\r\n * Construye los slides: 1 \"mosaic\" (1 grande + hasta 4 chicos),\r\n * y luego varios grid 2x2.\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: g.orden ?? g.machine ?? idx,\r\n imageUrl: g.logo ?? \"\",\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 };\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 onClick={(itm) => {\r\n const game = items.find(\r\n (g, idx) =>\r\n (g.orden ?? idx) === itm.id\r\n );\r\n if (game) onItemClick?.(game);\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\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\n * Mismo patrón que Casino:\r\n * - Primer slide \"mosaic\" (1 grande + hasta 4 pequeños)\r\n * - Luego varios \"grid\" 2x2\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: g.orden ?? 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 };\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 onClick={(itm) => {\r\n const game = items.find(\r\n (g, idx) =>\r\n (g.orden ?? idx) === itm.id\r\n );\r\n if (game) onItemClick?.(game);\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 } 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, {\r\n OraculoCarouselRef,\r\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoWelcomeBanner, {\r\n // OraculoWelcomeBannerProps,\r\n} from \"../../molecules/OraculoWelcomeBanner/OraculoWelcomeBanner\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport { OraculoSeccionBonoProps } from \"../../interfaces/oraculo/InterfaceBonos\";\r\n\r\nconst buildSectionSx = (bgUrl: string) => ({\r\n // width: \"100vw\",\r\n position: \"relative\" as const,\r\n // left: \"50%\",\r\n // right: \"50%\",\r\n // marginLeft: \"-50vw\",\r\n // marginRight: \"-50vw\",\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\r\n const hl1 = headline\r\n const hl2 = headline2\r\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\r\n const showDots = items.length > 1;\r\n\r\n const bgUrl =\r\n backgroundImageUrl ?? \"\";\r\n const sectionSx = buildSectionSx(bgUrl);\r\n\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n\r\n // --- MOBILE: Carrusel con dots ---\r\n if (isMobile) {\r\n return (\r\n <Box\r\n component=\"section\"\r\n sx={{\r\n ...sectionSx,\r\n textAlign: \"center\",\r\n }}\r\n >\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>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={1}\r\n gap=\"12px\"\r\n breakpoints={{\r\n 480: {\r\n perPage: 1,\r\n gap: \"8px\",\r\n padding: { left: \"8px\", right: \"8px\" },\r\n },\r\n 768: {\r\n perPage: 1,\r\n gap: \"12px\",\r\n padding: { left: \"8px\", right: \"8px\" },\r\n },\r\n }}\r\n options={{\r\n autoWidth: false,\r\n }}\r\n renderItem={(it) => <OraculoWelcomeBanner {...it} onButtonClick={items[0].onButtonClick} />}\r\n onMove={({ index, isStart, isEnd }) => {\r\n setNavState({ isStart, isEnd });\r\n setActiveIndex(index);\r\n }}\r\n />\r\n\r\n {showDots && (\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 )}\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // --- DESKTOP ---\r\n return (\r\n <Box component=\"section\" sx={sectionSx}>\r\n <Box\r\n sx={{\r\n maxWidth: 1200,\r\n mx: 5,\r\n px: 2,\r\n display: \"grid\",\r\n gridTemplateColumns: \"200px auto\",\r\n alignItems: \"center\",\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\r\n sx={{\r\n ...headlineBaseSx,\r\n textAlign: \"left\",\r\n mb: 0,\r\n }}\r\n >\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\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n flexWrap: \"nowrap\",\r\n gap: 4,\r\n }}\r\n >\r\n {items.map((it, idx) => (\r\n <OraculoWelcomeBanner\r\n key={idx}\r\n onButtonClick={it.onButtonClick}\r\n {...it}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\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 safeIndex = Math.min(Math.max(selectedIndex, 0), 1);\r\n const item = 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 imgAlt={item.imgAlt}\r\n imgSrcMobile={item.images.mobile}\r\n imgSrcDesktopBg={item.images.desktopBg}\r\n imgSrcDesktopLogo={item.images.desktopLogo}\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 { OraculoSeccionDestacadosItem, OraculoSeccionDestacadosProps } from \"../../interfaces/oraculo/InterfaceDestacados\";\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\n\r\nexport default function OraculoSeccionEventoCombinadas({\r\n items,\r\n title = \"Combinadas del Olimpo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n\r\n\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\nconst [events, setEvents] = useState([]);\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\r\n const handleViewMore = () => {\r\n onViewMore?.();\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\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 acc[a.eventId].push({\r\n ...a,\r\n outcomes: filteredOutcomes\r\n });\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n // Extract required outcomes of THIS coupon\r\n const reqs = extractRequirements(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\nasync function loadDataEventSpecial() {\r\n try {\r\n\r\n const groupId = items?.group?.groups?.[0]?.id;\r\n if (!groupId) {\r\n console.error(\"Could not extract group ID\");\r\n return;\r\n }\r\n\r\n const SPECIALS_URL = `https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/prepackcoupon/eventgroup/${groupId}.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764283566783&prePackCouponTags=CUSTOM`;\r\n\r\n const response = await fetch(SPECIALS_URL);\r\n const data = await response.json();\r\n setEvents(\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 useEffect(() => {\r\n if (items ) {\r\n loadDataEventSpecial();\r\n }\r\n}, [items]);\r\n\r\n const sectionClassName = className || undefined;\r\n\r\n return (\r\n <section className={sectionClassName} style={{ width: \"100%\" }}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto 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}\r\n perPage={3.72}\r\n gap=\"16px\"\r\n options={{ autoWidth: true }}\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 { 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 OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventEnVivoCard from \"../../molecules/OraculoEventCard/OraculoEventEnVivoCard\";\r\nimport React from \"react\";\r\n\r\nexport default function OraculoSeccionEventoEnVivo({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n console.log('wefwef', items)\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\r\n const handleViewMore = () => {\r\n onViewMore?.();\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 <OraculoGridGroup spacing={1.5} columns=\"1fr auto auto\" justify=\"start\">\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 </OraculoGridGroup>\r\n\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items?.events?.filter((ev:any) => ev.event.sport === \"FOOTBALL\").sort((a:any, b:any) => new Date(b.event.start).getTime() - new Date(a.event.start).getTime()) ?? []}\r\n perPage={3.395}\r\n gap=\"16px\"\r\n options={{ autoWidth: true }}\r\n breakpoints={{\r\n 768: { perPage: 1, gap: \"8px\", focus: \"center\", padding: { left: \"16px\", right: \"16px\" }, }, \r\n 1024: { perPage: 2.5, gap: \"10px\", padding: { right: \"16px\" } },\r\n }}\r\n renderItem={(p) => <OraculoEventEnVivoCard {...p} />}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </section>\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 styles from \"./OraculoSeccionEventoSemana.module.css\";\r\nimport Stack from '@mui/material/Stack';\r\nimport React from \"react\";\r\n\r\nexport default function OraculoSeccionEventoSemana({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n const now = new Date(); // current date/time\r\n const startTime = now.toISOString(); // now → ISO format\r\n\r\n const end = new Date(now);\r\n end.setDate(end.getDate() + 7); // add 7 days\r\n const endTime = end.toISOString();\r\n const WEEK_EVENTS_URL = `https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1763653337357&startTime=${startTime}&endTime=${endTime}&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions`\r\n\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\nconst [events, setEvents] = useState([]);\r\n\r\n const handleViewMore = () => {\r\n onViewMore?.();\r\n };\r\n\r\n async function loadDataWeekEvent() {\r\n try {\r\n const eventIds = items.events.map((event: any) => event.event?.id);\r\n const idsQuery = eventIds.map((id:number) => `id=${id}`).join(\"&\");\r\n const baseUrl = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/betoffer/selected/combined_layout/event\";\r\n const finalUrl = `${baseUrl}/${eventIds[0]}?${idsQuery}&lang=es_PE&market=PE`;\r\n loadDataEvent(finalUrl)\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n async function loadDataEvent(url : string) {\r\n try {\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n const eventsOnly = data.events.map((item:any) => item.event);\r\n const betOffersOnly = data.events.flatMap((item:any) => item.betOffers || []);\r\n setEvents(mergeEventOffersOutcome(eventsOnly, betOffersOnly)); \r\n } catch (e) {\r\n console.error(e);\r\n }\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 && items.events.length > 0) {\r\n loadDataWeekEvent();\r\n }\r\n}, [items]);\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 <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: 0 }}>\r\n\r\n \r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={events}\r\n perPage={3.5}\r\n gap=\"16px\"\r\n options={{ autoWidth: true }}\r\n breakpoints={{\r\n 1024:{ perPage: 1.4, gap: \"8px\", focus: \"center\", padding: { left: \"8px\", right: \"8px\" }, }, \r\n }}\r\n renderItem={(p) => <OraculoEventSemanaCard event ={p} />}\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 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={1}\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 }}\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 inset: 0,\r\n background:\r\n \"linear-gradient(180deg, rgba(0,0,0,0) 60%, rgba(0,0,0,.75) 100%)\",\r\n },\r\n }}\r\n />\r\n </Box>\r\n )}\r\n />\r\n\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n left: 0,\r\n right: 0,\r\n bottom: 72,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n zIndex: 2,\r\n }}\r\n >\r\n <OraculoCarouselDots total={totalDots} active={activeDot} />\r\n </Box>\r\n </Box>\r\n\r\n {/* Dock de items */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n bottom: { xs: 36, sm: 38 },\r\n left: \"50%\",\r\n transform: \"translateX(-50%)\",\r\n width: \"90%\",\r\n backgroundColor: \"#363636\",\r\n borderRadius: 2,\r\n py: 1.5,\r\n px: 1,\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 color: \"#FFFFFF\",\r\n minWidth: 68,\r\n cursor: item.onclick ? \"pointer\" : \"default\",\r\n }}\r\n onClick={() => item.onclick?.()}\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: 28, md: 32 },\r\n height: { xs: 28, md: 32 },\r\n mb: { xs: 0.5, md: 0 },\r\n mr: { xs: 0, md: 4 },\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n )}\r\n <Typography\r\n sx={{\r\n fontSize: 12,\r\n fontWeight: 600,\r\n color: \"#E0E0E0\",\r\n textAlign: { xs: \"center\", md: \"left\" },\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 } 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\" || (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(([key, val]) => isSectionName(key) && isComponent(val))\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 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<string, React.ComponentType<Record<string, unknown>>>;\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] =\r\n useState<OraculoPageLandingPreviewSection[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [componentMap, setComponentMap] = useState<ComponentMap>({});\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 // Fetch sections from Firestore unless override provided\r\n useEffect(() => {\r\n if (sectionsOverride) return;\r\n if (!db) return; // seguridad extra por si alguien no pasa db\r\n\r\n setLoading(true);\r\n\r\n const arraydemo = [{\r\n \"apiMethod\": \"GET\",\r\n \"order\": 11,\r\n \"dataMode\": \"url\",\r\n \"componentKey\": \"OraculoSeccionEventoEnVivo\",\r\n \"id\": 11,\r\n \"title\": \"Envivo\",\r\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true\",\r\n \"visible\": true,\r\n \"apiParams\": []\r\n},{\r\n \"apiMethod\": \"GET\",\r\n \"order\": 12,\r\n \"dataMode\": \"url\",\r\n \"componentKey\": \"OraculoSeccionEventoSemana\",\r\n \"id\": 12,\r\n \"title\": \"Evento semana\",\r\n \"apiUrl\": \"https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764401676636&startTime=2025-11-29T06:00:00.000Z&endTime=2026-06-25T15:00:00.000Z&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions\",\r\n \"visible\": true,\r\n \"apiParams\": []\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 \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 const fetchSectionData = async (\r\n section: OraculoPageLandingPreviewSection\r\n ): Promise<SectionPayload> => {\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\") obj[f.name] = Number(f.value);\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 obj[f.name] = () => {\r\n if (!body) return;\r\n try {\r\n const fn = new Function(body);\r\n return fn();\r\n } catch (e) {\r\n console.error(\"Error función manual\", 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\") out[f.name] = Number(f.value);\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 out[f.name] = () => {\r\n if (!body) return;\r\n try {\r\n const fn = new Function(body);\r\n return fn();\r\n } catch (e) {\r\n console.error(\"Error función escalar manual\", 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 lazyLoadComponent = (rawKey: string) => {\r\n // import(`../organisms/${rawKey}/${rawKey}`)\r\n // .then((mod: Record<string, unknown>) => {\r\n // const ns = mod as {\r\n // default?: React.ComponentType<Record<string, unknown>>;\r\n // } & Record<string, React.ComponentType<Record<string, unknown>>>;\r\n // const C = ns.default ?? ns[rawKey];\r\n // if (C) setComponentMap((prev) => ({ ...prev, [rawKey]: C }));\r\n // })\r\n // .catch((e) => {\r\n // console.error(`Error cargando componente en OP ${rawKey}:`, e);\r\n // });\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 if(([\"OraculoSeccionEventoEnVivo\",\"OraculoSeccionEventoSemana\",\"OraculoSeccionEventoCombinadas\"]).includes(s.componentKey))\r\n {\r\n console.log(payload)\r\n return { items : payload}\r\n\r\n }\r\n let compProps: Record<string, unknown> = s.props ? { ...s.props } : {};\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 const scalars = toManualScalars(s.manualScalarFields);\r\n compProps = { ...compProps, ...scalars };\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 // primero revisamos el mapa estático\r\n const Comp =\r\n // STATIC_COMPONENTS[rawKey] || componentMap[rawKey];\r\n LandingComponents[rawKey] || componentMap[rawKey];\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\r\n return (\r\n <div\r\n key={s.id}\r\n style={{\r\n paddingLeft: 16,\r\n paddingRight: 16,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n }}\r\n >\r\n <Comp {...compProps} />\r\n </div>\r\n );\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 <div className=\"text-xs text-gray-500\">Sin secciones (Firestore)</div>;\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","OraculoEventStatusBadge","text","color","textColor","OraculoEventStatus","live","time","OraculoMatchHeader","OraculoEventLabel","styles","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","currentPerPage","isStart","isEnd","handleMounted","mergedOptions","item","OraculoGameCard","imageUrl","fillParent","dim","handleButtonClick","sizeStyles","OraculoGameRankCard","orden","sizes","getVal","k","def","_b","_d","_c","W","H","R","F","hang","OraculoLiveCasinoCard","provider","providerName","machine","Typography","GAP","OraculoGameSlide","layout","big","smalls","it","OraculoWelcomeBanner","amount","buttonText","onButtonClick","backgroundImage","symbol","value","isLarge","OraculoClubOlimpoVisual","buttonLabel","imgAlt","imgSrcMobile","imgSrcDesktopBg","imgSrcDesktopLogo","OraculoEventCombinadosCard","event","processOutcome","apuestas","homeName","awayName","outcomes","a","best","line","acc","o","eventOutcomes","Stack","OraculoEventEnVivoCard","liveData","betOffers","fondo","OraculoEventHeader","_e","_g","_f","_i","_h","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","useState","handlePrev","handleNext","handleViewMore","sectionClassName","ChevronLeftRounded","ChevronRightRounded","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","b","juego","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","idx","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","g","slides","start","take","end","OraculoSeccionCasino","onItemClick","slide","itm","game","buildVirtualSlides","OraculoSeccionVirtuales","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","hl1","hl2","isMobile","useMediaQuery","showDots","sectionSx","activeIndex","setActiveIndex","OraculoSeccionClubOlimpo","fullBleed","selectedIndex","rootRef","bottomRef","useLayoutEffect","root","bottom","update","ro","OraculoSeccionEventoCombinadas","events","setEvents","mergeEventOffers","eventos","prePackCoupons","results","coupon","usedOutcomeIds","getUsedOutcomeIds","apuestasByEvent","filteredOutcomes","reqs","extractRequirements","evento","eventOutcomeSet","combinadoTotal","r","id","row","requiredOutcomeIds","allIds","loadDataEventSpecial","groupId","SPECIALS_URL","data","useEffect","p","OraculoEventCombinadasCard","OraculoSeccionEventoEnVivo","ev","OraculoSeccionEventoSemana","now","loadDataWeekEvent","eventIds","idsQuery","finalUrl","loadDataEvent","url","eventsOnly","betOffersOnly","mergeEventOffersOutcome","OraculoSeccionBanners","backgrounds","activeDot","setActiveDot","totalDots","bg","DEFAULT_ROWS","OraculoSeccionMediosPago","rows","flat","l","Landing","isComponent","val","isSectionName","key","LandingComponents","HttpError","status","statusText","OraculoPageLandingPreview","sectionsOverride","docId","db","sections","setSections","loading","setLoading","componentMap","setComponentMap","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","unsubscribe","onSnapshot","doc","snap","fetched","s","error","fetchSectionData","section","rawUrl","method","params","body","headers","u","encoded","res","effectiveSections","fetchedKeysRef","React","fetchables","prev","json","err","message","orderedVisible","toManualArray","obj","t","toManualScalars","fields","out","f","mapPayloadToProps","payload","manual","base","merged","pl","isArr","arrData","choose","fallback","buildCompProps","hasUrl","compProps","arr","scalars","renderStatusBox","colorMap","renderSingleSection","rawKey","Comp","loadingSec","errorSec","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/molecules/OraculoEventCard/OraculoEventCombinadasCard.tsx","../src/molecules/OraculoEventCard/OraculoEventEnVivoCard.tsx","../src/atoms/OraculoEvent/OraculoEventDate.tsx","../src/molecules/OraculoEventCard/OraculoEventSemanaCard.tsx","../src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx","../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/organisms/OraculoSeccionEventoEnVivo/OraculoSeccionEventoEnVivo.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\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=\"oli-font\"\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n color: \"#fff\",\r\n }}\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 style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n }}\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\r\n style={{\r\n fontWeight: 400,\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n }}\r\n >\r\n {subtitle}\r\n </span>\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 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?: boolean;\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\n const handleMove = useCallback(\r\n (splide: any) => {\r\n const index = splide.index;\r\n const total = splide.length;\r\n const currentPerPage = splide.options.perPage || 1;\r\n const isStart = index === 0;\r\n const isEnd = index >= total - currentPerPage;\r\n\r\n onMove?.({ index, isStart, isEnd, total });\r\n },\r\n [onMove]\r\n );\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 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\r\nexport default function OraculoGameRankCard({\r\n imageUrl,\r\n orden = 1,\r\n onClick,\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 >\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 <OraculoGameCard\r\n imageUrl={imageUrl}\r\n onClick={onClick}\r\n size=\"lg\"\r\n fillParent\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 OraculoGameCard from \"../OraculoGameCard/OraculoGameCard\";\r\n\r\nexport interface OraculoGameSlideItem {\r\n id: string | number;\r\n imageUrl: 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\r\nconst GAP = 12; // px\r\n\r\nconst OraculoGameSlide: React.FC<OraculoGameSlideProps> = ({\r\n items,\r\n layout = \"grid\",\r\n onClick,\r\n}) => {\r\n // layout especial: 1 grande + hasta 4 pequeños\r\n if (layout === \"mosaic\") {\r\n const big = items[0];\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 <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${big.imageUrl ?? \"\"}`}\r\n size=\"lg\"\r\n fillParent\r\n onClick={() => onClick?.(big, 0)}\r\n />\r\n </Box>\r\n )}\r\n\r\n {smalls.map((it, index) => (\r\n <Box\r\n key={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 <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index + 1)}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n // layout grid 2x2\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 {items.map((it, index) => (\r\n <Box\r\n key={it.id ?? index}\r\n sx={{\r\n overflow: \"hidden\",\r\n borderRadius: 2,\r\n }}\r\n >\r\n <OraculoGameCard\r\n imageUrl={`https://olimpo.bet${it.imageUrl ?? \"\"}`}\r\n size=\"sm\"\r\n fillParent\r\n onClick={() => onClick?.(it, index)}\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n\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 lg: 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 lg: 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 lg: \"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, lg: 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, lg: 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, lg: 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 {imgSrcDesktopLogo && (\r\n <div className=\"orc-co-logo\">\r\n <img\r\n src={imgSrcDesktopLogo}\r\n alt={`${imgAlt} logo`}\r\n className=\"orc-co-logoImg\"\r\n />\r\n </div>\r\n )}\r\n\r\n <div className=\"orc-co-desktopContent\">\r\n <p className=\"orc-co-captionDesktop\">{text}</p>\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </div>\r\n\r\n {/* MOBILE: barra inferior */}\r\n <div className=\"orc-co-bottom\">\r\n <p className=\"orc-co-caption\">{text}</p>\r\n <OraculoButton onClick={onClick} variant=\"primary\" size=\"md\">\r\n {buttonLabel}\r\n </OraculoButton>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default OraculoClubOlimpoVisual;\r\n","import 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\n\r\nexport default function OraculoEventCombinadosCard({event}: CombinadoEventProps) {\r\n\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 };\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 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 src=\"/assets/img/home/Combinadas/line.png\" />\r\n\r\n <Stack direction=\"column\" spacing={0.5} useFlexGap>\r\n {eventOutcomes['outcomes'].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={() => console.log(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 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 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 OraculoEventHeader from \"../../atoms/OraculoEvent/OraculoEventHeader\";\r\nimport Stack from '@mui/material/Stack';\r\n\r\nimport { EnVivoEventProps, Outcome } from \"../../interfaces/oraculo/InterfaceKambi\";\r\n\r\nexport default function OraculoEventEnVivoCard({ event, liveData , betOffers ,fondo = \"/assets/img/home/EnVivo/fondo.png\" } : EnVivoEventProps) {\r\n return (\r\n <div style={{\r\n backgroundImage: `url(${fondo})`,\r\n backgroundSize: \"cover\",\r\n height: '160px',\r\n width: '296px',\r\n padding: \"12px 16px\",\r\n borderRadius: \"16px\",\r\n }}>\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 ?? ''}\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=\"/assets/img/home/EnVivo/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=\"/assets/img/home/EnVivo/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 {(betOffers?.[0]?.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 {(betOffers?.[0]?.outcomes ?? []).map((item : Outcome, index : number) => (\r\n <OraculoButton key={index} variant=\"primary\" disabled={item.odds == undefined} onClick={()=>{console.log(item.id);}} >\r\n {item.odds === undefined ? \"X\" : (item.odds / 1000).toFixed(2)}\r\n </OraculoButton>\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\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 <OraculoGridGroup spacing={1} columns=\"1fr auto 1fr\">\r\n <OraculoEventTeamInfo name={event.awayName} logo=\"/assets/img/home/EventoSemana/Flamengo.png\" size=\"compact\"\r\n />\r\n <OraculoEventScore text={'vs.'} name=\"\" size=\"small\"/>\r\n <OraculoEventTeamInfo name={event.homeName} logo=\"/assets/img/home/EventoSemana/RealMadrid.png\" size=\"compact\" />\r\n </OraculoGridGroup>\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={()=>{console.log(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 };\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={3}\r\n gap=\"16px\"\r\n options={{ autoWidth: false }}\r\n breakpoints={{\r\n 768: { perPage: 1.15, 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={item.image}\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 // minHeight: \"150px\",\r\n // maxHeight: \"150px\",\r\n height: \"150px\",\r\n borderRadius: 8,\r\n display: \"block\",\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 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\n\r\nconst redirectToGameFromItem = (game: OraculoGameItem) => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const machine_name = game.name ?? game.web_name ?? \"\";\r\n const provider = game.provider ?? \"\";\r\n const machine = game.machine ?? \"\";\r\n const external_id = game.external_id ?? \"\";\r\n const type = game.type ?? \"\";\r\n\r\n const providerCode = encodeURIComponent(String(provider));\r\n const machineCode = encodeURIComponent(String(machine));\r\n const gameName = encodeURIComponent(String(machine_name));\r\n const externalId = encodeURIComponent(String(external_id));\r\n const typeParam = encodeURIComponent(String(type));\r\n\r\n const url =\r\n `https://www.olimpo.bet/casino?${machineCode}?` +\r\n `provider=${providerCode}&` +\r\n `name=${gameName}&` +\r\n `external_id=${externalId}&` +\r\n `type=${typeParam}`;\r\n\r\n window.location.href = url;\r\n};\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\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 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 {normalizedItems.slice(0, 6).map((juego) => (\r\n <OraculoGameRankCard\r\n key={juego.machine}\r\n imageUrl={`https://olimpo.bet${juego.logo ?? \"\"}`}\r\n orden={juego.orden}\r\n onClick={() => {\r\n if (onCardClick) {\r\n onCardClick(juego);\r\n } else {\r\n redirectToGameFromItem(juego);\r\n }\r\n }}\r\n />\r\n ))}\r\n </Box>\r\n </Stack>\r\n </section>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport OraculoButton from \"../../atoms/OraculoButton/OraculoButton\";\r\nimport OraculoLiveCasinoCard from \"../../molecules/OraculoLiveCasinoCard/OraculoLiveCasinoCard\";\r\nimport { OraculoSeccionCasinoEnVivoProps } from \"../../interfaces/oraculo/InterfaceCasinoEnVivo\";\r\nimport { OraculoGameItem } from \"../..\";\r\n\r\nconst getGameId = (g: OraculoGameItem, idx: number) =>\r\n g.orden ?? g.machine ?? idx;\r\n\r\nconst redirectToGameFromItem = (game: OraculoGameItem) => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const machine_name = game.name ?? game.web_name ?? \"\";\r\n const provider = game.provider ?? \"\";\r\n const machine = game.machine ?? \"\";\r\n const external_id = game.external_id ?? \"\";\r\n const type = game.type ?? \"Live\";\r\n\r\n const providerCode = encodeURIComponent(String(provider));\r\n const machineCode = encodeURIComponent(String(machine));\r\n const gameName = encodeURIComponent(String(machine_name));\r\n const externalId = encodeURIComponent(String(external_id));\r\n const typeParam = encodeURIComponent(String(type));\r\n\r\n const url =\r\n `https://www.olimpo.bet/casino-en-vivo?${machineCode}?` +\r\n `provider=${providerCode}&` +\r\n `name=${gameName}&` +\r\n `external_id=${externalId}&` +\r\n `type=${typeParam}`;\r\n\r\n window.location.href = url;\r\n};\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 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={() => onViewMore?.()}\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 redirectToGameFromItem(juego); // fallback: redirigir\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={() => onViewMore?.()}\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\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 redirectToGameFromItem = (game: OraculoGameItem) => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const machine_name = game.name ?? \"\";\r\n const provider = game.provider ?? \"\";\r\n const machine = game.machine ?? \"\";\r\n const external_id = game.external_id ?? \"\";\r\n const type = game.type ?? \"Casino\";\r\n\r\n const providerCode = encodeURIComponent(String(provider));\r\n const machineCode = encodeURIComponent(String(machine));\r\n const gameName = encodeURIComponent(String(machine_name));\r\n const externalId = encodeURIComponent(String(external_id));\r\n const typeParam = encodeURIComponent(String(type));\r\n\r\n const url =\r\n `https://www.olimpo.bet/casino?${machineCode}?` +\r\n `provider=${providerCode}&` +\r\n `name=${gameName}&` +\r\n `external_id=${externalId}&` +\r\n `type=${typeParam}`;\r\n\r\n window.location.href = url;\r\n};\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 }));\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 };\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 onClick={(itm) => {\r\n const game = items.find((g, idx) =>\r\n getGameId(g, idx) === itm.id\r\n );\r\n\r\n if (!game) return;\r\n\r\n if (onItemClick) {\r\n onItemClick(game);\r\n } else {\r\n redirectToGameFromItem(game);\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\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 redirectToGameFromItem = (game: OraculoGameItem) => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n const machine_name = game.name ?? \"\";\r\n const provider = game.provider ?? \"\";\r\n const machine = game.machine ?? \"\";\r\n const external_id = game.external_id ?? \"\";\r\n const type = game.type ?? \"Virtuales\";\r\n\r\n const providerCode = encodeURIComponent(String(provider));\r\n const machineCode = encodeURIComponent(String(machine));\r\n const gameName = encodeURIComponent(String(machine_name));\r\n const externalId = encodeURIComponent(String(external_id));\r\n const typeParam = encodeURIComponent(String(type));\r\n\r\n const url =\r\n `https://www.olimpo.bet/juegos-virtuales?${machineCode}?` +\r\n `provider=${providerCode}&` +\r\n `name=${gameName}&` +\r\n `external_id=${externalId}&` +\r\n `type=${typeParam}`;\r\n\r\n window.location.href = url;\r\n};\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 };\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 onClick={(itm) => {\r\n const game = items.find((g, idx) =>\r\n getGameId(g, idx) === itm.id\r\n );\r\n\r\n if (!game) return;\r\n\r\n if (onItemClick) {\r\n onItemClick(game);\r\n } else {\r\n redirectToGameFromItem(game);\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 } 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, {\r\n OraculoCarouselRef,\r\n} from \"../../molecules/OraculoCarousel/OraculoCarousel\";\r\nimport OraculoWelcomeBanner, {\r\n // OraculoWelcomeBannerProps,\r\n} from \"../../molecules/OraculoWelcomeBanner/OraculoWelcomeBanner\";\r\nimport OraculoCarouselDots from \"../../atoms/OraculoCarouselDots/OraculoCarouselDots\";\r\nimport { OraculoSeccionBonoProps } from \"../../interfaces/oraculo/InterfaceBonos\";\r\n\r\nconst buildSectionSx = (bgUrl: string) => ({\r\n // width: \"100vw\",\r\n position: \"relative\" as const,\r\n // left: \"50%\",\r\n // right: \"50%\",\r\n // marginLeft: \"-50vw\",\r\n // marginRight: \"-50vw\",\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\r\n const hl1 = headline\r\n const hl2 = headline2\r\n const isMobile = useMediaQuery(\"(max-width: 767px)\");\r\n const showDots = items.length > 1;\r\n\r\n const bgUrl =\r\n backgroundImageUrl ?? \"\";\r\n const sectionSx = buildSectionSx(bgUrl);\r\n\r\n const carouselRef = useRef<OraculoCarouselRef | null>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n\r\n // --- MOBILE: Carrusel con dots ---\r\n if (isMobile) {\r\n return (\r\n <Box\r\n component=\"section\"\r\n sx={{\r\n ...sectionSx,\r\n textAlign: \"center\",\r\n }}\r\n >\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>\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items}\r\n perPage={1}\r\n gap=\"12px\"\r\n breakpoints={{\r\n 480: {\r\n perPage: 1,\r\n gap: \"8px\",\r\n padding: { left: \"8px\", right: \"8px\" },\r\n },\r\n 768: {\r\n perPage: 1,\r\n gap: \"12px\",\r\n padding: { left: \"8px\", right: \"8px\" },\r\n },\r\n }}\r\n options={{\r\n autoWidth: false,\r\n }}\r\n renderItem={(it) => <OraculoWelcomeBanner {...it} onButtonClick={items[0].onButtonClick} />}\r\n onMove={({ index, isStart, isEnd }) => {\r\n setNavState({ isStart, isEnd });\r\n setActiveIndex(index);\r\n }}\r\n />\r\n\r\n {showDots && (\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 )}\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // --- DESKTOP ---\r\n return (\r\n <Box component=\"section\" sx={sectionSx}>\r\n <Box\r\n sx={{\r\n maxWidth: 1200,\r\n mx: 5,\r\n px: 2,\r\n display: \"grid\",\r\n gridTemplateColumns: \"200px auto\",\r\n alignItems: \"center\",\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\r\n sx={{\r\n ...headlineBaseSx,\r\n textAlign: \"left\",\r\n mb: 0,\r\n }}\r\n >\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\r\n sx={{\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n flexWrap: \"nowrap\",\r\n gap: 4,\r\n }}\r\n >\r\n {items.map((it, idx) => (\r\n <OraculoWelcomeBanner\r\n key={idx}\r\n onButtonClick={it.onButtonClick}\r\n {...it}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\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 { OraculoSeccionDestacadosItem, OraculoSeccionDestacadosProps } from \"../../interfaces/oraculo/InterfaceDestacados\";\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\n\r\nexport default function OraculoSeccionEventoCombinadas({\r\n items,\r\n title = \"Combinadas del Olimpo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n\r\n\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\nconst [events, setEvents] = useState([]);\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\r\n const handleViewMore = () => {\r\n onViewMore?.();\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\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 acc[a.eventId].push({\r\n ...a,\r\n outcomes: filteredOutcomes\r\n });\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\n // Extract required outcomes of THIS coupon\r\n const reqs = extractRequirements(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\nasync function loadDataEventSpecial() {\r\n try {\r\n\r\n const groupId = items?.group?.groups?.[0]?.id;\r\n if (!groupId) {\r\n console.error(\"Could not extract group ID\");\r\n return;\r\n }\r\n\r\n const SPECIALS_URL = `https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/prepackcoupon/eventgroup/${groupId}.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764283566783&prePackCouponTags=CUSTOM`;\r\n\r\n const response = await fetch(SPECIALS_URL);\r\n const data = await response.json();\r\n setEvents(\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 useEffect(() => {\r\n if (items ) {\r\n loadDataEventSpecial();\r\n }\r\n}, [items]);\r\n\r\n const sectionClassName = className || undefined;\r\n\r\n return (\r\n <section className={sectionClassName} style={{ width: \"100%\" }}>\r\n <Stack direction=\"column\" spacing={1.5} useFlexGap>\r\n\r\n <OraculoGridGroup spacing={1.5} columns=\"1fr auto 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}\r\n perPage={3.72}\r\n gap=\"16px\"\r\n options={{ autoWidth: true }}\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 { 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 OraculoGridGroup from \"../../atoms/OraculoGridGroup/OraculoGridGroup\";\r\nimport OraculoEventEnVivoCard from \"../../molecules/OraculoEventCard/OraculoEventEnVivoCard\";\r\nimport React from \"react\";\r\n\r\nexport default function OraculoSeccionEventoEnVivo({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n console.log('wefwef', items)\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\r\n const handleViewMore = () => {\r\n onViewMore?.();\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 <OraculoGridGroup spacing={1.5} columns=\"1fr auto auto\" justify=\"start\">\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 </OraculoGridGroup>\r\n\r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={items?.events?.filter((ev:any) => ev.event.sport === \"FOOTBALL\").sort((a:any, b:any) => new Date(b.event.start).getTime() - new Date(a.event.start).getTime()) ?? []}\r\n perPage={3.395}\r\n gap=\"16px\"\r\n options={{ autoWidth: true }}\r\n breakpoints={{\r\n 768: { perPage: 1, gap: \"8px\", focus: \"center\", padding: { left: \"16px\", right: \"16px\" }, }, \r\n 1024: { perPage: 2.5, gap: \"10px\", padding: { right: \"16px\" } },\r\n }}\r\n renderItem={(p) => <OraculoEventEnVivoCard {...p} />}\r\n onMove={({ isStart, isEnd }) => setNavState({ isStart, isEnd })}\r\n />\r\n </section>\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 styles from \"./OraculoSeccionEventoSemana.module.css\";\r\nimport Stack from '@mui/material/Stack';\r\nimport React from \"react\";\r\n\r\nexport default function OraculoSeccionEventoSemana({\r\n items,\r\n title = \"En vivo\",\r\n iconUrl,\r\n onViewMore,\r\n className = \"\",\r\n}: any) {\r\n const now = new Date(); // current date/time\r\n const startTime = now.toISOString(); // now → ISO format\r\n\r\n const end = new Date(now);\r\n end.setDate(end.getDate() + 7); // add 7 days\r\n const endTime = end.toISOString();\r\n const WEEK_EVENTS_URL = `https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1763653337357&startTime=${startTime}&endTime=${endTime}&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions`\r\n\r\n const carouselRef = useRef<any>(null);\r\n const [navState, setNavState] = useState({ isStart: true, isEnd: false });\r\n\r\nconst [events, setEvents] = useState([]);\r\n\r\n const handleViewMore = () => {\r\n onViewMore?.();\r\n };\r\n\r\n async function loadDataWeekEvent() {\r\n try {\r\n const eventIds = items.events.map((event: any) => event.event?.id);\r\n const idsQuery = eventIds.map((id:number) => `id=${id}`).join(\"&\");\r\n const baseUrl = \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/betoffer/selected/combined_layout/event\";\r\n const finalUrl = `${baseUrl}/${eventIds[0]}?${idsQuery}&lang=es_PE&market=PE`;\r\n loadDataEvent(finalUrl)\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n async function loadDataEvent(url : string) {\r\n try {\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n const eventsOnly = data.events.map((item:any) => item.event);\r\n const betOffersOnly = data.events.flatMap((item:any) => item.betOffers || []);\r\n setEvents(mergeEventOffersOutcome(eventsOnly, betOffersOnly)); \r\n } catch (e) {\r\n console.error(e);\r\n }\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 && items.events.length > 0) {\r\n loadDataWeekEvent();\r\n }\r\n}, [items]);\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 <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: 0 }}>\r\n\r\n \r\n <OraculoCarousel\r\n ref={carouselRef}\r\n items={events}\r\n perPage={3.5}\r\n gap=\"16px\"\r\n options={{ autoWidth: true }}\r\n breakpoints={{\r\n 1024:{ perPage: 1.4, gap: \"8px\", focus: \"center\", padding: { left: \"8px\", right: \"8px\" }, }, \r\n }}\r\n renderItem={(p) => <OraculoEventSemanaCard event ={p} />}\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\nconst DEFAULT_BACKGROUNDS = [\r\n {\r\n desktopSrc:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoDesktop.png\",\r\n mobileSrc:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\r\n fallbackSrc:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.jpg\",\r\n },\r\n {\r\n desktopSrc:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoDesktop.png\",\r\n mobileSrc:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.png\",\r\n fallbackSrc:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/FondoMisiones.jpg\",\r\n },\r\n];\r\n\r\nconst DEFAULT_ITEMS: OraculoBannerItem[] = [\r\n {\r\n id: 1,\r\n label: \"APUESTAS\",\r\n icon:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon1.svg\",\r\n onclick: () => console.log(\"APUESTAS\"),\r\n },\r\n {\r\n id: 2,\r\n label: \"EXPLORAR\",\r\n icon:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon2.svg\",\r\n onclick: () => console.log(\"EXPLORAR\"),\r\n },\r\n {\r\n id: 3,\r\n label: \"TOP JUEGOS\",\r\n icon:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon3.svg\",\r\n onclick: () => console.log(\"TOP JUEGOS\"),\r\n },\r\n {\r\n id: 4,\r\n label: \"MISIONES\",\r\n icon:\r\n \"https://stg-www.contodobet.com/static/img/landing/Banner/icon4.svg\",\r\n onclick: () => console.log(\"MISIONES\"),\r\n },\r\n];\r\n\r\nexport default function OraculoSeccionBanners({\r\n backgrounds = DEFAULT_BACKGROUNDS,\r\n items = DEFAULT_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 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={1}\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 }}\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 inset: 0,\r\n background:\r\n \"linear-gradient(180deg, rgba(0,0,0,0) 60%, rgba(0,0,0,.75) 100%)\",\r\n },\r\n }}\r\n />\r\n </Box>\r\n )}\r\n />\r\n\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n left: 0,\r\n right: 0,\r\n bottom: 72,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n zIndex: 2,\r\n }}\r\n >\r\n <OraculoCarouselDots total={totalDots} active={activeDot} />\r\n </Box>\r\n </Box>\r\n\r\n {/* Dock de items */}\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n bottom: { xs: 36, sm: 38 },\r\n left: \"50%\",\r\n transform: \"translateX(-50%)\",\r\n width: \"90%\",\r\n backgroundColor: \"#363636\",\r\n borderRadius: 2,\r\n py: 1.5,\r\n px: 1,\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 color: \"#FFFFFF\",\r\n minWidth: 68,\r\n cursor: item.onclick ? \"pointer\" : \"default\",\r\n }}\r\n onClick={() => item.onclick?.()}\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: 28, md: 32 },\r\n height: { xs: 28, md: 32 },\r\n mb: { xs: 0.5, md: 0 },\r\n mr: { xs: 0, md: 4 },\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n )}\r\n <Typography\r\n sx={{\r\n fontSize: 12,\r\n fontWeight: 600,\r\n color: \"#E0E0E0\",\r\n textAlign: { xs: \"center\", md: \"left\" },\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 } 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 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 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 [componentMap, setComponentMap] = useState<ComponentMap>({});\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 // Fetch sections from Firestore unless override provided\r\n useEffect(() => {\r\n if (sectionsOverride) return;\r\n if (!db) return; // seguridad extra por si alguien no pasa db\r\n\r\n setLoading(true);\r\n\r\n const arraydemo = [\r\n {\r\n apiMethod: \"GET\",\r\n order: 11,\r\n dataMode: \"url\",\r\n componentKey: \"OraculoSeccionEventoEnVivo\",\r\n id: 11,\r\n title: \"Envivo\",\r\n apiUrl:\r\n \"https://us1.offering-api.kambicdn.com/offering/v2018/nexuspe/listView/football/all/all/all/in-play.json?channel_id=3&channel_id=3&client_id=200&client_id=200&competitionId=undefined&lang=es_PE&lang=es_PE&market=PE&market=PE&useCombined=true&useCombinedLive=true\",\r\n visible: true,\r\n apiParams: [],\r\n },\r\n {\r\n apiMethod: \"GET\",\r\n order: 12,\r\n dataMode: \"url\",\r\n componentKey: \"OraculoSeccionEventoSemana\",\r\n id: 12,\r\n title: \"Evento semana\",\r\n apiUrl:\r\n \"https://us1.offering-api.kambicdn.com/coupon/v2018/nexuspe/coupon/3935.json?lang=es_PE&market=PE&client_id=200&channel_id=1&ncid=1764401676636&startTime=2025-11-29T06:00:00.000Z&endTime=2026-06-25T15:00:00.000Z&minNoOfEvents=0&maxNoOfEvents=25&categoryGroup=list_view_competitions\",\r\n visible: true,\r\n apiParams: [],\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 && !componentMap[key]);\r\n\r\n if (toLoad.length === 0) return;\r\n\r\n for (const key of toLoad) {\r\n lazyLoadComponent(key);\r\n }\r\n }, [sectionsOverride, sections, componentMap]);\r\n\r\n const fetchSectionData = async (\r\n section: OraculoPageLandingPreviewSection\r\n ): Promise<SectionPayload> => {\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 lazyLoadComponent = (rawKey: string) => {\r\n import(`../organisms/${rawKey}/${rawKey}`)\r\n .then((mod: Record<string, unknown>) => {\r\n const ns = mod as {\r\n default?: React.ComponentType<Record<string, unknown>>;\r\n } & Record<string, React.ComponentType<Record<string, unknown>>>;\r\n const C = ns.default ?? ns[rawKey];\r\n if (C) setComponentMap((prev) => ({ ...prev, [rawKey]: C }));\r\n })\r\n .catch((e) => {\r\n console.error(`Error cargando componente en OP ${rawKey}:`, e);\r\n });\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 [\r\n \"OraculoSeccionEventoEnVivo\",\r\n \"OraculoSeccionEventoSemana\",\r\n \"OraculoSeccionEventoCombinadas\",\r\n ].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\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 // primero revisamos el mapa estático\r\n const Comp =\r\n // STATIC_COMPONENTS[rawKey] || componentMap[rawKey];\r\n componentMap[rawKey] || 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\r\n return (\r\n <div\r\n key={s.id}\r\n style={{\r\n paddingLeft: 16,\r\n paddingRight: 16,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n }}\r\n >\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","OraculoEventStatusBadge","text","color","textColor","OraculoEventStatus","live","time","OraculoMatchHeader","OraculoEventLabel","styles","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","currentPerPage","isStart","isEnd","handleMounted","mergedOptions","item","OraculoGameCard","imageUrl","fillParent","dim","handleButtonClick","sizeStyles","OraculoGameRankCard","orden","sizes","getVal","k","def","_b","_d","_c","W","H","R","F","hang","OraculoLiveCasinoCard","provider","providerName","machine","Typography","GAP","OraculoGameSlide","layout","big","smalls","it","OraculoWelcomeBanner","amount","buttonText","onButtonClick","backgroundImage","symbol","value","isLarge","OraculoClubOlimpoVisual","buttonLabel","imgAlt","imgSrcMobile","imgSrcDesktopBg","imgSrcDesktopLogo","OraculoEventCombinadosCard","event","processOutcome","apuestas","homeName","awayName","outcomes","a","best","line","acc","o","eventOutcomes","Stack","OraculoEventEnVivoCard","liveData","betOffers","fondo","OraculoEventHeader","_e","_g","_f","_i","_h","OraculoEventDate","OraculoEventSemanaCard","formatDate","dateString","date","dayShort","day","month","OraculoSeccionDestacados","onViewMore","carouselRef","navState","setNavState","useState","handlePrev","handleNext","handleViewMore","redirectToPromotion","promotion","url","sectionClassName","ChevronLeftRounded","ChevronRightRounded","redirectToGameFromItem","game","machine_name","external_id","providerCode","machineCode","gameName","externalId","typeParam","OraculoSeccionTopJuegos","onCardClick","normalizedItems","useMemo","b","juego","getGameId","g","idx","OraculoSeccionCasinoEnVivo","backgroundMobileUrl","backgroundDesktopUrl","buildCasinoSlides","games","mosaicFirst","gridSize","baseItems","slides","start","take","end","OraculoSeccionCasino","onItemClick","slide","itm","buildVirtualSlides","OraculoSeccionVirtuales","buildSectionSx","bgUrl","headlineBaseSx","hlTopSx","hlBottomSx","OraculoSeccionBonoBienvenida","headline","headline2","backgroundImageUrl","hl1","hl2","isMobile","useMediaQuery","showDots","sectionSx","activeIndex","setActiveIndex","OraculoSeccionClubOlimpo","fullBleed","selectedIndex","rootRef","bottomRef","useLayoutEffect","root","bottom","update","ro","OraculoSeccionEventoCombinadas","events","setEvents","mergeEventOffers","eventos","prePackCoupons","results","coupon","usedOutcomeIds","getUsedOutcomeIds","apuestasByEvent","filteredOutcomes","reqs","extractRequirements","evento","eventOutcomeSet","combinadoTotal","r","id","row","requiredOutcomeIds","allIds","loadDataEventSpecial","groupId","SPECIALS_URL","data","useEffect","p","OraculoEventCombinadasCard","OraculoSeccionEventoEnVivo","ev","OraculoSeccionEventoSemana","now","loadDataWeekEvent","eventIds","idsQuery","finalUrl","loadDataEvent","eventsOnly","betOffersOnly","mergeEventOffersOutcome","DEFAULT_BACKGROUNDS","DEFAULT_ITEMS","OraculoSeccionBanners","backgrounds","activeDot","setActiveDot","totalDots","bg","DEFAULT_ROWS","OraculoSeccionMediosPago","rows","flat","l","Landing","isComponent","val","isSectionName","key","LandingComponents","HttpError","status","statusText","OraculoPageLandingPreview","sectionsOverride","docId","db","sections","setSections","loading","setLoading","componentMap","setComponentMap","sectionDataMap","setSectionDataMap","sectionLoadingMap","setSectionLoadingMap","sectionErrorMap","setSectionErrorMap","unsubscribe","onSnapshot","doc","snap","fetched","s","error","toLoad","lazyLoadComponent","fetchSectionData","section","rawUrl","method","params","body","headers","u","encoded","res","effectiveSections","fetchedKeysRef","React","fetchables","prev","json","err","message","orderedVisible","toManualArray","obj","f","t","num","fn","toManualScalars","fields","out","mapPayloadToProps","payload","manual","base","merged","pl","isArr","arrData","choose","fallback","rawKey","mod","ns","C","buildCompProps","hasUrl","compProps","scalars","arr","renderStatusBox","colorMap","renderSingleSection","Comp","loadingSec","errorSec","Container"],"mappings":"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"}
|