mirror of
https://github.com/block/buzz.git
synced 2026-10-27 20:41:57 +00:00
## Summary - replace Buzz Term's full-app takeover with a resizable bottom dock inside the channel content surface - add a discoverable channel-header button plus hide and maximize/restore controls - create PTYs lazily and keep separate, persistent terminal workspaces per channel - capture immutable channel/thread context on every terminal session ## Multiple-channel behavior The dock is a single surface, but its tabs are partitioned by channel. Switching channels swaps to that channel's sessions without terminating background PTYs; returning restores them. New tabs capture the currently visible channel/thread context. ## Verification At commit `7ca087f8e08c80528387684364a65bf4ccd6315f`: - `pnpm --dir desktop typecheck` - `pnpm --dir desktop test` — 4,129 passed - pre-push repository hooks — desktop check/test, Tauri checks, terminal Rust suites all passed --------- Signed-off-by: Wes <wesbillman@users.noreply.github.com> Signed-off-by: kenny lopez <klopez4212@gmail.com> Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz> Co-authored-by: kenny lopez <klopez4212@gmail.com>
46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import type * as React from "react";
|
|
import * as BuzzTheme from "@/app/BuzzThemeSurfaces";
|
|
import { HuddleRoomHeader, HuddleStartingView } from "@/features/huddle";
|
|
import { MainInsetProvider } from "@/shared/layout/MainInsetContext";
|
|
import { chromeCssVarDefaults } from "@/shared/layout/chromeLayout";
|
|
import { cn } from "@/shared/lib/cn";
|
|
import { SidebarInset } from "@/shared/ui/sidebar";
|
|
|
|
type AppShellChannelSurfaceProps = {
|
|
children: React.ReactNode;
|
|
isHuddleRoom: boolean;
|
|
isHuddleRoomStarting: boolean;
|
|
mainInsetRef: React.RefObject<HTMLElement | null>;
|
|
terminal?: React.ReactNode;
|
|
};
|
|
|
|
export function AppShellChannelSurface({
|
|
children,
|
|
isHuddleRoom,
|
|
isHuddleRoomStarting,
|
|
mainInsetRef,
|
|
terminal,
|
|
}: AppShellChannelSurfaceProps) {
|
|
return (
|
|
<MainInsetProvider mainInsetRef={mainInsetRef}>
|
|
<SidebarInset
|
|
ref={mainInsetRef}
|
|
className={cn(
|
|
"isolate z-0 min-h-0 min-w-0 overflow-hidden",
|
|
isHuddleRoom ? "bg-background" : "bg-sidebar",
|
|
)}
|
|
data-buzz-content-surface={isHuddleRoom ? true : undefined}
|
|
data-buzz-content-unframed={isHuddleRoom ? true : undefined}
|
|
data-buzz-glass-inset
|
|
data-buzz-shadow-viewport
|
|
style={chromeCssVarDefaults as React.CSSProperties}
|
|
>
|
|
{isHuddleRoom && !isHuddleRoomStarting ? <HuddleRoomHeader /> : null}
|
|
<BuzzTheme.ContentSurface terminal={terminal} unframed={isHuddleRoom}>
|
|
{isHuddleRoomStarting ? <HuddleStartingView /> : children}
|
|
</BuzzTheme.ContentSurface>
|
|
</SidebarInset>
|
|
</MainInsetProvider>
|
|
);
|
|
}
|