diff options
| author | Adam <[email protected]> | 2026-02-19 11:10:47 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-02-19 11:12:56 -0600 |
| commit | 56dda4c98c209a96967f045988e17486d616269f (patch) | |
| tree | 4ac8d0adfe4a9c74b9398b084624c6f3da9a834d /packages/ui/src | |
| parent | 6b8902e8b91a7561d57f80249feada949c4d0665 (diff) | |
| download | opencode-56dda4c98c209a96967f045988e17486d616269f.tar.gz opencode-56dda4c98c209a96967f045988e17486d616269f.zip | |
chore: cleanup
Diffstat (limited to 'packages/ui/src')
| -rw-r--r-- | packages/ui/src/components/message-part.css | 15 | ||||
| -rw-r--r-- | packages/ui/src/components/message-part.tsx | 175 | ||||
| -rw-r--r-- | packages/ui/src/components/session-turn.css | 13 | ||||
| -rw-r--r-- | packages/ui/src/components/session-turn.tsx | 1 | ||||
| -rw-r--r-- | packages/ui/src/components/sticky-accordion-header.css | 12 |
5 files changed, 119 insertions, 97 deletions
diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 443b1a42e..f83eae097 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -1219,6 +1219,21 @@ } } +[data-component="apply-patch-tool"] { + > [data-component="collapsible"].tool-collapsible { + gap: 0px; + } + + > [data-component="collapsible"] > [data-slot="collapsible-trigger"][aria-expanded="true"] { + position: sticky; + top: var(--sticky-accordion-top, 0px); + z-index: 20; + height: 40px; + padding-bottom: 8px; + background-color: var(--background-stronger); + } +} + [data-component="accordion"][data-scope="apply-patch"] { [data-slot="accordion-trigger"] { background-color: var(--background-stronger) !important; diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 3a8eafce2..4b223bf35 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -1611,97 +1611,100 @@ ToolRegistry.register({ }) return ( - <BasicTool - {...props} - icon="code-lines" - defer - trigger={{ - title: i18n.t("ui.tool.patch"), - subtitle: subtitle(), - }} - > - <Show when={files().length > 0}> - <Accordion - multiple - data-scope="apply-patch" - value={expanded()} - onChange={(value) => setExpanded(Array.isArray(value) ? value : value ? [value] : [])} - > - <For each={files()}> - {(file) => { - const active = createMemo(() => expanded().includes(file.filePath)) - const [visible, setVisible] = createSignal(false) - - createEffect(() => { - if (!active()) { - setVisible(false) - return - } - - requestAnimationFrame(() => { - if (!active()) return - setVisible(true) + <div data-component="apply-patch-tool"> + <BasicTool + {...props} + icon="code-lines" + defer + trigger={{ + title: i18n.t("ui.tool.patch"), + subtitle: subtitle(), + }} + > + <Show when={files().length > 0}> + <Accordion + multiple + data-scope="apply-patch" + style={{ "--sticky-accordion-offset": "40px" }} + value={expanded()} + onChange={(value) => setExpanded(Array.isArray(value) ? value : value ? [value] : [])} + > + <For each={files()}> + {(file) => { + const active = createMemo(() => expanded().includes(file.filePath)) + const [visible, setVisible] = createSignal(false) + + createEffect(() => { + if (!active()) { + setVisible(false) + return + } + + requestAnimationFrame(() => { + if (!active()) return + setVisible(true) + }) }) - }) - return ( - <Accordion.Item value={file.filePath} data-type={file.type}> - <StickyAccordionHeader> - <Accordion.Trigger> - <div data-slot="apply-patch-trigger-content"> - <div data-slot="apply-patch-file-info"> - <FileIcon node={{ path: file.relativePath, type: "file" }} /> - <div data-slot="apply-patch-file-name-container"> - <Show when={file.relativePath.includes("/")}> - <span data-slot="apply-patch-directory">{`\u202A${getDirectory(file.relativePath)}\u202C`}</span> - </Show> - <span data-slot="apply-patch-filename">{getFilename(file.relativePath)}</span> + return ( + <Accordion.Item value={file.filePath} data-type={file.type}> + <StickyAccordionHeader> + <Accordion.Trigger> + <div data-slot="apply-patch-trigger-content"> + <div data-slot="apply-patch-file-info"> + <FileIcon node={{ path: file.relativePath, type: "file" }} /> + <div data-slot="apply-patch-file-name-container"> + <Show when={file.relativePath.includes("/")}> + <span data-slot="apply-patch-directory">{`\u202A${getDirectory(file.relativePath)}\u202C`}</span> + </Show> + <span data-slot="apply-patch-filename">{getFilename(file.relativePath)}</span> + </div> + </div> + <div data-slot="apply-patch-trigger-actions"> + <Switch> + <Match when={file.type === "add"}> + <span data-slot="apply-patch-change" data-type="added"> + {i18n.t("ui.patch.action.created")} + </span> + </Match> + <Match when={file.type === "delete"}> + <span data-slot="apply-patch-change" data-type="removed"> + {i18n.t("ui.patch.action.deleted")} + </span> + </Match> + <Match when={file.type === "move"}> + <span data-slot="apply-patch-change" data-type="modified"> + {i18n.t("ui.patch.action.moved")} + </span> + </Match> + <Match when={true}> + <DiffChanges changes={{ additions: file.additions, deletions: file.deletions }} /> + </Match> + </Switch> + <Icon name="chevron-grabber-vertical" size="small" /> </div> </div> - <div data-slot="apply-patch-trigger-actions"> - <Switch> - <Match when={file.type === "add"}> - <span data-slot="apply-patch-change" data-type="added"> - {i18n.t("ui.patch.action.created")} - </span> - </Match> - <Match when={file.type === "delete"}> - <span data-slot="apply-patch-change" data-type="removed"> - {i18n.t("ui.patch.action.deleted")} - </span> - </Match> - <Match when={file.type === "move"}> - <span data-slot="apply-patch-change" data-type="modified"> - {i18n.t("ui.patch.action.moved")} - </span> - </Match> - <Match when={true}> - <DiffChanges changes={{ additions: file.additions, deletions: file.deletions }} /> - </Match> - </Switch> - <Icon name="chevron-grabber-vertical" size="small" /> + </Accordion.Trigger> + </StickyAccordionHeader> + <Accordion.Content> + <Show when={visible()}> + <div data-component="apply-patch-file-diff"> + <Dynamic + component={diffComponent} + before={{ name: file.filePath, contents: file.before }} + after={{ name: file.movePath ?? file.filePath, contents: file.after }} + /> </div> - </div> - </Accordion.Trigger> - </StickyAccordionHeader> - <Accordion.Content> - <Show when={visible()}> - <div data-component="apply-patch-file-diff"> - <Dynamic - component={diffComponent} - before={{ name: file.filePath, contents: file.before }} - after={{ name: file.movePath ?? file.filePath, contents: file.after }} - /> - </div> - </Show> - </Accordion.Content> - </Accordion.Item> - ) - }} - </For> - </Accordion> - </Show> - </BasicTool> + </Show> + </Accordion.Content> + </Accordion.Item> + ) + }} + </For> + </Accordion> + </Show> + </BasicTool> + </div> ) }, }) diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index 8f311e91f..d70c679f2 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -81,6 +81,17 @@ min-width: 0; } + [data-slot="session-turn-diffs"] + > [data-component="collapsible"] + > [data-slot="collapsible-trigger"][aria-expanded="true"] { + position: sticky; + top: var(--sticky-accordion-top, 0px); + z-index: 20; + height: 40px; + padding-bottom: 8px; + background-color: var(--background-stronger); + } + [data-component="session-turn-diffs-trigger"] { width: 100%; display: flex; @@ -124,7 +135,7 @@ } [data-component="session-turn-diffs-content"] { - padding-top: 8px; + padding-top: 0px; display: flex; flex-direction: column; } diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 17eb7f388..2aed8279e 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -318,6 +318,7 @@ export function SessionTurn( <div data-component="session-turn-diffs-content"> <Accordion multiple + style={{ "--sticky-accordion-offset": "40px" }} value={expanded()} onChange={(value) => setExpanded(Array.isArray(value) ? value : value ? [value] : [])} > diff --git a/packages/ui/src/components/sticky-accordion-header.css b/packages/ui/src/components/sticky-accordion-header.css index c8af9f872..68195241b 100644 --- a/packages/ui/src/components/sticky-accordion-header.css +++ b/packages/ui/src/components/sticky-accordion-header.css @@ -1,14 +1,6 @@ [data-component="sticky-accordion-header"] { - --sticky-accordion-top: 0px; position: sticky; - top: var(--sticky-accordion-top); -} - -[data-slot="accordion-item"]:first-child [data-component="sticky-accordion-header"] { - background-color: var(--background-stronger); -} - -[data-component="sticky-accordion-header"][data-expanded], -[data-slot="accordion-item"][data-expanded] [data-component="sticky-accordion-header"] { + top: calc(var(--sticky-accordion-top, 0px) + var(--sticky-accordion-offset, 0px)); z-index: 10; + background-color: var(--background-stronger); } |
