this repo has no description
1import {
2 Card,
3 Text,
4 useThemeContext,
5 Button,
6 AngleBracketsIcon,
7 BookCheckIcon,
8 ClydeIcon
9} from "@moonlight-mod/wp/discord/components/common/index";
10import Flex from "@moonlight-mod/wp/discord/uikit/Flex";
11import React from "@moonlight-mod/wp/react";
12import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils";
13import AppCardClasses from "@moonlight-mod/wp/discord/modules/guild_settings/web/AppCard.css";
14import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
15
16const wordmark = "https://raw.githubusercontent.com/moonlight-mod/moonlight/refs/heads/main/img/wordmark.png";
17const wordmarkLight =
18 "https://raw.githubusercontent.com/moonlight-mod/moonlight/refs/heads/main/img/wordmark-light.png";
19
20function parse(str: string) {
21 return MarkupUtils.parse(str, true, {
22 allowHeading: true,
23 allowLinks: true,
24 allowList: true
25 });
26}
27
28function Dev({ name, picture, link }: { name: string; picture: string; link: string }) {
29 return (
30 <Card editable={true} className={AppCardClasses.card}>
31 <div className={AppCardClasses.cardHeader + " moonbase-dev"}>
32 <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER}>
33 <img src={picture} alt={name} className="moonbase-dev-avatar" />
34
35 <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.CENTER}>
36 <a href={link} rel="noreferrer noopener" target="_blank" tabIndex={-1}>
37 <Text variant="text-md/semibold">{name}</Text>
38 </a>
39 </Flex>
40 </Flex>
41 </div>
42 </Card>
43 );
44}
45
46function IconButton({
47 text,
48 link,
49 icon,
50 openInClient
51}: {
52 text: string;
53 link: string;
54 icon: React.FC<any>;
55 openInClient?: boolean;
56}) {
57 return (
58 <Button
59 onClick={() => {
60 if (openInClient) {
61 try {
62 const { handleClick } = spacepack.require("discord/utils/MaskedLinkUtils");
63 handleClick({ href: link });
64 } catch {
65 window.open(link);
66 }
67 } else {
68 // Will open externally in the user's browser
69 window.open(link);
70 }
71 }}
72 >
73 <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER} className="moonbase-gap">
74 {React.createElement(icon, {
75 size: "sm",
76 color: "currentColor"
77 })}
78 {text}
79 </Flex>
80 </Button>
81 );
82}
83
84export default function AboutPage() {
85 const darkTheme = useThemeContext()?.theme === "dark";
86
87 return (
88 <div>
89 <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.CENTER}>
90 <img src={darkTheme ? wordmarkLight : wordmark} alt="moonlight wordmark" className="moonbase-wordmark" />
91 <Text variant="heading-lg/medium">created by:</Text>
92 <div className="moonbase-devs">
93 <Dev name="Cynosphere" picture="https://github.com/Cynosphere.png" link="https://github.com/Cynosphere" />
94 <Dev name="NotNite" picture="https://github.com/NotNite.png" link="https://github.com/NotNite" />
95 <Dev name="adryd" picture="https://github.com/adryd325.png" link="https://github.com/adryd325" />
96 <Dev
97 name="redstonekasi"
98 picture="https://github.com/redstonekasi.png"
99 link="https://github.com/redstonekasi"
100 />
101 </div>
102
103 <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER} className="moonbase-gap">
104 <IconButton text="View source" icon={AngleBracketsIcon} link="https://github.com/moonlight-mod/moonlight" />
105 <IconButton text="Open the docs" icon={BookCheckIcon} link="https://moonlight-mod.github.io/" />
106 <IconButton
107 text="Join the server"
108 icon={ClydeIcon}
109 link="https://discord.gg/FdZBTFCP6F"
110 openInClient={true}
111 />
112 </Flex>
113 </Flex>
114
115 <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.START} className="moonbase-about-text">
116 <Text variant="text-sm/normal">
117 {parse(`moonlight \`${window.moonlight.version}\` on \`${window.moonlight.branch}\``)}
118 </Text>
119
120 <Text variant="text-sm/normal">
121 {parse(
122 "moonlight is licensed under the [GNU Lesser General Public License](https://www.gnu.org/licenses/lgpl-3.0.html) (`LGPL-3.0-or-later`)."
123 )}
124 </Text>
125 </Flex>
126 </div>
127 );
128}