this repo has no description
1import { ExtensionWebExports, WebpackRequireType } from "@moonlight-mod/types";
2import extensionsPage from "./ui/extensions";
3import configPage from "./ui/config";
4
5import { CircleXIconSVG, DownloadIconSVG, TrashIconSVG } from "./types";
6import ui from "./ui";
7
8export const pageModules: (require: WebpackRequireType) => Record<
9 string,
10 {
11 name: string;
12 element: React.FunctionComponent;
13 }
14> = (require) => ({
15 extensions: {
16 name: "Extensions",
17 element: extensionsPage(require)
18 },
19 config: {
20 name: "Config",
21 element: configPage(require)
22 }
23});
24
25export const webpackModules: ExtensionWebExports["webpackModules"] = {
26 stores: {
27 dependencies: [
28 { ext: "common", id: "flux" },
29 { ext: "common", id: "fluxDispatcher" }
30 ]
31 },
32
33 moonbase: {
34 dependencies: [
35 { ext: "spacepack", id: "spacepack" },
36 { ext: "settings", id: "settings" },
37 { ext: "common", id: "react" },
38 { ext: "common", id: "components" },
39 { ext: "moonbase", id: "stores" },
40 DownloadIconSVG,
41 TrashIconSVG,
42 CircleXIconSVG,
43 "Masks.PANEL_BUTTON",
44 "removeButtonContainer:",
45 '"Missing channel in Channel.openChannelContextMenu"'
46 ],
47 entrypoint: true,
48 run: (module, exports, require) => {
49 const settings = require("settings_settings").Settings;
50 const React = require("common_react");
51 const spacepack = require("spacepack_spacepack").spacepack;
52 const { MoonbaseSettingsStore } =
53 require("moonbase_stores") as typeof import("./webpackModules/stores");
54
55 const addSection = (name: string, element: React.FunctionComponent) => {
56 settings.addSection(name, name, element, null, -2, {
57 stores: [MoonbaseSettingsStore],
58 element: () => {
59 // Require it here because lazy loading SUX
60 const SettingsNotice =
61 spacepack.findByCode("onSaveButtonColor")[0].exports.default;
62 return (
63 <SettingsNotice
64 submitting={MoonbaseSettingsStore.submitting}
65 onReset={() => {
66 MoonbaseSettingsStore.reset();
67 }}
68 onSave={() => {
69 MoonbaseSettingsStore.writeConfig();
70 }}
71 />
72 );
73 }
74 });
75 };
76
77 if (moonlight.getConfigOption<boolean>("moonbase", "sections")) {
78 const pages = pageModules(require);
79
80 const { Text } = require("common_components");
81 const Margins = spacepack.findByCode("marginCenterHorz:")[0].exports;
82
83 settings.addHeader("Moonbase", -2);
84 for (const page of Object.values(pages)) {
85 addSection(page.name, () => (
86 <>
87 <Text
88 className={Margins.marginBottom20}
89 variant="heading-lg/semibold"
90 tag="h2"
91 >
92 Extensions
93 </Text>
94 <page.element />
95 </>
96 ));
97 }
98 } else {
99 addSection("Moonbase", ui(require));
100 }
101 }
102 }
103};
104
105export const styles = [
106 ".moonbase-settings > :first-child { margin-top: 0px; }"
107];