@anywayseo/tools 1.1.0 → 1.5.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 (56) hide show
  1. package/dist/components/base/center/index.d.ts +6 -0
  2. package/dist/components/base/grid/index.d.ts +19 -0
  3. package/dist/components/base/grid/types.d.ts +3 -0
  4. package/dist/components/base/grid/utils.d.ts +2 -0
  5. package/dist/components/base/index.d.ts +3 -0
  6. package/dist/components/base/link-button/index.d.ts +7 -0
  7. package/dist/components/bonus-card/content/index.d.ts +7 -0
  8. package/dist/components/bonus-card/index.d.ts +7 -0
  9. package/dist/components/bonus-card/title/index.d.ts +7 -0
  10. package/dist/components/game-card/index.d.ts +7 -0
  11. package/dist/components/index.cjs +9 -1
  12. package/dist/components/index.d.ts +6 -0
  13. package/dist/components/index.mjs +12 -4
  14. package/dist/components/layout/container/index.d.ts +3 -0
  15. package/dist/components/layout/hero/index.d.ts +2 -0
  16. package/dist/components/list/index.d.ts +13 -0
  17. package/dist/components/table/index.d.ts +12 -0
  18. package/dist/components/tabs/index.d.ts +8 -0
  19. package/dist/i18n/index.cjs +1 -1
  20. package/dist/i18n/index.mjs +1 -1
  21. package/dist/i18n/resources/de/index.d.ts +108 -0
  22. package/dist/i18n/resources/en/index.d.ts +9 -0
  23. package/dist/i18n/resources/it/index.d.ts +9 -0
  24. package/dist/index-B-5oUop6.js +47 -0
  25. package/dist/index-BUx1Bxrs.mjs +48 -0
  26. package/dist/{index-C1AoeBP2.js → index-CB4bJU2N.js} +174 -8
  27. package/dist/{index-Bv4g3xBH.mjs → index-CD5ZU1Gw.mjs} +186 -20
  28. package/dist/{index-jhNgIknB.mjs → index-CJvs4SfG.mjs} +1 -1
  29. package/dist/{index-DB1dS9cp.js → index-DCIXk-YH.js} +140 -4
  30. package/dist/{index-Bh5idiRE.mjs → index-DxLcykuT.mjs} +140 -4
  31. package/dist/{index-C68DPwvx.js → index-jvxaXXE3.js} +1 -1
  32. package/dist/index.cjs +14 -3
  33. package/dist/index.mjs +20 -9
  34. package/dist/types/components/bonus-card/index.d.ts +9 -0
  35. package/dist/types/components/common/index.d.ts +3 -0
  36. package/dist/types/components/game-card/index.d.ts +6 -0
  37. package/dist/types/components/index.d.ts +8 -0
  38. package/dist/types/components/tabs/index.d.ts +8 -0
  39. package/dist/types/i18n/index.d.ts +1 -1
  40. package/dist/types/index.d.ts +4 -7
  41. package/dist/types/models/bonus/index.d.ts +4 -0
  42. package/dist/types/models/game/index.d.ts +3 -0
  43. package/dist/types/models/index.d.ts +5 -0
  44. package/dist/types/models/link/index.d.ts +4 -0
  45. package/dist/types/theme/index.d.ts +27 -0
  46. package/dist/utils/index.cjs +4 -1
  47. package/dist/utils/index.d.ts +1 -0
  48. package/dist/utils/index.mjs +4 -1
  49. package/dist/utils/theme/index.d.ts +3 -0
  50. package/package.json +2 -1
  51. /package/dist/types/{faq → components/faq}/index.d.ts +0 -0
  52. /package/dist/types/{game-info → components/game-info}/index.d.ts +0 -0
  53. /package/dist/types/{how-to → components/how-to}/index.d.ts +0 -0
  54. /package/dist/types/{pros-cons → components/pros-cons}/index.d.ts +0 -0
  55. /package/dist/types/{author → models/author}/index.d.ts +0 -0
  56. /package/dist/types/{feature → models/feature}/index.d.ts +0 -0
@@ -9,9 +9,10 @@ const index = require("./index-D96zh94V.js");
9
9
  const react = require("react");
10
10
  const index$1 = require("./index-IpSV-c71.js");
11
11
  const react$2 = require("@emotion/react");
12
- const i18n = require("./index-DB1dS9cp.js");
12
+ const i18n = require("./index-DCIXk-YH.js");
13
13
  const i18n$1 = require("i18next");
14
- const index$2 = require("./index-C68DPwvx.js");
14
+ const index$2 = require("./index-jvxaXXE3.js");
15
+ require("@ctrl/tinycolor");
15
16
  const gatsby = require("gatsby");
16
17
  const ONE_LINE_HEIGHT = 24;
17
18
  const Bio = ({ content, maxLines = 1 }) => {
@@ -78,6 +79,81 @@ const Author = ({ author, ...cardProps }) => {
78
79
  )
79
80
  ] });
80
81
  };
82
+ const Center = ({ children, className }) => {
83
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.Center, { className, children });
84
+ };
85
+ const LinkButton = ({ label, url, width = "auto" }) => {
86
+ return /* @__PURE__ */ jsxRuntime.jsx(
87
+ react$1.Button,
88
+ {
89
+ as: react$1.Link,
90
+ href: url,
91
+ w: width,
92
+ bg: "brand.600",
93
+ textTransform: "uppercase",
94
+ _hover: { textDecoration: "none", bg: "brand.300" },
95
+ _active: { transform: "scale(0.95)" },
96
+ children: label
97
+ }
98
+ );
99
+ };
100
+ const BonusCardContent = ({ content }) => {
101
+ const { t } = reactI18next.useTranslation("author");
102
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.Popover, { flip: false, matchWidth: false, placement: "bottom", children: ({ isOpen }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
103
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.PopoverTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(react$1.Button, { size: "sm", variant: "link", color: "white", children: isOpen ? t("action.collapse") : t("action.expand") }) }),
104
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.PopoverContent, { w: 60, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.PopoverBody, { children: Array.isArray(content) ? /* @__PURE__ */ jsxRuntime.jsx(react$1.Stack, { children: content.map((paragraph, index2) => /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { as: "span", children: paragraph }, index2)) }) : /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { children: content }) }) })
105
+ ] }) });
106
+ };
107
+ const BonusCardTitle = ({ content }) => {
108
+ return /* @__PURE__ */ jsxRuntime.jsx(
109
+ react$1.Text,
110
+ {
111
+ as: "h3",
112
+ display: "inline-block",
113
+ py: 1,
114
+ px: 2,
115
+ borderRadius: "md",
116
+ bg: "yellow",
117
+ color: "black",
118
+ fontWeight: "bold",
119
+ fontSize: "lg",
120
+ children: content
121
+ }
122
+ );
123
+ };
124
+ const BonusCard = ({ title, subtitle, content, link, image, className }) => {
125
+ return /* @__PURE__ */ jsxRuntime.jsxs(
126
+ react$1.Card,
127
+ {
128
+ as: "article",
129
+ h: "full",
130
+ bg: "linear-gradient(90deg, #3b1f47, #731d58)",
131
+ overflow: "hidden",
132
+ _before: image ? {
133
+ content: '""',
134
+ position: "absolute",
135
+ top: 0,
136
+ left: 0,
137
+ w: "100%",
138
+ h: "100%",
139
+ bgImage: `url(${image})`,
140
+ bgSize: "cover",
141
+ bgPosition: "center",
142
+ filter: "blur(0.05em) opacity(50%)",
143
+ zIndex: 0
144
+ } : void 0,
145
+ className,
146
+ children: [
147
+ /* @__PURE__ */ jsxRuntime.jsxs(react$1.CardBody, { as: "section", pb: 0, flex: 1, children: [
148
+ /* @__PURE__ */ jsxRuntime.jsx(BonusCardTitle, { content: title }),
149
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { fontSize: "2xl", fontWeight: "bold", my: 2, children: subtitle }),
150
+ /* @__PURE__ */ jsxRuntime.jsx(BonusCardContent, { content })
151
+ ] }),
152
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.CardFooter, { as: "footer", p: 4, children: /* @__PURE__ */ jsxRuntime.jsx(LinkButton, { ...link, width: "full" }) })
153
+ ]
154
+ }
155
+ );
156
+ };
81
157
  const ContactForm = () => {
82
158
  const toast = react$1.useToast();
83
159
  const { t } = reactI18next.useTranslation("contactForm");
@@ -194,6 +270,26 @@ const Features = ({ features, ...boxProps }) => {
194
270
  /* @__PURE__ */ jsxRuntime.jsx(react$1.CardBody, { as: "section", pt: 0, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { color: "gray.600", children: description }) })
195
271
  ] }) }, title)) });
196
272
  };
273
+ const GameCard = ({ name, image, link, className }) => {
274
+ return /* @__PURE__ */ jsxRuntime.jsxs(
275
+ react$1.LinkBox,
276
+ {
277
+ as: "article",
278
+ rounded: "md",
279
+ borderWidth: 1,
280
+ transition: "transform 0.2s ease",
281
+ cursor: link ? "pointer" : "default",
282
+ overflow: "hidden",
283
+ bg: "blackAlpha.400",
284
+ _hover: { transform: "scale(1.1)" },
285
+ className,
286
+ children: [
287
+ typeof image === "string" ? /* @__PURE__ */ jsxRuntime.jsx(react$1.Image, { src: image, alt: name, w: "100%", aspectRatio: "16/9", objectFit: "cover", objectPosition: "center" }) : !!image && /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { w: "100%", aspectRatio: "16/9", children: image }),
288
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { as: "section", rounded: "md", p: 4, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { as: "span", children: link ? /* @__PURE__ */ jsxRuntime.jsx(react$1.LinkOverlay, { href: link, children: name }) : name }) })
289
+ ]
290
+ }
291
+ );
292
+ };
197
293
  const GameDemoContent = ({ src, isFullscreen, isLoaded, onLoad, onToggleFullscreen }) => {
198
294
  const { t } = reactI18next.useTranslation("gameDemo");
199
295
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -395,8 +491,11 @@ const HowTo = ({ steps, ...boxProps }) => {
395
491
  ] })
396
492
  ] }, index2)) });
397
493
  };
494
+ const Container = ({ children }) => {
495
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.Container, { maxW: "container.xl", children });
496
+ };
398
497
  const Content = ({ children }) => {
399
- return /* @__PURE__ */ jsxRuntime.jsx(react$1.Container, { as: "section", maxW: "container.xl", children });
498
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { as: "section", py: 4, children: /* @__PURE__ */ jsxRuntime.jsx(Container, { children }) });
400
499
  };
401
500
  const Logo = () => {
402
501
  const { logoImageData } = index.useSiteMetadataContext();
@@ -463,7 +562,7 @@ const Footer = () => {
463
562
  bg: react$1.useColorModeValue("gray.50", "gray.900"),
464
563
  color: react$1.useColorModeValue("gray.700", "gray.200"),
465
564
  py: 4,
466
- children: /* @__PURE__ */ jsxRuntime.jsxs(Content, { children: [
565
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
467
566
  /* @__PURE__ */ jsxRuntime.jsx(Navigation$1, {}),
468
567
  /* @__PURE__ */ jsxRuntime.jsx(Disclaimer, {}),
469
568
  /* @__PURE__ */ jsxRuntime.jsx(Brand$1, { brand: /* @__PURE__ */ jsxRuntime.jsx(Logo, {}) }),
@@ -607,12 +706,25 @@ const Header = () => {
607
706
  color: react$1.useColorModeValue("gray.700", "gray.200"),
608
707
  boxShadow: "sm",
609
708
  zIndex: 100,
610
- children: /* @__PURE__ */ jsxRuntime.jsx(Content, { children: /* @__PURE__ */ jsxRuntime.jsx(Navbar, { brand: /* @__PURE__ */ jsxRuntime.jsx(Logo, {}) }) })
709
+ children: /* @__PURE__ */ jsxRuntime.jsx(Container, { children: /* @__PURE__ */ jsxRuntime.jsx(Navbar, { brand: /* @__PURE__ */ jsxRuntime.jsx(Logo, {}) }) })
611
710
  }
612
711
  );
613
712
  };
614
- const Hero = () => {
615
- return /* @__PURE__ */ jsxRuntime.jsx("section", { children: /* @__PURE__ */ jsxRuntime.jsx(Content, {}) });
713
+ const Hero = ({ title, subtitle, content, link, image }) => {
714
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { as: "section", bg: "gray.900", children: /* @__PURE__ */ jsxRuntime.jsx(Container, { children: /* @__PURE__ */ jsxRuntime.jsxs(react$1.Flex, { direction: { base: "column", md: "row" }, children: [
715
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Flex, { align: "center", justify: { base: "center", md: "flex-start" }, flex: 1, py: 8, pe: 8, children: /* @__PURE__ */ jsxRuntime.jsxs(react$1.Stack, { spacing: 6, w: "full", maxW: "lg", children: [
716
+ /* @__PURE__ */ jsxRuntime.jsxs(react$1.Heading, { as: "h1", fontSize: { base: "3xl", md: "4xl", lg: "5xl" }, children: [
717
+ /* @__PURE__ */ jsxRuntime.jsxs(react$1.Text, { as: "span", display: "block", children: [
718
+ title,
719
+ " —"
720
+ ] }),
721
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { as: "span", display: "block", color: "brand.400", children: subtitle })
722
+ ] }),
723
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { fontSize: { base: "md", lg: "lg" }, color: "gray.500", children: content }),
724
+ !!link && /* @__PURE__ */ jsxRuntime.jsx(react$1.Flex, { direction: { base: "column", md: "row" }, children: /* @__PURE__ */ jsxRuntime.jsx(LinkButton, { ...link }) })
725
+ ] }) }),
726
+ image && /* @__PURE__ */ jsxRuntime.jsx(react$1.Flex, { display: { base: "none", md: "flex" }, flex: 1, children: image })
727
+ ] }) }) });
616
728
  };
617
729
  const Main = ({ children }) => {
618
730
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -621,7 +733,6 @@ const Main = ({ children }) => {
621
733
  as: "main",
622
734
  direction: "column",
623
735
  flexGrow: 1,
624
- py: 4,
625
736
  bg: react$1.useColorModeValue("white", "gray.800"),
626
737
  color: react$1.useColorModeValue("gray.700", "gray.200"),
627
738
  children
@@ -680,6 +791,12 @@ const Layout = ({ children }) => {
680
791
  /* @__PURE__ */ jsxRuntime.jsx(ScrollToTop, {})
681
792
  ] });
682
793
  };
794
+ const List = ({ items, bullet = "—", render, className }) => {
795
+ return /* @__PURE__ */ jsxRuntime.jsx(react$1.List, { as: "ul", pl: 0, ml: 2, mb: 4, className, children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(react$1.ListItem, { as: "li", display: "flex", gap: 1, children: [
796
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Box, { children: bullet }),
797
+ render ? render(item) : item
798
+ ] })) });
799
+ };
683
800
  const TitleMap = {
684
801
  pros: "advantages",
685
802
  cons: "disadvantages"
@@ -769,14 +886,63 @@ const Seo = ({ children, siteMetadata, title, description, lang }) => {
769
886
  children
770
887
  ] });
771
888
  };
889
+ const Table = ({
890
+ columnNumber,
891
+ items,
892
+ caption,
893
+ bordered = false,
894
+ striped = true,
895
+ scrollable,
896
+ className
897
+ }) => {
898
+ const headerItems = items.slice(0, columnNumber);
899
+ const bodyItems = items.slice(columnNumber);
900
+ return /* @__PURE__ */ jsxRuntime.jsxs(
901
+ react$1.TableContainer,
902
+ {
903
+ border: bordered ? void 0 : "none",
904
+ ...scrollable ? { maxH: "50vh", overflowY: "auto" } : {},
905
+ className,
906
+ children: [
907
+ /* @__PURE__ */ jsxRuntime.jsxs(react$1.Table, { variant: striped ? "striped" : "simple", children: [
908
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Thead, { ...scrollable ? { position: "sticky", top: 0, zIndex: 1, bg: "gray.800" } : {}, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.Tr, { children: headerItems.map((item, index2) => /* @__PURE__ */ jsxRuntime.jsx(react$1.Th, { children: item }, index2)) }) }),
909
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.Tbody, { children: Array.from({ length: Math.ceil(bodyItems.length / columnNumber) }, (_, rowIndex) => /* @__PURE__ */ jsxRuntime.jsx(react$1.Tr, { children: Array.from({ length: columnNumber }, (_2, colIndex) => /* @__PURE__ */ jsxRuntime.jsx(react$1.Td, { children: bodyItems[rowIndex * columnNumber + colIndex] || "" }, colIndex)) }, rowIndex)) })
910
+ ] }),
911
+ !!caption && /* @__PURE__ */ jsxRuntime.jsx(react$1.TableCaption, { children: caption })
912
+ ]
913
+ }
914
+ );
915
+ };
916
+ const Tabs = ({ items, className, render }) => {
917
+ const { tabs, panels } = react.useMemo(() => {
918
+ const tabs2 = [];
919
+ const panels2 = [];
920
+ items.forEach(({ content, ...tab }) => {
921
+ tabs2.push(tab);
922
+ panels2.push(content);
923
+ });
924
+ return { tabs: tabs2, panels: panels2 };
925
+ }, []);
926
+ return /* @__PURE__ */ jsxRuntime.jsxs(react$1.Tabs, { overflow: "hidden", colorScheme: "brand", className, children: [
927
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.TabList, { overflow: "auto hidden", children: tabs.map(({ label, icon }, index2) => /* @__PURE__ */ jsxRuntime.jsx(react$1.Tab, { children: /* @__PURE__ */ jsxRuntime.jsx(react$1.Text, { as: "h3", isTruncated: true, children: icon ? `${icon} ${label}` : label }) }, index2)) }),
928
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.TabPanels, { children: panels.map((panel, index2) => /* @__PURE__ */ jsxRuntime.jsx(react$1.TabPanel, { children: render(panel) }, index2)) })
929
+ ] });
930
+ };
772
931
  exports.Author = Author;
932
+ exports.BonusCard = BonusCard;
933
+ exports.Center = Center;
773
934
  exports.ContactForm = ContactForm;
774
935
  exports.ExpertTip = ExpertTip;
775
936
  exports.Faq = Faq;
776
937
  exports.Features = Features;
938
+ exports.GameCard = GameCard;
777
939
  exports.GameDemo = GameDemo;
778
940
  exports.GameInfo = GameInfo;
779
941
  exports.HowTo = HowTo;
780
942
  exports.Layout = Layout;
943
+ exports.LinkButton = LinkButton;
944
+ exports.List = List;
781
945
  exports.ProsCons = ProsCons;
782
946
  exports.Seo = Seo;
947
+ exports.Table = Table;
948
+ exports.Tabs = Tabs;
@@ -1,17 +1,18 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { Box, Collapse, Text, Button, Flex, Stack, Card, CardHeader, Heading, CardBody, useToast, useColorModeValue, VStack, FormControl, FormLabel, InputGroup, InputLeftElement, Input, Textarea, CardFooter, Accordion, AccordionItem, AccordionButton, AccordionIcon, AccordionPanel, SimpleGrid, IconButton, AbsoluteCenter, Spinner, useDisclosure, Divider, Circle, Container, Popover, PopoverTrigger, PopoverContent, Icon, useBreakpointValue, List, ListItem, ListIcon } from "@chakra-ui/react";
2
+ import { Box, Collapse, Text, Button, Flex, Stack, Card, CardHeader, Heading, CardBody, Center as Center$1, Link, Popover, PopoverTrigger, PopoverContent, PopoverBody, CardFooter, useToast, useColorModeValue, VStack, FormControl, FormLabel, InputGroup, InputLeftElement, Input, Textarea, Accordion, AccordionItem, AccordionButton, AccordionIcon, AccordionPanel, SimpleGrid, LinkBox, Image, LinkOverlay, IconButton, AbsoluteCenter, Spinner, useDisclosure, Divider, Circle, Container as Container$1, Icon, useBreakpointValue, List as List$1, ListItem, 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
4
  import { EmailIcon, StarIcon, CloseIcon, ExternalLinkIcon, ChevronRightIcon, ChevronDownIcon, HamburgerIcon, ChevronUpIcon, WarningIcon, CheckCircleIcon } from "@chakra-ui/icons";
5
5
  import { getImage, GatsbyImage } from "gatsby-plugin-image";
6
6
  import "@mdx-js/react";
7
7
  import { u as useSiteMetadataContext } from "./index-Bs4zA1wD.mjs";
8
- import { useRef, useState, useLayoutEffect, Fragment as Fragment$1, useEffect } from "react";
8
+ import { useRef, useState, useLayoutEffect, Fragment as Fragment$1, useEffect, useMemo } from "react";
9
9
  import { u as usePrimaryColors } from "./index-xuSxvz5z.mjs";
10
10
  import { keyframes } from "@emotion/react";
11
- import { a as GameCharacteristic } from "./index-Bh5idiRE.mjs";
11
+ import { a as GameCharacteristic } from "./index-DxLcykuT.mjs";
12
12
  import { t } from "i18next";
13
- import { b as formatNumber, c as getCurrencySymbol, f as formatDate, d as getDomain, g as getCurrentYear, a as getCurrentMonth } from "./index-jhNgIknB.mjs";
14
- import { Link } from "gatsby";
13
+ import { b as formatNumber, c as getCurrencySymbol, f as formatDate, d as getDomain, g as getCurrentYear, a as getCurrentMonth } from "./index-CJvs4SfG.mjs";
14
+ import "@ctrl/tinycolor";
15
+ import { Link as Link$1 } from "gatsby";
15
16
  const ONE_LINE_HEIGHT = 24;
16
17
  const Bio = ({ content, maxLines = 1 }) => {
17
18
  const ref = useRef(null);
@@ -77,6 +78,81 @@ const Author = ({ author, ...cardProps }) => {
77
78
  )
78
79
  ] });
79
80
  };
81
+ const Center = ({ children, className }) => {
82
+ return /* @__PURE__ */ jsx(Center$1, { className, children });
83
+ };
84
+ const LinkButton = ({ label, url, width = "auto" }) => {
85
+ return /* @__PURE__ */ jsx(
86
+ Button,
87
+ {
88
+ as: Link,
89
+ href: url,
90
+ w: width,
91
+ bg: "brand.600",
92
+ textTransform: "uppercase",
93
+ _hover: { textDecoration: "none", bg: "brand.300" },
94
+ _active: { transform: "scale(0.95)" },
95
+ children: label
96
+ }
97
+ );
98
+ };
99
+ const BonusCardContent = ({ content }) => {
100
+ const { t: t2 } = useTranslation("author");
101
+ return /* @__PURE__ */ jsx(Popover, { flip: false, matchWidth: false, placement: "bottom", children: ({ isOpen }) => /* @__PURE__ */ jsxs(Fragment, { children: [
102
+ /* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "link", color: "white", children: isOpen ? t2("action.collapse") : t2("action.expand") }) }),
103
+ /* @__PURE__ */ jsx(PopoverContent, { w: 60, children: /* @__PURE__ */ jsx(PopoverBody, { children: Array.isArray(content) ? /* @__PURE__ */ jsx(Stack, { children: content.map((paragraph, index) => /* @__PURE__ */ jsx(Text, { as: "span", children: paragraph }, index)) }) : /* @__PURE__ */ jsx(Text, { children: content }) }) })
104
+ ] }) });
105
+ };
106
+ const BonusCardTitle = ({ content }) => {
107
+ return /* @__PURE__ */ jsx(
108
+ Text,
109
+ {
110
+ as: "h3",
111
+ display: "inline-block",
112
+ py: 1,
113
+ px: 2,
114
+ borderRadius: "md",
115
+ bg: "yellow",
116
+ color: "black",
117
+ fontWeight: "bold",
118
+ fontSize: "lg",
119
+ children: content
120
+ }
121
+ );
122
+ };
123
+ const BonusCard = ({ title, subtitle, content, link, image, className }) => {
124
+ return /* @__PURE__ */ jsxs(
125
+ Card,
126
+ {
127
+ as: "article",
128
+ h: "full",
129
+ bg: "linear-gradient(90deg, #3b1f47, #731d58)",
130
+ overflow: "hidden",
131
+ _before: image ? {
132
+ content: '""',
133
+ position: "absolute",
134
+ top: 0,
135
+ left: 0,
136
+ w: "100%",
137
+ h: "100%",
138
+ bgImage: `url(${image})`,
139
+ bgSize: "cover",
140
+ bgPosition: "center",
141
+ filter: "blur(0.05em) opacity(50%)",
142
+ zIndex: 0
143
+ } : void 0,
144
+ className,
145
+ children: [
146
+ /* @__PURE__ */ jsxs(CardBody, { as: "section", pb: 0, flex: 1, children: [
147
+ /* @__PURE__ */ jsx(BonusCardTitle, { content: title }),
148
+ /* @__PURE__ */ jsx(Text, { fontSize: "2xl", fontWeight: "bold", my: 2, children: subtitle }),
149
+ /* @__PURE__ */ jsx(BonusCardContent, { content })
150
+ ] }),
151
+ /* @__PURE__ */ jsx(CardFooter, { as: "footer", p: 4, children: /* @__PURE__ */ jsx(LinkButton, { ...link, width: "full" }) })
152
+ ]
153
+ }
154
+ );
155
+ };
80
156
  const ContactForm = () => {
81
157
  const toast = useToast();
82
158
  const { t: t2 } = useTranslation("contactForm");
@@ -193,6 +269,26 @@ const Features = ({ features, ...boxProps }) => {
193
269
  /* @__PURE__ */ jsx(CardBody, { as: "section", pt: 0, children: /* @__PURE__ */ jsx(Text, { color: "gray.600", children: description }) })
194
270
  ] }) }, title)) });
195
271
  };
272
+ const GameCard = ({ name, image, link, className }) => {
273
+ return /* @__PURE__ */ jsxs(
274
+ LinkBox,
275
+ {
276
+ as: "article",
277
+ rounded: "md",
278
+ borderWidth: 1,
279
+ transition: "transform 0.2s ease",
280
+ cursor: link ? "pointer" : "default",
281
+ overflow: "hidden",
282
+ bg: "blackAlpha.400",
283
+ _hover: { transform: "scale(1.1)" },
284
+ className,
285
+ children: [
286
+ typeof image === "string" ? /* @__PURE__ */ jsx(Image, { src: image, alt: name, w: "100%", aspectRatio: "16/9", objectFit: "cover", objectPosition: "center" }) : !!image && /* @__PURE__ */ jsx(Box, { w: "100%", aspectRatio: "16/9", children: image }),
287
+ /* @__PURE__ */ jsx(Box, { as: "section", rounded: "md", p: 4, children: /* @__PURE__ */ jsx(Text, { as: "span", children: link ? /* @__PURE__ */ jsx(LinkOverlay, { href: link, children: name }) : name }) })
288
+ ]
289
+ }
290
+ );
291
+ };
196
292
  const GameDemoContent = ({ src, isFullscreen, isLoaded, onLoad, onToggleFullscreen }) => {
197
293
  const { t: t2 } = useTranslation("gameDemo");
198
294
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -394,8 +490,11 @@ const HowTo = ({ steps, ...boxProps }) => {
394
490
  ] })
395
491
  ] }, index)) });
396
492
  };
493
+ const Container = ({ children }) => {
494
+ return /* @__PURE__ */ jsx(Container$1, { maxW: "container.xl", children });
495
+ };
397
496
  const Content = ({ children }) => {
398
- return /* @__PURE__ */ jsx(Container, { as: "section", maxW: "container.xl", children });
497
+ return /* @__PURE__ */ jsx(Box, { as: "section", py: 4, children: /* @__PURE__ */ jsx(Container, { children }) });
399
498
  };
400
499
  const Logo = () => {
401
500
  const { logoImageData } = useSiteMetadataContext();
@@ -408,7 +507,7 @@ const Logo = () => {
408
507
  const Brand$1 = ({ brand }) => {
409
508
  return /* @__PURE__ */ jsxs(Box, { position: "relative", my: 2, py: 8, children: [
410
509
  /* @__PURE__ */ jsx(Divider, {}),
411
- /* @__PURE__ */ jsx(AbsoluteCenter, { display: "flex", bgColor: useColorModeValue("gray.50", "gray.900"), children: /* @__PURE__ */ jsx(Box, { as: Link, to: "/", children: brand }) })
510
+ /* @__PURE__ */ jsx(AbsoluteCenter, { display: "flex", bgColor: useColorModeValue("gray.50", "gray.900"), children: /* @__PURE__ */ jsx(Box, { as: Link$1, to: "/", children: brand }) })
412
511
  ] });
413
512
  };
414
513
  const Copyright = () => {
@@ -441,7 +540,7 @@ const Navigation$1 = () => {
441
540
  children: footerMenuLinks.map(({ url, title }) => /* @__PURE__ */ jsx(
442
541
  Text,
443
542
  {
444
- as: Link,
543
+ as: Link$1,
445
544
  to: url,
446
545
  fontSize: "md",
447
546
  fontWeight: "semibold",
@@ -462,7 +561,7 @@ const Footer = () => {
462
561
  bg: useColorModeValue("gray.50", "gray.900"),
463
562
  color: useColorModeValue("gray.700", "gray.200"),
464
563
  py: 4,
465
- children: /* @__PURE__ */ jsxs(Content, { children: [
564
+ children: /* @__PURE__ */ jsxs(Container, { children: [
466
565
  /* @__PURE__ */ jsx(Navigation$1, {}),
467
566
  /* @__PURE__ */ jsx(Disclaimer, {}),
468
567
  /* @__PURE__ */ jsx(Brand$1, { brand: /* @__PURE__ */ jsx(Logo, {}) }),
@@ -475,7 +574,7 @@ const Brand = ({ brand }) => {
475
574
  return /* @__PURE__ */ jsx(
476
575
  Box,
477
576
  {
478
- as: Link,
577
+ as: Link$1,
479
578
  to: "/",
480
579
  display: "flex",
481
580
  h: { base: "40px", md: "60px" },
@@ -492,7 +591,7 @@ const DesktopNavItem = ({ title, url, children }) => {
492
591
  /* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsx(
493
592
  Text,
494
593
  {
495
- as: Link,
594
+ as: Link$1,
496
595
  to: url,
497
596
  p: 2,
498
597
  fontSize: "sm",
@@ -542,7 +641,7 @@ const MobileNavItem = ({ title, children, url }) => {
542
641
  const { isOpen, onToggle } = useDisclosure();
543
642
  return /* @__PURE__ */ jsxs(Stack, { w: "100%", p: 2, children: [
544
643
  /* @__PURE__ */ jsxs(Flex, { align: "center", gap: 2, justify: "space-between", children: [
545
- /* @__PURE__ */ jsx(Text, { as: Link, to: url, isTruncated: true, fontWeight: 600, children: title }),
644
+ /* @__PURE__ */ jsx(Text, { as: Link$1, to: url, isTruncated: true, fontWeight: 600, children: title }),
546
645
  !!children && /* @__PURE__ */ jsx(Flex, { as: "button", onClick: onToggle, children: /* @__PURE__ */ jsx(
547
646
  Icon,
548
647
  {
@@ -562,7 +661,7 @@ const MobileNavItem = ({ title, children, url }) => {
562
661
  borderLeft: 1,
563
662
  borderStyle: "solid",
564
663
  borderColor: useColorModeValue("gray.200", "gray.700"),
565
- children: !!children && children.map((child) => /* @__PURE__ */ jsx(Flex, { as: "li", children: /* @__PURE__ */ jsx(Text, { as: Link, to: `${url}${child.url}`, py: 2, children: child.title }) }, child.url))
664
+ children: !!children && children.map((child) => /* @__PURE__ */ jsx(Flex, { as: "li", children: /* @__PURE__ */ jsx(Text, { as: Link$1, to: `${url}${child.url}`, py: 2, children: child.title }) }, child.url))
566
665
  }
567
666
  ) })
568
667
  ] });
@@ -606,12 +705,25 @@ const Header = () => {
606
705
  color: useColorModeValue("gray.700", "gray.200"),
607
706
  boxShadow: "sm",
608
707
  zIndex: 100,
609
- children: /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(Navbar, { brand: /* @__PURE__ */ jsx(Logo, {}) }) })
708
+ children: /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Navbar, { brand: /* @__PURE__ */ jsx(Logo, {}) }) })
610
709
  }
611
710
  );
612
711
  };
613
- const Hero = () => {
614
- return /* @__PURE__ */ jsx("section", { children: /* @__PURE__ */ jsx(Content, {}) });
712
+ const Hero = ({ title, subtitle, content, link, image }) => {
713
+ return /* @__PURE__ */ jsx(Box, { as: "section", bg: "gray.900", children: /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsxs(Flex, { direction: { base: "column", md: "row" }, children: [
714
+ /* @__PURE__ */ jsx(Flex, { align: "center", justify: { base: "center", md: "flex-start" }, flex: 1, py: 8, pe: 8, children: /* @__PURE__ */ jsxs(Stack, { spacing: 6, w: "full", maxW: "lg", children: [
715
+ /* @__PURE__ */ jsxs(Heading, { as: "h1", fontSize: { base: "3xl", md: "4xl", lg: "5xl" }, children: [
716
+ /* @__PURE__ */ jsxs(Text, { as: "span", display: "block", children: [
717
+ title,
718
+ " —"
719
+ ] }),
720
+ /* @__PURE__ */ jsx(Text, { as: "span", display: "block", color: "brand.400", children: subtitle })
721
+ ] }),
722
+ /* @__PURE__ */ jsx(Text, { fontSize: { base: "md", lg: "lg" }, color: "gray.500", children: content }),
723
+ !!link && /* @__PURE__ */ jsx(Flex, { direction: { base: "column", md: "row" }, children: /* @__PURE__ */ jsx(LinkButton, { ...link }) })
724
+ ] }) }),
725
+ image && /* @__PURE__ */ jsx(Flex, { display: { base: "none", md: "flex" }, flex: 1, children: image })
726
+ ] }) }) });
615
727
  };
616
728
  const Main = ({ children }) => {
617
729
  return /* @__PURE__ */ jsx(
@@ -620,7 +732,6 @@ const Main = ({ children }) => {
620
732
  as: "main",
621
733
  direction: "column",
622
734
  flexGrow: 1,
623
- py: 4,
624
735
  bg: useColorModeValue("white", "gray.800"),
625
736
  color: useColorModeValue("gray.700", "gray.200"),
626
737
  children
@@ -679,6 +790,12 @@ const Layout = ({ children }) => {
679
790
  /* @__PURE__ */ jsx(ScrollToTop, {})
680
791
  ] });
681
792
  };
793
+ const List = ({ items, bullet = "—", render, className }) => {
794
+ return /* @__PURE__ */ jsx(List$1, { as: "ul", pl: 0, ml: 2, mb: 4, className, children: items.map((item) => /* @__PURE__ */ jsxs(ListItem, { as: "li", display: "flex", gap: 1, children: [
795
+ /* @__PURE__ */ jsx(Box, { children: bullet }),
796
+ render ? render(item) : item
797
+ ] })) });
798
+ };
682
799
  const TitleMap = {
683
800
  pros: "advantages",
684
801
  cons: "disadvantages"
@@ -722,7 +839,7 @@ const ProsConsCard = ({ itemType, items }) => {
722
839
  p: 2,
723
840
  borderBottomRadius: "md",
724
841
  bgColor: useColorModeValue("whiteAlpha.800", "blackAlpha.800"),
725
- children: /* @__PURE__ */ jsx(List, { spacing: 4, p: 0, children: items.map(({ title, description }) => /* @__PURE__ */ jsxs(ListItem, { display: "flex", children: [
842
+ children: /* @__PURE__ */ jsx(List$1, { spacing: 4, p: 0, children: items.map(({ title, description }) => /* @__PURE__ */ jsxs(ListItem, { display: "flex", children: [
726
843
  /* @__PURE__ */ jsx(ListIcon, { as: IconMap[itemType], w: 6, h: 6, color: IconColorMap[itemType] }),
727
844
  /* @__PURE__ */ jsxs(Text, { fontWeight: "semibold", fontSize: "md", children: [
728
845
  title,
@@ -768,16 +885,65 @@ const Seo = ({ children, siteMetadata, title, description, lang }) => {
768
885
  children
769
886
  ] });
770
887
  };
888
+ const Table = ({
889
+ columnNumber,
890
+ items,
891
+ caption,
892
+ bordered = false,
893
+ striped = true,
894
+ scrollable,
895
+ className
896
+ }) => {
897
+ const headerItems = items.slice(0, columnNumber);
898
+ const bodyItems = items.slice(columnNumber);
899
+ return /* @__PURE__ */ jsxs(
900
+ TableContainer,
901
+ {
902
+ border: bordered ? void 0 : "none",
903
+ ...scrollable ? { maxH: "50vh", overflowY: "auto" } : {},
904
+ className,
905
+ children: [
906
+ /* @__PURE__ */ jsxs(Table$1, { variant: striped ? "striped" : "simple", children: [
907
+ /* @__PURE__ */ jsx(Thead, { ...scrollable ? { position: "sticky", top: 0, zIndex: 1, bg: "gray.800" } : {}, children: /* @__PURE__ */ jsx(Tr, { children: headerItems.map((item, index) => /* @__PURE__ */ jsx(Th, { children: item }, index)) }) }),
908
+ /* @__PURE__ */ jsx(Tbody, { children: Array.from({ length: Math.ceil(bodyItems.length / columnNumber) }, (_, rowIndex) => /* @__PURE__ */ jsx(Tr, { children: Array.from({ length: columnNumber }, (_2, colIndex) => /* @__PURE__ */ jsx(Td, { children: bodyItems[rowIndex * columnNumber + colIndex] || "" }, colIndex)) }, rowIndex)) })
909
+ ] }),
910
+ !!caption && /* @__PURE__ */ jsx(TableCaption, { children: caption })
911
+ ]
912
+ }
913
+ );
914
+ };
915
+ const Tabs = ({ items, className, render }) => {
916
+ const { tabs, panels } = useMemo(() => {
917
+ const tabs2 = [];
918
+ const panels2 = [];
919
+ items.forEach(({ content, ...tab }) => {
920
+ tabs2.push(tab);
921
+ panels2.push(content);
922
+ });
923
+ return { tabs: tabs2, panels: panels2 };
924
+ }, []);
925
+ return /* @__PURE__ */ jsxs(Tabs$1, { overflow: "hidden", colorScheme: "brand", className, children: [
926
+ /* @__PURE__ */ jsx(TabList, { overflow: "auto hidden", children: tabs.map(({ label, icon }, index) => /* @__PURE__ */ jsx(Tab, { children: /* @__PURE__ */ jsx(Text, { as: "h3", isTruncated: true, children: icon ? `${icon} ${label}` : label }) }, index)) }),
927
+ /* @__PURE__ */ jsx(TabPanels, { children: panels.map((panel, index) => /* @__PURE__ */ jsx(TabPanel, { children: render(panel) }, index)) })
928
+ ] });
929
+ };
771
930
  export {
772
931
  Author as A,
932
+ BonusCard as B,
773
933
  ContactForm as C,
774
934
  ExpertTip as E,
775
935
  Faq as F,
776
- GameDemo as G,
936
+ GameCard as G,
777
937
  HowTo as H,
778
938
  Layout as L,
779
939
  ProsCons as P,
780
940
  Seo as S,
941
+ Table as T,
781
942
  Features as a,
782
- GameInfo as b
943
+ GameDemo as b,
944
+ GameInfo as c,
945
+ List as d,
946
+ Tabs as e,
947
+ Center as f,
948
+ LinkButton as g
783
949
  };
@@ -1,4 +1,4 @@
1
- import "./index-Bh5idiRE.mjs";
1
+ import "./index-DxLcykuT.mjs";
2
2
  import i18n from "i18next";
3
3
  function getCurrentYear() {
4
4
  const locale = i18n.language;