summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authorDavid Hill <[email protected]>2026-03-12 23:23:03 +0000
committerAdam <[email protected]>2026-03-13 10:17:56 -0500
commitffde837e8318900e92761ca8a7d9a0621143e04b (patch)
treeba3c9f6aac7931d8ae9f9e956825241770588e37 /packages/app/src/components
parent536abea2e2ed3bee160cf16a12b23558ed6e3fa3 (diff)
downloadopencode-ffde837e8318900e92761ca8a7d9a0621143e04b.tar.gz
opencode-ffde837e8318900e92761ca8a7d9a0621143e04b.zip
fix(app): animate titlebar controls on sidebar open
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/titlebar.tsx52
1 files changed, 34 insertions, 18 deletions
diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx
index 3ab811e92..227670e42 100644
--- a/packages/app/src/components/titlebar.tsx
+++ b/packages/app/src/components/titlebar.tsx
@@ -217,26 +217,42 @@ export function Titlebar() {
</TooltipKeybind>
<div class="hidden xl:flex items-center shrink-0">
<Show when={params.dir}>
- <TooltipKeybind
- placement="bottom"
- title={language.t("command.session.new")}
- keybind={command.keybind("session.new")}
- openDelay={2000}
+ <div
+ class="overflow-hidden flex items-center shrink-0 transition-[width,opacity,transform]"
+ classList={{
+ "w-8 opacity-100 translate-x-0": !layout.sidebar.opened(),
+ "w-0 opacity-0 -translate-x-1 pointer-events-none": layout.sidebar.opened(),
+ "duration-180 ease-out": !layout.sidebar.opened(),
+ "duration-120 ease-in": layout.sidebar.opened(),
+ }}
+ aria-hidden={layout.sidebar.opened() ? "true" : undefined}
>
- <Button
- variant="ghost"
- icon={creating() ? "new-session-active" : "new-session"}
- class="titlebar-icon w-8 h-6 p-0 box-border"
- onClick={() => {
- if (!params.dir) return
- navigate(`/${params.dir}/session`)
- }}
- aria-label={language.t("command.session.new")}
- aria-current={creating() ? "page" : undefined}
- />
- </TooltipKeybind>
+ <TooltipKeybind
+ placement="bottom"
+ title={language.t("command.session.new")}
+ keybind={command.keybind("session.new")}
+ openDelay={2000}
+ >
+ <Button
+ variant="ghost"
+ icon={creating() ? "new-session-active" : "new-session"}
+ class="titlebar-icon w-8 h-6 p-0 box-border"
+ disabled={layout.sidebar.opened()}
+ tabIndex={layout.sidebar.opened() ? -1 : undefined}
+ onClick={() => {
+ if (!params.dir) return
+ navigate(`/${params.dir}/session`)
+ }}
+ aria-label={language.t("command.session.new")}
+ aria-current={creating() ? "page" : undefined}
+ />
+ </TooltipKeybind>
+ </div>
</Show>
- <div class="flex items-center gap-0" classList={{ "ml-1": !!params.dir }}>
+ <div
+ class="flex items-center gap-0 transition-[margin] duration-180 ease-out"
+ classList={{ "ml-1": !!params.dir && !layout.sidebar.opened() }}
+ >
<Tooltip placement="bottom" value={language.t("common.goBack")} openDelay={2000}>
<Button
variant="ghost"