@anywayseo/tools 5.8.2 → 5.9.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 (41) hide show
  1. package/dist/components/article-card/index.d.ts +2 -1
  2. package/dist/components/article-card-grid/index.d.ts +2 -1
  3. package/dist/components/base/rating/index.d.ts +2 -1
  4. package/dist/components/base/social-network/icons/index.d.ts +1 -0
  5. package/dist/components/base/social-network/icons/linked-in/index.d.ts +2 -0
  6. package/dist/components/game-card/index.d.ts +2 -2
  7. package/dist/components/game-card-grid/index.d.ts +2 -2
  8. package/dist/components/index.cjs +3 -3
  9. package/dist/components/index.mjs +3 -3
  10. package/dist/components/informer/utils.d.ts +1 -0
  11. package/dist/components/seo/index.d.ts +2 -2
  12. package/dist/components/seo/types.d.ts +0 -4
  13. package/dist/{index-BNkvrBOj.js → index-B4M1IKzL.js} +1 -1
  14. package/dist/{index-C7z5qqm_.mjs → index-BPthShL-.mjs} +5 -2
  15. package/dist/{index-D-WTkYJu.js → index-BYl_y0HN.js} +76 -31
  16. package/dist/{index-C3FKVt3V.mjs → index-ClIPWZ3z.mjs} +1 -1
  17. package/dist/{index-cY5WnaQc.mjs → index-D1gNEJUA.mjs} +1 -1
  18. package/dist/{index-BN9vRBzY.mjs → index-D9WcltF-.mjs} +76 -31
  19. package/dist/{index-CodGh8Sq.mjs → index-D9i6mZaH.mjs} +28 -10
  20. package/dist/{index-DdLlwS4n.js → index-DXTC3R_J.js} +1 -1
  21. package/dist/{index-BrpyfyHr.js → index-DzOucsVx.js} +28 -10
  22. package/dist/{index-qR3kVjjs.js → index-ov4J7p3D.js} +5 -2
  23. package/dist/index.cjs +5 -5
  24. package/dist/index.mjs +5 -5
  25. package/dist/layout/footer/navigation/index.d.ts +2 -1
  26. package/dist/layout/index.cjs +7 -7
  27. package/dist/layout/index.mjs +7 -7
  28. package/dist/providers/index.cjs +2 -2
  29. package/dist/providers/index.mjs +2 -2
  30. package/dist/types/components/common/index.d.ts +1 -0
  31. package/dist/types/components/game-card/index.d.ts +1 -1
  32. package/dist/types/components/social-network/index.d.ts +1 -1
  33. package/dist/types/components/strapi-component/index.d.ts +1 -1
  34. package/dist/types/content/article/index.d.ts +1 -1
  35. package/dist/types/index.d.ts +1 -0
  36. package/dist/types/page/index.d.ts +7 -0
  37. package/dist/types/site/index.d.ts +2 -1
  38. package/dist/utils/date/index.d.ts +1 -1
  39. package/dist/utils/index.cjs +1 -1
  40. package/dist/utils/index.mjs +1 -1
  41. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
1
  import { FC } from 'react';
2
- import { IArticlePreviewCard, ImageType } from '../../types';
2
+ import { IArticlePreviewCard, CardHeight, ImageType } from '../../types';
3
3
  type ArticleCardProps = IArticlePreviewCard & {
4
4
  image?: ImageType;
5
+ height?: CardHeight;
5
6
  };
6
7
  declare const ArticleCard: FC<ArticleCardProps>;
7
8
  export default ArticleCard;
@@ -1,7 +1,8 @@
1
1
  import { FC } from 'react';
2
- import { BoxPositionProps, IArticlePreviewCard, GridConfigProps } from '../../types';
2
+ import { BoxPositionProps, IArticlePreviewCard, GridConfigProps, CardHeight } from '../../types';
3
3
  type FeatureCardGridProps = {
4
4
  items: IArticlePreviewCard[];
5
+ cardHeight?: CardHeight;
5
6
  } & GridConfigProps & BoxPositionProps;
6
7
  declare const ArticleCardGrid: FC<FeatureCardGridProps>;
7
8
  export default ArticleCardGrid;
@@ -1,10 +1,11 @@
1
1
  import { FC } from 'react';
2
+ import { BoxPositionProps } from '../../../types';
2
3
  type RatingSize = 'sm' | 'md' | 'lg';
3
4
  type RatingProps = {
4
5
  value?: number;
5
6
  max?: number;
6
7
  size?: RatingSize;
7
8
  hasLabel?: boolean;
8
- };
9
+ } & BoxPositionProps;
9
10
  declare const Rating: FC<RatingProps>;
10
11
  export default Rating;
@@ -1,5 +1,6 @@
1
1
  export { FacebookIcon } from './facebook';
2
2
  export { InstagramIcon } from './instagram';
3
+ export { LinkedInIcon } from './linked-in';
3
4
  export { PinterestIcon } from './pinterest';
4
5
  export { XcomIcon } from './x';
5
6
  export { YoutubeIcon } from './youtube';
@@ -0,0 +1,2 @@
1
+ import { IconComponent } from '../../../../../types';
2
+ export declare const LinkedInIcon: IconComponent;
@@ -1,7 +1,7 @@
1
1
  import { FC } from 'react';
2
- import { GameCardHeight, IGameCard } from '../../types';
2
+ import { CardHeight, IGameCard } from '../../types';
3
3
  type GameCardProps = IGameCard & {
4
- height?: GameCardHeight;
4
+ height?: CardHeight;
5
5
  };
6
6
  declare const GameCard: FC<GameCardProps>;
7
7
  export default GameCard;
@@ -1,8 +1,8 @@
1
1
  import { FC } from 'react';
2
- import { BoxPositionProps, GameCardHeight, GridConfigProps, IGameCard } from '../../types';
2
+ import { BoxPositionProps, CardHeight, GridConfigProps, IGameCard } from '../../types';
3
3
  type GameCardGridProps = {
4
4
  items: IGameCard[];
5
- cardHeight?: GameCardHeight;
5
+ cardHeight?: CardHeight;
6
6
  order?: 'default' | 'random';
7
7
  randomSeed?: number;
8
8
  } & GridConfigProps & BoxPositionProps;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const index = require("../index-D-WTkYJu.js");
4
- const index$1 = require("../index-BrpyfyHr.js");
3
+ const index = require("../index-BYl_y0HN.js");
4
+ const index$1 = require("../index-DzOucsVx.js");
5
5
  const index$2 = require("../index-DDg_PkD2.js");
6
- const index$3 = require("../index-BNkvrBOj.js");
6
+ const index$3 = require("../index-B4M1IKzL.js");
7
7
  exports.ActionButton = index.ActionButton;
8
8
  exports.ArticleCard = index.ArticleCard;
9
9
  exports.ArticleCardGrid = index.ArticleCardGrid;
@@ -1,7 +1,7 @@
1
- import { A, a, b, c, n, o, d, B, e, C, r, q, F, f, g, G, h, i, j, p, H, I, L, N, s, P, S, k, T, l, t, m } from "../index-BN9vRBzY.mjs";
2
- import { C as C2, a as a2, b as b2, L as L2, c as c2, R, S as S2, d as d2 } from "../index-CodGh8Sq.mjs";
1
+ import { A, a, b, c, n, o, d, B, e, C, r, q, F, f, g, G, h, i, j, p, H, I, L, N, s, P, S, k, T, l, t, m } from "../index-D9WcltF-.mjs";
2
+ import { C as C2, a as a2, b as b2, L as L2, c as c2, R, S as S2, d as d2 } from "../index-D9i6mZaH.mjs";
3
3
  import { H as H2, a as a3, b as b3, O, P as P2, U } from "../index-BEjKnOZA.mjs";
4
- import { I as I2, L as L3 } from "../index-C3FKVt3V.mjs";
4
+ import { I as I2, L as L3 } from "../index-ClIPWZ3z.mjs";
5
5
  export {
6
6
  A as ActionButton,
7
7
  a as ArticleCard,
@@ -1,5 +1,6 @@
1
1
  import { CardProps } from '@chakra-ui/react';
2
2
  import { InformerType } from '../../types';
3
+ export declare const typesWithPrefix: Lowercase<InformerType>[];
3
4
  export declare function getQuotePseudoElement(color: string): CardProps['_before'];
4
5
  export declare const PrefixMap: Record<Lowercase<InformerType>, string>;
5
6
  export declare const BorderColorMap: Record<Lowercase<InformerType>, CardProps['borderLeftColor']>;
@@ -1,6 +1,6 @@
1
1
  import { FC, PropsWithChildren } from 'react';
2
- import { ILocale, ISeo } from '../../types';
3
- import { IHrefLang, SeoItemGetter } from './types';
2
+ import { IHrefLang, ILocale, ISeo } from '../../types';
3
+ import { SeoItemGetter } from './types';
4
4
  type SeoProps = PropsWithChildren<{
5
5
  title?: ISeo['title'] | SeoItemGetter;
6
6
  description?: ISeo['description'] | SeoItemGetter;
@@ -4,7 +4,3 @@ export interface ISeoItemPlaceholders {
4
4
  currentMonth: string;
5
5
  }
6
6
  export type SeoItemGetter = (placeholders: ISeoItemPlaceholders) => string;
7
- export interface IHrefLang {
8
- href: string;
9
- hrefLang: string;
10
- }
@@ -61,7 +61,7 @@ const Image = ({ src = "", mode = "default", hasZoom, ...plainImageProps }) => {
61
61
  }
62
62
  );
63
63
  } else if (isImageComponent(src)) {
64
- image = mode === "thumbnail" ? /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { aspectRatio: "16/9", children: src }) : src;
64
+ image = /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { ...mode === "thumbnail" && { aspectRatio: "16/9" }, ...plainImageProps, children: src });
65
65
  } else {
66
66
  return null;
67
67
  }
@@ -1,4 +1,7 @@
1
1
  import { DEFAULT_LANGUAGE } from "./i18n/index.mjs";
2
+ function isValidDate(date) {
3
+ return !date ? false : date instanceof Date && !isNaN(date.getTime());
4
+ }
2
5
  function getCurrentYear(locale = DEFAULT_LANGUAGE) {
3
6
  const currentDate = /* @__PURE__ */ new Date();
4
7
  const currentYear = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(currentDate);
@@ -11,8 +14,8 @@ function getCurrentMonth(locale = DEFAULT_LANGUAGE) {
11
14
  }
12
15
  function formatDate({ value, locale = DEFAULT_LANGUAGE, options }) {
13
16
  const date = typeof value === "string" || typeof value === "number" ? new Date(value) : value;
14
- if (isNaN(date.getTime())) {
15
- throw new Error("Invalid date provided");
17
+ if (!isValidDate(date)) {
18
+ return null;
16
19
  }
17
20
  const formatter = new Intl.DateTimeFormat(locale, options);
18
21
  return formatter.format(date);
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const react = require("@chakra-ui/react");
4
- const reactI18next = require("react-i18next");
5
- const react$2 = require("@mdx-js/react");
6
- const index = require("./index-BNkvrBOj.js");
7
- require("./index-C6MG_f24.js");
8
- const index$6 = require("./index-CBRFCYhV.js");
9
4
  require("react-medium-image-zoom");
5
+ const index = require("./index-B4M1IKzL.js");
10
6
  const react$1 = require("react");
7
+ const reactI18next = require("react-i18next");
11
8
  const icons = require("@chakra-ui/icons");
12
9
  const index$3 = require("./index-DDg_PkD2.js");
13
- const index$1 = require("./index-qR3kVjjs.js");
14
- const index$2 = require("./index-BrpyfyHr.js");
10
+ const react$2 = require("@mdx-js/react");
11
+ require("./index-C6MG_f24.js");
12
+ const index$6 = require("./index-CBRFCYhV.js");
13
+ const index$2 = require("./index-DzOucsVx.js");
14
+ const index$1 = require("./index-ov4J7p3D.js");
15
15
  const index$4 = require("./index-CVv755RW.js");
16
16
  const index$5 = require("./index-BfITsKAr.js");
17
17
  const i18next = require("i18next");
@@ -23,15 +23,16 @@ const ArticleMetaItem = ({ label, value }) => {
23
23
  value
24
24
  ] });
25
25
  };
26
- const ArticleMeta = ({ createdAt, updatedAt, minutesToRead, author, variant = "full" }) => {
26
+ const ArticleMeta = ({ createdAt, updatedAt, minutesToRead, authorName, variant = "full" }) => {
27
27
  const { currentLocale } = index.usePageContext();
28
28
  const { t } = reactI18next.useTranslation("article");
29
+ const publicationDate = index$1.formatDate({ value: updatedAt ?? createdAt, locale: currentLocale.code });
29
30
  return /* @__PURE__ */ jsxRuntime.jsxs(react.Flex, { columnGap: 4, rowGap: 2, wrap: "wrap", children: [
30
- /* @__PURE__ */ jsxRuntime.jsx(
31
+ !!publicationDate && /* @__PURE__ */ jsxRuntime.jsx(
31
32
  ArticleMetaItem,
32
33
  {
33
34
  label: variant === "full" ? `📅 ${t("meta.publicationDate")}` : "📅 ",
34
- value: index$1.formatDate({ value: updatedAt ?? createdAt, locale: currentLocale.code })
35
+ value: publicationDate
35
36
  }
36
37
  ),
37
38
  !!minutesToRead && /* @__PURE__ */ jsxRuntime.jsx(
@@ -41,7 +42,7 @@ const ArticleMeta = ({ createdAt, updatedAt, minutesToRead, author, variant = "f
41
42
  value: t("meta.readingTime.count", { count: minutesToRead })
42
43
  }
43
44
  ),
44
- !!author && /* @__PURE__ */ jsxRuntime.jsx(ArticleMetaItem, { label: variant === "full" ? `🧑🏻‍💻 ${t("meta.author")}` : "🧑🏻‍💻 ", value: author.name })
45
+ !!authorName && /* @__PURE__ */ jsxRuntime.jsx(ArticleMetaItem, { label: variant === "full" ? `🧑🏻‍💻 ${t("meta.author")}` : "🧑🏻‍💻 ", value: authorName })
45
46
  ] });
46
47
  };
47
48
  const ONE_LINE_HEIGHT = 24;
@@ -101,19 +102,31 @@ const Grid = ({ items, columns = defaultColumns, gap, render, getKey, ...boxProp
101
102
  const ActionButton = ({ label, href, ...boxProps }) => {
102
103
  return /* @__PURE__ */ jsxRuntime.jsx(react.Flex, { justifyContent: "center", ...boxProps, children: /* @__PURE__ */ jsxRuntime.jsx(index$2.LinkButton, { label, href, textDecoration: "none" }) });
103
104
  };
104
- const ArticleCard = ({ title, image, meta, url }) => {
105
- return /* @__PURE__ */ jsxRuntime.jsxs(react.Card, { as: index.Link, to: url, overflow: "hidden", _hover: { transform: "scale(1.02)", textDecoration: "none" }, children: [
106
- /* @__PURE__ */ jsxRuntime.jsxs(react.CardBody, { as: "section", p: 0, children: [
107
- !!image && /* @__PURE__ */ jsxRuntime.jsx(index.Image, { src: image, alt: title, mode: "thumbnail" }),
108
- /* @__PURE__ */ jsxRuntime.jsx(index$3.Heading2, { size: "md", px: 4, children: title })
109
- ] }),
110
- !!meta && /* @__PURE__ */ jsxRuntime.jsx(react.CardFooter, { as: "footer", fontSize: "sm", pt: 0, px: 4, children: /* @__PURE__ */ jsxRuntime.jsx(ArticleMeta, { ...meta, variant: "short" }) })
111
- ] });
105
+ const ArticleCard = ({ title, image, meta, url, height }) => {
106
+ return /* @__PURE__ */ jsxRuntime.jsxs(
107
+ react.Card,
108
+ {
109
+ as: index.Link,
110
+ to: url,
111
+ overflow: "hidden",
112
+ height,
113
+ pb: 4,
114
+ _hover: { transform: "scale(1.02)", textDecoration: "none" },
115
+ children: [
116
+ /* @__PURE__ */ jsxRuntime.jsxs(react.CardBody, { as: "section", p: 0, children: [
117
+ !!image && /* @__PURE__ */ jsxRuntime.jsx(index.Image, { src: image, alt: title, mode: "thumbnail" }),
118
+ /* @__PURE__ */ jsxRuntime.jsx(index$3.Heading2, { size: "md", mt: 4, mb: 0, px: 4, children: title })
119
+ ] }),
120
+ !!meta && /* @__PURE__ */ jsxRuntime.jsx(react.CardFooter, { as: "footer", fontSize: "sm", mt: 2, py: 0, px: 4, children: /* @__PURE__ */ jsxRuntime.jsx(ArticleMeta, { ...meta, variant: "short" }) })
121
+ ]
122
+ }
123
+ );
112
124
  };
113
125
  const ArticleCardGrid = ({
114
126
  items,
115
127
  columns = { base: 1, md: 2, lg: 3 },
116
128
  gap = 4,
129
+ cardHeight = "full",
117
130
  ...boxProps
118
131
  }) => {
119
132
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -123,16 +136,16 @@ const ArticleCardGrid = ({
123
136
  columns,
124
137
  gap,
125
138
  getKey: (_, index2) => index2,
126
- render: (item) => /* @__PURE__ */ jsxRuntime.jsx(ArticleCard, { ...item }),
139
+ render: (item) => /* @__PURE__ */ jsxRuntime.jsx(ArticleCard, { ...item, height: cardHeight }),
127
140
  ...boxProps
128
141
  }
129
142
  );
130
143
  };
131
144
  const ArticleInfoCard = ({ title, description, meta, ...boxProps }) => {
132
- return /* @__PURE__ */ jsxRuntime.jsxs(react.Card, { as: "article", variant: "filled", ...boxProps, children: [
133
- /* @__PURE__ */ jsxRuntime.jsx(react.CardHeader, { as: "header", pb: 0, children: /* @__PURE__ */ jsxRuntime.jsx(index$3.Heading1, { children: title }) }),
134
- /* @__PURE__ */ jsxRuntime.jsx(react.CardBody, { as: "section", py: 0, children: description }),
135
- !!meta && /* @__PURE__ */ jsxRuntime.jsx(react.CardFooter, { as: "footer", children: /* @__PURE__ */ jsxRuntime.jsx(ArticleMeta, { ...meta }) })
145
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.Card, { as: "article", variant: "filled", p: 5, pb: 2, ...boxProps, children: [
146
+ /* @__PURE__ */ jsxRuntime.jsx(react.CardHeader, { as: "header", p: 0, children: /* @__PURE__ */ jsxRuntime.jsx(index$3.Heading1, { children: title }) }),
147
+ !!description && /* @__PURE__ */ jsxRuntime.jsx(react.CardBody, { as: "section", p: 0, mb: 3, children: description }),
148
+ !!meta && /* @__PURE__ */ jsxRuntime.jsx(react.CardFooter, { as: "footer", p: 0, mb: 3, children: /* @__PURE__ */ jsxRuntime.jsx(ArticleMeta, { ...meta }) })
136
149
  ] });
137
150
  };
138
151
  const AuthorCard = ({ author, ...boxProps }) => {
@@ -268,7 +281,8 @@ const FeatureCardGrid = ({
268
281
  }
269
282
  );
270
283
  };
271
- const GameCard = ({ name, description, image, url, height = "auto" }) => {
284
+ const GameCard = ({ name, description, image, url, rating, height = "auto" }) => {
285
+ const descriptionColor = react.useColorModeValue("gray.600", "gray.400");
272
286
  return /* @__PURE__ */ jsxRuntime.jsxs(
273
287
  react.LinkBox,
274
288
  {
@@ -278,14 +292,16 @@ const GameCard = ({ name, description, image, url, height = "auto" }) => {
278
292
  transition: "transform 0.2s ease",
279
293
  cursor: url ? "pointer" : "default",
280
294
  overflow: "hidden",
281
- bg: "blackAlpha.200",
282
295
  height,
283
- _hover: { transform: "scale(1.05)" },
296
+ _hover: url ? { transform: "scale(1.05)" } : {},
284
297
  children: [
285
298
  /* @__PURE__ */ jsxRuntime.jsx(index.Image, { src: image, alt: name, mode: "thumbnail" }),
286
299
  /* @__PURE__ */ jsxRuntime.jsxs(react.Box, { as: "section", rounded: "md", p: 4, children: [
287
- /* @__PURE__ */ jsxRuntime.jsx(react.Text, { as: "span", children: url ? /* @__PURE__ */ jsxRuntime.jsx(react.LinkOverlay, { as: index.Link, to: url, children: name }) : name }),
288
- !!description && /* @__PURE__ */ jsxRuntime.jsx(react.Text, { fontSize: "sm", color: "gray.600", children: description })
300
+ /* @__PURE__ */ jsxRuntime.jsxs(react.Flex, { justify: "space-between", align: "flex-start", children: [
301
+ /* @__PURE__ */ jsxRuntime.jsx(react.Text, { as: "span", fontWeight: "semibold", children: url ? /* @__PURE__ */ jsxRuntime.jsx(react.LinkOverlay, { as: index.Link, to: url, _hover: { textDecoration: "none" }, children: name }) : name }),
302
+ !!rating && /* @__PURE__ */ jsxRuntime.jsx(index$2.Rating, { value: rating, size: "sm", py: 1 })
303
+ ] }),
304
+ !!description && /* @__PURE__ */ jsxRuntime.jsx(react.Text, { fontSize: "sm", color: descriptionColor, mt: 2, children: description })
289
305
  ] })
290
306
  ]
291
307
  }
@@ -438,6 +454,7 @@ const GameDemoPreview = ({ image, alt, src, refLink, imageFit = "cover", onPlayD
438
454
  !src && /* @__PURE__ */ jsxRuntime.jsx(GameDemoAlert, {}),
439
455
  /* @__PURE__ */ jsxRuntime.jsxs(react.Box, { position: "relative", flex: 1, children: [
440
456
  /* @__PURE__ */ jsxRuntime.jsx(index.Image, { src: image, alt, objectFit: imageFit, w: "100%", h: "100%" }),
457
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "full", h: "full", position: "absolute", inset: 0, background: "blackAlpha.500" }),
441
458
  /* @__PURE__ */ jsxRuntime.jsx(react.AbsoluteCenter, { children: /* @__PURE__ */ jsxRuntime.jsxs(react.Stack, { spacing: 4, children: [
442
459
  getPrimaryButton(),
443
460
  getSecondaryButton()
@@ -540,7 +557,7 @@ function getGameInfoItemValue(key, value, locale) {
540
557
  }
541
558
  }
542
559
  if (key === index$6.GameCharacteristic.ReleaseDate) {
543
- formattedValue = index$1.formatDate({ value, locale, options: { year: "numeric", month: "long" } });
560
+ formattedValue = index$1.formatDate({ value, locale, options: { year: "numeric", month: "long" } }) ?? "???";
544
561
  }
545
562
  if (key === index$6.GameCharacteristic.Volatility && Object.values(index$6.GameVolatility).includes(value)) {
546
563
  formattedValue = stringifyVolatility(value);
@@ -596,6 +613,7 @@ const HowTo = ({ steps, ...boxProps }) => {
596
613
  ] })
597
614
  ] }, index$12)) });
598
615
  };
616
+ const typesWithPrefix = ["advice", "fact"];
599
617
  function getQuotePseudoElement(color) {
600
618
  return {
601
619
  content: '"❛❛"',
@@ -632,7 +650,7 @@ const Informer = ({ type, text, author = null, ...boxProps }) => {
632
650
  ...boxProps,
633
651
  children: [
634
652
  /* @__PURE__ */ jsxRuntime.jsxs(react.CardBody, { as: "blockquote", p: 0, fontStyle: "italic", children: [
635
- type !== "quote" && /* @__PURE__ */ jsxRuntime.jsxs(react.Text, { as: "span", fontStyle: "normal", fontWeight: "semibold", mr: 2, children: [
653
+ typesWithPrefix.includes(type) && /* @__PURE__ */ jsxRuntime.jsxs(react.Text, { as: "span", fontStyle: "normal", fontWeight: "semibold", mr: 2, children: [
636
654
  PrefixMap[type],
637
655
  t(type),
638
656
  ":"
@@ -1022,6 +1040,33 @@ const StrapiComponent = ({ type, props, imageComponent }) => {
1022
1040
  switch (type) {
1023
1041
  case "STRAPI__COMPONENT_CONTENT_ACTION_BUTTON":
1024
1042
  return /* @__PURE__ */ jsxRuntime.jsx(ActionButton, { label: props.label, href: props.url, mb: 4 });
1043
+ case "STRAPI__COMPONENT_CONTENT_ARTICLE_CARDS":
1044
+ return /* @__PURE__ */ jsxRuntime.jsx(
1045
+ ArticleCardGrid,
1046
+ {
1047
+ items: props.articles.map(
1048
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1049
+ ({ title, slug, hub, author, minutesToRead, createdAt, updatedAt, previewImage }) => {
1050
+ const url = hub.slug ? `${hub.slug}/${slug}` : slug;
1051
+ const articlePreview = {
1052
+ title,
1053
+ url,
1054
+ meta: { createdAt, updatedAt, minutesToRead, authorName: (author == null ? void 0 : author.name) ?? "" },
1055
+ image: /* @__PURE__ */ jsxRuntime.jsx(
1056
+ ExternalImage,
1057
+ {
1058
+ image: previewImage,
1059
+ alt: title,
1060
+ component: imageComponent
1061
+ }
1062
+ )
1063
+ };
1064
+ return articlePreview;
1065
+ }
1066
+ ),
1067
+ mb: 4
1068
+ }
1069
+ );
1025
1070
  case "STRAPI__COMPONENT_CONTENT_FAQ":
1026
1071
  return /* @__PURE__ */ jsxRuntime.jsx(Faq, { items: props.items, mb: 4 });
1027
1072
  case "STRAPI__COMPONENT_CONTENT_FEATURES":
@@ -60,7 +60,7 @@ const Image = ({ src = "", mode = "default", hasZoom, ...plainImageProps }) => {
60
60
  }
61
61
  );
62
62
  } else if (isImageComponent(src)) {
63
- image = mode === "thumbnail" ? /* @__PURE__ */ jsx(Box, { aspectRatio: "16/9", children: src }) : src;
63
+ image = /* @__PURE__ */ jsx(Box, { ...mode === "thumbnail" && { aspectRatio: "16/9" }, ...plainImageProps, children: src });
64
64
  } else {
65
65
  return null;
66
66
  }
@@ -2,7 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { MDXProvider } from "@mdx-js/react";
3
3
  import "react-i18next";
4
4
  import "@chakra-ui/react";
5
- import { I as Image, L as Link } from "./index-C3FKVt3V.mjs";
5
+ import { I as Image, L as Link } from "./index-ClIPWZ3z.mjs";
6
6
  import "./index-BJRvnR8Q.mjs";
7
7
  import "./index-RzByAgHO.mjs";
8
8
  import "react";
@@ -1,16 +1,16 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { useColorModeValue, Box, Text, Flex, Collapse, Button, Stack, Center as Center$1, SimpleGrid, Card, CardBody, CardFooter, CardHeader, Heading, Popover, PopoverTrigger, Portal, PopoverContent, PopoverBody, Accordion, AccordionItem, AccordionButton, AccordionIcon, AccordionPanel, LinkBox, LinkOverlay, IconButton, AbsoluteCenter, Spinner, Alert, AlertIcon, AlertTitle, AlertDescription, useDisclosure, Divider, Circle, List as List$1, ListItem, useToast, VStack, FormControl, FormLabel, InputGroup, InputLeftElement, Input, Textarea, ListIcon, TableContainer, Table as Table$1, Thead, Tr, Th, Tbody, Td, TableCaption, Tabs as Tabs$1, TabList, Tab, TabPanels, TabPanel } from "@chakra-ui/react";
3
- import { useTranslation } from "react-i18next";
4
- import { useMDXComponents } from "@mdx-js/react";
5
- import { u as usePageContext, I as Image, L as Link, a as useSiteContext } from "./index-C3FKVt3V.mjs";
6
- import "./index-BJRvnR8Q.mjs";
7
- import { b as GameCharacteristic, G as GameVolatility } from "./index-RzByAgHO.mjs";
8
3
  import "react-medium-image-zoom";
4
+ import { u as usePageContext, I as Image, L as Link, a as useSiteContext } from "./index-ClIPWZ3z.mjs";
9
5
  import { useRef, useState, useLayoutEffect, Fragment as Fragment$1, useMemo } from "react";
6
+ import { useTranslation } from "react-i18next";
10
7
  import { StarIcon, CloseIcon, ViewOffIcon, ViewIcon, EmailIcon, WarningIcon, CheckCircleIcon } from "@chakra-ui/icons";
11
8
  import { a as Heading2, H as Heading1, P as Paragraph, U as Unordered, O as Ordered } from "./index-BEjKnOZA.mjs";
12
- import { f as formatDate, b as formatNumber, a as getCurrentMonth, g as getCurrentYear } from "./index-C7z5qqm_.mjs";
13
- import { d as SocialNetworks, L as LinkButton } from "./index-CodGh8Sq.mjs";
9
+ import { useMDXComponents } from "@mdx-js/react";
10
+ import "./index-BJRvnR8Q.mjs";
11
+ import { b as GameCharacteristic, G as GameVolatility } from "./index-RzByAgHO.mjs";
12
+ import { d as SocialNetworks, L as LinkButton, R as Rating } from "./index-D9i6mZaH.mjs";
13
+ import { f as formatDate, b as formatNumber, a as getCurrentMonth, g as getCurrentYear } from "./index-BPthShL-.mjs";
14
14
  import { u as usePrimaryColors } from "./index-C1kr7Vd-.mjs";
15
15
  import { a as getSeededRandomComparator, r as randomComparator, g as getCurrencySymbol } from "./index-BeJTy4iY.mjs";
16
16
  import { t } from "i18next";
@@ -22,15 +22,16 @@ const ArticleMetaItem = ({ label, value }) => {
22
22
  value
23
23
  ] });
24
24
  };
25
- const ArticleMeta = ({ createdAt, updatedAt, minutesToRead, author, variant = "full" }) => {
25
+ const ArticleMeta = ({ createdAt, updatedAt, minutesToRead, authorName, variant = "full" }) => {
26
26
  const { currentLocale } = usePageContext();
27
27
  const { t: t2 } = useTranslation("article");
28
+ const publicationDate = formatDate({ value: updatedAt ?? createdAt, locale: currentLocale.code });
28
29
  return /* @__PURE__ */ jsxs(Flex, { columnGap: 4, rowGap: 2, wrap: "wrap", children: [
29
- /* @__PURE__ */ jsx(
30
+ !!publicationDate && /* @__PURE__ */ jsx(
30
31
  ArticleMetaItem,
31
32
  {
32
33
  label: variant === "full" ? `📅 ${t2("meta.publicationDate")}` : "📅 ",
33
- value: formatDate({ value: updatedAt ?? createdAt, locale: currentLocale.code })
34
+ value: publicationDate
34
35
  }
35
36
  ),
36
37
  !!minutesToRead && /* @__PURE__ */ jsx(
@@ -40,7 +41,7 @@ const ArticleMeta = ({ createdAt, updatedAt, minutesToRead, author, variant = "f
40
41
  value: t2("meta.readingTime.count", { count: minutesToRead })
41
42
  }
42
43
  ),
43
- !!author && /* @__PURE__ */ jsx(ArticleMetaItem, { label: variant === "full" ? `🧑🏻‍💻 ${t2("meta.author")}` : "🧑🏻‍💻 ", value: author.name })
44
+ !!authorName && /* @__PURE__ */ jsx(ArticleMetaItem, { label: variant === "full" ? `🧑🏻‍💻 ${t2("meta.author")}` : "🧑🏻‍💻 ", value: authorName })
44
45
  ] });
45
46
  };
46
47
  const ONE_LINE_HEIGHT = 24;
@@ -100,19 +101,31 @@ const Grid = ({ items, columns = defaultColumns, gap, render, getKey, ...boxProp
100
101
  const ActionButton = ({ label, href, ...boxProps }) => {
101
102
  return /* @__PURE__ */ jsx(Flex, { justifyContent: "center", ...boxProps, children: /* @__PURE__ */ jsx(LinkButton, { label, href, textDecoration: "none" }) });
102
103
  };
103
- const ArticleCard = ({ title, image, meta, url }) => {
104
- return /* @__PURE__ */ jsxs(Card, { as: Link, to: url, overflow: "hidden", _hover: { transform: "scale(1.02)", textDecoration: "none" }, children: [
105
- /* @__PURE__ */ jsxs(CardBody, { as: "section", p: 0, children: [
106
- !!image && /* @__PURE__ */ jsx(Image, { src: image, alt: title, mode: "thumbnail" }),
107
- /* @__PURE__ */ jsx(Heading2, { size: "md", px: 4, children: title })
108
- ] }),
109
- !!meta && /* @__PURE__ */ jsx(CardFooter, { as: "footer", fontSize: "sm", pt: 0, px: 4, children: /* @__PURE__ */ jsx(ArticleMeta, { ...meta, variant: "short" }) })
110
- ] });
104
+ const ArticleCard = ({ title, image, meta, url, height }) => {
105
+ return /* @__PURE__ */ jsxs(
106
+ Card,
107
+ {
108
+ as: Link,
109
+ to: url,
110
+ overflow: "hidden",
111
+ height,
112
+ pb: 4,
113
+ _hover: { transform: "scale(1.02)", textDecoration: "none" },
114
+ children: [
115
+ /* @__PURE__ */ jsxs(CardBody, { as: "section", p: 0, children: [
116
+ !!image && /* @__PURE__ */ jsx(Image, { src: image, alt: title, mode: "thumbnail" }),
117
+ /* @__PURE__ */ jsx(Heading2, { size: "md", mt: 4, mb: 0, px: 4, children: title })
118
+ ] }),
119
+ !!meta && /* @__PURE__ */ jsx(CardFooter, { as: "footer", fontSize: "sm", mt: 2, py: 0, px: 4, children: /* @__PURE__ */ jsx(ArticleMeta, { ...meta, variant: "short" }) })
120
+ ]
121
+ }
122
+ );
111
123
  };
112
124
  const ArticleCardGrid = ({
113
125
  items,
114
126
  columns = { base: 1, md: 2, lg: 3 },
115
127
  gap = 4,
128
+ cardHeight = "full",
116
129
  ...boxProps
117
130
  }) => {
118
131
  return /* @__PURE__ */ jsx(
@@ -122,16 +135,16 @@ const ArticleCardGrid = ({
122
135
  columns,
123
136
  gap,
124
137
  getKey: (_, index) => index,
125
- render: (item) => /* @__PURE__ */ jsx(ArticleCard, { ...item }),
138
+ render: (item) => /* @__PURE__ */ jsx(ArticleCard, { ...item, height: cardHeight }),
126
139
  ...boxProps
127
140
  }
128
141
  );
129
142
  };
130
143
  const ArticleInfoCard = ({ title, description, meta, ...boxProps }) => {
131
- return /* @__PURE__ */ jsxs(Card, { as: "article", variant: "filled", ...boxProps, children: [
132
- /* @__PURE__ */ jsx(CardHeader, { as: "header", pb: 0, children: /* @__PURE__ */ jsx(Heading1, { children: title }) }),
133
- /* @__PURE__ */ jsx(CardBody, { as: "section", py: 0, children: description }),
134
- !!meta && /* @__PURE__ */ jsx(CardFooter, { as: "footer", children: /* @__PURE__ */ jsx(ArticleMeta, { ...meta }) })
144
+ return /* @__PURE__ */ jsxs(Card, { as: "article", variant: "filled", p: 5, pb: 2, ...boxProps, children: [
145
+ /* @__PURE__ */ jsx(CardHeader, { as: "header", p: 0, children: /* @__PURE__ */ jsx(Heading1, { children: title }) }),
146
+ !!description && /* @__PURE__ */ jsx(CardBody, { as: "section", p: 0, mb: 3, children: description }),
147
+ !!meta && /* @__PURE__ */ jsx(CardFooter, { as: "footer", p: 0, mb: 3, children: /* @__PURE__ */ jsx(ArticleMeta, { ...meta }) })
135
148
  ] });
136
149
  };
137
150
  const AuthorCard = ({ author, ...boxProps }) => {
@@ -267,7 +280,8 @@ const FeatureCardGrid = ({
267
280
  }
268
281
  );
269
282
  };
270
- const GameCard = ({ name, description, image, url, height = "auto" }) => {
283
+ const GameCard = ({ name, description, image, url, rating, height = "auto" }) => {
284
+ const descriptionColor = useColorModeValue("gray.600", "gray.400");
271
285
  return /* @__PURE__ */ jsxs(
272
286
  LinkBox,
273
287
  {
@@ -277,14 +291,16 @@ const GameCard = ({ name, description, image, url, height = "auto" }) => {
277
291
  transition: "transform 0.2s ease",
278
292
  cursor: url ? "pointer" : "default",
279
293
  overflow: "hidden",
280
- bg: "blackAlpha.200",
281
294
  height,
282
- _hover: { transform: "scale(1.05)" },
295
+ _hover: url ? { transform: "scale(1.05)" } : {},
283
296
  children: [
284
297
  /* @__PURE__ */ jsx(Image, { src: image, alt: name, mode: "thumbnail" }),
285
298
  /* @__PURE__ */ jsxs(Box, { as: "section", rounded: "md", p: 4, children: [
286
- /* @__PURE__ */ jsx(Text, { as: "span", children: url ? /* @__PURE__ */ jsx(LinkOverlay, { as: Link, to: url, children: name }) : name }),
287
- !!description && /* @__PURE__ */ jsx(Text, { fontSize: "sm", color: "gray.600", children: description })
299
+ /* @__PURE__ */ jsxs(Flex, { justify: "space-between", align: "flex-start", children: [
300
+ /* @__PURE__ */ jsx(Text, { as: "span", fontWeight: "semibold", children: url ? /* @__PURE__ */ jsx(LinkOverlay, { as: Link, to: url, _hover: { textDecoration: "none" }, children: name }) : name }),
301
+ !!rating && /* @__PURE__ */ jsx(Rating, { value: rating, size: "sm", py: 1 })
302
+ ] }),
303
+ !!description && /* @__PURE__ */ jsx(Text, { fontSize: "sm", color: descriptionColor, mt: 2, children: description })
288
304
  ] })
289
305
  ]
290
306
  }
@@ -437,6 +453,7 @@ const GameDemoPreview = ({ image, alt, src, refLink, imageFit = "cover", onPlayD
437
453
  !src && /* @__PURE__ */ jsx(GameDemoAlert, {}),
438
454
  /* @__PURE__ */ jsxs(Box, { position: "relative", flex: 1, children: [
439
455
  /* @__PURE__ */ jsx(Image, { src: image, alt, objectFit: imageFit, w: "100%", h: "100%" }),
456
+ /* @__PURE__ */ jsx(Box, { w: "full", h: "full", position: "absolute", inset: 0, background: "blackAlpha.500" }),
440
457
  /* @__PURE__ */ jsx(AbsoluteCenter, { children: /* @__PURE__ */ jsxs(Stack, { spacing: 4, children: [
441
458
  getPrimaryButton(),
442
459
  getSecondaryButton()
@@ -539,7 +556,7 @@ function getGameInfoItemValue(key, value, locale) {
539
556
  }
540
557
  }
541
558
  if (key === GameCharacteristic.ReleaseDate) {
542
- formattedValue = formatDate({ value, locale, options: { year: "numeric", month: "long" } });
559
+ formattedValue = formatDate({ value, locale, options: { year: "numeric", month: "long" } }) ?? "???";
543
560
  }
544
561
  if (key === GameCharacteristic.Volatility && Object.values(GameVolatility).includes(value)) {
545
562
  formattedValue = stringifyVolatility(value);
@@ -595,6 +612,7 @@ const HowTo = ({ steps, ...boxProps }) => {
595
612
  ] })
596
613
  ] }, index)) });
597
614
  };
615
+ const typesWithPrefix = ["advice", "fact"];
598
616
  function getQuotePseudoElement(color) {
599
617
  return {
600
618
  content: '"❛❛"',
@@ -631,7 +649,7 @@ const Informer = ({ type, text, author = null, ...boxProps }) => {
631
649
  ...boxProps,
632
650
  children: [
633
651
  /* @__PURE__ */ jsxs(CardBody, { as: "blockquote", p: 0, fontStyle: "italic", children: [
634
- type !== "quote" && /* @__PURE__ */ jsxs(Text, { as: "span", fontStyle: "normal", fontWeight: "semibold", mr: 2, children: [
652
+ typesWithPrefix.includes(type) && /* @__PURE__ */ jsxs(Text, { as: "span", fontStyle: "normal", fontWeight: "semibold", mr: 2, children: [
635
653
  PrefixMap[type],
636
654
  t2(type),
637
655
  ":"
@@ -1021,6 +1039,33 @@ const StrapiComponent = ({ type, props, imageComponent }) => {
1021
1039
  switch (type) {
1022
1040
  case "STRAPI__COMPONENT_CONTENT_ACTION_BUTTON":
1023
1041
  return /* @__PURE__ */ jsx(ActionButton, { label: props.label, href: props.url, mb: 4 });
1042
+ case "STRAPI__COMPONENT_CONTENT_ARTICLE_CARDS":
1043
+ return /* @__PURE__ */ jsx(
1044
+ ArticleCardGrid,
1045
+ {
1046
+ items: props.articles.map(
1047
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1048
+ ({ title, slug, hub, author, minutesToRead, createdAt, updatedAt, previewImage }) => {
1049
+ const url = hub.slug ? `${hub.slug}/${slug}` : slug;
1050
+ const articlePreview = {
1051
+ title,
1052
+ url,
1053
+ meta: { createdAt, updatedAt, minutesToRead, authorName: (author == null ? void 0 : author.name) ?? "" },
1054
+ image: /* @__PURE__ */ jsx(
1055
+ ExternalImage,
1056
+ {
1057
+ image: previewImage,
1058
+ alt: title,
1059
+ component: imageComponent
1060
+ }
1061
+ )
1062
+ };
1063
+ return articlePreview;
1064
+ }
1065
+ ),
1066
+ mb: 4
1067
+ }
1068
+ );
1024
1069
  case "STRAPI__COMPONENT_CONTENT_FAQ":
1025
1070
  return /* @__PURE__ */ jsx(Faq, { items: props.items, mb: 4 });
1026
1071
  case "STRAPI__COMPONENT_CONTENT_FEATURES":
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
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-C3FKVt3V.mjs";
3
+ import { L as Link, a as useSiteContext, I as Image, u as usePageContext } from "./index-ClIPWZ3z.mjs";
4
4
  import "@mdx-js/react";
5
5
  import { useTranslation } from "react-i18next";
6
6
  import { A as Animation } from "./index-BJRvnR8Q.mjs";
@@ -9,7 +9,7 @@ import "react";
9
9
  import { CheckIcon, CopyIcon, StarIcon } from "@chakra-ui/icons";
10
10
  import "react-medium-image-zoom";
11
11
  import { u as usePrimaryColors } from "./index-C1kr7Vd-.mjs";
12
- import { b as formatNumber } from "./index-C7z5qqm_.mjs";
12
+ import { b as formatNumber } from "./index-BPthShL-.mjs";
13
13
  const FacebookIcon = (props) => {
14
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
15
  /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "22", height: "22", rx: "5", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
@@ -40,6 +40,18 @@ const InstagramIcon = (props) => {
40
40
  }
41
41
  );
42
42
  };
43
+ const LinkedInIcon = (props) => {
44
+ return /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", "aria-label": "LinkedIn", ...props, children: [
45
+ /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "22", height: "22", rx: "5", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
46
+ /* @__PURE__ */ jsx(
47
+ "path",
48
+ {
49
+ d: "M7.2 10H9v7H7.2v-7ZM8.1 7.5c.6 0 1-.4 1-.9s-.4-.9-1-.9-1 .4-1 .9.4.9 1 .9ZM10.5 10h1.7v1h.1c.3-.6 1-.9 1.8-.9 1.6 0 2.4.9 2.4 2.7V17H15v-3.9c0-.9-.3-1.4-1.1-1.4-.7 0-1.1.5-1.1 1.4V17h-1.7v-7Z",
50
+ fill: "currentColor"
51
+ }
52
+ )
53
+ ] });
54
+ };
43
55
  const PinterestIcon = (props) => {
44
56
  return /* @__PURE__ */ jsx(
45
57
  "svg",
@@ -81,6 +93,7 @@ const YoutubeIcon = (props) => {
81
93
  const SocialNetworkMap = {
82
94
  facebook: FacebookIcon,
83
95
  instagram: InstagramIcon,
96
+ linkedin: LinkedInIcon,
84
97
  pinterest: PinterestIcon,
85
98
  x: XcomIcon,
86
99
  youtube: YoutubeIcon
@@ -161,21 +174,23 @@ const LinkButton = ({
161
174
  const Logo = () => {
162
175
  const { metadata } = useSiteContext();
163
176
  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" }) });
177
+ return /* @__PURE__ */ jsx(Box, { display: "flex", h: { base: 10, md: 14 }, alignSelf: "center", overflow: "hidden", children: /* @__PURE__ */ jsx(Image, { src: logo, alt: "Logo", objectFit: "contain" }) });
165
178
  };
166
179
  const StarSizeMap = {
167
- sm: 12,
168
- md: 16,
169
- lg: 20
180
+ sm: "1rem",
181
+ md: "1.5rem",
182
+ lg: "2rem"
170
183
  };
171
184
  const FontSizeMap = {
172
185
  sm: "xs",
173
186
  md: "sm",
174
187
  lg: "md"
175
188
  };
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) => {
189
+ const Rating = ({ value = 0, max = 5, size = "md", hasLabel, ...boxProps }) => {
190
+ const positiveValue = Math.max(value, 0);
191
+ const normalizedValue = positiveValue === max ? positiveValue : positiveValue % max;
192
+ const current = Math.round(Math.min(normalizedValue, max));
193
+ const stars = /* @__PURE__ */ jsx(Flex, { gap: 1, title: `${current}/${max}`, ...boxProps, children: Array.from({ length: max }, (_, i) => {
179
194
  const index = i + 1;
180
195
  const isActive = index <= current;
181
196
  return /* @__PURE__ */ jsx(
@@ -384,10 +399,13 @@ const CasinoTable = ({ casinos, showHeader = false }) => {
384
399
  {
385
400
  position: { base: "absolute", md: showHeader ? "static" : "absolute" },
386
401
  opacity: { base: 0, md: showHeader ? "initial" : 0 },
402
+ w: { base: 0, md: showHeader ? "auto" : 0 },
403
+ h: { base: 0, md: showHeader ? "auto" : 0 },
404
+ overflow: "hidden",
387
405
  children: /* @__PURE__ */ jsx(Tr, { children: columns.map((column) => /* @__PURE__ */ jsx(Th, { textAlign: "center", p: 2, children: t(`column.${column}`) }, column)) })
388
406
  }
389
407
  ),
390
- /* @__PURE__ */ jsx(Tbody, { children: casinos.map(({ id, ...casino }, index) => /* @__PURE__ */ jsx(CasinoTableRow, { casino: { id: String(index + 1), ...casino } }, id)) })
408
+ /* @__PURE__ */ jsx(Tbody, { display: { base: "grid", md: "table-row-group" }, children: casinos.map(({ id, ...casino }, index) => /* @__PURE__ */ jsx(CasinoTableRow, { casino: { id: String(index + 1), ...casino } }, id)) })
391
409
  ] });
392
410
  };
393
411
  export {
@@ -3,7 +3,7 @@ const jsxRuntime = require("react/jsx-runtime");
3
3
  const react = require("@mdx-js/react");
4
4
  require("react-i18next");
5
5
  require("@chakra-ui/react");
6
- const index$1 = require("./index-BNkvrBOj.js");
6
+ const index$1 = require("./index-B4M1IKzL.js");
7
7
  require("./index-C6MG_f24.js");
8
8
  require("./index-CBRFCYhV.js");
9
9
  require("react");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const react = require("@chakra-ui/react");
4
- const index = require("./index-BNkvrBOj.js");
4
+ const index = require("./index-B4M1IKzL.js");
5
5
  require("@mdx-js/react");
6
6
  const reactI18next = require("react-i18next");
7
7
  const index$2 = require("./index-C6MG_f24.js");
@@ -10,7 +10,7 @@ require("react");
10
10
  const icons = require("@chakra-ui/icons");
11
11
  require("react-medium-image-zoom");
12
12
  const index$1 = require("./index-CVv755RW.js");
13
- const index$4 = require("./index-qR3kVjjs.js");
13
+ const index$4 = require("./index-ov4J7p3D.js");
14
14
  const FacebookIcon = (props) => {
15
15
  return /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", "aria-label": "Facebook", ...props, children: [
16
16
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "1", y: "1", width: "22", height: "22", rx: "5", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
@@ -41,6 +41,18 @@ const InstagramIcon = (props) => {
41
41
  }
42
42
  );
43
43
  };
44
+ const LinkedInIcon = (props) => {
45
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", "aria-label": "LinkedIn", ...props, children: [
46
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "1", y: "1", width: "22", height: "22", rx: "5", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
47
+ /* @__PURE__ */ jsxRuntime.jsx(
48
+ "path",
49
+ {
50
+ d: "M7.2 10H9v7H7.2v-7ZM8.1 7.5c.6 0 1-.4 1-.9s-.4-.9-1-.9-1 .4-1 .9.4.9 1 .9ZM10.5 10h1.7v1h.1c.3-.6 1-.9 1.8-.9 1.6 0 2.4.9 2.4 2.7V17H15v-3.9c0-.9-.3-1.4-1.1-1.4-.7 0-1.1.5-1.1 1.4V17h-1.7v-7Z",
51
+ fill: "currentColor"
52
+ }
53
+ )
54
+ ] });
55
+ };
44
56
  const PinterestIcon = (props) => {
45
57
  return /* @__PURE__ */ jsxRuntime.jsx(
46
58
  "svg",
@@ -82,6 +94,7 @@ const YoutubeIcon = (props) => {
82
94
  const SocialNetworkMap = {
83
95
  facebook: FacebookIcon,
84
96
  instagram: InstagramIcon,
97
+ linkedin: LinkedInIcon,
85
98
  pinterest: PinterestIcon,
86
99
  x: XcomIcon,
87
100
  youtube: YoutubeIcon
@@ -162,21 +175,23 @@ const LinkButton = ({
162
175
  const Logo = () => {
163
176
  const { metadata } = index.useSiteContext();
164
177
  const { logo } = metadata;
165
- return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { display: "flex", h: { base: 10, md: 14 }, overflow: "hidden", children: /* @__PURE__ */ jsxRuntime.jsx(index.Image, { src: logo, alt: "Logo", objectFit: "contain" }) });
178
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { display: "flex", h: { base: 10, md: 14 }, alignSelf: "center", overflow: "hidden", children: /* @__PURE__ */ jsxRuntime.jsx(index.Image, { src: logo, alt: "Logo", objectFit: "contain" }) });
166
179
  };
167
180
  const StarSizeMap = {
168
- sm: 12,
169
- md: 16,
170
- lg: 20
181
+ sm: "1rem",
182
+ md: "1.5rem",
183
+ lg: "2rem"
171
184
  };
172
185
  const FontSizeMap = {
173
186
  sm: "xs",
174
187
  md: "sm",
175
188
  lg: "md"
176
189
  };
177
- const Rating = ({ value = 0, max = 5, size = "md", hasLabel }) => {
178
- const current = Math.round(Math.min(value, max));
179
- const stars = /* @__PURE__ */ jsxRuntime.jsx(react.Flex, { gap: 1, children: Array.from({ length: max }, (_, i) => {
190
+ const Rating = ({ value = 0, max = 5, size = "md", hasLabel, ...boxProps }) => {
191
+ const positiveValue = Math.max(value, 0);
192
+ const normalizedValue = positiveValue === max ? positiveValue : positiveValue % max;
193
+ const current = Math.round(Math.min(normalizedValue, max));
194
+ const stars = /* @__PURE__ */ jsxRuntime.jsx(react.Flex, { gap: 1, title: `${current}/${max}`, ...boxProps, children: Array.from({ length: max }, (_, i) => {
180
195
  const index2 = i + 1;
181
196
  const isActive = index2 <= current;
182
197
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -385,10 +400,13 @@ const CasinoTable = ({ casinos, showHeader = false }) => {
385
400
  {
386
401
  position: { base: "absolute", md: showHeader ? "static" : "absolute" },
387
402
  opacity: { base: 0, md: showHeader ? "initial" : 0 },
403
+ w: { base: 0, md: showHeader ? "auto" : 0 },
404
+ h: { base: 0, md: showHeader ? "auto" : 0 },
405
+ overflow: "hidden",
388
406
  children: /* @__PURE__ */ jsxRuntime.jsx(react.Tr, { children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(react.Th, { textAlign: "center", p: 2, children: t(`column.${column}`) }, column)) })
389
407
  }
390
408
  ),
391
- /* @__PURE__ */ jsxRuntime.jsx(react.Tbody, { children: casinos.map(({ id, ...casino }, index2) => /* @__PURE__ */ jsxRuntime.jsx(CasinoTableRow, { casino: { id: String(index2 + 1), ...casino } }, id)) })
409
+ /* @__PURE__ */ jsxRuntime.jsx(react.Tbody, { display: { base: "grid", md: "table-row-group" }, children: casinos.map(({ id, ...casino }, index2) => /* @__PURE__ */ jsxRuntime.jsx(CasinoTableRow, { casino: { id: String(index2 + 1), ...casino } }, id)) })
392
410
  ] });
393
411
  };
394
412
  exports.CasinoTable = CasinoTable;
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
  const i18n = require("./i18n/index.cjs");
3
+ function isValidDate(date) {
4
+ return !date ? false : date instanceof Date && !isNaN(date.getTime());
5
+ }
3
6
  function getCurrentYear(locale = i18n.DEFAULT_LANGUAGE) {
4
7
  const currentDate = /* @__PURE__ */ new Date();
5
8
  const currentYear = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(currentDate);
@@ -12,8 +15,8 @@ function getCurrentMonth(locale = i18n.DEFAULT_LANGUAGE) {
12
15
  }
13
16
  function formatDate({ value, locale = i18n.DEFAULT_LANGUAGE, options }) {
14
17
  const date = typeof value === "string" || typeof value === "number" ? new Date(value) : value;
15
- if (isNaN(date.getTime())) {
16
- throw new Error("Invalid date provided");
18
+ if (!isValidDate(date)) {
19
+ return null;
17
20
  }
18
21
  const formatter = new Intl.DateTimeFormat(locale, options);
19
22
  return formatter.format(date);
package/dist/index.cjs CHANGED
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const index = require("./index-D-WTkYJu.js");
4
- const index$1 = require("./index-BrpyfyHr.js");
3
+ const index = require("./index-BYl_y0HN.js");
4
+ const index$1 = require("./index-DzOucsVx.js");
5
5
  const index$2 = require("./index-DDg_PkD2.js");
6
- const index$3 = require("./index-BNkvrBOj.js");
6
+ const index$3 = require("./index-B4M1IKzL.js");
7
7
  const index$4 = require("./index-ma-iV7GU.js");
8
8
  const index$5 = require("./index-CVv755RW.js");
9
9
  const i18n = require("./i18n/index.cjs");
10
10
  const layout = require("./layout/index.cjs");
11
- const index$6 = require("./index-DdLlwS4n.js");
11
+ const index$6 = require("./index-DXTC3R_J.js");
12
12
  const index$7 = require("./index-CBRFCYhV.js");
13
13
  const index$8 = require("./index-C6MG_f24.js");
14
14
  const index$9 = require("./index-CYr1ct1t.js");
15
15
  const index$a = require("./index-BfITsKAr.js");
16
- const index$b = require("./index-qR3kVjjs.js");
16
+ const index$b = require("./index-ov4J7p3D.js");
17
17
  const index$c = require("./index-DgrIJs-a.js");
18
18
  const index$d = require("./index-CbuiYkSg.js");
19
19
  exports.ActionButton = index.ActionButton;
package/dist/index.mjs CHANGED
@@ -1,17 +1,17 @@
1
- import { A, a, b, c, n, o, d, B, e, C, r, q, F, f, g, G, h, i, j, p, H, I, L, N, s, P, S, k, T, l, t, m } from "./index-BN9vRBzY.mjs";
2
- import { C as C2, a as a2, b as b2, L as L2, c as c2, R, S as S2, d as d2 } from "./index-CodGh8Sq.mjs";
1
+ import { A, a, b, c, n, o, d, B, e, C, r, q, F, f, g, G, h, i, j, p, H, I, L, N, s, P, S, k, T, l, t, m } from "./index-D9WcltF-.mjs";
2
+ import { C as C2, a as a2, b as b2, L as L2, c as c2, R, S as S2, d as d2 } from "./index-D9i6mZaH.mjs";
3
3
  import { H as H2, a as a3, b as b3, O, P as P2, U } from "./index-BEjKnOZA.mjs";
4
- import { I as I2, L as L3, P as P3, S as S3, u, a as a4 } from "./index-C3FKVt3V.mjs";
4
+ import { I as I2, L as L3, P as P3, S as S3, u, a as a4 } from "./index-ClIPWZ3z.mjs";
5
5
  import { u as u2 } from "./index-DHURrUMW.mjs";
6
6
  import { u as u3 } from "./index-C1kr7Vd-.mjs";
7
7
  import { DEFAULT_LANGUAGE, resources } from "./i18n/index.mjs";
8
8
  import { default as default2 } from "./layout/index.mjs";
9
- import { M } from "./index-cY5WnaQc.mjs";
9
+ import { M } from "./index-D1gNEJUA.mjs";
10
10
  import { a as a5, C as C3, b as b4, G as G2, I as I3 } from "./index-RzByAgHO.mjs";
11
11
  import { A as A2 } from "./index-BJRvnR8Q.mjs";
12
12
  import { b as b5, c as c3, g as g2, a as a6 } from "./index-cQqALZIW.mjs";
13
13
  import { g as g3, a as a7, r as r2 } from "./index-BeJTy4iY.mjs";
14
- import { f as f2, b as b6, a as a8, g as g4, r as r3, t as t2 } from "./index-C7z5qqm_.mjs";
14
+ import { f as f2, b as b6, a as a8, g as g4, r as r3, t as t2 } from "./index-BPthShL-.mjs";
15
15
  import { b as b7, a as a9, i as i2 } from "./index-Bph7a3PR.mjs";
16
16
  import { D, L as L4 } from "./index-BRVKhbs6.mjs";
17
17
  export {
@@ -1,7 +1,8 @@
1
1
  import { FC } from 'react';
2
- import { INavItem } from '../../../types';
2
+ import { GridColumns, INavItem } from '../../../types';
3
3
  type NavigationProps = {
4
4
  menu: INavItem[];
5
+ columns?: GridColumns;
5
6
  };
6
7
  declare const Navigation: FC<NavigationProps>;
7
8
  export default Navigation;
@@ -3,16 +3,16 @@ const jsxRuntime = require("react/jsx-runtime");
3
3
  const react = require("@chakra-ui/react");
4
4
  const reactI18next = require("react-i18next");
5
5
  require("@mdx-js/react");
6
- const index$1 = require("../index-BNkvrBOj.js");
6
+ const index$1 = require("../index-B4M1IKzL.js");
7
7
  require("../index-C6MG_f24.js");
8
8
  require("../index-CBRFCYhV.js");
9
9
  require("react-medium-image-zoom");
10
10
  const react$1 = require("react");
11
- const index = require("../index-BrpyfyHr.js");
11
+ const index = require("../index-DzOucsVx.js");
12
12
  const icons = require("@chakra-ui/icons");
13
13
  require("i18next");
14
14
  require("react-markdown");
15
- const index$2 = require("../index-qR3kVjjs.js");
15
+ const index$2 = require("../index-ov4J7p3D.js");
16
16
  const index$3 = require("../index-DgrIJs-a.js");
17
17
  const Content = ({ children }) => {
18
18
  return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { as: "section", py: 4, children: /* @__PURE__ */ jsxRuntime.jsx(index.Container, { children }) });
@@ -42,12 +42,12 @@ const Disclaimer = () => {
42
42
  const Extra = ({ children }) => {
43
43
  return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { as: "section", my: 2, children });
44
44
  };
45
- const Navigation$1 = ({ menu }) => {
45
+ const Navigation$1 = ({ menu, columns = { base: 1, sm: 2, md: 4 } }) => {
46
46
  return /* @__PURE__ */ jsxRuntime.jsx(
47
47
  react.SimpleGrid,
48
48
  {
49
49
  as: "ul",
50
- columns: { base: 1, sm: 2, md: 4 },
50
+ columns,
51
51
  mt: 4,
52
52
  mb: 6,
53
53
  p: 0,
@@ -74,7 +74,7 @@ const Footer = () => {
74
74
  const { currentLocale } = index$1.usePageContext();
75
75
  const menu = navigation.footer[currentLocale.code] ?? [];
76
76
  const socialNetworks = metadata.socialNetworks ?? [];
77
- const { extra, showDisclaimer = true } = (config == null ? void 0 : config.footer) ?? {};
77
+ const { extra, showDisclaimer = true, navigationColumns } = (config == null ? void 0 : config.footer) ?? {};
78
78
  const hasNavigation = !!menu.length;
79
79
  const hasSocialNetworks = !!socialNetworks.length;
80
80
  const hasExtra = !!extra;
@@ -86,7 +86,7 @@ const Footer = () => {
86
86
  color: react.useColorModeValue("gray.700", "gray.200"),
87
87
  py: 4,
88
88
  children: /* @__PURE__ */ jsxRuntime.jsxs(index.Container, { children: [
89
- hasNavigation && /* @__PURE__ */ jsxRuntime.jsx(Navigation$1, { menu }),
89
+ hasNavigation && /* @__PURE__ */ jsxRuntime.jsx(Navigation$1, { menu, columns: navigationColumns }),
90
90
  hasExtra && /* @__PURE__ */ jsxRuntime.jsx(Extra, { children: extra }),
91
91
  showDisclaimer && /* @__PURE__ */ jsxRuntime.jsx(Disclaimer, {}),
92
92
  /* @__PURE__ */ jsxRuntime.jsx(Brand$1, { brand: /* @__PURE__ */ jsxRuntime.jsx(index.Logo, {}) }),
@@ -2,16 +2,16 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { Box, Divider, AbsoluteCenter, useColorModeValue, Text, SimpleGrid, Flex, Menu, MenuButton, Button, HStack, Icon, MenuList, MenuItem, Popover, PopoverTrigger, PopoverContent, List, ListItem, Stack, Collapse, useDisclosure, IconButton, Heading } from "@chakra-ui/react";
3
3
  import { useTranslation } from "react-i18next";
4
4
  import "@mdx-js/react";
5
- import { L as Link, a as useSiteContext, u as usePageContext } from "../index-C3FKVt3V.mjs";
5
+ import { L as Link, a as useSiteContext, u as usePageContext } from "../index-ClIPWZ3z.mjs";
6
6
  import "../index-BJRvnR8Q.mjs";
7
7
  import "../index-RzByAgHO.mjs";
8
8
  import "react-medium-image-zoom";
9
9
  import { useMemo, forwardRef, useState, useEffect } from "react";
10
- import { a as Container, c as Logo, d as SocialNetworks, L as LinkButton } from "../index-CodGh8Sq.mjs";
10
+ import { a as Container, c as Logo, d as SocialNetworks, L as LinkButton } from "../index-D9i6mZaH.mjs";
11
11
  import { ChevronDownIcon, ChevronRightIcon, CloseIcon, HamburgerIcon, ChevronUpIcon } from "@chakra-ui/icons";
12
12
  import "i18next";
13
13
  import "react-markdown";
14
- import { g as getCurrentYear } from "../index-C7z5qqm_.mjs";
14
+ import { g as getCurrentYear } from "../index-BPthShL-.mjs";
15
15
  import { b as buildPath } from "../index-Bph7a3PR.mjs";
16
16
  const Content = ({ children }) => {
17
17
  return /* @__PURE__ */ jsx(Box, { as: "section", py: 4, children: /* @__PURE__ */ jsx(Container, { children }) });
@@ -41,12 +41,12 @@ const Disclaimer = () => {
41
41
  const Extra = ({ children }) => {
42
42
  return /* @__PURE__ */ jsx(Box, { as: "section", my: 2, children });
43
43
  };
44
- const Navigation$1 = ({ menu }) => {
44
+ const Navigation$1 = ({ menu, columns = { base: 1, sm: 2, md: 4 } }) => {
45
45
  return /* @__PURE__ */ jsx(
46
46
  SimpleGrid,
47
47
  {
48
48
  as: "ul",
49
- columns: { base: 1, sm: 2, md: 4 },
49
+ columns,
50
50
  mt: 4,
51
51
  mb: 6,
52
52
  p: 0,
@@ -73,7 +73,7 @@ const Footer = () => {
73
73
  const { currentLocale } = usePageContext();
74
74
  const menu = navigation.footer[currentLocale.code] ?? [];
75
75
  const socialNetworks = metadata.socialNetworks ?? [];
76
- const { extra, showDisclaimer = true } = (config == null ? void 0 : config.footer) ?? {};
76
+ const { extra, showDisclaimer = true, navigationColumns } = (config == null ? void 0 : config.footer) ?? {};
77
77
  const hasNavigation = !!menu.length;
78
78
  const hasSocialNetworks = !!socialNetworks.length;
79
79
  const hasExtra = !!extra;
@@ -85,7 +85,7 @@ const Footer = () => {
85
85
  color: useColorModeValue("gray.700", "gray.200"),
86
86
  py: 4,
87
87
  children: /* @__PURE__ */ jsxs(Container, { children: [
88
- hasNavigation && /* @__PURE__ */ jsx(Navigation$1, { menu }),
88
+ hasNavigation && /* @__PURE__ */ jsx(Navigation$1, { menu, columns: navigationColumns }),
89
89
  hasExtra && /* @__PURE__ */ jsx(Extra, { children: extra }),
90
90
  showDisclaimer && /* @__PURE__ */ jsx(Disclaimer, {}),
91
91
  /* @__PURE__ */ jsx(Brand$1, { brand: /* @__PURE__ */ jsx(Logo, {}) }),
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const index = require("../index-DdLlwS4n.js");
4
- const index$1 = require("../index-BNkvrBOj.js");
3
+ const index = require("../index-DXTC3R_J.js");
4
+ const index$1 = require("../index-B4M1IKzL.js");
5
5
  exports.MdxProvider = index.MdxProvider;
6
6
  exports.PageProvider = index$1.PageProvider;
7
7
  exports.SiteProvider = index$1.SiteProvider;
@@ -1,5 +1,5 @@
1
- import { M } from "../index-cY5WnaQc.mjs";
2
- import { P, S, u, a } from "../index-C3FKVt3V.mjs";
1
+ import { M } from "../index-D1gNEJUA.mjs";
2
+ import { P, S, u, a } from "../index-ClIPWZ3z.mjs";
3
3
  export {
4
4
  M as MdxProvider,
5
5
  P as PageProvider,
@@ -18,4 +18,5 @@ export interface IAnimation {
18
18
  params?: IAnimationParams;
19
19
  }
20
20
  export type AnimationGetter = (params?: IAnimationParams) => string;
21
+ export type CardHeight = 'full' | 'auto';
21
22
  export {};
@@ -4,5 +4,5 @@ import { ImageType } from '../image';
4
4
  export interface IGameCard extends IGame {
5
5
  url?: ILink['href'];
6
6
  image?: ImageType;
7
+ rating?: number;
7
8
  }
8
- export type GameCardHeight = 'full' | 'auto';
@@ -1,4 +1,4 @@
1
- type SocialNetwork = 'facebook' | 'x' | 'pinterest' | 'youtube' | 'instagram';
1
+ type SocialNetwork = 'facebook' | 'x' | 'pinterest' | 'youtube' | 'instagram' | 'linkedin';
2
2
  export interface ISocialNetwork {
3
3
  kind: SocialNetwork;
4
4
  url: string;
@@ -1,4 +1,4 @@
1
- export type StrapiComponentType = 'STRAPI__COMPONENT_CONTENT_ACTION_BUTTON' | 'STRAPI__COMPONENT_CONTENT_CONTACTS_PAGE' | 'STRAPI__COMPONENT_CONTENT_COOKIE_POLICY_PAGE' | 'STRAPI__COMPONENT_CONTENT_FAQ' | 'STRAPI__COMPONENT_CONTENT_FEATURES' | 'STRAPI__COMPONENT_CONTENT_GAME_CARDS' | 'STRAPI__COMPONENT_CONTENT_GAME_CARD_TABS' | 'STRAPI__COMPONENT_CONTENT_GAME_DEMO' | 'STRAPI__COMPONENT_CONTENT_GAME_INFO' | 'STRAPI__COMPONENT_CONTENT_HOW_TO' | 'STRAPI__COMPONENT_CONTENT_INFORMER' | 'STRAPI__COMPONENT_CONTENT_LIST' | 'STRAPI__COMPONENT_CONTENT_MEDIA' | 'STRAPI__COMPONENT_CONTENT_PRIVACY_POLICY_PAGE' | 'STRAPI__COMPONENT_CONTENT_PROS_CONS' | 'STRAPI__COMPONENT_CONTENT_RICH_TEXT' | 'STRAPI__COMPONENT_CONTENT_TABLE' | 'STRAPI__COMPONENT_CONTENT_TERMS_CONDITIONS_PAGE' | 'STRAPI__COMPONENT_CONTENT_TIP';
1
+ export type StrapiComponentType = 'STRAPI__COMPONENT_CONTENT_ACTION_BUTTON' | 'STRAPI__COMPONENT_CONTENT_ARTICLE_CARDS' | 'STRAPI__COMPONENT_CONTENT_CONTACTS_PAGE' | 'STRAPI__COMPONENT_CONTENT_COOKIE_POLICY_PAGE' | 'STRAPI__COMPONENT_CONTENT_FAQ' | 'STRAPI__COMPONENT_CONTENT_FEATURES' | 'STRAPI__COMPONENT_CONTENT_GAME_CARDS' | 'STRAPI__COMPONENT_CONTENT_GAME_CARD_TABS' | 'STRAPI__COMPONENT_CONTENT_GAME_DEMO' | 'STRAPI__COMPONENT_CONTENT_GAME_INFO' | 'STRAPI__COMPONENT_CONTENT_HOW_TO' | 'STRAPI__COMPONENT_CONTENT_INFORMER' | 'STRAPI__COMPONENT_CONTENT_LIST' | 'STRAPI__COMPONENT_CONTENT_MEDIA' | 'STRAPI__COMPONENT_CONTENT_PRIVACY_POLICY_PAGE' | 'STRAPI__COMPONENT_CONTENT_PROS_CONS' | 'STRAPI__COMPONENT_CONTENT_RICH_TEXT' | 'STRAPI__COMPONENT_CONTENT_TABLE' | 'STRAPI__COMPONENT_CONTENT_TERMS_CONDITIONS_PAGE' | 'STRAPI__COMPONENT_CONTENT_TIP';
2
2
  export interface IStrapiComponentFragment {
3
3
  __typename: StrapiComponentType;
4
4
  [prop: string]: unknown;
@@ -3,7 +3,7 @@ export interface IArticleMeta {
3
3
  createdAt: string;
4
4
  updatedAt?: string;
5
5
  minutesToRead?: number;
6
- author?: IAuthor;
6
+ authorName?: IAuthor['name'];
7
7
  }
8
8
  export interface IArticleInfo {
9
9
  title: string;
@@ -2,5 +2,6 @@ export * from './api';
2
2
  export * from './components';
3
3
  export * from './content';
4
4
  export * from './i18n';
5
+ export * from './page';
5
6
  export * from './site';
6
7
  export * from './theme';
@@ -0,0 +1,7 @@
1
+ export interface IHrefLang {
2
+ href: string;
3
+ hrefLang: string;
4
+ }
5
+ export interface IPageContext {
6
+ hrefLangs?: IHrefLang[];
7
+ }
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { ImageType, INavigation, ISocialNetwork } from '../components';
2
+ import { GridColumns, ImageType, INavigation, ISocialNetwork } from '../components';
3
3
  import { ISeo } from '../content';
4
4
  import { Currency, ILocale } from '../i18n';
5
5
  interface ISiteHeaderConfig {
@@ -8,6 +8,7 @@ interface ISiteHeaderConfig {
8
8
  interface ISiteFooterConfig {
9
9
  extra?: ReactNode;
10
10
  showDisclaimer?: boolean;
11
+ navigationColumns?: GridColumns;
11
12
  }
12
13
  interface ISiteThemeConfig {
13
14
  isInvertedColor?: boolean;
@@ -6,5 +6,5 @@ interface IFormatDateOptions {
6
6
  locale?: ILocale['code'];
7
7
  options?: Intl.DateTimeFormatOptions;
8
8
  }
9
- export declare function formatDate({ value, locale, options }: IFormatDateOptions): string;
9
+ export declare function formatDate({ value, locale, options }: IFormatDateOptions): string | null;
10
10
  export {};
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const index = require("../index-C6MG_f24.js");
4
4
  const index$1 = require("../index-CYr1ct1t.js");
5
5
  const index$2 = require("../index-BfITsKAr.js");
6
- const index$3 = require("../index-qR3kVjjs.js");
6
+ const index$3 = require("../index-ov4J7p3D.js");
7
7
  const index$4 = require("../index-DgrIJs-a.js");
8
8
  const index$5 = require("../index-CbuiYkSg.js");
9
9
  exports.Animation = index.Animation;
@@ -1,7 +1,7 @@
1
1
  import { A } from "../index-BJRvnR8Q.mjs";
2
2
  import { b, c, g, a } from "../index-cQqALZIW.mjs";
3
3
  import { g as g2, a as a2, r } from "../index-BeJTy4iY.mjs";
4
- import { f, b as b2, a as a3, g as g3, r as r2, t } from "../index-C7z5qqm_.mjs";
4
+ import { f, b as b2, a as a3, g as g3, r as r2, t } from "../index-BPthShL-.mjs";
5
5
  import { b as b3, a as a4, i } from "../index-Bph7a3PR.mjs";
6
6
  import { D, L } from "../index-BRVKhbs6.mjs";
7
7
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@anywayseo/tools",
3
3
  "description": "Shared UI Components and Modules",
4
- "version": "5.8.2",
4
+ "version": "5.9.0",
5
5
  "keywords": [
6
6
  "react",
7
7
  "ui",