aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/shikiCodeblocks/index.ts
diff options
context:
space:
mode:
authorJustice Almanzar <superdash993@gmail.com>2023-01-13 17:15:45 -0500
committerGitHub <noreply@github.com>2023-01-13 23:15:45 +0100
commitea748dfb605386b80a4919183ad6fa9249a82e21 (patch)
tree8660c5d192ac553e7574d6b510e18f99c7ac5ddd /src/plugins/shikiCodeblocks/index.ts
parent6c5fcc4119d05389bbc71bd3e52090f6fd29b10c (diff)
downloadVencord-ea748dfb605386b80a4919183ad6fa9249a82e21.tar.gz
Vencord-ea748dfb605386b80a4919183ad6fa9249a82e21.tar.bz2
Vencord-ea748dfb605386b80a4919183ad6fa9249a82e21.zip
feat: Typesafe Settings Definitions (#403)
Co-authored-by: Ven <vendicated@riseup.net>
Diffstat (limited to 'src/plugins/shikiCodeblocks/index.ts')
-rw-r--r--src/plugins/shikiCodeblocks/index.ts104
1 files changed, 7 insertions, 97 deletions
diff --git a/src/plugins/shikiCodeblocks/index.ts b/src/plugins/shikiCodeblocks/index.ts
index 428a273..58e55b4 100644
--- a/src/plugins/shikiCodeblocks/index.ts
+++ b/src/plugins/shikiCodeblocks/index.ts
@@ -18,26 +18,19 @@
import "./shiki.css";
-import { disableStyle, enableStyle } from "@api/Styles";
+import { enableStyle } from "@api/Styles";
import { Devs } from "@utils/constants";
-import { parseUrl } from "@utils/misc";
-import { wordsFromPascal, wordsToTitle } from "@utils/text";
-import definePlugin, { OptionType } from "@utils/types";
+import definePlugin from "@utils/types";
import previewExampleText from "~fileContent/previewExample.tsx";
-import { Settings } from "../../Vencord";
import { shiki } from "./api/shiki";
-import { themes } from "./api/themes";
import { createHighlighter } from "./components/Highlighter";
import deviconStyle from "./devicon.css?managed";
-import { DeviconSetting, HljsSetting, ShikiSettings } from "./types";
+import { settings } from "./settings";
+import { DeviconSetting } from "./types";
import { clearStyles } from "./utils/createStyle";
-const themeNames = Object.keys(themes);
-
-const getSettings = () => Settings.plugins.ShikiCodeblocks as ShikiSettings;
-
export default definePlugin({
name: "ShikiCodeblocks",
description: "Brings vscode-style codeblocks into Discord, powered by Shiki",
@@ -52,10 +45,10 @@ export default definePlugin({
},
],
start: async () => {
- if (getSettings().useDevIcon !== DeviconSetting.Disabled)
+ if (settings.store.useDevIcon !== DeviconSetting.Disabled)
enableStyle(deviconStyle);
- await shiki.init(getSettings().customTheme || getSettings().theme);
+ await shiki.init(settings.store.customTheme || settings.store.theme);
},
stop: () => {
shiki.destroy();
@@ -67,90 +60,7 @@ export default definePlugin({
isPreview: true,
tempSettings,
}),
- options: {
- theme: {
- type: OptionType.SELECT,
- description: "Default themes",
- options: themeNames.map(themeName => ({
- label: wordsToTitle(wordsFromPascal(themeName)),
- value: themes[themeName],
- default: themes[themeName] === themes.DarkPlus,
- })),
- disabled: () => !!getSettings().customTheme,
- onChange: shiki.setTheme,
- },
- customTheme: {
- type: OptionType.STRING,
- description: "A link to a custom vscode theme",
- placeholder: themes.MaterialCandy,
- isValid: value => {
- if (!value) return true;
- const url = parseUrl(value);
- if (!url) return "Must be a valid URL";
-
- if (!url.pathname.endsWith(".json")) return "Must be a json file";
-
- return true;
- },
- onChange: value => shiki.setTheme(value || getSettings().theme),
- },
- tryHljs: {
- type: OptionType.SELECT,
- description: "Use the more lightweight default Discord highlighter and theme.",
- options: [
- {
- label: "Never",
- value: HljsSetting.Never,
- },
- {
- label: "Prefer Shiki instead of Highlight.js",
- value: HljsSetting.Secondary,
- default: true,
- },
- {
- label: "Prefer Highlight.js instead of Shiki",
- value: HljsSetting.Primary,
- },
- {
- label: "Always",
- value: HljsSetting.Always,
- },
- ],
- },
- useDevIcon: {
- type: OptionType.SELECT,
- description: "How to show language icons on codeblocks",
- options: [
- {
- label: "Disabled",
- value: DeviconSetting.Disabled,
- },
- {
- label: "Colorless",
- value: DeviconSetting.Greyscale,
- default: true,
- },
- {
- label: "Colored",
- value: DeviconSetting.Color,
- },
- ],
- onChange: (newValue: DeviconSetting) => {
- if (newValue === DeviconSetting.Disabled) disableStyle(deviconStyle);
- else enableStyle(deviconStyle);
- },
- },
- bgOpacity: {
- type: OptionType.SLIDER,
- description: "Background opacity",
- markers: [0, 20, 40, 60, 80, 100],
- default: 100,
- componentProps: {
- stickToMarkers: false,
- onValueRender: null, // Defaults to percentage
- },
- },
- },
+ settings,
// exports
shiki,