aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/shikiCodeblocks/components/Highlighter.tsx8
-rw-r--r--src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts15
-rw-r--r--src/plugins/shikiCodeblocks/index.ts12
-rw-r--r--src/plugins/shikiCodeblocks/previewExample.tsx13
4 files changed, 44 insertions, 4 deletions
diff --git a/src/plugins/shikiCodeblocks/components/Highlighter.tsx b/src/plugins/shikiCodeblocks/components/Highlighter.tsx
index 6067fd8..d86e772 100644
--- a/src/plugins/shikiCodeblocks/components/Highlighter.tsx
+++ b/src/plugins/shikiCodeblocks/components/Highlighter.tsx
@@ -42,6 +42,7 @@ export interface HighlighterProps {
lang?: string;
content: string;
isPreview: boolean;
+ tempSettings?: Record<string, any>;
}
export const createHighlighter = (props: HighlighterProps) => (
@@ -53,8 +54,13 @@ export const Highlighter = ({
lang,
content,
isPreview,
+ tempSettings,
}: HighlighterProps) => {
- const { tryHljs, useDevIcon, bgOpacity } = useShikiSettings(["tryHljs", "useDevIcon", "bgOpacity"]);
+ const {
+ tryHljs,
+ useDevIcon,
+ bgOpacity,
+ } = useShikiSettings(["tryHljs", "useDevIcon", "bgOpacity"], tempSettings);
const { id: currentThemeId, theme: currentTheme } = useTheme();
const shikiLang = lang ? resolveLang(lang) : null;
diff --git a/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts b/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
index 416f8e9..0d92f80 100644
--- a/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
+++ b/src/plugins/shikiCodeblocks/hooks/useShikiSettings.ts
@@ -18,8 +18,19 @@
import { useSettings } from "@api/settings";
+import { shiki } from "../api/shiki";
import { ShikiSettings } from "../types";
-export function useShikiSettings(settings: (keyof ShikiSettings)[]) {
- return useSettings(settings.map(setting => `plugins.ShikiCodeblocks.${setting}`)).plugins.ShikiCodeblocks as ShikiSettings;
+export function useShikiSettings(settingKeys: (keyof ShikiSettings)[], overrides?: Record<string, any>) {
+ const settings = useSettings(settingKeys.map(key => `plugins.ShikiCodeblocks.${key}`)).plugins.ShikiCodeblocks as ShikiSettings;
+
+ const withOverrides = { ...settings, ...overrides };
+
+ const themeUrl = withOverrides.customTheme || withOverrides.theme;
+ if (themeUrl !== shiki.currentThemeUrl) shiki.setTheme(themeUrl);
+
+ return {
+ ...withOverrides,
+ isThemeLoading: themeUrl !== shiki.currentThemeUrl,
+ };
}
diff --git a/src/plugins/shikiCodeblocks/index.ts b/src/plugins/shikiCodeblocks/index.ts
index a8be92a..fd6b04b 100644
--- a/src/plugins/shikiCodeblocks/index.ts
+++ b/src/plugins/shikiCodeblocks/index.ts
@@ -21,6 +21,7 @@ import { parseUrl } from "@utils/misc";
import { wordsFromPascal, wordsToTitle } from "@utils/text";
import definePlugin, { OptionType } from "@utils/types";
+import previewExampleText from "~fileContent/previewExample.tsx";
import cssText from "~fileContent/style.css";
import { Settings } from "../../Vencord";
@@ -59,6 +60,12 @@ export default definePlugin({
shiki.destroy();
clearStyles();
},
+ settingsAboutComponent: ({ tempSettings }) => createHighlighter({
+ lang: "tsx",
+ content: previewExampleText,
+ isPreview: true,
+ tempSettings,
+ }),
options: {
theme: {
type: OptionType.SELECT,
@@ -137,7 +144,10 @@ export default definePlugin({
description: "Background opacity",
markers: [0, 20, 40, 60, 80, 100],
default: 100,
- stickToMarkers: false,
+ componentProps: {
+ stickToMarkers: false,
+ onValueRender: null, // Defaults to percentage
+ },
},
},
diff --git a/src/plugins/shikiCodeblocks/previewExample.tsx b/src/plugins/shikiCodeblocks/previewExample.tsx
new file mode 100644
index 0000000..971d016
--- /dev/null
+++ b/src/plugins/shikiCodeblocks/previewExample.tsx
@@ -0,0 +1,13 @@
+/* eslint-disable header/header */
+import React from "react";
+
+const handleClick = async () =>
+ console.log((await import("@webpack/common")).Clipboard.copy("\u200b"));
+
+export const Example: React.FC<{
+ real: boolean,
+ shigged?: number,
+}> = ({ real, shigged }) => <>
+ <p>{`Shigg${real ? `ies${shigged === 0x1B ? "t" : ""}` : "y"}`}</p>
+ <button onClick={handleClick}>Click Me</button>
+</>;