diff options
| author | Adam <[email protected]> | 2026-02-19 15:02:45 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-19 15:02:45 -0600 |
| commit | 49cc872c4415f081b4208d16fd0d85e425a75eed (patch) | |
| tree | ed78239c2a2bb941c5008f378a00592f5b10717a /packages/ui/src/components | |
| parent | f8dad0ae170acb9667d9402c162f7c29980373c1 (diff) | |
| download | opencode-49cc872c4415f081b4208d16fd0d85e425a75eed.tar.gz opencode-49cc872c4415f081b4208d16fd0d85e425a75eed.zip | |
chore: refactor composer/dock components (#14328)
Diffstat (limited to 'packages/ui/src/components')
| -rw-r--r-- | packages/ui/src/components/dock-prompt.tsx | 7 | ||||
| -rw-r--r-- | packages/ui/src/components/dock-surface.css | 23 | ||||
| -rw-r--r-- | packages/ui/src/components/dock-surface.tsx | 54 | ||||
| -rw-r--r-- | packages/ui/src/components/message-part.css | 24 |
4 files changed, 81 insertions, 27 deletions
diff --git a/packages/ui/src/components/dock-prompt.tsx b/packages/ui/src/components/dock-prompt.tsx index 4def4862f..d774e7f17 100644 --- a/packages/ui/src/components/dock-prompt.tsx +++ b/packages/ui/src/components/dock-prompt.tsx @@ -1,4 +1,5 @@ import type { JSX } from "solid-js" +import { DockShell, DockTray } from "./dock-surface" export function DockPrompt(props: { kind: "question" | "permission" @@ -11,11 +12,11 @@ export function DockPrompt(props: { return ( <div data-component="dock-prompt" data-kind={props.kind} ref={props.ref}> - <div data-slot={slot("body")}> + <DockShell data-slot={slot("body")}> <div data-slot={slot("header")}>{props.header}</div> <div data-slot={slot("content")}>{props.children}</div> - </div> - <div data-slot={slot("footer")}>{props.footer}</div> + </DockShell> + <DockTray data-slot={slot("footer")}>{props.footer}</DockTray> </div> ) } diff --git a/packages/ui/src/components/dock-surface.css b/packages/ui/src/components/dock-surface.css new file mode 100644 index 000000000..fd3430446 --- /dev/null +++ b/packages/ui/src/components/dock-surface.css @@ -0,0 +1,23 @@ +[data-dock-surface="shell"] { + background-color: var(--surface-raised-stronger-non-alpha); + box-shadow: var(--shadow-xs-border); + position: relative; + z-index: 10; + border-radius: 12px; + overflow: clip; +} + +[data-dock-surface="tray"] { + background-color: var(--background-base); + border: 1px solid var(--border-weak-base); + position: relative; + z-index: 0; + border-radius: 12px; + overflow: clip; +} + +[data-dock-surface="tray"][data-dock-attach="top"] { + margin-top: -0.875rem; + border-top-left-radius: 0; + border-top-right-radius: 0; +} diff --git a/packages/ui/src/components/dock-surface.tsx b/packages/ui/src/components/dock-surface.tsx new file mode 100644 index 000000000..1c4af2ed5 --- /dev/null +++ b/packages/ui/src/components/dock-surface.tsx @@ -0,0 +1,54 @@ +import { type ComponentProps, splitProps } from "solid-js" + +export interface DockTrayProps extends ComponentProps<"div"> { + attach?: "none" | "top" +} + +export function DockShell(props: ComponentProps<"div">) { + const [split, rest] = splitProps(props, ["children", "class", "classList"]) + return ( + <div + {...rest} + data-dock-surface="shell" + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + > + {split.children} + </div> + ) +} + +export function DockShellForm(props: ComponentProps<"form">) { + const [split, rest] = splitProps(props, ["children", "class", "classList"]) + return ( + <form + {...rest} + data-dock-surface="shell" + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + > + {split.children} + </form> + ) +} + +export function DockTray(props: DockTrayProps) { + const [split, rest] = splitProps(props, ["attach", "children", "class", "classList"]) + return ( + <div + {...rest} + data-dock-surface="tray" + data-dock-attach={split.attach || "none"} + classList={{ + ...(split.classList ?? {}), + [split.class ?? ""]: !!split.class, + }} + > + {split.children} + </div> + ) +} diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index f83eae097..254281858 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -768,12 +768,6 @@ flex: 1; min-height: 0; padding: 12px 12px 0; - background-color: var(--surface-raised-stronger-non-alpha); - border-radius: 12px; - box-shadow: var(--shadow-xs-border); - overflow: clip; - position: relative; - z-index: 10; } [data-slot="permission-header"] { @@ -856,13 +850,7 @@ justify-content: space-between; flex-shrink: 0; padding: 32px 8px 8px; - background-color: var(--background-base); - border: 1px solid var(--border-weak-base); - border-radius: 12px; - overflow: clip; margin-top: -24px; - position: relative; - z-index: 0; } [data-slot="permission-footer-actions"] { @@ -892,12 +880,6 @@ flex: 1; min-height: 0; padding: 8px 8px 0; - background-color: var(--surface-raised-stronger-non-alpha); - border-radius: 12px; - box-shadow: var(--shadow-xs-border); - overflow: clip; - position: relative; - z-index: 10; } [data-slot="question-header"] { @@ -1181,13 +1163,7 @@ justify-content: space-between; flex-shrink: 0; padding: 32px 8px 8px; - background-color: var(--background-base); - border: 1px solid var(--border-weak-base); - border-radius: 12px; - overflow: clip; margin-top: -24px; - position: relative; - z-index: 0; } [data-slot="question-footer-actions"] { |
