summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/context/marked.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-10-30 13:49:29 -0500
committerAdam <[email protected]>2025-10-30 13:49:29 -0500
commitdc6e54503cb400ea2533740c9a92d09c8a50d077 (patch)
tree7abad7c0275fe646395a2f4f44d90e5f4a48dbe0 /packages/ui/src/context/marked.tsx
parent2a0b67d84f048207d20d952cafa10c430451dc70 (diff)
downloadopencode-dc6e54503cb400ea2533740c9a92d09c8a50d077.tar.gz
opencode-dc6e54503cb400ea2533740c9a92d09c8a50d077.zip
wip: desktop work
Diffstat (limited to 'packages/ui/src/context/marked.tsx')
-rw-r--r--packages/ui/src/context/marked.tsx30
1 files changed, 30 insertions, 0 deletions
diff --git a/packages/ui/src/context/marked.tsx b/packages/ui/src/context/marked.tsx
new file mode 100644
index 000000000..18ce4280a
--- /dev/null
+++ b/packages/ui/src/context/marked.tsx
@@ -0,0 +1,30 @@
+import { marked } from "marked"
+import markedShiki from "marked-shiki"
+import { bundledLanguages, type BundledLanguage } from "shiki"
+
+import { createSimpleContext } from "./helper"
+import { useShiki } from "./shiki"
+
+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,
+ })
+ },
+ }),
+ )
+ },
+})