summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/components/share/content-code.tsx
diff options
context:
space:
mode:
authorDax <[email protected]>2025-07-07 15:53:43 -0400
committerGitHub <[email protected]>2025-07-07 15:53:43 -0400
commitf884766445bbf1fbce11f1db4bc6174e72d9baa5 (patch)
treee7d9e7b3d8efc8bed249f9d29e2d8fb838a275f2 /packages/web/src/components/share/content-code.tsx
parent76b2e4539cb97bae5812ed2d832ce49d02e70c64 (diff)
downloadopencode-f884766445bbf1fbce11f1db4bc6174e72d9baa5.tar.gz
opencode-f884766445bbf1fbce11f1db4bc6174e72d9baa5.zip
v2 message format and upgrade to ai sdk v5 (#743)
Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Liang-Shih Lin <[email protected]> Co-authored-by: Dominik Engelhardt <[email protected]> Co-authored-by: Jay V <[email protected]> Co-authored-by: adamdottv <[email protected]>
Diffstat (limited to 'packages/web/src/components/share/content-code.tsx')
-rw-r--r--packages/web/src/components/share/content-code.tsx32
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/web/src/components/share/content-code.tsx b/packages/web/src/components/share/content-code.tsx
new file mode 100644
index 000000000..b8c4f2ccd
--- /dev/null
+++ b/packages/web/src/components/share/content-code.tsx
@@ -0,0 +1,32 @@
+import { type JSX, splitProps, createResource, Suspense } from "solid-js"
+import { codeToHtml } from "shiki"
+import style from "./content-code.module.css"
+import { transformerNotationDiff } from "@shikijs/transformers"
+
+interface Props {
+ code: string
+ lang?: string
+ flush?: boolean
+}
+export function ContentCode(props: Props) {
+ const [html] = createResource(
+ () => [props.code, props.lang],
+ async ([code, lang]) => {
+ // TODO: For testing delays
+ // await new Promise((resolve) => setTimeout(resolve, 3000))
+ return (await codeToHtml(code || "", {
+ lang: lang || "text",
+ themes: {
+ light: "github-light",
+ dark: "github-dark",
+ },
+ transformers: [transformerNotationDiff()],
+ })) as string
+ },
+ )
+ return (
+ <Suspense>
+ <div innerHTML={html()} class={style.root} data-flush={props.flush === true ? true : undefined} />
+ </Suspense>
+ )
+}