@anywayseo/tools 5.6.0 → 5.7.1

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 (92) hide show
  1. package/dist/components/action-button/index.d.ts +5 -0
  2. package/dist/components/article-card/index.d.ts +7 -0
  3. package/dist/components/article-card-grid/index.d.ts +7 -0
  4. package/dist/components/article-info-card/index.d.ts +5 -0
  5. package/dist/components/base/article-meta/index.d.ts +7 -0
  6. package/dist/components/base/article-meta/item/index.d.ts +7 -0
  7. package/dist/components/base/copy-text/index.d.ts +6 -0
  8. package/dist/components/base/grid/index.d.ts +2 -4
  9. package/dist/components/base/index.d.ts +3 -0
  10. package/dist/components/base/rating/index.d.ts +10 -0
  11. package/dist/components/bonus-card-grid/index.d.ts +2 -4
  12. package/dist/components/casino-table/index.d.ts +8 -0
  13. package/dist/components/casino-table/row/casino-actions/index.d.ts +8 -0
  14. package/dist/components/casino-table/row/casino-bonus/index.d.ts +8 -0
  15. package/dist/components/casino-table/row/casino-info/index.d.ts +7 -0
  16. package/dist/components/casino-table/row/casino-info/item/index.d.ts +7 -0
  17. package/dist/components/casino-table/row/casino-info/utils.d.ts +2 -0
  18. package/dist/components/casino-table/row/casino-license/index.d.ts +5 -0
  19. package/dist/components/casino-table/row/casino-logo/index.d.ts +9 -0
  20. package/dist/components/casino-table/row/casino-name/index.d.ts +8 -0
  21. package/dist/components/casino-table/row/cell/index.d.ts +7 -0
  22. package/dist/components/casino-table/row/index.d.ts +7 -0
  23. package/dist/components/feature-card-grid/index.d.ts +2 -4
  24. package/dist/components/game-card-grid/index.d.ts +2 -4
  25. package/dist/components/game-demo/content/index.d.ts +1 -1
  26. package/dist/components/game-demo/index.d.ts +2 -2
  27. package/dist/components/game-demo/preview/alert/index.d.ts +3 -0
  28. package/dist/components/game-demo/preview/index.d.ts +2 -1
  29. package/dist/components/index.cjs +12 -3
  30. package/dist/components/index.d.ts +6 -0
  31. package/dist/components/index.mjs +32 -23
  32. package/dist/components/informer/index.d.ts +9 -0
  33. package/dist/components/informer/utils.d.ts +5 -0
  34. package/dist/components/tip/index.d.ts +3 -0
  35. package/dist/hooks/index.cjs +2 -2
  36. package/dist/hooks/index.mjs +2 -2
  37. package/dist/i18n/index.cjs +1 -1
  38. package/dist/i18n/index.mjs +1 -1
  39. package/dist/i18n/resources/bg/index.d.ts +51 -0
  40. package/dist/i18n/resources/da/index.d.ts +51 -0
  41. package/dist/i18n/resources/de/index.d.ts +51 -0
  42. package/dist/i18n/resources/en/index.d.ts +51 -0
  43. package/dist/i18n/resources/fi/index.d.ts +51 -0
  44. package/dist/i18n/resources/fr/index.d.ts +51 -0
  45. package/dist/i18n/resources/it/index.d.ts +51 -0
  46. package/dist/i18n/resources/ka/index.d.ts +51 -0
  47. package/dist/i18n/resources/pt/index.d.ts +51 -0
  48. package/dist/i18n/resources/ru/index.d.ts +51 -0
  49. package/dist/{index-DMR4Ptkt.js → index-B-k9oWE7.js} +606 -10
  50. package/dist/{index-D4zJ5RBA.js → index-BFkFqBM7.js} +5 -4
  51. package/dist/index-BUz6iLeg.mjs +402 -0
  52. package/dist/index-BeJTy4iY.mjs +26 -0
  53. package/dist/index-BfITsKAr.js +25 -0
  54. package/dist/{index-Drz_7u2p.mjs → index-C7z5qqm_.mjs} +21 -23
  55. package/dist/{index-DYS7zQW4.mjs → index-CB0JfZMx.mjs} +1 -1
  56. package/dist/{index-CR5rM7at.js → index-CNyyTj_C.js} +37 -36
  57. package/dist/{index-CWMHJGbL.mjs → index-CVN8I7r9.mjs} +616 -20
  58. package/dist/index-CzAt2Bs2.js +401 -0
  59. package/dist/{index-5J1CqqcW.js → index-D15SAjJc.js} +1 -1
  60. package/dist/{index-BzbpMLDD.mjs → index-DHURrUMW.mjs} +1 -1
  61. package/dist/{index-JUwyHkmj.mjs → index-N0fjwTCB.mjs} +238 -69
  62. package/dist/{index-CyuHme_p.js → index-RL_4tl8T.js} +403 -234
  63. package/dist/{index-HLGPI9-S.mjs → index-ZivV_RbX.mjs} +30 -29
  64. package/dist/{index-WFgDSB1A.js → index-ma-iV7GU.js} +1 -1
  65. package/dist/{index-CkRY_NXp.js → index-qR3kVjjs.js} +20 -22
  66. package/dist/{index-C2T70CMa.mjs → index-s2a55HsU.mjs} +5 -4
  67. package/dist/index.cjs +24 -12
  68. package/dist/index.mjs +53 -41
  69. package/dist/layout/index.cjs +24 -13
  70. package/dist/layout/index.mjs +24 -13
  71. package/dist/providers/index.cjs +2 -2
  72. package/dist/providers/index.mjs +2 -2
  73. package/dist/types/components/article-card/index.d.ts +9 -0
  74. package/dist/types/components/button/index.d.ts +1 -1
  75. package/dist/types/components/casino/index.d.ts +32 -0
  76. package/dist/types/components/casino-info/index.d.ts +12 -0
  77. package/dist/types/components/common/index.d.ts +1 -1
  78. package/dist/types/components/game-info/index.d.ts +4 -8
  79. package/dist/types/components/grid/index.d.ts +4 -0
  80. package/dist/types/components/index.d.ts +4 -0
  81. package/dist/types/components/informer/index.d.ts +5 -0
  82. package/dist/types/components/strapi-component/index.d.ts +1 -1
  83. package/dist/types/content/article/index.d.ts +12 -0
  84. package/dist/types/content/index.d.ts +1 -0
  85. package/dist/types/i18n/index.d.ts +1 -1
  86. package/dist/utils/index.cjs +5 -5
  87. package/dist/utils/index.mjs +7 -7
  88. package/package.json +1 -1
  89. package/dist/index-B1PwYYQt.mjs +0 -24
  90. package/dist/index-B6wz_B9_.js +0 -145
  91. package/dist/index-C-ri0Fgy.js +0 -23
  92. package/dist/index-COv56GyV.mjs +0 -146
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const react = require("@mdx-js/react");
4
+ require("react-i18next");
4
5
  require("@chakra-ui/react");
5
- const index$1 = require("./index-CR5rM7at.js");
6
+ const index$1 = require("./index-CNyyTj_C.js");
7
+ require("./index-C6MG_f24.js");
8
+ require("./index-B-k9oWE7.js");
6
9
  require("react");
7
- require("react-i18next");
10
+ require("@chakra-ui/icons");
8
11
  const index = require("./index-DDg_PkD2.js");
9
- require("./index-C6MG_f24.js");
10
- require("./index-DMR4Ptkt.js");
11
12
  function omitProps(props, omittedKeys) {
12
13
  const result = { ...props };
13
14
  omittedKeys.forEach((key) => {
@@ -0,0 +1,402 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { Flex, Container as Container$1, useColorModeValue, useToast, useClipboard, Text, IconButton, Button, Box, Stack, Card, Badge, Td, Tr, Table, Thead, Th, Tbody } from "@chakra-ui/react";
3
+ import { L as Link, a as useSiteContext, I as Image, u as usePageContext } from "./index-ZivV_RbX.mjs";
4
+ import "@mdx-js/react";
5
+ import { useTranslation } from "react-i18next";
6
+ import { A as Animation } from "./index-BJRvnR8Q.mjs";
7
+ import { a as CasinoCharacteristic, C as CasinoTableColumn } from "./index-CVN8I7r9.mjs";
8
+ import "react";
9
+ import { CheckIcon, CopyIcon, StarIcon } from "@chakra-ui/icons";
10
+ import "react-medium-image-zoom";
11
+ import { u as usePrimaryColors } from "./index-CB0JfZMx.mjs";
12
+ import { b as formatNumber } from "./index-C7z5qqm_.mjs";
13
+ const FacebookIcon = (props) => {
14
+ return /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", "aria-label": "Facebook", ...props, children: [
15
+ /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "22", height: "22", rx: "5", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
16
+ /* @__PURE__ */ jsx(
17
+ "path",
18
+ {
19
+ d: "M13.5 8h2V6h-2c-2.2 0-3.5 1.3-3.5 3.5V11H8v2h2v5h2v-5h2l.5-2h-2v-1.3c0-.5.2-.7 1-.7Z",
20
+ fill: "currentColor"
21
+ }
22
+ )
23
+ ] });
24
+ };
25
+ const InstagramIcon = (props) => {
26
+ return /* @__PURE__ */ jsxs(
27
+ "svg",
28
+ {
29
+ xmlns: "http://www.w3.org/2000/svg",
30
+ width: "24",
31
+ height: "24",
32
+ viewBox: "0 0 24 24",
33
+ "aria-label": "Instagram",
34
+ ...props,
35
+ children: [
36
+ /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "22", height: "22", rx: "5", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
37
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
38
+ /* @__PURE__ */ jsx("circle", { cx: "17", cy: "7", r: "1.25", fill: "currentColor" })
39
+ ]
40
+ }
41
+ );
42
+ };
43
+ const PinterestIcon = (props) => {
44
+ return /* @__PURE__ */ jsx(
45
+ "svg",
46
+ {
47
+ xmlns: "http://www.w3.org/2000/svg",
48
+ width: "24",
49
+ height: "24",
50
+ viewBox: "0 0 24 24",
51
+ "aria-label": "Pinterest",
52
+ ...props,
53
+ children: /* @__PURE__ */ jsx(
54
+ "path",
55
+ {
56
+ fill: "currentColor",
57
+ d: "M12 0C5.373 0 0 5.373 0 12c0 4.99 3.657 9.128 8.438 10.122-.117-.858-.222-2.178.047-3.116.242-.83 1.557-5.288 1.557-5.288s-.396-.792-.396-1.963c0-1.84 1.067-3.215 2.395-3.215 1.13 0 1.675.848 1.675 1.866 0 1.138-.724 2.842-1.097 4.421-.312 1.319.663 2.395 1.965 2.395 2.358 0 3.947-3.032 3.947-6.617 0-2.727-1.84-4.769-5.178-4.769-3.774 0-6.134 2.822-6.134 5.97 0 1.086.322 1.852.827 2.443.232.274.264.384.18.698-.06.23-.197.786-.256 1.007-.084.322-.34.437-.628.318-1.75-.714-2.564-2.63-2.564-4.785 0-3.555 2.998-7.817 8.946-7.817 4.782 0 7.923 3.454 7.923 7.168 0 4.924-2.74 8.6-6.781 8.6-1.356 0-2.63-.73-3.066-1.565l-.833 3.173c-.301 1.147-1.118 2.582-1.667 3.455C9.708 23.812 10.828 24 12 24c6.627 0 12-5.373 12-12S18.627 0 12 0z"
58
+ }
59
+ )
60
+ }
61
+ );
62
+ };
63
+ const XcomIcon = (props) => {
64
+ return /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", "aria-label": "X", ...props, children: /* @__PURE__ */ jsx(
65
+ "path",
66
+ {
67
+ fill: "currentColor",
68
+ d: "M18.244 2H21l-6.57 7.498L22 22h-5.657l-4.403-5.808L6.06 22H3.302l7.02-8.006L2 2h5.822l3.983 5.293L18.244 2zM16.97 20h1.9L8.153 4h-1.9L16.97 20z"
69
+ }
70
+ ) });
71
+ };
72
+ const YoutubeIcon = (props) => {
73
+ return /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", "aria-label": "YouTube", ...props, children: /* @__PURE__ */ jsx(
74
+ "path",
75
+ {
76
+ fill: "currentColor",
77
+ d: "M23.498 6.186a2.974 2.974 0 0 0-2.095-2.107C19.505 3.5 12 3.5 12 3.5s-7.505 0-9.403.579A2.974 2.974 0 0 0 .502 6.186C0 8.09 0 12 0 12s0 3.91.502 5.814a2.974 2.974 0 0 0 2.095 2.107C4.495 20.5 12 20.5 12 20.5s7.505 0 9.403-.579a2.974 2.974 0 0 0 2.095-2.107C24 15.91 24 12 24 12s0-3.91-.502-5.814zM9.75 15.02V8.98L15.5 12l-5.75 3.02z"
78
+ }
79
+ ) });
80
+ };
81
+ const SocialNetworkMap = {
82
+ facebook: FacebookIcon,
83
+ instagram: InstagramIcon,
84
+ pinterest: PinterestIcon,
85
+ x: XcomIcon,
86
+ youtube: YoutubeIcon
87
+ };
88
+ const SocialNetwork = ({ kind, url }) => {
89
+ const Icon = SocialNetworkMap[kind];
90
+ return /* @__PURE__ */ jsx(Link, { to: url, children: /* @__PURE__ */ jsx(Icon, {}) });
91
+ };
92
+ const SocialNetworks = ({ socialNetworks, ...flexProps }) => {
93
+ const uniqueSocialNetworks = [...new Map(socialNetworks.map((item) => [item.kind, item])).values()];
94
+ return /* @__PURE__ */ jsx(Flex, { gap: 2, ...flexProps, children: uniqueSocialNetworks.map((socialNetwork) => /* @__PURE__ */ jsx(SocialNetwork, { ...socialNetwork }, socialNetwork.kind)) });
95
+ };
96
+ const Container = ({ children }) => {
97
+ return /* @__PURE__ */ jsx(Container$1, { maxW: "container.xl", children });
98
+ };
99
+ const CopyText = ({ value }) => {
100
+ const backgroundColor = useColorModeValue("gray.200", "gray.700");
101
+ const toast = useToast();
102
+ const { t } = useTranslation("copyText");
103
+ const { hasCopied, onCopy } = useClipboard(value);
104
+ function handleCopy() {
105
+ onCopy();
106
+ toast({ title: t("title"), status: "success", duration: 2e3, isClosable: true });
107
+ }
108
+ return /* @__PURE__ */ jsxs(Flex, { align: "center", gap: 2, backgroundColor, ps: 4, rounded: "lg", children: [
109
+ /* @__PURE__ */ jsx(Text, { fontFamily: "mono", children: value }),
110
+ /* @__PURE__ */ jsx(
111
+ IconButton,
112
+ {
113
+ icon: hasCopied ? /* @__PURE__ */ jsx(CheckIcon, {}) : /* @__PURE__ */ jsx(CopyIcon, {}),
114
+ "aria-label": "Copy to clipboard",
115
+ size: "sm",
116
+ variant: "ghost",
117
+ colorScheme: hasCopied ? "green" : "gray",
118
+ onClick: handleCopy
119
+ }
120
+ )
121
+ ] });
122
+ };
123
+ const LinkButton = ({
124
+ label,
125
+ href,
126
+ linkType = "redirect",
127
+ size = "auto",
128
+ width = "auto",
129
+ textTransform,
130
+ textDecoration,
131
+ animation,
132
+ onClick,
133
+ ...boxProps
134
+ }) => {
135
+ var _a;
136
+ const { config } = useSiteContext();
137
+ const { color, invertedColor } = usePrimaryColors();
138
+ const isInvertedColor = (_a = config == null ? void 0 : config.theme) == null ? void 0 : _a.isInvertedColor;
139
+ return /* @__PURE__ */ jsx(
140
+ Button,
141
+ {
142
+ w: width,
143
+ size: size === "auto" ? { base: "sm", md: "lg" } : size,
144
+ bg: "brand.500",
145
+ color: isInvertedColor ? invertedColor : color,
146
+ animation: animation ? Animation[animation.type](animation.params) : void 0,
147
+ textTransform,
148
+ _hover: { textDecoration, bg: "brand.200" },
149
+ _active: { transform: "scale(0.95)" },
150
+ onClick,
151
+ ...boxProps,
152
+ ...href && {
153
+ as: Link,
154
+ to: href,
155
+ isRedirectLink: linkType === "redirect"
156
+ },
157
+ children: label
158
+ }
159
+ );
160
+ };
161
+ const Logo = () => {
162
+ const { metadata } = useSiteContext();
163
+ const { logo } = metadata;
164
+ return /* @__PURE__ */ jsx(Box, { display: "flex", h: { base: 10, md: 14 }, overflow: "hidden", children: /* @__PURE__ */ jsx(Image, { src: logo, alt: "Logo", objectFit: "contain" }) });
165
+ };
166
+ const StarSizeMap = {
167
+ sm: 12,
168
+ md: 16,
169
+ lg: 20
170
+ };
171
+ const FontSizeMap = {
172
+ sm: "xs",
173
+ md: "sm",
174
+ lg: "md"
175
+ };
176
+ const Rating = ({ value = 0, max = 5, size = "md", hasLabel }) => {
177
+ const current = Math.round(Math.min(value, max));
178
+ const stars = /* @__PURE__ */ jsx(Flex, { gap: 1, children: Array.from({ length: max }, (_, i) => {
179
+ const index = i + 1;
180
+ const isActive = index <= current;
181
+ return /* @__PURE__ */ jsx(
182
+ StarIcon,
183
+ {
184
+ boxSize: StarSizeMap[size],
185
+ color: isActive ? "var(--chakra-colors-yellow-400)" : "gray"
186
+ },
187
+ index
188
+ );
189
+ }) });
190
+ return hasLabel ? /* @__PURE__ */ jsxs(Stack, { spacing: 1, align: "center", children: [
191
+ stars,
192
+ /* @__PURE__ */ jsxs(Text, { fontSize: FontSizeMap[size], children: [
193
+ current,
194
+ " / ",
195
+ max
196
+ ] })
197
+ ] }) : stars;
198
+ };
199
+ const CasinoActions = ({ referralUrl, reviewUrl }) => {
200
+ const { t } = useTranslation("casinoTable");
201
+ const referralLinkLabel = t("row.actions.getBonus");
202
+ const reviewLinkLabel = t("row.actions.readReview");
203
+ return /* @__PURE__ */ jsxs(Stack, { children: [
204
+ !!referralUrl && /* @__PURE__ */ jsx(
205
+ LinkButton,
206
+ {
207
+ href: referralUrl,
208
+ label: referralLinkLabel,
209
+ textDecoration: "none",
210
+ size: { base: "sm", md: "md", lg: "lg" }
211
+ }
212
+ ),
213
+ !!reviewUrl && /* @__PURE__ */ jsx(Link, { to: reviewUrl, fontSize: "sm", children: reviewLinkLabel })
214
+ ] });
215
+ };
216
+ const CasinoBonus = ({ bonus, promoCode }) => {
217
+ return /* @__PURE__ */ jsxs(Stack, { gap: 3, align: "center", children: [
218
+ /* @__PURE__ */ jsx(Text, { fontSize: "xl", children: bonus }),
219
+ !!promoCode && /* @__PURE__ */ jsx(CopyText, { value: promoCode })
220
+ ] });
221
+ };
222
+ const CasinoInfoItem = ({ label, value }) => {
223
+ const color = useColorModeValue("gray.500", "gray.300");
224
+ return /* @__PURE__ */ jsxs(Text, { display: "inline-flex", justifyContent: "space-between", gap: 2, w: "full", textAlign: "end", children: [
225
+ /* @__PURE__ */ jsxs(Text, { as: "span", color, fontSize: "xs", fontWeight: "semibold", textAlign: "start", me: 1, children: [
226
+ label,
227
+ ":"
228
+ ] }),
229
+ value
230
+ ] });
231
+ };
232
+ function getCasinoInfoItemValue(key, value, locale) {
233
+ let formattedValue = "";
234
+ if (typeof value !== "string") {
235
+ if (key === CasinoCharacteristic.Rtp) {
236
+ formattedValue = formatNumber(value, { percent: "real", precision: 3 });
237
+ }
238
+ if (key === CasinoCharacteristic.MidDeposit) {
239
+ formattedValue = formatNumber(value, { locale });
240
+ }
241
+ }
242
+ if (!formattedValue) {
243
+ formattedValue = value.toLocaleString();
244
+ }
245
+ return formattedValue;
246
+ }
247
+ const CasinoInfo = ({ info }) => {
248
+ const { currentLocale } = usePageContext();
249
+ const { t } = useTranslation("casinoInfo");
250
+ return /* @__PURE__ */ jsx(Card, { py: 1, px: 2, w: "100%", children: /* @__PURE__ */ jsx(Stack, { gap: 1, align: "start", children: Object.entries(info).map(([itemKey, itemValue]) => {
251
+ if (!itemValue) {
252
+ return null;
253
+ }
254
+ const label = itemKey;
255
+ const value = getCasinoInfoItemValue(label, itemValue, currentLocale.code);
256
+ return /* @__PURE__ */ jsx(CasinoInfoItem, { label: t(`feature.${label}`), value }, label);
257
+ }) }) });
258
+ };
259
+ const CasinoLicense = ({ name, image }) => {
260
+ return /* @__PURE__ */ jsx(Flex, { align: "top", justify: "center", w: "full", h: "full", children: /* @__PURE__ */ jsx(Image, { src: image, alt: name, title: name, w: { base: "16", md: "12" }, rounded: "lg" }) });
261
+ };
262
+ const CasinoLogo = ({ name, image, isBestChoice }) => {
263
+ const { t } = useTranslation("casinoTable");
264
+ const background = useColorModeValue("gray.100", "gray.700");
265
+ return /* @__PURE__ */ jsxs(Box, { position: "relative", display: "inline-block", w: "100%", children: [
266
+ /* @__PURE__ */ jsx(Image, { src: image, alt: name, title: name, borderRadius: "md", w: "100%", objectFit: "cover" }),
267
+ isBestChoice && /* @__PURE__ */ jsx(
268
+ Badge,
269
+ {
270
+ position: "absolute",
271
+ top: 1,
272
+ left: 1,
273
+ fontSize: "2xs",
274
+ px: 1,
275
+ borderRadius: "md",
276
+ shadow: "md",
277
+ colorScheme: "brand",
278
+ background,
279
+ children: t("row.logo.bestChoiceBadge")
280
+ }
281
+ )
282
+ ] });
283
+ };
284
+ const CasinoName = ({ name, rating }) => {
285
+ return /* @__PURE__ */ jsxs(Stack, { gap: 3, w: "full", children: [
286
+ /* @__PURE__ */ jsx(Text, { children: name }),
287
+ /* @__PURE__ */ jsx(Rating, { value: rating, size: "sm", hasLabel: true })
288
+ ] });
289
+ };
290
+ const Cell = ({ children, borderColor, ...props }) => {
291
+ return /* @__PURE__ */ jsx(
292
+ Td,
293
+ {
294
+ textAlign: "center",
295
+ p: 2,
296
+ borderBottom: { base: "none", md: "1px solid" },
297
+ borderBottomColor: { base: "none", md: borderColor },
298
+ ...props,
299
+ children
300
+ }
301
+ );
302
+ };
303
+ const CasinoTableRow = ({ casino }) => {
304
+ const { id, image, name, rating, bonus, promoCode, license, info, referralUrl, reviewUrl } = casino;
305
+ const borderColor = useColorModeValue("gray.200", "whiteAlpha.300");
306
+ return /* @__PURE__ */ jsxs(
307
+ Tr,
308
+ {
309
+ display: { base: "inline-block", md: "table-row" },
310
+ w: { base: "100%", md: "auto" },
311
+ p: { base: 4, md: 0 },
312
+ mb: { base: 4, md: 0 },
313
+ border: { base: "1px solid", md: "none" },
314
+ borderColor,
315
+ borderRadius: "xl",
316
+ overflow: "hidden",
317
+ children: [
318
+ /* @__PURE__ */ jsx(Cell, { display: { base: "none", md: "table-cell" }, borderColor, children: id }),
319
+ /* @__PURE__ */ jsx(
320
+ Cell,
321
+ {
322
+ display: { base: "block", md: "table-cell" },
323
+ w: { base: "full", md: 200 },
324
+ minW: 100,
325
+ borderColor,
326
+ children: /* @__PURE__ */ jsx(CasinoLogo, { name, image, isBestChoice: id === "1" })
327
+ }
328
+ ),
329
+ /* @__PURE__ */ jsx(
330
+ Cell,
331
+ {
332
+ display: { base: "inline-flex", md: "table-cell" },
333
+ w: { base: license ? "50%" : "full", md: "auto" },
334
+ borderColor,
335
+ children: /* @__PURE__ */ jsx(CasinoName, { name, rating })
336
+ }
337
+ ),
338
+ /* @__PURE__ */ jsx(
339
+ Cell,
340
+ {
341
+ display: { base: license ? "inline-flex" : "none", md: "table-cell" },
342
+ w: { base: "50%", md: "16" },
343
+ borderColor,
344
+ children: license ? /* @__PURE__ */ jsx(CasinoLicense, { ...license }) : "—"
345
+ }
346
+ ),
347
+ /* @__PURE__ */ jsx(
348
+ Cell,
349
+ {
350
+ display: { base: "block", sm: info ? "inline-flex" : "block", md: "table-cell" },
351
+ w: { base: "full", sm: info ? "60%" : "full", md: "auto" },
352
+ borderColor,
353
+ children: /* @__PURE__ */ jsx(CasinoBonus, { bonus, promoCode })
354
+ }
355
+ ),
356
+ /* @__PURE__ */ jsx(
357
+ Cell,
358
+ {
359
+ display: { base: info ? "block" : "none", sm: info ? "inline-flex" : "none", md: "table-cell" },
360
+ w: { base: "full", sm: "40%", md: "40" },
361
+ borderColor,
362
+ children: info ? /* @__PURE__ */ jsx(CasinoInfo, { info }) : "—"
363
+ }
364
+ ),
365
+ /* @__PURE__ */ jsx(Cell, { display: { base: "block", md: "table-cell" }, borderColor, children: /* @__PURE__ */ jsx(CasinoActions, { referralUrl, reviewUrl }) })
366
+ ]
367
+ }
368
+ );
369
+ };
370
+ const columns = [
371
+ CasinoTableColumn.ID,
372
+ CasinoTableColumn.Logo,
373
+ CasinoTableColumn.Name,
374
+ CasinoTableColumn.License,
375
+ CasinoTableColumn.Bonus,
376
+ CasinoTableColumn.Info,
377
+ CasinoTableColumn.Actions
378
+ ];
379
+ const CasinoTable = ({ casinos, showHeader = false }) => {
380
+ const { t } = useTranslation("casinoTable");
381
+ return /* @__PURE__ */ jsxs(Table, { variant: "simple", size: "md", children: [
382
+ /* @__PURE__ */ jsx(
383
+ Thead,
384
+ {
385
+ position: { base: "absolute", md: showHeader ? "static" : "absolute" },
386
+ opacity: { base: 0, md: showHeader ? "initial" : 0 },
387
+ children: /* @__PURE__ */ jsx(Tr, { children: columns.map((column) => /* @__PURE__ */ jsx(Th, { textAlign: "center", p: 2, children: t(`column.${column}`) }, column)) })
388
+ }
389
+ ),
390
+ /* @__PURE__ */ jsx(Tbody, { children: casinos.map(({ id, ...casino }, index) => /* @__PURE__ */ jsx(CasinoTableRow, { casino: { id: String(index + 1), ...casino } }, id)) })
391
+ ] });
392
+ };
393
+ export {
394
+ CasinoTable as C,
395
+ LinkButton as L,
396
+ Rating as R,
397
+ SocialNetwork as S,
398
+ Container as a,
399
+ CopyText as b,
400
+ Logo as c,
401
+ SocialNetworks as d
402
+ };
@@ -0,0 +1,26 @@
1
+ import { DEFAULT_LANGUAGE } from "./i18n/index.mjs";
2
+ function getCurrencySymbol(currencyCode, locale = DEFAULT_LANGUAGE) {
3
+ const symbol = 0 .toLocaleString(locale, {
4
+ style: "currency",
5
+ currency: currencyCode,
6
+ minimumFractionDigits: 0,
7
+ maximumFractionDigits: 0
8
+ }).replace(/\d/g, "").trim();
9
+ return symbol;
10
+ }
11
+ function randomComparator() {
12
+ return Math.random() - 0.5;
13
+ }
14
+ function seededRandom(seed) {
15
+ return Math.abs(Math.sin(seed));
16
+ }
17
+ function getSeededRandomComparator(seed) {
18
+ const safeSeed = Math.abs(seed) % Number.MAX_SAFE_INTEGER;
19
+ let index = 0;
20
+ return () => seededRandom(safeSeed + index++) - 0.5;
21
+ }
22
+ export {
23
+ getSeededRandomComparator as a,
24
+ getCurrencySymbol as g,
25
+ randomComparator as r
26
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ const i18n = require("./i18n/index.cjs");
3
+ function getCurrencySymbol(currencyCode, locale = i18n.DEFAULT_LANGUAGE) {
4
+ const symbol = 0 .toLocaleString(locale, {
5
+ style: "currency",
6
+ currency: currencyCode,
7
+ minimumFractionDigits: 0,
8
+ maximumFractionDigits: 0
9
+ }).replace(/\d/g, "").trim();
10
+ return symbol;
11
+ }
12
+ function randomComparator() {
13
+ return Math.random() - 0.5;
14
+ }
15
+ function seededRandom(seed) {
16
+ return Math.abs(Math.sin(seed));
17
+ }
18
+ function getSeededRandomComparator(seed) {
19
+ const safeSeed = Math.abs(seed) % Number.MAX_SAFE_INTEGER;
20
+ let index = 0;
21
+ return () => seededRandom(safeSeed + index++) - 0.5;
22
+ }
23
+ exports.getCurrencySymbol = getCurrencySymbol;
24
+ exports.getSeededRandomComparator = getSeededRandomComparator;
25
+ exports.randomComparator = randomComparator;
@@ -1,12 +1,21 @@
1
1
  import { DEFAULT_LANGUAGE } from "./i18n/index.mjs";
2
- function getCurrencySymbol(currencyCode, locale = DEFAULT_LANGUAGE) {
3
- const symbol = 0 .toLocaleString(locale, {
4
- style: "currency",
5
- currency: currencyCode,
6
- minimumFractionDigits: 0,
7
- maximumFractionDigits: 0
8
- }).replace(/\d/g, "").trim();
9
- return symbol;
2
+ function getCurrentYear(locale = DEFAULT_LANGUAGE) {
3
+ const currentDate = /* @__PURE__ */ new Date();
4
+ const currentYear = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(currentDate);
5
+ return currentYear;
6
+ }
7
+ function getCurrentMonth(locale = DEFAULT_LANGUAGE) {
8
+ const currentDate = /* @__PURE__ */ new Date();
9
+ const currentMonth = new Intl.DateTimeFormat(locale, { month: "long" }).format(currentDate);
10
+ return currentMonth;
11
+ }
12
+ function formatDate({ value, locale = DEFAULT_LANGUAGE, options }) {
13
+ const date = typeof value === "string" || typeof value === "number" ? new Date(value) : value;
14
+ if (isNaN(date.getTime())) {
15
+ throw new Error("Invalid date provided");
16
+ }
17
+ const formatter = new Intl.DateTimeFormat(locale, options);
18
+ return formatter.format(date);
10
19
  }
11
20
  const DEFAULT_PRECISION = 2;
12
21
  function round(number, precision) {
@@ -45,22 +54,11 @@ function formatNumber(number, options) {
45
54
  const formatter = new Intl.NumberFormat(locale, formatOptions);
46
55
  return `${formatter.format(round(number, precision))}${postfix}`;
47
56
  }
48
- function randomComparator() {
49
- return Math.random() - 0.5;
50
- }
51
- function seededRandom(seed) {
52
- return Math.abs(Math.sin(seed));
53
- }
54
- function getSeededRandomComparator(seed) {
55
- const safeSeed = Math.abs(seed) % Number.MAX_SAFE_INTEGER;
56
- let index = 0;
57
- return () => seededRandom(safeSeed + index++) - 0.5;
58
- }
59
57
  export {
60
- randomComparator as a,
61
- getSeededRandomComparator as b,
62
- formatNumber as f,
63
- getCurrencySymbol as g,
58
+ getCurrentMonth as a,
59
+ formatNumber as b,
60
+ formatDate as f,
61
+ getCurrentYear as g,
64
62
  round as r,
65
63
  toFixedTwo as t
66
64
  };
@@ -1,6 +1,6 @@
1
1
  import { useColorModeValue } from "@chakra-ui/react";
2
2
  import "./index-BJRvnR8Q.mjs";
3
- import "./index-CWMHJGbL.mjs";
3
+ import "./index-CVN8I7r9.mjs";
4
4
  import { L as LIGHT_THEME_COLOR, D as DARK_THEME_COLOR } from "./index-BRVKhbs6.mjs";
5
5
  function usePrimaryColors() {
6
6
  const color = useColorModeValue(LIGHT_THEME_COLOR, DARK_THEME_COLOR);
@@ -1,15 +1,42 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
- const react = require("@chakra-ui/react");
3
+ const react$1 = require("@chakra-ui/react");
4
4
  const Zoom = require("react-medium-image-zoom");
5
- const react$1 = require("react");
5
+ const react = require("react");
6
6
  const gatsby = require("gatsby");
7
7
  require("@mdx-js/react");
8
8
  require("react-i18next");
9
9
  require("./index-C6MG_f24.js");
10
- require("./index-DMR4Ptkt.js");
11
- const index = require("./index-WFgDSB1A.js");
10
+ require("./index-B-k9oWE7.js");
11
+ require("@chakra-ui/icons");
12
+ const index = require("./index-ma-iV7GU.js");
12
13
  const index$1 = require("./index-DgrIJs-a.js");
14
+ const SiteContext = react.createContext(null);
15
+ const SiteProvider = ({ children, ...context }) => {
16
+ const value = react.useMemo(() => context, []);
17
+ return /* @__PURE__ */ jsxRuntime.jsx(SiteContext.Provider, { value, children });
18
+ };
19
+ function useSiteContext() {
20
+ const context = react.useContext(SiteContext);
21
+ if (!context) {
22
+ throw new Error("useSiteContext must be used within SiteProvider");
23
+ }
24
+ return context;
25
+ }
26
+ const PageContext = react.createContext(null);
27
+ const PageProvider = ({ children, location }) => {
28
+ const { localization } = useSiteContext();
29
+ const { currentLocale } = index.useLocalization({ location, ...localization });
30
+ const value = react.useMemo(() => ({ currentLocale }), [currentLocale]);
31
+ return /* @__PURE__ */ jsxRuntime.jsx(PageContext.Provider, { value, children });
32
+ };
33
+ function usePageContext() {
34
+ const context = react.useContext(PageContext);
35
+ if (!context) {
36
+ throw new Error("usePageContext must be used within PageProvider");
37
+ }
38
+ return context;
39
+ }
13
40
  function isImageUrl(image) {
14
41
  return Boolean(typeof image === "string" && image.trim() !== "");
15
42
  }
@@ -26,7 +53,7 @@ const Image = ({ src = "", mode = "default", hasZoom, ...plainImageProps }) => {
26
53
  let image;
27
54
  if (isImageUrl(src)) {
28
55
  image = /* @__PURE__ */ jsxRuntime.jsx(
29
- react.Image,
56
+ react$1.Image,
30
57
  {
31
58
  src,
32
59
  ...mode === "thumbnail" && { aspectRatio: "16/9", objectFit: "cover", objectPosition: "center" },
@@ -34,38 +61,12 @@ const Image = ({ src = "", mode = "default", hasZoom, ...plainImageProps }) => {
34
61
  }
35
62
  );
36
63
  } else if (isImageComponent(src)) {
37
- image = mode === "thumbnail" ? /* @__PURE__ */ jsxRuntime.jsx(react.Box, { aspectRatio: "16/9", children: src }) : src;
64
+ image = mode === "thumbnail" ? /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { aspectRatio: "16/9", children: src }) : src;
38
65
  } else {
39
66
  return null;
40
67
  }
41
68
  return hasZoom ? /* @__PURE__ */ jsxRuntime.jsx(Zoom, { wrapElement: "span", zoomMargin: 40, children: image }) : image;
42
69
  };
43
- const SiteContext = react$1.createContext(null);
44
- const SiteProvider = ({ children, ...context }) => {
45
- const value = react$1.useMemo(() => context, []);
46
- return /* @__PURE__ */ jsxRuntime.jsx(SiteContext.Provider, { value, children });
47
- };
48
- function useSiteContext() {
49
- const context = react$1.useContext(SiteContext);
50
- if (!context) {
51
- throw new Error("useSiteContext must be used within SiteProvider");
52
- }
53
- return context;
54
- }
55
- const PageContext = react$1.createContext(null);
56
- const PageProvider = ({ children, location }) => {
57
- const { localization } = useSiteContext();
58
- const { currentLocale } = index.useLocalization({ location, ...localization });
59
- const value = react$1.useMemo(() => ({ currentLocale }), [currentLocale]);
60
- return /* @__PURE__ */ jsxRuntime.jsx(PageContext.Provider, { value, children });
61
- };
62
- function usePageContext() {
63
- const context = react$1.useContext(PageContext);
64
- if (!context) {
65
- throw new Error("usePageContext must be used within PageProvider");
66
- }
67
- return context;
68
- }
69
70
  function isExternalLink(path) {
70
71
  return index$1.isAbsolutePath(path);
71
72
  }
@@ -73,7 +74,7 @@ function normalizePath(path = "") {
73
74
  return path.replace(/^\/+|\/+$/g, "").replace(/\/+/g, "/");
74
75
  }
75
76
  function getLocalizedPath(path, currentLocaleCode, defaultLocaleCode) {
76
- const localePrefix = currentLocaleCode === defaultLocaleCode ? "/" : `/${currentLocaleCode}/`;
77
+ const localePrefix = currentLocaleCode === defaultLocaleCode ? "/" : `/${currentLocaleCode.toLowerCase()}/`;
77
78
  if (path === "/") {
78
79
  return localePrefix;
79
80
  }
@@ -83,12 +84,12 @@ function getLocalizedPath(path, currentLocaleCode, defaultLocaleCode) {
83
84
  }
84
85
  return `${localePrefix}${normalizePath(path)}`;
85
86
  }
86
- const Link = react$1.forwardRef(({ to = "", isRedirectLink, ...props }, ref) => {
87
+ const Link = react.forwardRef(({ to = "", isRedirectLink, ...props }, ref) => {
87
88
  const { localization } = useSiteContext();
88
89
  const { currentLocale } = usePageContext();
89
90
  if (isExternalLink(to)) {
90
91
  return /* @__PURE__ */ jsxRuntime.jsx(
91
- react.Link,
92
+ react$1.Link,
92
93
  {
93
94
  ref,
94
95
  href: isRedirectLink ? `/follow?to=${to}` : to,
@@ -100,7 +101,7 @@ const Link = react$1.forwardRef(({ to = "", isRedirectLink, ...props }, ref) =>
100
101
  );
101
102
  }
102
103
  const path = getLocalizedPath(to, currentLocale.code, localization.defaultLocale.code);
103
- return /* @__PURE__ */ jsxRuntime.jsx(react.Link, { ref, as: gatsby.Link, to: path, ...props });
104
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.Link, { ref, as: gatsby.Link, to: path, ...props });
104
105
  });
105
106
  exports.Image = Image;
106
107
  exports.Link = Link;