summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/marked.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-10-23 15:27:31 -0500
committerAdam <[email protected]>2025-10-24 12:16:32 -0500
commit3eb2db98ed0a9c266e1bf00544e460cb0633b368 (patch)
treeeb04fea563b3a3b74a3d89ca9500e92cf4b908c8 /packages/desktop/src/context/marked.tsx
parent35dec0649db8f46bffd7121af9cd301668e69e8c (diff)
downloadopencode-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.tsx63
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,
+ })
+ },
+ }),
+ )
+ },
+})