Files
kandev/apps/web/lib/state/layout-manager/presets.ts
T
2026-02-25 02:10:16 +00:00

115 lines
2.5 KiB
TypeScript

import type { LayoutState } from "./types";
import {
LAYOUT_SIDEBAR_MAX_PX,
LAYOUT_RIGHT_MAX_PX,
SIDEBAR_GROUP,
CENTER_GROUP,
RIGHT_TOP_GROUP,
RIGHT_BOTTOM_GROUP,
panel,
} from "./constants";
export function defaultLayout(): LayoutState {
return {
columns: [
{
id: "sidebar",
pinned: true,
maxWidth: LAYOUT_SIDEBAR_MAX_PX,
groups: [{ id: SIDEBAR_GROUP, panels: [panel("sidebar")] }],
},
{
id: "center",
groups: [{ id: CENTER_GROUP, panels: [panel("chat")] }],
},
{
id: "right",
pinned: true,
width: 350,
maxWidth: LAYOUT_RIGHT_MAX_PX,
groups: [
{ id: RIGHT_TOP_GROUP, panels: [panel("files"), panel("changes")] },
{ id: RIGHT_BOTTOM_GROUP, panels: [panel("terminal-default")] },
],
},
],
};
}
export function planLayout(): LayoutState {
return {
columns: [
{
id: "sidebar",
pinned: true,
maxWidth: LAYOUT_SIDEBAR_MAX_PX,
groups: [{ id: SIDEBAR_GROUP, panels: [panel("sidebar")] }],
},
{
id: "center",
groups: [{ id: CENTER_GROUP, panels: [panel("chat")] }],
},
{
id: "plan",
groups: [{ panels: [panel("plan")] }],
},
],
};
}
export function previewLayout(): LayoutState {
return {
columns: [
{
id: "sidebar",
pinned: true,
maxWidth: LAYOUT_SIDEBAR_MAX_PX,
groups: [{ id: SIDEBAR_GROUP, panels: [panel("sidebar")] }],
},
{
id: "center",
groups: [{ id: CENTER_GROUP, panels: [panel("chat")] }],
},
{
id: "preview",
groups: [{ panels: [panel("browser")] }],
},
],
};
}
export function vscodeLayout(): LayoutState {
return {
columns: [
{
id: "sidebar",
pinned: true,
maxWidth: LAYOUT_SIDEBAR_MAX_PX,
groups: [{ id: SIDEBAR_GROUP, panels: [panel("sidebar")] }],
},
{
id: "center",
groups: [{ id: CENTER_GROUP, panels: [panel("chat")] }],
},
{
id: "right",
maxWidth: LAYOUT_RIGHT_MAX_PX,
groups: [{ panels: [panel("vscode")] }],
},
],
};
}
export type BuiltInPreset = "default" | "plan" | "preview" | "vscode";
const PRESET_MAP: Record<BuiltInPreset, () => LayoutState> = {
default: defaultLayout,
plan: planLayout,
preview: previewLayout,
vscode: vscodeLayout,
};
export function getPresetLayout(preset: BuiltInPreset): LayoutState {
return PRESET_MAP[preset]();
}