@anywayseo/tools 2.5.1 → 3.0.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 (37) hide show
  1. package/dist/components/author-card/index.d.ts +7 -0
  2. package/dist/components/{author → base/author}/index.d.ts +3 -3
  3. package/dist/components/base/index.d.ts +1 -1
  4. package/dist/components/index.cjs +5 -3
  5. package/dist/components/index.d.ts +4 -2
  6. package/dist/components/index.mjs +11 -9
  7. package/dist/components/not-found/index.d.ts +3 -0
  8. package/dist/components/rich-text-renderer/index.d.ts +6 -0
  9. package/dist/components/seo/index.d.ts +7 -12
  10. package/dist/components/seo/types.d.ts +6 -0
  11. package/dist/components/seo/utils.d.ts +2 -0
  12. package/dist/components/{expert-tip → tip}/index.d.ts +4 -4
  13. package/dist/i18n/index.cjs +1 -1
  14. package/dist/i18n/index.mjs +1 -1
  15. package/dist/{index-BqUBNm7v.mjs → index-25M8hPOF.mjs} +1 -6
  16. package/dist/{index-BEqFPNAt.js → index-Biz1dDqA.js} +12 -12
  17. package/dist/{index-D2APUOog.js → index-Cte2-g6s.js} +1 -6
  18. package/dist/{index-CIHivV4r.mjs → index-DIxzgBCq.mjs} +119 -98
  19. package/dist/{index-F6_fGeRI.mjs → index-DoBCANwf.mjs} +12 -12
  20. package/dist/index-HmqLMmGf.js +1036 -0
  21. package/dist/index.cjs +7 -6
  22. package/dist/index.mjs +12 -11
  23. package/dist/providers/site-provider/index.d.ts +1 -2
  24. package/dist/types/components/how-to/index.d.ts +2 -2
  25. package/dist/types/components/image/index.d.ts +4 -0
  26. package/dist/types/content/author/index.d.ts +5 -4
  27. package/dist/types/content/index.d.ts +1 -0
  28. package/dist/types/content/seo/index.d.ts +4 -0
  29. package/dist/types/site/index.d.ts +8 -14
  30. package/dist/utils/index.cjs +1 -2
  31. package/dist/utils/index.d.ts +0 -1
  32. package/dist/utils/index.mjs +1 -2
  33. package/package.json +3 -2
  34. package/dist/components/base/expert/index.d.ts +0 -8
  35. package/dist/index-CQRefU3H.js +0 -1015
  36. package/dist/utils/url/index.d.ts +0 -1
  37. /package/dist/components/base/{expert → author}/bio/index.d.ts +0 -0
@@ -1,19 +1,17 @@
1
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { Center as Center$1, Box, Collapse, Text, Button, Flex, Stack, Image, SimpleGrid, Link, Card, CardHeader, Heading, CardBody, Popover, PopoverTrigger, Portal, PopoverContent, PopoverBody, CardFooter, useToast, useColorModeValue, VStack, FormControl, FormLabel, InputGroup, InputLeftElement, Input, Textarea, Accordion, AccordionItem, AccordionButton, AccordionIcon, AccordionPanel, LinkBox, LinkOverlay, IconButton, AbsoluteCenter, Spinner, useDisclosure, Divider, Circle, Container as Container$1, List as List$1, ListItem, Icon, ListIcon, TableContainer, Table as Table$1, Thead, Tr, Th, Tbody, Td, TableCaption, Tabs as Tabs$1, TabList, Tab, TabPanels, TabPanel } from "@chakra-ui/react";
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { Box, Collapse, Text, Button, Flex, Stack, Image, Center as Center$1, SimpleGrid, Link, Card, CardHeader, Heading, CardBody, Popover, PopoverTrigger, Portal, PopoverContent, PopoverBody, CardFooter, useToast, useColorModeValue, VStack, FormControl, FormLabel, InputGroup, InputLeftElement, Input, Textarea, Accordion, AccordionItem, AccordionButton, AccordionIcon, AccordionPanel, LinkBox, LinkOverlay, IconButton, AbsoluteCenter, Spinner, useDisclosure, Divider, Circle, Container as Container$1, List as List$1, ListItem, Icon, 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
3
  import { useTranslation } from "react-i18next";
4
- import { A as Animation, b as formatNumber, c as getCurrencySymbol, f as formatDate, d as getDomain, g as getCurrentYear, a as getCurrentMonth } from "./index-BqUBNm7v.mjs";
5
- import { a as GameCharacteristic } from "./index-F6_fGeRI.mjs";
4
+ import { A as Animation, b as formatNumber, c as getCurrencySymbol, f as formatDate, g as getCurrentYear, a as getCurrentMonth } from "./index-25M8hPOF.mjs";
5
+ import { a as GameCharacteristic } from "./index-DoBCANwf.mjs";
6
6
  import "@ctrl/tinycolor";
7
- import "@mdx-js/react";
8
- import { u as useSiteContext } from "./index-BNb-P8a6.mjs";
9
7
  import { useRef, useState, useLayoutEffect, Fragment as Fragment$1, forwardRef, useEffect, useMemo } from "react";
10
8
  import { EmailIcon, StarIcon, CloseIcon, ExternalLinkIcon, ChevronRightIcon, ChevronDownIcon, HamburgerIcon, ChevronUpIcon, WarningIcon, CheckCircleIcon } from "@chakra-ui/icons";
11
9
  import { u as usePrimaryColors } from "./index-xuSxvz5z.mjs";
10
+ import { useMDXComponents } from "@mdx-js/react";
11
+ import { u as useSiteContext } from "./index-BNb-P8a6.mjs";
12
12
  import { t } from "i18next";
13
13
  import { Link as Link$1 } from "gatsby";
14
- const Center = ({ children, ...boxProps }) => {
15
- return /* @__PURE__ */ jsx(Center$1, { ...boxProps, children });
16
- };
14
+ import Markdown from "react-markdown";
17
15
  const ONE_LINE_HEIGHT = 24;
18
16
  const Bio = ({ content, maxLines = 1 }) => {
19
17
  const ref = useRef(null);
@@ -38,19 +36,15 @@ const Bio = ({ content, maxLines = 1 }) => {
38
36
  showToggle && /* @__PURE__ */ jsx(Button, { size: "sm", variant: "link", colorScheme: "blue", onClick: handleClick, children: isExpanded ? t2("action.collapse") : t2("action.expand") })
39
37
  ] });
40
38
  };
41
- const Expert = ({ expert, variant }) => {
42
- var _a;
43
- const { firstName, lastName, jobTitle, bio } = expert;
44
- const { assets } = useSiteContext();
45
- const fullName = `${firstName} ${lastName}`;
46
- const image = (_a = assets == null ? void 0 : assets.images) == null ? void 0 : _a.expert;
47
- const imageComponent = typeof image === "string" ? /* @__PURE__ */ jsx(Image, { src: image, alt: fullName, rounded: "full" }) : image;
39
+ const Author = ({ author, variant }) => {
40
+ const { name, role, bio, avatar } = author;
41
+ const imageComponent = typeof avatar === "string" ? /* @__PURE__ */ jsx(Image, { src: avatar, alt: name, rounded: "full" }) : avatar;
48
42
  if (variant === "short") {
49
43
  return /* @__PURE__ */ jsxs(Flex, { as: "article", align: "center", gap: 4, children: [
50
44
  !!imageComponent && /* @__PURE__ */ jsx(Box, { w: 12, h: 12, children: imageComponent }),
51
45
  /* @__PURE__ */ jsxs(Box, { fontWeight: "semibold", children: [
52
- /* @__PURE__ */ jsx(Text, { children: fullName }),
53
- /* @__PURE__ */ jsx(Text, { color: "gray.500", children: expert.jobTitle })
46
+ /* @__PURE__ */ jsx(Text, { children: name }),
47
+ /* @__PURE__ */ jsx(Text, { color: "gray.500", children: role })
54
48
  ] })
55
49
  ] });
56
50
  }
@@ -58,13 +52,17 @@ const Expert = ({ expert, variant }) => {
58
52
  !!imageComponent && /* @__PURE__ */ jsx(Flex, { grow: 1, maxW: { base: 48, sm: 32 }, children: imageComponent }),
59
53
  /* @__PURE__ */ jsx(Flex, { w: "100%", children: /* @__PURE__ */ jsxs(Stack, { children: [
60
54
  /* @__PURE__ */ jsxs(Text, { fontSize: "lg", fontWeight: 600, children: [
61
- `${fullName}, `,
62
- /* @__PURE__ */ jsx(Text, { as: "span", color: "gray.500", children: jobTitle })
55
+ name,
56
+ ", ",
57
+ /* @__PURE__ */ jsx(Text, { as: "span", color: "gray.500", children: role })
63
58
  ] }),
64
59
  /* @__PURE__ */ jsx(Bio, { content: bio })
65
60
  ] }) })
66
61
  ] });
67
62
  };
63
+ const Center = ({ children, ...boxProps }) => {
64
+ return /* @__PURE__ */ jsx(Center$1, { ...boxProps, children });
65
+ };
68
66
  const defaultColumns = { base: 1, sm: 2, md: 3, lg: 4, xl: 5 };
69
67
  const Grid = ({ items, columns = defaultColumns, gap, render, getKey, ...boxProps }) => {
70
68
  return /* @__PURE__ */ jsx(SimpleGrid, { as: "ul", columns, spacing: gap, p: 0, m: 0, listStyleType: "none", ...boxProps, children: items.map((item, index) => /* @__PURE__ */ jsx(Box, { as: "li", children: render(item) }, getKey ? getKey(item) : index)) });
@@ -103,9 +101,9 @@ const PulseButton = ({ label, colorScheme = "light", to, onClick }) => {
103
101
  }
104
102
  );
105
103
  };
106
- const Author = ({ author, ...cardProps }) => {
104
+ const AuthorCard = ({ author, ...boxProps }) => {
107
105
  const { t: t2 } = useTranslation("author");
108
- return /* @__PURE__ */ jsxs(Card, { as: "article", variant: "filled", ...cardProps, children: [
106
+ return /* @__PURE__ */ jsxs(Card, { as: "article", variant: "filled", ...boxProps, children: [
109
107
  /* @__PURE__ */ jsx(CardHeader, { pb: 0, children: /* @__PURE__ */ jsx(Heading, { size: "md", children: t2("title") }) }),
110
108
  /* @__PURE__ */ jsx(
111
109
  CardBody,
@@ -114,7 +112,7 @@ const Author = ({ author, ...cardProps }) => {
114
112
  flexDirection: { base: "column", sm: "row" },
115
113
  alignItems: { base: "center", sm: "flex-start" },
116
114
  gap: 4,
117
- children: /* @__PURE__ */ jsx(Expert, { expert: author, variant: "full" })
115
+ children: /* @__PURE__ */ jsx(Author, { author, variant: "full" })
118
116
  }
119
117
  )
120
118
  ] });
@@ -246,31 +244,6 @@ const ContactForm = ({ ...boxProps }) => {
246
244
  }
247
245
  );
248
246
  };
249
- const ExpertTip = ({ tip, expert, ...boxProps }) => {
250
- return /* @__PURE__ */ jsxs(
251
- Card,
252
- {
253
- variant: "filled",
254
- p: 4,
255
- borderLeft: "4px solid gray",
256
- gap: 4,
257
- _before: {
258
- content: '"❛❛"',
259
- position: "absolute",
260
- top: -8,
261
- left: -2,
262
- fontSize: "6rem",
263
- fontStyle: "italic",
264
- color: useColorModeValue("blackAlpha.300", "whiteAlpha.300")
265
- },
266
- ...boxProps,
267
- children: [
268
- /* @__PURE__ */ jsx(CardBody, { as: "blockquote", p: 0, fontStyle: "italic", children: tip }),
269
- !!expert && /* @__PURE__ */ jsx(CardFooter, { alignItems: "center", justify: "flex-end", p: 0, children: /* @__PURE__ */ jsx(Expert, { expert, variant: "short" }) })
270
- ]
271
- }
272
- );
273
- };
274
247
  const Faq = ({ items, ...boxProps }) => {
275
248
  const { bgColor, color } = usePrimaryColors();
276
249
  return /* @__PURE__ */ jsx(Accordion, { allowToggle: true, ...boxProps, children: items.map(({ question, answer }) => {
@@ -436,23 +409,28 @@ function stringifyLanguageArray(languages) {
436
409
  }
437
410
  function getGameInfoItemValue(key, value, currency) {
438
411
  let formattedValue = "";
439
- if (key === GameCharacteristic.Rtp) {
440
- formattedValue = formatNumber(value, { percent: "real", precision: 3 });
441
- }
442
- if ((key === GameCharacteristic.MinBet || key === GameCharacteristic.MaxBet || key === GameCharacteristic.MaxWin) && typeof value === "number") {
443
- if (Array.isArray(currency)) {
444
- const [primary, ...secondaries] = currency || ["USD"];
445
- const primaryValue = formatNumber(value, { currency: primary });
446
- formattedValue = secondaries.length ? `${primaryValue} (${secondaries.map((currency2) => getCurrencySymbol(currency2)).join(", ")})` : primaryValue;
447
- } else {
448
- formattedValue = formatNumber(value, { currency });
412
+ if (typeof value !== "string") {
413
+ if (key === GameCharacteristic.Rtp) {
414
+ formattedValue = formatNumber(value, { percent: "real", precision: 3 });
415
+ }
416
+ if (key === GameCharacteristic.MinBet || key === GameCharacteristic.MaxBet || key === GameCharacteristic.MaxWin) {
417
+ if (Array.isArray(currency)) {
418
+ const [primary, ...secondaries] = currency || ["USD"];
419
+ const primaryValue = formatNumber(value, { currency: primary });
420
+ formattedValue = secondaries.length ? `${primaryValue} (${secondaries.map((currency2) => getCurrencySymbol(currency2)).join(", ")})` : primaryValue;
421
+ } else {
422
+ formattedValue = formatNumber(value, { currency });
423
+ }
424
+ }
425
+ if (key === GameCharacteristic.Compatibility || key === GameCharacteristic.BonusFeatures) {
426
+ formattedValue = stringifyArray(value);
427
+ }
428
+ if (key === GameCharacteristic.Languages) {
429
+ formattedValue = stringifyLanguageArray(value);
430
+ }
431
+ if (typeof value === "boolean") {
432
+ formattedValue = stringifyHasFeature(value);
449
433
  }
450
- }
451
- if (key === GameCharacteristic.Compatibility || key === GameCharacteristic.BonusFeatures && typeof value !== "string") {
452
- formattedValue = stringifyArray(value);
453
- }
454
- if (key === GameCharacteristic.Languages) {
455
- formattedValue = stringifyLanguageArray(value);
456
434
  }
457
435
  if (key === GameCharacteristic.ReleaseDate) {
458
436
  formattedValue = formatDate({ value, options: { year: "numeric", month: "long" } });
@@ -460,9 +438,6 @@ function getGameInfoItemValue(key, value, currency) {
460
438
  if (key === GameCharacteristic.Volatility) {
461
439
  formattedValue = stringifyVolatility(value);
462
440
  }
463
- if (typeof value === "boolean") {
464
- formattedValue = stringifyHasFeature(value);
465
- }
466
441
  if (!formattedValue) {
467
442
  formattedValue = value.toLocaleString();
468
443
  }
@@ -497,11 +472,11 @@ const GameInfo = ({ info }) => {
497
472
  };
498
473
  const HowTo = ({ steps, ...boxProps }) => {
499
474
  const { color, bgColor } = usePrimaryColors();
500
- return /* @__PURE__ */ jsx(SimpleGrid, { as: "ol", columns: { base: 1, md: 2, lg: 3 }, gap: 4, p: 0, ...boxProps, children: steps.map(({ title, description, image }, index) => /* @__PURE__ */ jsxs(Flex, { as: "li", alignItems: "flex-start", gap: 4, children: [
475
+ return /* @__PURE__ */ jsx(SimpleGrid, { as: "ol", columns: { base: 1, md: 2, lg: 3 }, gap: 4, p: 0, ...boxProps, children: steps.map(({ title, description, thumbnail }, index) => /* @__PURE__ */ jsxs(Flex, { as: "li", alignItems: "flex-start", gap: 4, children: [
501
476
  /* @__PURE__ */ jsx(Circle, { size: 12, bgColor, color, fontSize: "lg", fontWeight: "bold", children: String(index + 1) }),
502
477
  /* @__PURE__ */ jsxs(Stack, { flex: 1, children: [
503
478
  /* @__PURE__ */ jsx(Text, { fontSize: "lg", fontWeight: "bold", children: title }),
504
- typeof image === "string" ? /* @__PURE__ */ jsx(Image, { src: image, alt: title, aspectRatio: "16/9", objectFit: "cover" }) : image,
479
+ typeof thumbnail === "string" ? /* @__PURE__ */ jsx(Image, { src: thumbnail, alt: title, aspectRatio: "16/9", objectFit: "cover" }) : thumbnail,
505
480
  /* @__PURE__ */ jsx(Text, { children: description })
506
481
  ] })
507
482
  ] }, index)) });
@@ -513,13 +488,9 @@ const Content = ({ children }) => {
513
488
  return /* @__PURE__ */ jsx(Box, { as: "section", py: 4, children: /* @__PURE__ */ jsx(Container, { children }) });
514
489
  };
515
490
  const Logo = () => {
516
- var _a;
517
- const { assets } = useSiteContext();
518
- const image = (_a = assets == null ? void 0 : assets.images) == null ? void 0 : _a.logo;
519
- if (!image) {
520
- return null;
521
- }
522
- return /* @__PURE__ */ jsx(Box, { display: "flex", h: { base: 10, md: 14 }, overflow: "hidden", children: typeof image === "string" ? /* @__PURE__ */ jsx(Image, { src: image, alt: "Logo", objectFit: "contain" }) : image });
491
+ const { metadata } = useSiteContext();
492
+ const { logo } = metadata;
493
+ return /* @__PURE__ */ jsx(Box, { display: "flex", h: { base: 10, md: 14 }, overflow: "hidden", children: typeof logo === "string" ? /* @__PURE__ */ jsx(Image, { src: logo, alt: "Logo", objectFit: "contain" }) : logo });
523
494
  };
524
495
  const Brand$1 = ({ brand }) => {
525
496
  return /* @__PURE__ */ jsxs(Box, { position: "relative", my: 2, py: 8, children: [
@@ -529,17 +500,17 @@ const Brand$1 = ({ brand }) => {
529
500
  };
530
501
  const Copyright = () => {
531
502
  const { metadata } = useSiteContext();
532
- const { siteUrl } = metadata;
503
+ const { name: siteName } = metadata;
533
504
  const { t: t2 } = useTranslation("footer");
534
- return /* @__PURE__ */ jsx(Text, { as: "small", colorScheme: "gray", display: "flex", align: "center", justifyContent: "center", children: t2("copyright", { year: getCurrentYear(), domain: getDomain(siteUrl) }) });
505
+ return /* @__PURE__ */ jsx(Text, { as: "small", colorScheme: "gray", display: "flex", align: "center", justifyContent: "center", children: t2("copyright", { year: getCurrentYear(), siteName }) });
535
506
  };
536
507
  const Disclaimer = () => {
537
508
  const { metadata } = useSiteContext();
538
- const { siteUrl } = metadata;
509
+ const { name: siteName } = metadata;
539
510
  const { t: t2 } = useTranslation("footer");
540
511
  return /* @__PURE__ */ jsxs(Text, { as: "small", colorScheme: "gray", fontSize: "sm", children: [
541
512
  /* @__PURE__ */ jsx(Text, { as: "span", fontWeight: "bold", color: "red.600", children: t2("disclaimer.title") }),
542
- t2("disclaimer.description", { domain: getDomain(siteUrl) })
513
+ t2("disclaimer.description", { siteName })
543
514
  ] });
544
515
  };
545
516
  const Extra = ({ children }) => {
@@ -861,6 +832,17 @@ const List = ({ items, bullet = "—", render, ...boxProps }) => {
861
832
  render ? render(item) : item
862
833
  ] }, index)) });
863
834
  };
835
+ const NotFound = () => {
836
+ const { t: t2 } = useTranslation("pageNotFound");
837
+ return /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
838
+ /* @__PURE__ */ jsx(Heading, { as: "h1", children: t2("title") }),
839
+ /* @__PURE__ */ jsxs(Text, { fontSize: "xl", children: [
840
+ t2("description"),
841
+ " ",
842
+ /* @__PURE__ */ jsx(Button, { as: Link$1, to: "/", variant: "link", colorScheme: "brand", fontSize: "xl", children: t2("action") })
843
+ ] })
844
+ ] });
845
+ };
864
846
  const TitleMap = {
865
847
  pros: "advantages",
866
848
  cons: "disadvantages"
@@ -927,24 +909,36 @@ const ProsCons = ({ items, ...boxProps }) => {
927
909
  /* @__PURE__ */ jsx(ProsConsCard, { itemType: "cons", items: cons })
928
910
  ] });
929
911
  };
912
+ const RichTextRenderer = ({ content }) => {
913
+ const components = useMDXComponents();
914
+ return /* @__PURE__ */ jsx(Markdown, { components, children: content });
915
+ };
916
+ function replacePlaceholders(text, placeholders) {
917
+ Object.entries(placeholders).forEach(([placeholder, replacement]) => {
918
+ const regex = new RegExp(`{{${placeholder}}}`, "g");
919
+ text = text.replace(regex, replacement);
920
+ });
921
+ return text;
922
+ }
930
923
  const Seo = ({ children, siteMetadata, title, description, lang }) => {
931
- const { title: defaultTitle, description: defaultDescription, lang: defaultLang, siteUrl } = siteMetadata;
932
- return /* @__PURE__ */ jsxs(Fragment, { children: [
933
- /* @__PURE__ */ jsx("html", { lang: lang ?? defaultLang }),
934
- /* @__PURE__ */ jsx("title", { children: title ? typeof title === "string" ? title : title({
935
- domain: getDomain(siteUrl),
924
+ const { name: siteName, lang: defaultLang, seo } = siteMetadata;
925
+ const { title: defaultTitle, description: defaultDescription } = seo;
926
+ const placeholders = useMemo(
927
+ () => ({
928
+ siteName,
936
929
  currentYear: getCurrentYear(),
937
930
  currentMonth: getCurrentMonth()
938
- }) : defaultTitle }),
931
+ }),
932
+ [siteName]
933
+ );
934
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
935
+ /* @__PURE__ */ jsx("html", { lang: lang ?? defaultLang }),
936
+ /* @__PURE__ */ jsx("title", { children: title ? typeof title === "string" ? replacePlaceholders(title, placeholders) : title(placeholders) : defaultTitle }),
939
937
  /* @__PURE__ */ jsx(
940
938
  "meta",
941
939
  {
942
940
  name: "description",
943
- content: description ? typeof description === "string" ? description : description({
944
- domain: getDomain(siteUrl),
945
- currentYear: getCurrentYear(),
946
- currentMonth: getCurrentMonth()
947
- }) : defaultDescription
941
+ content: description ? typeof description === "string" ? replacePlaceholders(description, placeholders) : description(placeholders) : defaultDescription
948
942
  }
949
943
  ),
950
944
  children
@@ -990,16 +984,42 @@ const Tabs = ({ items, render, ...boxProps }) => {
990
984
  /* @__PURE__ */ jsx(TabPanels, { children: panels.map((panel, index) => /* @__PURE__ */ jsx(TabPanel, { children: render ? render(panel) : panel }, index)) })
991
985
  ] });
992
986
  };
987
+ const Tip = ({ tip, author = null, ...boxProps }) => {
988
+ return /* @__PURE__ */ jsxs(
989
+ Card,
990
+ {
991
+ variant: "filled",
992
+ p: 4,
993
+ borderLeft: "4px solid gray",
994
+ gap: 4,
995
+ _before: {
996
+ content: '"❛❛"',
997
+ position: "absolute",
998
+ top: -8,
999
+ left: -2,
1000
+ fontSize: "6rem",
1001
+ fontStyle: "italic",
1002
+ color: useColorModeValue("blackAlpha.300", "whiteAlpha.300")
1003
+ },
1004
+ ...boxProps,
1005
+ children: [
1006
+ /* @__PURE__ */ jsx(CardBody, { as: "blockquote", p: 0, fontStyle: "italic", children: tip }),
1007
+ !!author && /* @__PURE__ */ jsx(CardFooter, { alignItems: "center", justify: "flex-end", p: 0, children: /* @__PURE__ */ jsx(Author, { author, variant: "short" }) })
1008
+ ]
1009
+ }
1010
+ );
1011
+ };
993
1012
  export {
994
- Author as A,
1013
+ AuthorCard as A,
995
1014
  BonusCard as B,
996
1015
  ContactForm as C,
997
- ExpertTip as E,
998
1016
  Faq as F,
999
1017
  GameCard as G,
1000
1018
  HowTo as H,
1001
1019
  Layout as L,
1020
+ NotFound as N,
1002
1021
  ProsCons as P,
1022
+ RichTextRenderer as R,
1003
1023
  Seo as S,
1004
1024
  Table as T,
1005
1025
  FeatureCard as a,
@@ -1008,9 +1028,10 @@ export {
1008
1028
  GameInfo as d,
1009
1029
  List as e,
1010
1030
  Tabs as f,
1011
- Center as g,
1012
- Expert as h,
1013
- Grid as i,
1014
- LinkButton as j,
1015
- PulseButton as k
1031
+ Tip as g,
1032
+ Author as h,
1033
+ Center as i,
1034
+ Grid as j,
1035
+ LinkButton as k,
1036
+ PulseButton as l
1016
1037
  };
@@ -35,17 +35,17 @@ var GameCharacteristic = /* @__PURE__ */ ((GameCharacteristic2) => {
35
35
  })(GameCharacteristic || {});
36
36
  const pageNotFound$3 = {
37
37
  seo: {
38
- title: "Seite nicht gefunden | {{domain}}"
38
+ title: "Seite nicht gefunden | {{siteName}}"
39
39
  },
40
40
  title: "404 — Seite nicht gefunden",
41
41
  description: "Entschuldigung 😔, wir konnten nicht finden, wonach Sie gesucht haben.",
42
42
  action: "Zur Startseite"
43
43
  };
44
44
  const footer$3 = {
45
- copyright: "© {{year}} {{domain}}. Alle Rechte vorbehalten.",
45
+ copyright: "© {{year}} {{siteName}}. Alle Rechte vorbehalten.",
46
46
  disclaimer: {
47
47
  title: "Spielen Sie verantwortungsbewusst: ",
48
- description: "{{domain}} ist eine unabhängige Ressource und nicht mit den von uns beworbenen Seiten verbunden. Stellen Sie sicher, dass Sie über alle erforderlichen Zertifikate verfügen und die gesetzlichen Anforderungen erfüllt sind, bevor Sie mit dem Spielen beginnen. Der Hauptzweck von {{domain}} besteht darin, informative und unterhaltsame Inhalte bereitzustellen. Wenn Sie nach Links zu verwandten Ressourcen suchen, werden Sie zu den entsprechenden Plattformen weitergeleitet."
48
+ description: "{{siteName}} ist eine unabhängige Ressource und nicht mit den von uns beworbenen Seiten verbunden. Stellen Sie sicher, dass Sie über alle erforderlichen Zertifikate verfügen und die gesetzlichen Anforderungen erfüllt sind, bevor Sie mit dem Spielen beginnen. Der Hauptzweck von {{siteName}} besteht darin, informative und unterhaltsame Inhalte bereitzustellen. Wenn Sie nach Links zu verwandten Ressourcen suchen, werden Sie zu den entsprechenden Plattformen weitergeleitet."
49
49
  }
50
50
  };
51
51
  const gameDemo$3 = {
@@ -152,17 +152,17 @@ const dictionary$3 = {
152
152
  };
153
153
  const pageNotFound$2 = {
154
154
  seo: {
155
- title: "Page not found | {{domain}}"
155
+ title: "Page not found | {{siteName}}"
156
156
  },
157
157
  title: "404 — Page not found",
158
158
  description: "Sorry 😔, we couldn’t find what you were looking for.",
159
159
  action: "Go Home"
160
160
  };
161
161
  const footer$2 = {
162
- copyright: "© {{year}} {{domain}}. All rights reserved.",
162
+ copyright: "© {{year}} {{siteName}}. All rights reserved.",
163
163
  disclaimer: {
164
164
  title: "Play responsibly: ",
165
- description: "{{domain}} is an independent resource not affiliated with the sites we promote. Make sure you have all the necessary certifications and legal requirements are met before you start playing. The main purpose of {{domain}} is to provide informative and entertaining content. If you are looking for links to related resources, you will be redirected to the relevant platforms."
165
+ description: "{{siteName}} is an independent resource not affiliated with the sites we promote. Make sure you have all the necessary certifications and legal requirements are met before you start playing. The main purpose of {{siteName}} is to provide informative and entertaining content. If you are looking for links to related resources, you will be redirected to the relevant platforms."
166
166
  }
167
167
  };
168
168
  const gameDemo$2 = {
@@ -269,17 +269,17 @@ const dictionary$2 = {
269
269
  };
270
270
  const pageNotFound$1 = {
271
271
  seo: {
272
- title: "Pagina non trovata | {{domain}}"
272
+ title: "Pagina non trovata | {{siteName}}"
273
273
  },
274
274
  title: "404 — Pagina non trovata",
275
275
  description: "Spiacenti 😔, non siamo riusciti a trovare quello che cercavi.",
276
276
  action: "Ritorna alla pagina principale"
277
277
  };
278
278
  const footer$1 = {
279
- copyright: "© {{year}} {{domain}}. Tutte le cose sono fatte.",
279
+ copyright: "© {{year}} {{siteName}}. Tutte le cose sono fatte.",
280
280
  disclaimer: {
281
281
  title: "Gioca responsabilmente: ",
282
- description: "{{domain}} è una risorsa indipendente e non affiliata ai siti che promuoviamo. Prima di iniziare a giocare, assicurati di possedere tutte le certificazioni necessarie e di rispettare i requisiti legali in vigore. L'obiettivo principale di {{domain}} è offrire contenuti informativi e di intrattenimento. Se cerchi collegamenti a risorse correlate, verrai reindirizzato alle piattaforme pertinenti."
282
+ description: "{{siteName}} è una risorsa indipendente e non affiliata ai siti che promuoviamo. Prima di iniziare a giocare, assicurati di possedere tutte le certificazioni necessarie e di rispettare i requisiti legali in vigore. L'obiettivo principale di {{siteName}} è offrire contenuti informativi e di intrattenimento. Se cerchi collegamenti a risorse correlate, verrai reindirizzato alle piattaforme pertinenti."
283
283
  }
284
284
  };
285
285
  const gameDemo$1 = {
@@ -386,17 +386,17 @@ const dictionary$1 = {
386
386
  };
387
387
  const pageNotFound = {
388
388
  seo: {
389
- title: "Страница не найдена | {{domain}}"
389
+ title: "Страница не найдена | {{siteName}}"
390
390
  },
391
391
  title: "404 — Страница не найдена",
392
392
  description: "Извините 😔, мы не смогли найти то, что вы искали.",
393
393
  action: "На главную"
394
394
  };
395
395
  const footer = {
396
- copyright: "© {{year}} {{domain}}. Все права защищены.",
396
+ copyright: "© {{year}} {{siteName}}. Все права защищены.",
397
397
  disclaimer: {
398
398
  title: "Играйте ответственно: ",
399
- description: "{{domain}} — независимый ресурс, не связанный с продвигаемыми сайтами. Убедитесь, что у вас есть все необходимые сертификаты и соблюдены юридические требования перед началом игры. Основная цель {{domain}} — предоставление информационного и развлекательного контента. Если вы ищете ссылки на связанные ресурсы, вас перенаправят на соответствующие платформы."
399
+ description: "{{siteName}} — независимый ресурс, не связанный с продвигаемыми сайтами. Убедитесь, что у вас есть все необходимые сертификаты и соблюдены юридические требования перед началом игры. Основная цель {{siteName}} — предоставление информационного и развлекательного контента. Если вы ищете ссылки на связанные ресурсы, вас перенаправят на соответствующие платформы."
400
400
  }
401
401
  };
402
402
  const gameDemo = {