diff options
| author | Adam <[email protected]> | 2025-10-23 15:27:31 -0500 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-10-24 12:16:32 -0500 |
| commit | 3eb2db98ed0a9c266e1bf00544e460cb0633b368 (patch) | |
| tree | eb04fea563b3a3b74a3d89ca9500e92cf4b908c8 /packages/desktop/src/context/marked.tsx | |
| parent | 35dec0649db8f46bffd7121af9cd301668e69e8c (diff) | |
| download | opencode-3eb2db98ed0a9c266e1bf00544e460cb0633b368.tar.gz opencode-3eb2db98ed0a9c266e1bf00544e460cb0633b368.zip | |
wip: desktop work
Diffstat (limited to 'packages/desktop/src/context/marked.tsx')
| -rw-r--r-- | packages/desktop/src/context/marked.tsx | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/packages/desktop/src/context/marked.tsx b/packages/desktop/src/context/marked.tsx index 550a0456a..18ce4280a 100644 --- a/packages/desktop/src/context/marked.tsx +++ b/packages/desktop/src/context/marked.tsx @@ -1,43 +1,30 @@ -import { createContext, useContext, type ParentProps } from "solid-js" -import { useShiki } from "@/context" import { marked } from "marked" import markedShiki from "marked-shiki" import { bundledLanguages, type BundledLanguage } from "shiki" -function init(highlighter: ReturnType<typeof useShiki>) { - return marked.use( - markedShiki({ - async highlight(code, lang) { - if (!(lang in bundledLanguages)) { - lang = "text" - } - if (!highlighter.getLoadedLanguages().includes(lang)) { - await highlighter.loadLanguage(lang as BundledLanguage) - } - return highlighter.codeToHtml(code, { - lang: lang || "text", - theme: "opencode", - tabindex: false, - }) - }, - }), - ) -} +import { createSimpleContext } from "./helper" +import { useShiki } from "./shiki" -type MarkedContext = ReturnType<typeof init> - -const ctx = createContext<MarkedContext>() - -export function MarkedProvider(props: ParentProps) { - const highlighter = useShiki() - const value = init(highlighter) - return <ctx.Provider value={value}>{props.children}</ctx.Provider> -} - -export function useMarked() { - const value = useContext(ctx) - if (!value) { - throw new Error("useMarked must be used within a MarkedProvider") - } - return value -} +export const { use: useMarked, provider: MarkedProvider } = createSimpleContext({ + name: "Marked", + init: () => { + const highlighter = useShiki() + return marked.use( + markedShiki({ + async highlight(code, lang) { + if (!(lang in bundledLanguages)) { + lang = "text" + } + if (!highlighter.getLoadedLanguages().includes(lang)) { + await highlighter.loadLanguage(lang as BundledLanguage) + } + return highlighter.codeToHtml(code, { + lang: lang || "text", + theme: "opencode", + tabindex: false, + }) + }, + }), + ) + }, +}) |
