2024-12-31 12:59:04 +00:00
|
|
|
import { createHighlighter } from "shiki";
|
|
|
|
import { Monaco } from "@monaco-editor/react";
|
|
|
|
import { shikiToMonaco } from "@shikijs/monaco";
|
|
|
|
import { SUPPORTED_LANGUAGES } from "./languages";
|
|
|
|
|
2024-12-31 13:22:33 +00:00
|
|
|
export const SUPPORTED_THEMES = [
|
2025-01-02 09:36:36 +00:00
|
|
|
{
|
|
|
|
key: "andromeeda",
|
|
|
|
value: "andromeeda",
|
|
|
|
label: "Andromeeda",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "aurora-x",
|
|
|
|
value: "aurora-x",
|
|
|
|
label: "Aurora X",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "ayu-dark",
|
|
|
|
value: "ayu-dark",
|
|
|
|
label: "Ayu Dark",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "catppuccin-frappe",
|
|
|
|
value: "catppuccin-frappe",
|
|
|
|
label: "Catppuccin Frappé",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "catppuccin-latte",
|
|
|
|
value: "catppuccin-latte",
|
|
|
|
label: "Catppuccin Latte",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "catppuccin-macchiato",
|
|
|
|
value: "catppuccin-macchiato",
|
|
|
|
label: "Catppuccin Macchiato",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "catppuccin-mocha",
|
|
|
|
value: "catppuccin-mocha",
|
|
|
|
label: "Catppuccin Mocha",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "dark-plus",
|
|
|
|
value: "dark-plus",
|
|
|
|
label: "Dark Plus",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "dracula",
|
|
|
|
value: "dracula",
|
|
|
|
label: "Dracula",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "dracula-soft",
|
|
|
|
value: "dracula-soft",
|
|
|
|
label: "Dracula Soft",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "everforest-dark",
|
|
|
|
value: "everforest-dark",
|
|
|
|
label: "Everforest Dark",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "everforest-light",
|
|
|
|
value: "everforest-light",
|
|
|
|
label: "Everforest Light",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "github-dark",
|
|
|
|
value: "github-dark",
|
|
|
|
label: "GitHub Dark",
|
|
|
|
},
|
|
|
|
// {
|
|
|
|
// key: "github-dark-default",
|
|
|
|
// value: "github-dark-default",
|
|
|
|
// label: "GitHub Dark Default",
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// key: "github-dark-dimmed",
|
|
|
|
// value: "github-dark-dimmed",
|
|
|
|
// label: "GitHub Dark Dimmed",
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// key: "github-dark-high-contrast",
|
|
|
|
// value: "github-dark-high-contrast",
|
|
|
|
// label: "GitHub Dark High Contrast",
|
|
|
|
// },
|
|
|
|
{
|
|
|
|
key: "github-light",
|
|
|
|
value: "github-light",
|
|
|
|
label: "GitHub Light",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "github-light-default",
|
|
|
|
value: "github-light-default",
|
|
|
|
label: "GitHub Light Default",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "github-light-high-contrast",
|
|
|
|
value: "github-light-high-contrast",
|
|
|
|
label: "GitHub Light High Contrast",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "houston",
|
|
|
|
value: "houston",
|
|
|
|
label: "Houston",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "kanagawa-dragon",
|
|
|
|
value: "kanagawa-dragon",
|
|
|
|
label: "Kanagawa Dragon",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "kanagawa-lotus",
|
|
|
|
value: "kanagawa-lotus",
|
|
|
|
label: "Kanagawa Lotus",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "kanagawa-wave",
|
|
|
|
value: "kanagawa-wave",
|
|
|
|
label: "Kanagawa Wave",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "laserwave",
|
|
|
|
value: "laserwave",
|
|
|
|
label: "Laserwave",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "light-plus",
|
|
|
|
value: "light-plus",
|
|
|
|
label: "Light Plus",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "material-theme",
|
|
|
|
value: "material-theme",
|
|
|
|
label: "Material Theme",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "material-theme-darker",
|
|
|
|
value: "material-theme-darker",
|
|
|
|
label: "Material Theme Darker",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "material-theme-lighter",
|
|
|
|
value: "material-theme-lighter",
|
|
|
|
label: "Material Theme Lighter",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "material-theme-ocean",
|
|
|
|
value: "material-theme-ocean",
|
|
|
|
label: "Material Theme Ocean",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "material-theme-palenight",
|
|
|
|
value: "material-theme-palenight",
|
|
|
|
label: "Material Theme Palenight",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "min-dark",
|
|
|
|
value: "min-dark",
|
|
|
|
label: "Min Dark",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "min-light",
|
|
|
|
value: "min-light",
|
|
|
|
label: "Min Light",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "monokai",
|
|
|
|
value: "monokai",
|
|
|
|
label: "Monokai",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "night-owl",
|
|
|
|
value: "night-owl",
|
|
|
|
label: "Night Owl",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "nord",
|
|
|
|
value: "nord",
|
|
|
|
label: "Nord",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "one-dark-pro",
|
|
|
|
value: "one-dark-pro",
|
|
|
|
label: "One Dark Pro",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "one-light",
|
|
|
|
value: "one-light",
|
|
|
|
label: "One Light",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "plastic",
|
|
|
|
value: "plastic",
|
|
|
|
label: "Plastic",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "poimandres",
|
|
|
|
value: "poimandres",
|
|
|
|
label: "Poimandres",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "red",
|
|
|
|
value: "red",
|
|
|
|
label: "Red",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "rose-pine",
|
|
|
|
value: "rose-pine",
|
|
|
|
label: "Rosé Pine",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "rose-pine-dawn",
|
|
|
|
value: "rose-pine-dawn",
|
|
|
|
label: "Rosé Pine Dawn",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "rose-pine-moon",
|
|
|
|
value: "rose-pine-moon",
|
|
|
|
label: "Rosé Pine Moon",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "slack-dark",
|
|
|
|
value: "slack-dark",
|
|
|
|
label: "Slack Dark",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "slack-ochin",
|
|
|
|
value: "slack-ochin",
|
|
|
|
label: "Slack Ochin",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "snazzy-light",
|
|
|
|
value: "snazzy-light",
|
|
|
|
label: "Snazzy Light",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "solarized-dark",
|
|
|
|
value: "solarized-dark",
|
|
|
|
label: "Solarized Dark",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "solarized-light",
|
|
|
|
value: "solarized-light",
|
|
|
|
label: "Solarized Light",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "synthwave-84",
|
|
|
|
value: "synthwave-84",
|
|
|
|
label: "Synthwave '84",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "tokyo-night",
|
|
|
|
value: "tokyo-night",
|
|
|
|
label: "Tokyo Night",
|
|
|
|
},
|
|
|
|
// {
|
|
|
|
// key: "vesper",
|
|
|
|
// value: "vesper",
|
|
|
|
// label: "Vesper",
|
|
|
|
// },
|
|
|
|
{
|
|
|
|
key: "vitesse-black",
|
|
|
|
value: "vitesse-black",
|
|
|
|
label: "Vitesse Black",
|
|
|
|
},
|
2024-12-31 13:22:33 +00:00
|
|
|
{
|
|
|
|
key: "vitesse-dark",
|
|
|
|
value: "vitesse-dark",
|
|
|
|
label: "Vitesse Dark",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
key: "vitesse-light",
|
|
|
|
value: "vitesse-light",
|
|
|
|
label: "Vitesse Light",
|
|
|
|
},
|
|
|
|
];
|
2024-12-31 12:59:04 +00:00
|
|
|
|
2024-12-31 13:22:33 +00:00
|
|
|
export const DEFAULT_THEME = SUPPORTED_THEMES[0].value;
|
2024-12-31 12:59:04 +00:00
|
|
|
|
|
|
|
export const highlightMonacoEditor = async (monaco: Monaco) => {
|
|
|
|
const highlighter = await createHighlighter({
|
2025-01-02 09:36:36 +00:00
|
|
|
themes: SUPPORTED_THEMES.map((theme) => theme.value),
|
|
|
|
langs: SUPPORTED_LANGUAGES.map((lang) => lang.value),
|
2024-12-31 12:59:04 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
for (const lang of SUPPORTED_LANGUAGES) {
|
2025-01-02 09:36:36 +00:00
|
|
|
monaco.languages.register({ id: lang.value });
|
2024-12-31 12:59:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
shikiToMonaco(highlighter, monaco);
|
|
|
|
};
|