summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJay V <[email protected]>2025-06-20 15:38:47 -0400
committerJay V <[email protected]>2025-06-20 15:50:12 -0400
commit4df40e0d9bde6fe44886910a4c1f9059721ecae2 (patch)
tree8086d7103fff5da38e4131d2efcd9b13b7137b00
parentb72e17a8b7b26cc1ad55ebd2fd15b28015a3d95b (diff)
downloadopencode-4df40e0d9bde6fe44886910a4c1f9059721ecae2.tar.gz
opencode-4df40e0d9bde6fe44886910a4c1f9059721ecae2.zip
docs: share page bugs
-rw-r--r--bun.lock5
-rw-r--r--packages/web/package.json1
-rw-r--r--packages/web/src/components/Share.tsx31
-rw-r--r--packages/web/src/components/share.module.css4
-rw-r--r--packages/web/src/pages/s/[id].astro7
-rw-r--r--packages/web/src/types/lang-map.d.ts0
6 files changed, 39 insertions, 9 deletions
diff --git a/bun.lock b/bun.lock
index e683585d8..18684d78a 100644
--- a/bun.lock
+++ b/bun.lock
@@ -71,6 +71,7 @@
"astro": "5.7.13",
"diff": "8.0.2",
"js-base64": "3.7.7",
+ "lang-map": "0.4.0",
"luxon": "3.6.1",
"marked": "15.0.12",
"rehype-autolink-headings": "7.1.0",
@@ -1011,6 +1012,10 @@
"klona": ["[email protected]", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="],
+ "lang-map": ["[email protected]", "", { "dependencies": { "language-map": "^1.1.0" } }, "sha512-oiSqZIEUnWdFeDNsp4HId4tAxdFbx5iMBOwA3666Fn2L8Khj8NiD9xRvMsGmKXopPVkaDFtSv3CJOmXFUB0Hcg=="],
+
+ "language-map": ["[email protected]", "", {}, "sha512-n7gFZpe+DwEAX9cXVTw43i3wiudWDDtSn28RmdnS/HCPr284dQI/SztsamWanRr75oSlKSaGbV2nmWCTzGCoVg=="],
+
"leven": ["[email protected]", "", {}, "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA=="],
"longest-streak": ["[email protected]", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="],
diff --git a/packages/web/package.json b/packages/web/package.json
index 8cbcda72a..2d69de272 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -21,6 +21,7 @@
"astro": "5.7.13",
"diff": "8.0.2",
"js-base64": "3.7.7",
+ "lang-map": "0.4.0",
"luxon": "3.6.1",
"marked": "15.0.12",
"rehype-autolink-headings": "7.1.0",
diff --git a/packages/web/src/components/Share.tsx b/packages/web/src/components/Share.tsx
index 3e6f5b3b5..410fc24e8 100644
--- a/packages/web/src/components/Share.tsx
+++ b/packages/web/src/components/Share.tsx
@@ -11,6 +11,7 @@ import {
createEffect,
createSignal,
} from "solid-js"
+import map from "lang-map"
import { DateTime } from "luxon"
import { createStore, reconcile } from "solid-js/store"
import type { Diagnostic } from "vscode-languageserver-types"
@@ -100,8 +101,24 @@ function stripWorkingDirectory(filePath: string, workingDir?: string) {
return filePath
}
-function getFileType(path: string) {
- return path.split(".").pop()
+function getShikiLang(filename: string) {
+ const ext = filename
+ .split('.')
+ .pop()
+ ?.toLowerCase() ?? ''
+
+ // map.languages(ext) returns an array of matching Linguist language names (e.g. ['TypeScript'])
+ const langs = map.languages(ext)
+ const type = langs?.[0]?.toLowerCase()
+
+ // Overrride any specific language mappings
+ const overrides: Record<string, string> = {
+ "conf": "shellscript"
+ }
+
+ return type
+ ? overrides[type] ?? type
+ : 'plaintext'
}
function formatDuration(ms: number): string {
@@ -980,7 +997,7 @@ export default function Share(props: {
const prompts = assistant().system || []
return prompts.filter(
(p: string) =>
- !p.startsWith("You are Claude Code"),
+ !p.startsWith("You are Claude"),
)
})
return (
@@ -1379,7 +1396,7 @@ export default function Share(props: {
<Show when={showResults()}>
<div data-part-tool-code>
<CodeBlock
- lang={getFileType(filePath())}
+ lang={getShikiLang(filePath())}
code={preview()}
/>
</div>
@@ -1483,8 +1500,8 @@ export default function Share(props: {
<Show when={showResults()}>
<div data-part-tool-code>
<CodeBlock
- lang={getFileType(filePath())}
- code={content()}
+ lang={getShikiLang(filePath())}
+ code={args.content}
/>
</div>
</Show>
@@ -1557,7 +1574,7 @@ export default function Share(props: {
<DiffView
class={styles["diff-code-block"]}
diff={diff()}
- lang={getFileType(filePath())}
+ lang={getShikiLang(filePath())}
/>
</div>
</Match>
diff --git a/packages/web/src/components/share.module.css b/packages/web/src/components/share.module.css
index 738f51553..37fce65eb 100644
--- a/packages/web/src/components/share.module.css
+++ b/packages/web/src/components/share.module.css
@@ -63,7 +63,7 @@
h1 {
font-size: 2.75rem;
font-weight: 500;
- line-height: 1.15;
+ line-height: 1.2;
letter-spacing: -0.05em;
display: -webkit-box;
-webkit-box-orient: vertical;
@@ -360,7 +360,7 @@
[data-part-type="tool-fetch"] {
[data-part-tool-result] {
[data-part-tool-code] {
- width: var(--md-tool-width);
+ max-width: var(--md-tool-width);
border: 1px solid var(--sl-color-divider);
background-color: var(--sl-color-bg-surface);
border-radius: 0.25rem;
diff --git a/packages/web/src/pages/s/[id].astro b/packages/web/src/pages/s/[id].astro
index 502784f86..7e8c7238f 100644
--- a/packages/web/src/pages/s/[id].astro
+++ b/packages/web/src/pages/s/[id].astro
@@ -11,6 +11,13 @@ const { id } = Astro.params;
const res = await fetch(`${apiUrl}/share_data?id=${id}`);
const data = await res.json();
+if (!data.info) {
+ return new Response(null, {
+ status: 404,
+ statusText: 'Not found'
+ });
+}
+
const models: Set<string> = new Set();
const version = data.info.version ? `v${data.info.version}` : "v0.0.1";
diff --git a/packages/web/src/types/lang-map.d.ts b/packages/web/src/types/lang-map.d.ts
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/packages/web/src/types/lang-map.d.ts