summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/components
diff options
context:
space:
mode:
authorJay V <[email protected]>2025-07-10 16:08:42 -0400
committerJay V <[email protected]>2025-07-10 16:38:51 -0400
commit2e5f96fa41d0d6e18f47bb458b67cccf80516f2b (patch)
treec20b74a293e0bd29a5fba0593fefabeaff1da7b3 /packages/web/src/components
parentc056b0add9221c32cd50452d4b9b884f2be67021 (diff)
downloadopencode-2e5f96fa41d0d6e18f47bb458b67cccf80516f2b.tar.gz
opencode-2e5f96fa41d0d6e18f47bb458b67cccf80516f2b.zip
docs: share page attachment
Diffstat (limited to 'packages/web/src/components')
-rw-r--r--packages/web/src/components/Share.tsx1
-rw-r--r--packages/web/src/components/share/part.module.css23
-rw-r--r--packages/web/src/components/share/part.tsx11
3 files changed, 29 insertions, 6 deletions
diff --git a/packages/web/src/components/Share.tsx b/packages/web/src/components/Share.tsx
index 90a1ffceb..53a249d5b 100644
--- a/packages/web/src/components/Share.tsx
+++ b/packages/web/src/components/Share.tsx
@@ -321,6 +321,7 @@ export default function Share(props: {
const filteredParts = createMemo(() =>
msg.parts.filter((x, index) => {
if (x.type === "step-start" && index > 0) return false
+ if (x.type === "text" && x.synthetic === true) return false
if (x.type === "tool" && x.tool === "todoread") return false
if (x.type === "text" && !x.text) return false
if (x.type === "tool" && (x.state.status === "pending" || x.state.status === "running"))
diff --git a/packages/web/src/components/share/part.module.css b/packages/web/src/components/share/part.module.css
index 9145cddf7..a11221ea1 100644
--- a/packages/web/src/components/share/part.module.css
+++ b/packages/web/src/components/share/part.module.css
@@ -137,6 +137,29 @@
}
}
+ [data-component="attachment"] {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 0.375rem;
+ padding-bottom: 1rem;
+
+ [data-slot="copy"] {
+ line-height: 18px;
+ font-size: 0.875rem;
+ text-transform: uppercase;
+ letter-spacing: -0.5px;
+ color: var(--sl-color-text-secondary);
+ }
+
+ [data-slot="filename"] {
+ line-height: 1.5;
+ font-size: 0.875rem;
+ font-weight: 500;
+ max-width: var(--md-tool-width);
+ }
+ }
+
[data-component="button-text"] {
cursor: pointer;
appearance: none;
diff --git a/packages/web/src/components/share/part.tsx b/packages/web/src/components/share/part.tsx
index 4d95fa528..d2b6bd925 100644
--- a/packages/web/src/components/share/part.tsx
+++ b/packages/web/src/components/share/part.tsx
@@ -15,6 +15,7 @@ import {
IconSparkles,
IconGlobeAlt,
IconDocument,
+ IconPaperClip,
IconQueueList,
IconUserCircle,
IconCommandLine,
@@ -80,7 +81,7 @@ export function Part(props: PartProps) {
<IconUserCircle width={18} height={18} />
</Match>
<Match when={props.message.role === "user" && props.part.type === "file"}>
- <IconDocument width={18} height={18} />
+ <IconPaperClip width={18} height={18} />
</Match>
<Match when={props.part.type === "step-start" && props.message.role === "assistant" && props.message.modelID}>
{model => <ProviderIcon model={model()} size={18} />}
@@ -152,11 +153,9 @@ export function Part(props: PartProps) {
</>
)}
{props.message.role === "user" && props.part.type === "file" && (
- <div data-component="tool-title">
- <span data-slot="name">Read</span>
- <span data-slot="target" title={props.part.filename}>
- {props.part.filename}
- </span>
+ <div data-component="attachment">
+ <div data-slot="copy">Attachment</div>
+ <div data-slot="filename">{props.part.filename}</div>
</div>
)}
{props.part.type === "step-start" && props.message.role === "assistant" && (