diff options
author | Justice Almanzar <superdash993@gmail.com> | 2023-01-13 17:15:45 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-13 23:15:45 +0100 |
commit | ea748dfb605386b80a4919183ad6fa9249a82e21 (patch) | |
tree | 8660c5d192ac553e7574d6b510e18f99c7ac5ddd /src/plugins/shikiCodeblocks/index.ts | |
parent | 6c5fcc4119d05389bbc71bd3e52090f6fd29b10c (diff) | |
download | Vencord-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.ts | 104 |
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, |