oraculo-ui 0.1.10 → 0.1.12

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.
Files changed (59) hide show
  1. package/dist/OraculoSeccionBonoBienvenida-4ZHLRFV2.css +221 -0
  2. package/dist/OraculoSeccionBonoBienvenida-4ZHLRFV2.css.map +1 -0
  3. package/dist/OraculoSeccionBonoBienvenida-6L54EBL3.mjs +9 -0
  4. package/dist/OraculoSeccionBonoBienvenida-6L54EBL3.mjs.map +1 -0
  5. package/dist/OraculoSeccionCasino-CPSKAAFH.css +398 -0
  6. package/dist/OraculoSeccionCasino-CPSKAAFH.css.map +1 -0
  7. package/dist/OraculoSeccionCasino-FHD2WBDU.mjs +13 -0
  8. package/dist/OraculoSeccionCasino-FHD2WBDU.mjs.map +1 -0
  9. package/dist/{OraculoSeccionCasino-WBPCNYC5.mjs → OraculoSeccionCasino-ORWFZCMV.mjs} +1 -1
  10. package/dist/OraculoSeccionCasinoEnVivo-7W64K4YQ.css +157 -0
  11. package/dist/OraculoSeccionCasinoEnVivo-7W64K4YQ.css.map +1 -0
  12. package/dist/OraculoSeccionCasinoEnVivo-EPVIACRV.mjs +9 -0
  13. package/dist/OraculoSeccionCasinoEnVivo-EPVIACRV.mjs.map +1 -0
  14. package/dist/OraculoSeccionClubOlimpo-63QCT4A2.mjs +10 -0
  15. package/dist/OraculoSeccionClubOlimpo-63QCT4A2.mjs.map +1 -0
  16. package/dist/OraculoSeccionClubOlimpo-BLUJXLUC.mjs +8 -0
  17. package/dist/OraculoSeccionClubOlimpo-BLUJXLUC.mjs.map +1 -0
  18. package/dist/OraculoSeccionClubOlimpo-F2AFK4G3.css +274 -0
  19. package/dist/OraculoSeccionClubOlimpo-F2AFK4G3.css.map +1 -0
  20. package/dist/OraculoSeccionClubOlimpo-ZCBMTUL3.css +117 -0
  21. package/dist/OraculoSeccionClubOlimpo-ZCBMTUL3.css.map +1 -0
  22. package/dist/OraculoSeccionDestacados-5RFVEBFL.mjs +13 -0
  23. package/dist/OraculoSeccionDestacados-5RFVEBFL.mjs.map +1 -0
  24. package/dist/{OraculoSeccionDestacados-IMREYQ6W.mjs → OraculoSeccionDestacados-6D4LKX4H.mjs} +1 -1
  25. package/dist/OraculoSeccionDestacados-AMMYUK67.css +398 -0
  26. package/dist/OraculoSeccionDestacados-AMMYUK67.css.map +1 -0
  27. package/dist/OraculoSeccionTopJuegos-K6CHEKEP.mjs +13 -0
  28. package/dist/OraculoSeccionTopJuegos-K6CHEKEP.mjs.map +1 -0
  29. package/dist/{OraculoSeccionTopJuegos-DWEO36ND.mjs → OraculoSeccionTopJuegos-LEFQWP7T.mjs} +1 -1
  30. package/dist/OraculoSeccionTopJuegos-XBGNNR6G.css +398 -0
  31. package/dist/OraculoSeccionTopJuegos-XBGNNR6G.css.map +1 -0
  32. package/dist/{OraculoSeccionVirtuales-IBYOMEJV.mjs → OraculoSeccionVirtuales-FKHGLEVT.mjs} +1 -1
  33. package/dist/OraculoSeccionVirtuales-NEIWD2BT.mjs +13 -0
  34. package/dist/OraculoSeccionVirtuales-NEIWD2BT.mjs.map +1 -0
  35. package/dist/OraculoSeccionVirtuales-SSM6EDST.css +398 -0
  36. package/dist/OraculoSeccionVirtuales-SSM6EDST.css.map +1 -0
  37. package/dist/chunk-FIOWVLJP.mjs +7 -0
  38. package/dist/chunk-FIOWVLJP.mjs.map +1 -0
  39. package/dist/{chunk-VYYKDD5L.mjs → chunk-FROEVP3X.mjs} +313 -1115
  40. package/dist/chunk-IGAIIVJZ.mjs +74 -0
  41. package/dist/chunk-IGAIIVJZ.mjs.map +1 -0
  42. package/dist/chunk-MC4XEBI3.mjs +1277 -0
  43. package/dist/chunk-MC4XEBI3.mjs.map +1 -0
  44. package/dist/chunk-PYHDJZX3.mjs +476 -0
  45. package/dist/chunk-PYHDJZX3.mjs.map +1 -0
  46. package/dist/chunk-THUJNRMX.mjs +119 -0
  47. package/dist/chunk-THUJNRMX.mjs.map +1 -0
  48. package/dist/chunk-WTK2IT5O.mjs +250 -0
  49. package/dist/chunk-WTK2IT5O.mjs.map +1 -0
  50. package/dist/chunk-XNMUIY72.mjs +10 -0
  51. package/dist/chunk-XNMUIY72.mjs.map +1 -0
  52. package/dist/index.css.map +1 -0
  53. package/dist/index.d.mts +3 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.js +299 -1061
  56. package/dist/index.js.map +1 -0
  57. package/dist/index.mjs +1 -1
  58. package/dist/index.mjs.map +1 -0
  59. package/package.json +1 -1
@@ -0,0 +1,1277 @@
1
+ import {
2
+ OraculoSeccionClubOlimpo_default
3
+ } from "./chunk-THUJNRMX.mjs";
4
+ import {
5
+ OraculoSeccionCasinoEnVivo_default
6
+ } from "./chunk-WTK2IT5O.mjs";
7
+ import {
8
+ OraculoCarousel_default,
9
+ OraculoSeccionBonoBienvenida_default
10
+ } from "./chunk-PYHDJZX3.mjs";
11
+ import {
12
+ OraculoButton
13
+ } from "./chunk-IGAIIVJZ.mjs";
14
+ import {
15
+ __glob
16
+ } from "./chunk-XNMUIY72.mjs";
17
+
18
+ // src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx
19
+ import { useRef as useRef3, useState as useState4 } from "react";
20
+
21
+ // ../node_modules/@mui/icons-material/esm/utils/createSvgIcon.js
22
+ import { createSvgIcon } from "@mui/material/utils";
23
+
24
+ // ../node_modules/@mui/icons-material/esm/ChevronLeftRounded.js
25
+ import { jsx as _jsx } from "react/jsx-runtime";
26
+ var ChevronLeftRounded_default = createSvgIcon(/* @__PURE__ */ _jsx("path", {
27
+ d: "M14.71 6.71a.996.996 0 0 0-1.41 0L8.71 11.3c-.39.39-.39 1.02 0 1.41l4.59 4.59c.39.39 1.02.39 1.41 0s.39-1.02 0-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41"
28
+ }), "ChevronLeftRounded");
29
+
30
+ // ../node_modules/@mui/icons-material/esm/ChevronRightRounded.js
31
+ import { jsx as _jsx2 } from "react/jsx-runtime";
32
+ var ChevronRightRounded_default = createSvgIcon(/* @__PURE__ */ _jsx2("path", {
33
+ d: "M9.29 6.71c-.39.39-.39 1.02 0 1.41L13.17 12l-3.88 3.88c-.39.39-.39 1.02 0 1.41s1.02.39 1.41 0l4.59-4.59c.39-.39.39-1.02 0-1.41L10.7 6.7c-.38-.38-1.02-.38-1.41.01"
34
+ }), "ChevronRightRounded");
35
+
36
+ // src/atoms/OraculoSectionTitle/OraculoSectionTitle.tsx
37
+ import { jsx, jsxs } from "react/jsx-runtime";
38
+ function OraculoSectionTitle({
39
+ title,
40
+ iconUrl,
41
+ size = "md",
42
+ className = ""
43
+ }) {
44
+ const sizeClass = size ? `orc-section-title--${size}` : "";
45
+ const wrapperClass = [
46
+ "orc-section-title",
47
+ sizeClass,
48
+ className
49
+ ].filter(Boolean).join(" ");
50
+ return /* @__PURE__ */ jsxs("div", { className: wrapperClass, children: [
51
+ iconUrl && /* @__PURE__ */ jsx(
52
+ "img",
53
+ {
54
+ src: iconUrl,
55
+ alt: "",
56
+ className: "orc-section-title__icon"
57
+ }
58
+ ),
59
+ /* @__PURE__ */ jsx("h2", { className: "orc-section-title__title", children: title })
60
+ ] });
61
+ }
62
+
63
+ // src/molecules/OraculoGameRankCard/OraculoGameRankCard.tsx
64
+ import Box2 from "@mui/material/Box";
65
+
66
+ // src/molecules/OraculoGameCard/OraculoGameCard.tsx
67
+ import Box from "@mui/material/Box";
68
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
69
+ var OraculoGameCard = ({
70
+ imageUrl,
71
+ onClick,
72
+ size = "sm",
73
+ fillParent = false
74
+ }) => {
75
+ const dim = size === "lg" ? { w: 280, h: 352 } : { w: 152, h: 168 };
76
+ const handleButtonClick = (e) => {
77
+ e.stopPropagation();
78
+ onClick == null ? void 0 : onClick();
79
+ };
80
+ const sizeStyles = fillParent ? { width: "100%", height: "100%" } : { width: `${dim.w}px`, height: `${dim.h}px` };
81
+ return /* @__PURE__ */ jsxs2(
82
+ Box,
83
+ {
84
+ onClick,
85
+ role: "button",
86
+ sx: {
87
+ position: "relative",
88
+ borderRadius: "12px",
89
+ overflow: "hidden",
90
+ boxSizing: "border-box",
91
+ transition: "transform .15s ease, box-shadow .15s ease",
92
+ ...sizeStyles,
93
+ "&:hover": {
94
+ transform: "translateY(-2px)",
95
+ boxShadow: 8,
96
+ cursor: "pointer"
97
+ },
98
+ "&:hover .oraculo-game-card-overlay": {
99
+ opacity: 1
100
+ },
101
+ "&:hover .oraculo-game-card-btn": {
102
+ opacity: 1,
103
+ transform: "translate(-50%, -50%) scale(1)",
104
+ pointerEvents: "auto"
105
+ }
106
+ },
107
+ children: [
108
+ /* @__PURE__ */ jsx2(
109
+ "img",
110
+ {
111
+ src: imageUrl,
112
+ alt: "Juego de casino",
113
+ loading: "lazy",
114
+ style: {
115
+ width: "100%",
116
+ height: "100%",
117
+ objectFit: "cover",
118
+ display: "block",
119
+ borderRadius: "inherit"
120
+ }
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsx2(
124
+ Box,
125
+ {
126
+ className: "oraculo-game-card-overlay",
127
+ sx: {
128
+ position: "absolute",
129
+ inset: 0,
130
+ backgroundColor: "rgba(0, 0, 0, 0.45)",
131
+ opacity: 0,
132
+ transition: "opacity .15s ease",
133
+ pointerEvents: "none",
134
+ zIndex: 1
135
+ }
136
+ }
137
+ ),
138
+ /* @__PURE__ */ jsx2(
139
+ Box,
140
+ {
141
+ className: "oraculo-game-card-btn",
142
+ sx: {
143
+ position: "absolute",
144
+ top: "50%",
145
+ left: "50%",
146
+ zIndex: 2,
147
+ transform: "translate(-50%, -50%) scale(0.95)",
148
+ opacity: 0,
149
+ transition: "opacity .15s ease, transform .15s ease",
150
+ pointerEvents: "none"
151
+ },
152
+ children: /* @__PURE__ */ jsx2(OraculoButton, { variant: "primary", size: "md", onClick: handleButtonClick, children: "JUGAR" })
153
+ }
154
+ )
155
+ ]
156
+ }
157
+ );
158
+ };
159
+ var OraculoGameCard_default = OraculoGameCard;
160
+
161
+ // src/molecules/OraculoGameRankCard/OraculoGameRankCard.tsx
162
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
163
+ function OraculoGameRankCard({
164
+ imageUrl,
165
+ orden = 1,
166
+ onClick,
167
+ sizes = {
168
+ xs: { w: 104, h: 112, r: 18, font: 48 },
169
+ md: { w: 186, h: 264, r: 22.6, font: 64 }
170
+ }
171
+ }) {
172
+ var _a, _b, _c, _d;
173
+ const getVal = (k, def) => {
174
+ var _a2, _b2, _c2, _d2;
175
+ return {
176
+ xs: (_b2 = (_a2 = sizes.xs) == null ? void 0 : _a2[k]) != null ? _b2 : def,
177
+ md: (_d2 = (_c2 = sizes.md) == null ? void 0 : _c2[k]) != null ? _d2 : def
178
+ };
179
+ };
180
+ const W = getVal("w", 186);
181
+ const H = getVal("h", 264);
182
+ const R = getVal("r", 22.6);
183
+ const F = getVal("font", 64);
184
+ const hang = {
185
+ xs: Math.round(((_b = (_a = sizes.xs) == null ? void 0 : _a.font) != null ? _b : 64) * 0.28),
186
+ md: Math.round(((_d = (_c = sizes.md) == null ? void 0 : _c.font) != null ? _d : 64) * 0.28)
187
+ };
188
+ return /* @__PURE__ */ jsxs3(
189
+ Box2,
190
+ {
191
+ sx: {
192
+ position: "relative",
193
+ width: "100%",
194
+ maxWidth: { xs: `${W.xs}px`, md: `${W.md}px` },
195
+ aspectRatio: {
196
+ xs: `${W.xs}/${H.xs}`,
197
+ md: `${W.md}/${H.md}`
198
+ },
199
+ borderRadius: { xs: `${R.xs}px`, md: `${R.md}px` },
200
+ boxSizing: "border-box",
201
+ overflow: "visible",
202
+ pb: { xs: `${hang.xs}px`, md: `${hang.md}px` }
203
+ },
204
+ children: [
205
+ /* @__PURE__ */ jsx3(
206
+ Box2,
207
+ {
208
+ sx: {
209
+ position: "absolute",
210
+ inset: 0,
211
+ borderRadius: "inherit",
212
+ overflow: "hidden"
213
+ },
214
+ children: /* @__PURE__ */ jsx3(
215
+ OraculoGameCard_default,
216
+ {
217
+ imageUrl,
218
+ onClick,
219
+ size: "lg",
220
+ fillParent: true
221
+ }
222
+ )
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsx3(
226
+ Box2,
227
+ {
228
+ component: "span",
229
+ sx: {
230
+ position: "absolute",
231
+ left: 8,
232
+ bottom: {
233
+ xs: `-${hang.xs}px`,
234
+ md: `-${hang.md}px`
235
+ },
236
+ fontFamily: "secondary",
237
+ fontSize: {
238
+ xs: `${F.xs}px`,
239
+ md: `${F.md}px`
240
+ },
241
+ lineHeight: 1,
242
+ color: "#3CC666",
243
+ WebkitTextStroke: "1px #9ee86e",
244
+ zIndex: 3,
245
+ userSelect: "none"
246
+ },
247
+ children: orden
248
+ }
249
+ )
250
+ ]
251
+ }
252
+ );
253
+ }
254
+
255
+ // src/molecules/OraculoGameSlide/OraculoGameSlide.tsx
256
+ import Box3 from "@mui/material/Box";
257
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
258
+ var GAP = 12;
259
+ var OraculoGameSlide = ({
260
+ items,
261
+ layout = "grid",
262
+ onClick
263
+ }) => {
264
+ var _a;
265
+ if (layout === "mosaic") {
266
+ const big = items[0];
267
+ const smalls = items.slice(1, 5);
268
+ return /* @__PURE__ */ jsxs4(
269
+ Box3,
270
+ {
271
+ sx: {
272
+ display: "grid",
273
+ gridTemplateRows: {
274
+ xs: `repeat(2, 112px)`,
275
+ md: `repeat(2, 168px)`
276
+ },
277
+ gridTemplateColumns: {
278
+ xs: `184px`,
279
+ md: `280px`
280
+ },
281
+ gridAutoFlow: "column",
282
+ gridAutoColumns: {
283
+ xs: `104px`,
284
+ md: `152px`
285
+ },
286
+ columnGap: `${GAP}px`,
287
+ rowGap: `${GAP}px`,
288
+ alignItems: "stretch",
289
+ justifyItems: "stretch"
290
+ },
291
+ children: [
292
+ big && /* @__PURE__ */ jsx4(
293
+ Box3,
294
+ {
295
+ sx: {
296
+ width: { xs: 184, md: 280 },
297
+ height: { xs: 234, md: 352 },
298
+ gridRow: "1 / span 2",
299
+ overflow: "hidden",
300
+ borderRadius: 2
301
+ },
302
+ children: /* @__PURE__ */ jsx4(
303
+ OraculoGameCard_default,
304
+ {
305
+ imageUrl: `https://olimpo.bet${(_a = big.imageUrl) != null ? _a : ""}`,
306
+ size: "lg",
307
+ fillParent: true,
308
+ onClick: () => onClick == null ? void 0 : onClick(big, 0)
309
+ }
310
+ )
311
+ }
312
+ ),
313
+ smalls.map((it, index) => {
314
+ var _a2;
315
+ return /* @__PURE__ */ jsx4(
316
+ Box3,
317
+ {
318
+ sx: {
319
+ width: { xs: 104, md: 152 },
320
+ height: { xs: 112, md: 168 },
321
+ overflow: "hidden",
322
+ borderRadius: 2
323
+ },
324
+ children: /* @__PURE__ */ jsx4(
325
+ OraculoGameCard_default,
326
+ {
327
+ imageUrl: `https://olimpo.bet${(_a2 = it.imageUrl) != null ? _a2 : ""}`,
328
+ size: "sm",
329
+ fillParent: true,
330
+ onClick: () => onClick == null ? void 0 : onClick(it, index + 1)
331
+ }
332
+ )
333
+ },
334
+ it.id
335
+ );
336
+ })
337
+ ]
338
+ }
339
+ );
340
+ }
341
+ return /* @__PURE__ */ jsx4(
342
+ Box3,
343
+ {
344
+ sx: {
345
+ display: "grid",
346
+ gridTemplateColumns: {
347
+ xs: `repeat(2, 104px)`,
348
+ md: `repeat(2, 152px)`
349
+ },
350
+ gridTemplateRows: {
351
+ xs: `repeat(2, 112px)`,
352
+ md: `repeat(2, 168px)`
353
+ },
354
+ gap: `${GAP}px`,
355
+ gridAutoFlow: "column"
356
+ },
357
+ children: items.map((it, index) => {
358
+ var _a2, _b;
359
+ return /* @__PURE__ */ jsx4(
360
+ Box3,
361
+ {
362
+ sx: {
363
+ overflow: "hidden",
364
+ borderRadius: 2
365
+ },
366
+ children: /* @__PURE__ */ jsx4(
367
+ OraculoGameCard_default,
368
+ {
369
+ imageUrl: `https://olimpo.bet${(_b = it.imageUrl) != null ? _b : ""}`,
370
+ size: "sm",
371
+ fillParent: true,
372
+ onClick: () => onClick == null ? void 0 : onClick(it, index)
373
+ }
374
+ )
375
+ },
376
+ (_a2 = it.id) != null ? _a2 : index
377
+ );
378
+ })
379
+ }
380
+ );
381
+ };
382
+ var OraculoGameSlide_default = OraculoGameSlide;
383
+
384
+ // src/organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos.tsx
385
+ import { useMemo } from "react";
386
+ import Stack from "@mui/material/Stack";
387
+ import Box4 from "@mui/material/Box";
388
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
389
+ function OraculoSeccionTopJuegos({
390
+ items,
391
+ title = "Top Juegos",
392
+ iconUrl,
393
+ onCardClick
394
+ }) {
395
+ const normalizedItems = useMemo(
396
+ () => items.map((item, index) => {
397
+ var _a;
398
+ return {
399
+ ...item,
400
+ // si no viene orden, usamos el índice (1-based)
401
+ orden: (_a = item.orden) != null ? _a : index + 1,
402
+ _originalIndex: index
403
+ };
404
+ }).sort((a, b) => {
405
+ if (a.orden != null && b.orden != null) return a.orden - b.orden;
406
+ return a._originalIndex - b._originalIndex;
407
+ }),
408
+ [items]
409
+ );
410
+ return /* @__PURE__ */ jsx5("section", { style: { width: "100%" }, children: /* @__PURE__ */ jsxs5(Stack, { direction: "column", spacing: 2, useFlexGap: true, children: [
411
+ /* @__PURE__ */ jsx5(OraculoSectionTitle, { title, iconUrl, size: "md" }),
412
+ /* @__PURE__ */ jsx5(
413
+ Box4,
414
+ {
415
+ sx: {
416
+ display: "grid",
417
+ gridTemplateColumns: {
418
+ xs: "repeat(3, minmax(0, 1fr))",
419
+ md: "repeat(6, minmax(0, 1fr))"
420
+ },
421
+ gap: { xs: 1.5, md: 2 },
422
+ justifyItems: "center",
423
+ width: "100%"
424
+ },
425
+ children: normalizedItems.slice(0, 6).map((juego) => {
426
+ var _a;
427
+ return /* @__PURE__ */ jsx5(
428
+ OraculoGameRankCard,
429
+ {
430
+ imageUrl: `https://olimpo.bet${(_a = juego.logo) != null ? _a : ""}`,
431
+ orden: juego.orden,
432
+ onClick: () => onCardClick == null ? void 0 : onCardClick(juego)
433
+ },
434
+ juego.machine
435
+ );
436
+ })
437
+ }
438
+ )
439
+ ] }) });
440
+ }
441
+
442
+ // src/organisms/OraculoSeccionCasino/OraculoSeccionCasino.tsx
443
+ import { useRef, useState } from "react";
444
+ import Stack2 from "@mui/material/Stack";
445
+ import Box5 from "@mui/material/Box";
446
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
447
+ var buildCasinoSlides = (games, mosaicFirst = true, gridSize = 4) => {
448
+ const baseItems = games.map((g, idx) => {
449
+ var _a, _b, _c;
450
+ return {
451
+ id: (_b = (_a = g.orden) != null ? _a : g.machine) != null ? _b : idx,
452
+ imageUrl: (_c = g.logo) != null ? _c : ""
453
+ };
454
+ });
455
+ if (!baseItems.length) return [];
456
+ const slides = [];
457
+ let start = 0;
458
+ if (mosaicFirst) {
459
+ const take = Math.min(baseItems.length, 5);
460
+ slides.push({
461
+ id: "mosaic-0",
462
+ kind: "mosaic",
463
+ items: baseItems.slice(0, take)
464
+ });
465
+ start = take;
466
+ }
467
+ while (start < baseItems.length) {
468
+ const end = Math.min(start + gridSize, baseItems.length);
469
+ slides.push({
470
+ id: `grid-${start}`,
471
+ kind: "grid",
472
+ items: baseItems.slice(start, end)
473
+ });
474
+ start = end;
475
+ }
476
+ return slides;
477
+ };
478
+ var OraculoSeccionCasino = ({
479
+ items,
480
+ title = "Casino",
481
+ iconUrl = "/assets/img/home/Casino/diamante.svg",
482
+ onItemClick,
483
+ onViewMore,
484
+ mosaicFirst = true,
485
+ gridSize = 4
486
+ }) => {
487
+ const carouselRef = useRef(null);
488
+ const [navState, setNavState] = useState({ isStart: true, isEnd: false });
489
+ const slides = buildCasinoSlides(items, mosaicFirst, gridSize);
490
+ const handlePrev = () => {
491
+ var _a;
492
+ (_a = carouselRef.current) == null ? void 0 : _a.prev();
493
+ };
494
+ const handleNext = () => {
495
+ var _a;
496
+ (_a = carouselRef.current) == null ? void 0 : _a.next();
497
+ };
498
+ const handleViewMore = () => {
499
+ onViewMore == null ? void 0 : onViewMore();
500
+ };
501
+ return /* @__PURE__ */ jsx6("section", { children: /* @__PURE__ */ jsxs6(Stack2, { direction: "column", spacing: 2, useFlexGap: true, children: [
502
+ /* @__PURE__ */ jsxs6(
503
+ Box5,
504
+ {
505
+ sx: {
506
+ display: "grid",
507
+ gridTemplateColumns: "1fr auto auto",
508
+ alignItems: "center",
509
+ columnGap: 1.5,
510
+ rowGap: 1
511
+ },
512
+ children: [
513
+ /* @__PURE__ */ jsx6(
514
+ OraculoSectionTitle,
515
+ {
516
+ title,
517
+ iconUrl,
518
+ size: "md"
519
+ }
520
+ ),
521
+ /* @__PURE__ */ jsxs6(
522
+ Box5,
523
+ {
524
+ sx: {
525
+ display: "flex",
526
+ gap: 1,
527
+ justifyContent: "flex-end"
528
+ },
529
+ children: [
530
+ /* @__PURE__ */ jsx6(
531
+ OraculoButton,
532
+ {
533
+ ariaLabel: "Anterior",
534
+ variant: "secondary",
535
+ iconOnly: true,
536
+ leftIcon: /* @__PURE__ */ jsx6(ChevronLeftRounded_default, {}),
537
+ onClick: handlePrev,
538
+ disabled: navState.isStart
539
+ }
540
+ ),
541
+ /* @__PURE__ */ jsx6(
542
+ OraculoButton,
543
+ {
544
+ ariaLabel: "Siguiente",
545
+ variant: "secondary",
546
+ iconOnly: true,
547
+ rightIcon: /* @__PURE__ */ jsx6(ChevronRightRounded_default, {}),
548
+ onClick: handleNext,
549
+ disabled: navState.isEnd
550
+ }
551
+ )
552
+ ]
553
+ }
554
+ ),
555
+ /* @__PURE__ */ jsx6(Box5, { sx: { justifySelf: "end" }, children: /* @__PURE__ */ jsx6(OraculoButton, { variant: "secondary", onClick: handleViewMore, children: "Ver m\xE1s" }) })
556
+ ]
557
+ }
558
+ ),
559
+ /* @__PURE__ */ jsx6(
560
+ OraculoCarousel_default,
561
+ {
562
+ ref: carouselRef,
563
+ items: slides,
564
+ perPage: 1,
565
+ gap: "0px",
566
+ options: {
567
+ autoWidth: true,
568
+ gap: "12px",
569
+ trimSpace: false,
570
+ pagination: false,
571
+ arrows: false,
572
+ drag: true,
573
+ focus: "start"
574
+ },
575
+ renderItem: (slide) => /* @__PURE__ */ jsx6("div", { style: { alignSelf: "start" }, children: /* @__PURE__ */ jsx6(
576
+ OraculoGameSlide_default,
577
+ {
578
+ items: slide.items,
579
+ layout: slide.kind === "mosaic" ? "mosaic" : "grid",
580
+ onClick: (itm) => {
581
+ const game = items.find(
582
+ (g, idx) => {
583
+ var _a;
584
+ return ((_a = g.orden) != null ? _a : idx) === itm.id;
585
+ }
586
+ );
587
+ if (game) onItemClick == null ? void 0 : onItemClick(game);
588
+ }
589
+ }
590
+ ) }),
591
+ onMove: ({ isStart, isEnd }) => setNavState({ isStart, isEnd })
592
+ }
593
+ )
594
+ ] }) });
595
+ };
596
+ var OraculoSeccionCasino_default = OraculoSeccionCasino;
597
+
598
+ // src/organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales.tsx
599
+ import { useRef as useRef2, useState as useState2 } from "react";
600
+ import Stack3 from "@mui/material/Stack";
601
+ import Box6 from "@mui/material/Box";
602
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
603
+ var buildVirtualSlides = (games, mosaicFirst = true, gridSize = 4) => {
604
+ const baseItems = games.map((g, idx) => {
605
+ var _a, _b;
606
+ return {
607
+ id: (_a = g.orden) != null ? _a : idx,
608
+ imageUrl: (_b = g.logo) != null ? _b : ""
609
+ };
610
+ });
611
+ if (!baseItems.length) return [];
612
+ const slides = [];
613
+ let start = 0;
614
+ if (mosaicFirst) {
615
+ const take = Math.min(baseItems.length, 5);
616
+ slides.push({
617
+ id: "mosaic-0",
618
+ kind: "mosaic",
619
+ items: baseItems.slice(0, take)
620
+ });
621
+ start = take;
622
+ }
623
+ while (start < baseItems.length) {
624
+ const end = Math.min(start + gridSize, baseItems.length);
625
+ slides.push({
626
+ id: `grid-${start}`,
627
+ kind: "grid",
628
+ items: baseItems.slice(start, end)
629
+ });
630
+ start = end;
631
+ }
632
+ return slides;
633
+ };
634
+ var OraculoSeccionVirtuales = ({
635
+ items,
636
+ title = "Virtuales",
637
+ iconUrl = "/assets/img/home/Virtuales/virtuales.svg",
638
+ onItemClick,
639
+ onViewMore,
640
+ mosaicFirst = true,
641
+ gridSize = 4
642
+ }) => {
643
+ const carouselRef = useRef2(null);
644
+ const [navState, setNavState] = useState2({ isStart: true, isEnd: false });
645
+ const slides = buildVirtualSlides(items, mosaicFirst, gridSize);
646
+ const handlePrev = () => {
647
+ var _a;
648
+ (_a = carouselRef.current) == null ? void 0 : _a.prev();
649
+ };
650
+ const handleNext = () => {
651
+ var _a;
652
+ (_a = carouselRef.current) == null ? void 0 : _a.next();
653
+ };
654
+ const handleViewMore = () => {
655
+ onViewMore == null ? void 0 : onViewMore();
656
+ };
657
+ return /* @__PURE__ */ jsx7("section", { children: /* @__PURE__ */ jsxs7(Stack3, { direction: "column", spacing: 2, useFlexGap: true, children: [
658
+ /* @__PURE__ */ jsxs7(
659
+ Box6,
660
+ {
661
+ sx: {
662
+ display: "grid",
663
+ gridTemplateColumns: "1fr auto auto",
664
+ alignItems: "center",
665
+ columnGap: 1.5,
666
+ rowGap: 1
667
+ },
668
+ children: [
669
+ /* @__PURE__ */ jsx7(
670
+ OraculoSectionTitle,
671
+ {
672
+ title,
673
+ iconUrl,
674
+ size: "md"
675
+ }
676
+ ),
677
+ /* @__PURE__ */ jsxs7(
678
+ Box6,
679
+ {
680
+ sx: {
681
+ display: "flex",
682
+ gap: 1,
683
+ justifyContent: "flex-end"
684
+ },
685
+ children: [
686
+ /* @__PURE__ */ jsx7(
687
+ OraculoButton,
688
+ {
689
+ ariaLabel: "Anterior",
690
+ variant: "secondary",
691
+ iconOnly: true,
692
+ leftIcon: /* @__PURE__ */ jsx7(ChevronLeftRounded_default, {}),
693
+ onClick: handlePrev,
694
+ disabled: navState.isStart
695
+ }
696
+ ),
697
+ /* @__PURE__ */ jsx7(
698
+ OraculoButton,
699
+ {
700
+ ariaLabel: "Siguiente",
701
+ variant: "secondary",
702
+ iconOnly: true,
703
+ rightIcon: /* @__PURE__ */ jsx7(ChevronRightRounded_default, {}),
704
+ onClick: handleNext,
705
+ disabled: navState.isEnd
706
+ }
707
+ )
708
+ ]
709
+ }
710
+ ),
711
+ /* @__PURE__ */ jsx7(Box6, { sx: { justifySelf: "end" }, children: /* @__PURE__ */ jsx7(OraculoButton, { variant: "secondary", onClick: handleViewMore, children: "Ver m\xE1s" }) })
712
+ ]
713
+ }
714
+ ),
715
+ /* @__PURE__ */ jsx7(
716
+ OraculoCarousel_default,
717
+ {
718
+ ref: carouselRef,
719
+ items: slides,
720
+ perPage: 1,
721
+ gap: "0",
722
+ options: {
723
+ autoWidth: true,
724
+ gap: "12px",
725
+ trimSpace: false,
726
+ pagination: false,
727
+ arrows: false,
728
+ drag: true,
729
+ focus: "start",
730
+ perMove: 1
731
+ },
732
+ renderItem: (slide) => /* @__PURE__ */ jsx7("div", { style: { alignSelf: "start" }, children: /* @__PURE__ */ jsx7(
733
+ OraculoGameSlide_default,
734
+ {
735
+ items: slide.items,
736
+ layout: slide.kind === "mosaic" ? "mosaic" : "grid",
737
+ onClick: (itm) => {
738
+ const game = items.find(
739
+ (g, idx) => {
740
+ var _a;
741
+ return ((_a = g.orden) != null ? _a : idx) === itm.id;
742
+ }
743
+ );
744
+ if (game) onItemClick == null ? void 0 : onItemClick(game);
745
+ }
746
+ }
747
+ ) }),
748
+ onMove: ({ isStart, isEnd }) => setNavState({ isStart, isEnd })
749
+ }
750
+ )
751
+ ] }) });
752
+ };
753
+ var OraculoSeccionVirtuales_default = OraculoSeccionVirtuales;
754
+
755
+ // src/templates/OraculoPageLanding.tsx
756
+ import {
757
+ Container,
758
+ Stack as Stack4
759
+ } from "@mui/material";
760
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
761
+ function OraculoPageLanding({ props }) {
762
+ const listaDestacados = [
763
+ {
764
+ image: "/assets/img/home/Destacados/Banner01.png",
765
+ title: "Gol Seguro",
766
+ tags: "/destacados",
767
+ // aquí puedes usar la ruta que antes estaba en href
768
+ body: "",
769
+ summary_body: "",
770
+ summary_title: "",
771
+ groups_forbidden: [],
772
+ groups_allowed: [],
773
+ promotion: ""
774
+ // summary_image: "/lo-que-sea.png", // opcional
775
+ },
776
+ {
777
+ image: "/assets/img/home/Destacados/Banner02.png",
778
+ title: "Promo 2",
779
+ tags: "/destacados",
780
+ body: "",
781
+ summary_body: "",
782
+ summary_title: "",
783
+ groups_forbidden: [],
784
+ groups_allowed: [],
785
+ promotion: ""
786
+ },
787
+ {
788
+ image: "/assets/img/home/Destacados/Banner01.png",
789
+ title: "Gol Seguro",
790
+ tags: "/destacados",
791
+ body: "",
792
+ summary_body: "",
793
+ summary_title: "",
794
+ groups_forbidden: [],
795
+ groups_allowed: [],
796
+ promotion: ""
797
+ },
798
+ {
799
+ image: "/assets/img/home/Destacados/Banner02.png",
800
+ title: "Promo 2",
801
+ tags: "/destacados",
802
+ body: "",
803
+ summary_body: "",
804
+ summary_title: "",
805
+ groups_forbidden: [],
806
+ groups_allowed: [],
807
+ promotion: ""
808
+ }
809
+ ];
810
+ return /* @__PURE__ */ jsxs8(Container, { className: "oli-font", sx: { backgroundColor: "#121212", position: "relative", pb: 5 }, maxWidth: false, children: [
811
+ /* @__PURE__ */ jsx8(
812
+ OraculoSeccionBonoBienvenida_default,
813
+ {
814
+ headline: props.bonos.headline,
815
+ items: props.bonos.items
816
+ }
817
+ ),
818
+ /* @__PURE__ */ jsxs8(Stack4, { direction: "column", spacing: 12, useFlexGap: true, children: [
819
+ /* @__PURE__ */ jsx8(
820
+ OraculoSeccionTopJuegos,
821
+ {
822
+ items: props.topJuegos.items,
823
+ title: props.topJuegos.title,
824
+ iconUrl: props.topJuegos.iconUrl,
825
+ onCardClick: props.topJuegos.onCardClick
826
+ }
827
+ ),
828
+ /* @__PURE__ */ jsx8(
829
+ OraculoSeccionCasino_default,
830
+ {
831
+ items: props.casino.items,
832
+ title: props.casino.title,
833
+ iconUrl: props.casino.iconUrl,
834
+ onItemClick: props.casino.onItemClick,
835
+ onViewMore: props.casino.onViewMore
836
+ }
837
+ )
838
+ ] }),
839
+ /* @__PURE__ */ jsx8(
840
+ OraculoSeccionCasinoEnVivo_default,
841
+ {
842
+ items: props.casinoEnVivo.items,
843
+ title: props.casinoEnVivo.title,
844
+ subtitle: props.casinoEnVivo.subtitle,
845
+ backgroundMobileUrl: props.casinoEnVivo.backgroundMobileUrl,
846
+ backgroundDesktopUrl: props.casinoEnVivo.backgroundDesktopUrl,
847
+ onCardClick: props.casinoEnVivo.onCardClick,
848
+ onViewMore: props.casinoEnVivo.onViewMore
849
+ }
850
+ ),
851
+ /* @__PURE__ */ jsxs8(Stack4, { direction: "column", spacing: 12, useFlexGap: true, children: [
852
+ /* @__PURE__ */ jsx8(
853
+ OraculoSeccionVirtuales_default,
854
+ {
855
+ items: props.virtuales.items,
856
+ title: props.virtuales.title,
857
+ iconUrl: props.virtuales.iconUrl,
858
+ onItemClick: props.virtuales.onItemClick,
859
+ onViewMore: props.virtuales.onViewMore
860
+ }
861
+ ),
862
+ /* @__PURE__ */ jsx8(
863
+ OraculoSeccionDestacados,
864
+ {
865
+ items: listaDestacados,
866
+ title: "Destacados",
867
+ iconUrl: "/assets/img/home/Destacados/starIcon.svg",
868
+ onViewMore: () => console.log("Ver m\xE1s clickeado")
869
+ }
870
+ ),
871
+ /* @__PURE__ */ jsx8(OraculoSeccionClubOlimpo_default, { items: props.clubOlimpo })
872
+ ] })
873
+ ] });
874
+ }
875
+
876
+ // src/templates/OraculoPageLandingPreview.tsx
877
+ import React4, { useEffect, useMemo as useMemo2, useState as useState3 } from "react";
878
+ import { Container as Container2, Stack as Stack5 } from "@mui/material";
879
+ import { jsx as jsx9 } from "react/jsx-runtime";
880
+
881
+ // import("../organisms/**/*/**/*") in src/templates/OraculoPageLandingPreview.tsx
882
+ var globImport_organisms = __glob({
883
+ "../organisms/OraculoSeccionBonoBienvenida/OraculoSeccionBonoBienvenida.tsx": () => import("./OraculoSeccionBonoBienvenida-6L54EBL3.mjs"),
884
+ "../organisms/OraculoSeccionCasino/OraculoSeccionCasino.tsx": () => import("./OraculoSeccionCasino-FHD2WBDU.mjs"),
885
+ "../organisms/OraculoSeccionCasinoEnVivo/OraculoSeccionCasinoEnVivo.tsx": () => import("./OraculoSeccionCasinoEnVivo-EPVIACRV.mjs"),
886
+ "../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.css": () => import("./OraculoSeccionClubOlimpo-BLUJXLUC.mjs"),
887
+ "../organisms/OraculoSeccionClubOlimpo/OraculoSeccionClubOlimpo.tsx": () => import("./OraculoSeccionClubOlimpo-63QCT4A2.mjs"),
888
+ "../organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx": () => import("./OraculoSeccionDestacados-5RFVEBFL.mjs"),
889
+ "../organisms/OraculoSeccionTopJuegos/OraculoSeccionTopJuegos.tsx": () => import("./OraculoSeccionTopJuegos-K6CHEKEP.mjs"),
890
+ "../organisms/OraculoSeccionVirtuales/OraculoSeccionVirtuales.tsx": () => import("./OraculoSeccionVirtuales-NEIWD2BT.mjs")
891
+ });
892
+
893
+ // src/templates/OraculoPageLandingPreview.tsx
894
+ var HttpError = class extends Error {
895
+ constructor(status, url, statusText) {
896
+ super(`HTTP ${status} ${statusText}`);
897
+ this.status = status;
898
+ this.url = url;
899
+ this.statusText = statusText;
900
+ this.name = "HttpError";
901
+ }
902
+ };
903
+ var OraculoPageLandingPreview = ({
904
+ sectionsOverride
905
+ }) => {
906
+ const [componentMap, setComponentMap] = useState3({});
907
+ const [sectionDataMap, setSectionDataMap] = useState3({});
908
+ const [sectionLoadingMap, setSectionLoadingMap] = useState3({});
909
+ const [sectionErrorMap, setSectionErrorMap] = useState3({});
910
+ const fetchSectionData = async (section) => {
911
+ const rawUrl = (section.apiUrl || "").trim();
912
+ if (!rawUrl) return void 0;
913
+ const method = section.apiMethod || "GET";
914
+ const params = section.apiParams || [];
915
+ let url = rawUrl;
916
+ let body;
917
+ let headers;
918
+ if (method === "GET") {
919
+ const u = new URL(
920
+ rawUrl,
921
+ typeof window !== "undefined" ? window.location.origin : "http://localhost"
922
+ );
923
+ params.forEach((p) => {
924
+ if (!p.key) return;
925
+ u.searchParams.set(p.key, p.value);
926
+ });
927
+ url = u.toString();
928
+ } else {
929
+ const encoded = new URLSearchParams();
930
+ params.forEach((p) => {
931
+ if (!p.key) return;
932
+ encoded.append(p.key, p.value);
933
+ });
934
+ body = encoded.toString();
935
+ headers = {
936
+ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
937
+ };
938
+ }
939
+ const res = await fetch(url, {
940
+ method,
941
+ headers,
942
+ body
943
+ });
944
+ if (!res.ok) throw new HttpError(res.status, url, res.statusText);
945
+ return res.json();
946
+ };
947
+ const effectiveSections = useMemo2(
948
+ () => sectionsOverride ? sectionsOverride.slice() : [],
949
+ [sectionsOverride]
950
+ );
951
+ const fetchedKeysRef = React4.useRef(/* @__PURE__ */ new Set());
952
+ useEffect(() => {
953
+ const fetchables = effectiveSections.map((s) => ({ s, url: (s.apiUrl || "").trim() })).filter(({ url }) => !!url);
954
+ if (!fetchables.length) return;
955
+ for (const { s, url } of fetchables) {
956
+ const key = `${s.id}|${url}`;
957
+ if (fetchedKeysRef.current.has(key)) continue;
958
+ fetchedKeysRef.current.add(key);
959
+ setSectionLoadingMap((prev) => ({ ...prev, [s.id]: true }));
960
+ setSectionErrorMap((prev) => ({ ...prev, [s.id]: "" }));
961
+ (async () => {
962
+ try {
963
+ const json = await fetchSectionData(s);
964
+ setSectionDataMap((prev) => ({ ...prev, [s.id]: json }));
965
+ } catch (err) {
966
+ let message = "Error desconocido";
967
+ if (err instanceof HttpError) {
968
+ message = `Error HTTP ${err.status} (${err.statusText}) en ${err.url}`;
969
+ } else if (err instanceof SyntaxError) {
970
+ message = "Respuesta no es JSON v\xE1lido";
971
+ } else if (err instanceof TypeError) {
972
+ message = "Fallo de red / CORS / conexi\xF3n";
973
+ } else if (typeof err === "string") {
974
+ message = err.toString();
975
+ }
976
+ setSectionErrorMap((prev) => ({ ...prev, [s.id]: message }));
977
+ } finally {
978
+ setSectionLoadingMap((prev) => ({ ...prev, [s.id]: false }));
979
+ }
980
+ })();
981
+ }
982
+ }, [effectiveSections]);
983
+ const orderedVisible = useMemo2(
984
+ () => effectiveSections.filter((s) => s.visible).sort((a, b) => a.order - b.order),
985
+ [effectiveSections]
986
+ );
987
+ const toManualArray = (items) => {
988
+ if (!Array.isArray(items)) return [];
989
+ return items.map((it) => {
990
+ const obj = {};
991
+ for (const f of it.fields || []) {
992
+ const t = (f.type || "string").toLowerCase();
993
+ if (t === "number") obj[f.name] = Number(f.value);
994
+ else if (t === "boolean")
995
+ obj[f.name] = String(f.value).toLowerCase() === "true";
996
+ else if (t === "function") {
997
+ const body = String(f.value || "").trim();
998
+ obj[f.name] = () => {
999
+ if (!body) return;
1000
+ try {
1001
+ const fn = new Function(body);
1002
+ return fn();
1003
+ } catch (e) {
1004
+ console.error("Error funci\xF3n manual", e);
1005
+ }
1006
+ };
1007
+ } else obj[f.name] = f.value;
1008
+ }
1009
+ return obj;
1010
+ });
1011
+ };
1012
+ const toManualScalars = (fields) => {
1013
+ const out = {};
1014
+ if (!Array.isArray(fields)) return out;
1015
+ for (const f of fields) {
1016
+ if (!f.name) continue;
1017
+ const t = (f.type || "string").toLowerCase();
1018
+ if (t === "number") out[f.name] = Number(f.value);
1019
+ else if (t === "boolean")
1020
+ out[f.name] = String(f.value).toLowerCase() === "true";
1021
+ else if (t === "function") {
1022
+ const body = String(f.value || "").trim();
1023
+ out[f.name] = () => {
1024
+ if (!body) return;
1025
+ try {
1026
+ const fn = new Function(body);
1027
+ return fn();
1028
+ } catch (e) {
1029
+ console.error("Error funci\xF3n escalar manual", e);
1030
+ }
1031
+ };
1032
+ } else out[f.name] = f.value;
1033
+ }
1034
+ return out;
1035
+ };
1036
+ const mapPayloadToProps = (payload, manual, base) => {
1037
+ const merged = base ? { ...base } : {};
1038
+ if (manual) {
1039
+ const name = (manual.variableName || "items").trim() || "items";
1040
+ merged[name] = manual.arr || [];
1041
+ return merged;
1042
+ }
1043
+ const pl = payload;
1044
+ const isArr = Array.isArray(pl);
1045
+ const obj = !isArr && typeof pl === "object" && pl !== null ? pl : void 0;
1046
+ const arrData = obj && Array.isArray(obj.lobby || obj.items) ? obj.lobby || obj.items : void 0;
1047
+ const choose = (fallback) => isArr ? pl : arrData || fallback;
1048
+ merged.items = choose(arrData || []);
1049
+ return merged;
1050
+ };
1051
+ const lazyLoadComponent = (rawKey) => {
1052
+ globImport_organisms(`../organisms/${rawKey}/${rawKey}`).then((mod) => {
1053
+ var _a;
1054
+ const ns = mod;
1055
+ const C = (_a = ns.default) != null ? _a : ns[rawKey];
1056
+ if (C) setComponentMap((prev) => ({ ...prev, [rawKey]: C }));
1057
+ }).catch((e) => {
1058
+ console.error(`Error cargando componente en OP ${rawKey}:`, e);
1059
+ });
1060
+ };
1061
+ const buildCompProps = (s) => {
1062
+ var _a;
1063
+ const hasUrl = !!((_a = s.apiUrl) == null ? void 0 : _a.trim());
1064
+ const payload = hasUrl ? sectionDataMap[s.id] : void 0;
1065
+ let compProps = s.props ? { ...s.props } : {};
1066
+ if (hasUrl) compProps = mapPayloadToProps(payload, null, compProps);
1067
+ else if (s.dataMode === "manual") {
1068
+ const arr = toManualArray(s.manualItems);
1069
+ compProps = mapPayloadToProps(
1070
+ null,
1071
+ { arr, variableName: s.variableName },
1072
+ compProps
1073
+ );
1074
+ const scalars = toManualScalars(s.manualScalarFields);
1075
+ compProps = { ...compProps, ...scalars };
1076
+ }
1077
+ return compProps;
1078
+ };
1079
+ const renderStatusBox = (key, type, message) => {
1080
+ const colorMap = {
1081
+ loading: "bg-blue-100 text-blue-800",
1082
+ error: "bg-red-100 text-red-800",
1083
+ component: "bg-yellow-100 text-yellow-800"
1084
+ };
1085
+ return /* @__PURE__ */ jsx9("div", { className: `mx-4 p-4 rounded ${colorMap[type]}`, children: message }, key);
1086
+ };
1087
+ const renderSingleSection = (s) => {
1088
+ var _a;
1089
+ const rawKey = s.componentKey;
1090
+ const Comp = componentMap[rawKey];
1091
+ const hasUrl = !!((_a = s.apiUrl) == null ? void 0 : _a.trim());
1092
+ const payload = hasUrl ? sectionDataMap[s.id] : void 0;
1093
+ const loadingSec = hasUrl ? !!sectionLoadingMap[s.id] : false;
1094
+ const errorSec = hasUrl ? sectionErrorMap[s.id] : "";
1095
+ if (!Comp) {
1096
+ lazyLoadComponent(rawKey);
1097
+ return renderStatusBox(
1098
+ s.id,
1099
+ "component",
1100
+ `Cargando componente "${rawKey}"...`
1101
+ );
1102
+ }
1103
+ if (hasUrl) {
1104
+ if (loadingSec && !payload)
1105
+ return renderStatusBox(
1106
+ s.id,
1107
+ "loading",
1108
+ `Cargando datos desde ${s.apiUrl}...`
1109
+ );
1110
+ if (errorSec && !payload)
1111
+ return renderStatusBox(
1112
+ s.id,
1113
+ "error",
1114
+ `Error cargando ${s.apiUrl}: ${errorSec}`
1115
+ );
1116
+ }
1117
+ const compProps = buildCompProps(s);
1118
+ return /* @__PURE__ */ jsx9(
1119
+ "div",
1120
+ {
1121
+ style: {
1122
+ paddingLeft: 16,
1123
+ paddingRight: 16,
1124
+ width: "100%",
1125
+ boxSizing: "border-box"
1126
+ },
1127
+ children: /* @__PURE__ */ jsx9(Comp, { ...compProps })
1128
+ },
1129
+ s.id
1130
+ );
1131
+ };
1132
+ if (!sectionsOverride || sectionsOverride.length === 0) {
1133
+ return /* @__PURE__ */ jsx9("div", { className: "text-xs text-gray-500", children: "Sin secciones para mostrar (sectionsOverride vac\xEDo)" });
1134
+ }
1135
+ return /* @__PURE__ */ jsx9(
1136
+ Container2,
1137
+ {
1138
+ className: "oli-font",
1139
+ maxWidth: false,
1140
+ disableGutters: true,
1141
+ sx: {
1142
+ backgroundColor: "#121212",
1143
+ position: "relative",
1144
+ pb: 5,
1145
+ pt: 5,
1146
+ width: "100%",
1147
+ maxWidth: "100%",
1148
+ overflowX: "hidden"
1149
+ },
1150
+ children: /* @__PURE__ */ jsx9(Stack5, { direction: "column", spacing: 8, useFlexGap: true, children: orderedVisible.map(renderSingleSection) })
1151
+ }
1152
+ );
1153
+ };
1154
+ var OraculoPageLandingPreview_default = OraculoPageLandingPreview;
1155
+
1156
+ // src/organisms/OraculoSeccionDestacados/OraculoSeccionDestacados.tsx
1157
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1158
+ function OraculoSeccionDestacados({
1159
+ items,
1160
+ title = "Destacados",
1161
+ iconUrl,
1162
+ onViewMore,
1163
+ className = ""
1164
+ }) {
1165
+ const carouselRef = useRef3(null);
1166
+ const [navState, setNavState] = useState4({ isStart: true, isEnd: false });
1167
+ const handlePrev = () => {
1168
+ var _a;
1169
+ (_a = carouselRef.current) == null ? void 0 : _a.prev();
1170
+ };
1171
+ const handleNext = () => {
1172
+ var _a;
1173
+ (_a = carouselRef.current) == null ? void 0 : _a.next();
1174
+ console.log("items: ", items);
1175
+ };
1176
+ const handleViewMore = () => {
1177
+ onViewMore == null ? void 0 : onViewMore();
1178
+ };
1179
+ const sectionClassName = className || void 0;
1180
+ return /* @__PURE__ */ jsxs9("section", { className: sectionClassName, style: { width: "100%" }, children: [
1181
+ /* @__PURE__ */ jsxs9(
1182
+ "header",
1183
+ {
1184
+ style: {
1185
+ display: "grid",
1186
+ gridTemplateColumns: "1fr auto auto",
1187
+ alignItems: "center",
1188
+ columnGap: 12,
1189
+ rowGap: 8,
1190
+ marginBottom: 16
1191
+ },
1192
+ children: [
1193
+ /* @__PURE__ */ jsx10(OraculoSectionTitle, { title, iconUrl, size: "md" }),
1194
+ /* @__PURE__ */ jsxs9("div", { style: { display: "flex", gap: 8 }, children: [
1195
+ /* @__PURE__ */ jsx10(
1196
+ OraculoButton,
1197
+ {
1198
+ ariaLabel: "Anterior",
1199
+ variant: "secondary",
1200
+ iconOnly: true,
1201
+ leftIcon: /* @__PURE__ */ jsx10(ChevronLeftRounded_default, {}),
1202
+ onClick: handlePrev,
1203
+ disabled: navState.isStart
1204
+ }
1205
+ ),
1206
+ /* @__PURE__ */ jsx10(
1207
+ OraculoButton,
1208
+ {
1209
+ ariaLabel: "Siguiente",
1210
+ variant: "secondary",
1211
+ iconOnly: true,
1212
+ rightIcon: /* @__PURE__ */ jsx10(ChevronRightRounded_default, {}),
1213
+ onClick: handleNext,
1214
+ disabled: navState.isEnd
1215
+ }
1216
+ )
1217
+ ] }),
1218
+ /* @__PURE__ */ jsx10(OraculoButton, { variant: "secondary", onClick: handleViewMore, children: "Ver m\xE1s" })
1219
+ ]
1220
+ }
1221
+ ),
1222
+ /* @__PURE__ */ jsx10(
1223
+ OraculoCarousel_default,
1224
+ {
1225
+ ref: carouselRef,
1226
+ items,
1227
+ perPage: 3.395,
1228
+ gap: "16px",
1229
+ options: { autoWidth: false },
1230
+ breakpoints: {
1231
+ 768: { perPage: 1.15, focus: "start" },
1232
+ 1024: { perPage: 2.5, focus: "start" }
1233
+ },
1234
+ renderItem: (item) => /* @__PURE__ */ jsx10(
1235
+ "div",
1236
+ {
1237
+ style: {
1238
+ textAlign: "center",
1239
+ marginTop: 16
1240
+ },
1241
+ children: /* @__PURE__ */ jsx10(
1242
+ "img",
1243
+ {
1244
+ src: `https://olimpo.bet${item.image !== "" ? item.image : item.summary_image}`,
1245
+ alt: item.title,
1246
+ style: {
1247
+ width: "100%",
1248
+ // minHeight: "150px",
1249
+ // maxHeight: "150px",
1250
+ height: "150px",
1251
+ borderRadius: 8,
1252
+ display: "block"
1253
+ }
1254
+ }
1255
+ )
1256
+ },
1257
+ `${item.title}-${item.image}`
1258
+ ),
1259
+ onMove: ({ isStart, isEnd }) => setNavState({ isStart, isEnd })
1260
+ }
1261
+ )
1262
+ ] });
1263
+ }
1264
+
1265
+ export {
1266
+ OraculoSectionTitle,
1267
+ OraculoGameCard_default,
1268
+ OraculoGameRankCard,
1269
+ OraculoGameSlide_default,
1270
+ OraculoSeccionDestacados,
1271
+ OraculoSeccionTopJuegos,
1272
+ OraculoSeccionCasino_default,
1273
+ OraculoSeccionVirtuales_default,
1274
+ OraculoPageLanding,
1275
+ OraculoPageLandingPreview_default
1276
+ };
1277
+ //# sourceMappingURL=chunk-MC4XEBI3.mjs.map