summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJustas Raudonius <[email protected]>2026-01-06 22:58:36 +0200
committerGitHub <[email protected]>2026-01-06 14:58:36 -0600
commitba105246ea646428c72c3a9a5df8d95495cfc9b2 (patch)
treee4bbe56563871eb57fb437d3aac662a948c59b12
parenta10cc634035f283b918e53dbd5e812547477cddd (diff)
downloadopencode-ba105246ea646428c72c3a9a5df8d95495cfc9b2.tar.gz
opencode-ba105246ea646428c72c3a9a5df8d95495cfc9b2.zip
fix(app): open links in new tab or browser (#7127)
-rw-r--r--packages/ui/src/context/marked.tsx8
-rw-r--r--packages/web/src/components/share/content-markdown.tsx8
2 files changed, 16 insertions, 0 deletions
diff --git a/packages/ui/src/context/marked.tsx b/packages/ui/src/context/marked.tsx
index 3bd6cb076..9bd48c9a9 100644
--- a/packages/ui/src/context/marked.tsx
+++ b/packages/ui/src/context/marked.tsx
@@ -379,6 +379,14 @@ export const { use: useMarked, provider: MarkedProvider } = createSimpleContext(
name: "Marked",
init: () => {
return marked.use(
+ {
+ renderer: {
+ link({ href, title, text }) {
+ const titleAttr = title ? ` title="${title}"` : ""
+ return `<a href="${href}"${titleAttr} target="_blank" rel="noopener noreferrer">${text}</a>`
+ },
+ },
+ },
markedKatex({
throwOnError: false,
}),
diff --git a/packages/web/src/components/share/content-markdown.tsx b/packages/web/src/components/share/content-markdown.tsx
index 69cde82b2..b9b1d5dcb 100644
--- a/packages/web/src/components/share/content-markdown.tsx
+++ b/packages/web/src/components/share/content-markdown.tsx
@@ -8,6 +8,14 @@ import { transformerNotationDiff } from "@shikijs/transformers"
import style from "./content-markdown.module.css"
const markedWithShiki = marked.use(
+ {
+ renderer: {
+ link({ href, title, text }) {
+ const titleAttr = title ? ` title="${title}"` : ""
+ return `<a href="${href}"${titleAttr} target="_blank" rel="noopener noreferrer">${text}</a>`
+ },
+ },
+ },
markedShiki({
highlight(code, lang) {
return codeToHtml(code, {