@anywayseo/tools 5.6.0 → 5.7.0

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-CyuHme_p.js → index-B71VkIfX.js} +403 -234
  51. package/dist/index-BTpEZIok.js +401 -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-JUwyHkmj.mjs → index-CEqTLcAR.mjs} +238 -69
  57. package/dist/{index-CWMHJGbL.mjs → index-CVN8I7r9.mjs} +616 -20
  58. package/dist/{index-5J1CqqcW.js → index-D15SAjJc.js} +1 -1
  59. package/dist/{index-BzbpMLDD.mjs → index-DHURrUMW.mjs} +1 -1
  60. package/dist/{index-C2T70CMa.mjs → index-FfZIjQy3.mjs} +5 -4
  61. package/dist/index-Lln67Kfn.mjs +402 -0
  62. package/dist/{index-CR5rM7at.js → index-QPgJfbrC.js} +36 -35
  63. package/dist/{index-D4zJ5RBA.js → index-TxqSZvgf.js} +5 -4
  64. package/dist/{index-HLGPI9-S.mjs → index-ksqN4RPm.mjs} +29 -28
  65. package/dist/{index-WFgDSB1A.js → index-ma-iV7GU.js} +1 -1
  66. package/dist/{index-CkRY_NXp.js → index-qR3kVjjs.js} +20 -22
  67. package/dist/index.cjs +24 -12
  68. package/dist/index.mjs +53 -41
  69. package/dist/layout/index.cjs +13 -12
  70. package/dist/layout/index.mjs +13 -12
  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,7 +1,7 @@
1
1
  "use strict";
2
2
  const react = require("@chakra-ui/react");
3
3
  require("./index-C6MG_f24.js");
4
- require("./index-DMR4Ptkt.js");
4
+ require("./index-B-k9oWE7.js");
5
5
  const index = require("./index-CbuiYkSg.js");
6
6
  function usePrimaryColors() {
7
7
  const color = react.useColorModeValue(index.LIGHT_THEME_COLOR, index.DARK_THEME_COLOR);
@@ -7,7 +7,7 @@ function useLocalization({ location, defaultLocale, locales }) {
7
7
  useEffect(() => {
8
8
  const cleanPath = path.replace(/^\/+|\/+$/g, "");
9
9
  const maybeLocaleCode = cleanPath.split("/")[0];
10
- const maybeLocale = locales.find(({ code }) => code === maybeLocaleCode);
10
+ const maybeLocale = locales.find(({ code }) => code.toLowerCase() === maybeLocaleCode.toLowerCase());
11
11
  const locale = maybeLocale ? maybeLocale : defaultLocale;
12
12
  if (locale.code !== currentLocale.code) {
13
13
  setCurrentLocale(locale);
@@ -1,12 +1,13 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { MDXProvider } from "@mdx-js/react";
3
+ import "react-i18next";
3
4
  import "@chakra-ui/react";
4
- import { I as Image, L as Link } from "./index-HLGPI9-S.mjs";
5
+ import { I as Image, L as Link } from "./index-ksqN4RPm.mjs";
6
+ import "./index-BJRvnR8Q.mjs";
7
+ import "./index-CVN8I7r9.mjs";
5
8
  import "react";
6
- import "react-i18next";
9
+ import "@chakra-ui/icons";
7
10
  import { P as Paragraph, U as Unordered, O as Ordered, b as Heading3, a as Heading2, H as Heading1 } from "./index-BEjKnOZA.mjs";
8
- import "./index-BJRvnR8Q.mjs";
9
- import "./index-CWMHJGbL.mjs";
10
11
  function omitProps(props, omittedKeys) {
11
12
  const result = { ...props };
12
13
  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-ksqN4RPm.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
+ };
@@ -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
  }
@@ -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;
@@ -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-QPgJfbrC.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) => {
@@ -6,9 +6,36 @@ import { Link as Link$2 } from "gatsby";
6
6
  import "@mdx-js/react";
7
7
  import "react-i18next";
8
8
  import "./index-BJRvnR8Q.mjs";
9
- import "./index-CWMHJGbL.mjs";
10
- import { u as useLocalization } from "./index-BzbpMLDD.mjs";
9
+ import "./index-CVN8I7r9.mjs";
10
+ import "@chakra-ui/icons";
11
+ import { u as useLocalization } from "./index-DHURrUMW.mjs";
11
12
  import { a as isAbsolutePath, i as isRelativePath } from "./index-Bph7a3PR.mjs";
13
+ const SiteContext = createContext(null);
14
+ const SiteProvider = ({ children, ...context }) => {
15
+ const value = useMemo(() => context, []);
16
+ return /* @__PURE__ */ jsx(SiteContext.Provider, { value, children });
17
+ };
18
+ function useSiteContext() {
19
+ const context = useContext(SiteContext);
20
+ if (!context) {
21
+ throw new Error("useSiteContext must be used within SiteProvider");
22
+ }
23
+ return context;
24
+ }
25
+ const PageContext = createContext(null);
26
+ const PageProvider = ({ children, location }) => {
27
+ const { localization } = useSiteContext();
28
+ const { currentLocale } = useLocalization({ location, ...localization });
29
+ const value = useMemo(() => ({ currentLocale }), [currentLocale]);
30
+ return /* @__PURE__ */ jsx(PageContext.Provider, { value, children });
31
+ };
32
+ function usePageContext() {
33
+ const context = useContext(PageContext);
34
+ if (!context) {
35
+ throw new Error("usePageContext must be used within PageProvider");
36
+ }
37
+ return context;
38
+ }
12
39
  function isImageUrl(image) {
13
40
  return Boolean(typeof image === "string" && image.trim() !== "");
14
41
  }
@@ -39,32 +66,6 @@ const Image = ({ src = "", mode = "default", hasZoom, ...plainImageProps }) => {
39
66
  }
40
67
  return hasZoom ? /* @__PURE__ */ jsx(Zoom, { wrapElement: "span", zoomMargin: 40, children: image }) : image;
41
68
  };
42
- const SiteContext = createContext(null);
43
- const SiteProvider = ({ children, ...context }) => {
44
- const value = useMemo(() => context, []);
45
- return /* @__PURE__ */ jsx(SiteContext.Provider, { value, children });
46
- };
47
- function useSiteContext() {
48
- const context = useContext(SiteContext);
49
- if (!context) {
50
- throw new Error("useSiteContext must be used within SiteProvider");
51
- }
52
- return context;
53
- }
54
- const PageContext = createContext(null);
55
- const PageProvider = ({ children, location }) => {
56
- const { localization } = useSiteContext();
57
- const { currentLocale } = useLocalization({ location, ...localization });
58
- const value = useMemo(() => ({ currentLocale }), [currentLocale]);
59
- return /* @__PURE__ */ jsx(PageContext.Provider, { value, children });
60
- };
61
- function usePageContext() {
62
- const context = useContext(PageContext);
63
- if (!context) {
64
- throw new Error("usePageContext must be used within PageProvider");
65
- }
66
- return context;
67
- }
68
69
  function isExternalLink(path) {
69
70
  return isAbsolutePath(path);
70
71
  }
@@ -8,7 +8,7 @@ function useLocalization({ location, defaultLocale, locales }) {
8
8
  react.useEffect(() => {
9
9
  const cleanPath = path.replace(/^\/+|\/+$/g, "");
10
10
  const maybeLocaleCode = cleanPath.split("/")[0];
11
- const maybeLocale = locales.find(({ code }) => code === maybeLocaleCode);
11
+ const maybeLocale = locales.find(({ code }) => code.toLowerCase() === maybeLocaleCode.toLowerCase());
12
12
  const locale = maybeLocale ? maybeLocale : defaultLocale;
13
13
  if (locale.code !== currentLocale.code) {
14
14
  setCurrentLocale(locale);