* feat(app): let the file panel close its tree rail The file panel's tree rail was permanent on desktop — the changes panel had a folder-tree toggle in its toolbar, the file toolbar had nothing, so the rail was there whether you wanted it or not. The changes panel's private DesktopTreeToggle becomes a shared TreeRailToggle so both toolbars render the same affordance; that also drops the treeToggleStyle prop threaded through ChangesToolbarProps, which recomputed exactly what the component already built internally. The i18n keys move out of workspace.git.diff into workspace.tree, since a shared component reaching into the git namespace would rot. The two rails keep independent flags — the file rail in panel-store, the changes rail in useChangesPreferences — so closing one leaves the other alone. FileTreeToggle wires itself to the store rather than taking a callback: the bar renders several components below FilePanel, where the rail actually lives. Both rails also get narrower (320 -> 260 default, 200 -> 180 minimum). The persist version bump resets treeRailWidth on purpose: nearly every existing install carries the old 320 default, so without the reset the narrower rail would only ever reach new users. Anyone who dragged their rail to a deliberate custom width loses it once. Note that MIN_CONTENT_WIDTH still clamps the rail to `containerWidth - 240`, so in a narrow pane the new default never applies — that floor, not the default, is what sets the width there. * feat(app): make the side panel an empty workspace surface The fixed, hideable side panel keeps supporting context beside an agent without seeding content. Pane-local choices stay local, while implicit supporting opens follow a persisted routing preference. * test(app): exercise side panel policy through its capability boundary The browser rail journey already covers the real tree-toggle behavior. Side-panel policy tests now pass their platform capability through the public boundary instead of replacing a production module. * test(app): expect an empty side panel after upgrade * test(app): expect an empty first split pane * test(app): account for the empty side panel in split retention * feat(app): make workspace panel tabs independent Give explicit New actions fresh tab instances, keep panel state opaque to tab management, preserve File navigation context, and stabilize uncached File transitions. * fix(app): preserve file conflicts during preview refresh Keep the current preview mounted for same-target reads and conversions so the editor retains its conflict observation state. Clear retained previews only when the file target changes.
114 lines
3.6 KiB
TypeScript
114 lines
3.6 KiB
TypeScript
import type { ComponentType } from "react";
|
|
|
|
export type LucideIcon = ComponentType<{
|
|
size?: number;
|
|
color?: string;
|
|
uniProps?: unknown;
|
|
}>;
|
|
|
|
const StubIcon: LucideIcon = () => null;
|
|
|
|
export const Activity = StubIcon;
|
|
export const AlertTriangle = StubIcon;
|
|
export const Archive = StubIcon;
|
|
export const ArrowDownUp = StubIcon;
|
|
export const ArrowLeft = StubIcon;
|
|
export const ArrowLeftToLine = StubIcon;
|
|
export const ArrowRight = StubIcon;
|
|
export const ArrowUp = StubIcon;
|
|
export const ArrowUpRight = StubIcon;
|
|
export const AudioLines = StubIcon;
|
|
export const Blocks = StubIcon;
|
|
export const Bot = StubIcon;
|
|
export const Brain = StubIcon;
|
|
export const Check = StubIcon;
|
|
export const CheckCircle = StubIcon;
|
|
export const CheckCircle2 = StubIcon;
|
|
export const ChevronDown = StubIcon;
|
|
export const ChevronLeft = StubIcon;
|
|
export const ChevronRight = StubIcon;
|
|
export const CircleAlert = StubIcon;
|
|
export const CircleCheck = StubIcon;
|
|
export const CircleDot = StubIcon;
|
|
export const CircleSlash = StubIcon;
|
|
export const CircleX = StubIcon;
|
|
export const ClipboardPaste = StubIcon;
|
|
export const Copy = StubIcon;
|
|
export const CornerDownLeft = StubIcon;
|
|
export const Download = StubIcon;
|
|
export const ExternalLink = StubIcon;
|
|
export const Eye = StubIcon;
|
|
export const EyeOff = StubIcon;
|
|
export const File = StubIcon;
|
|
export const FileText = StubIcon;
|
|
export const Folder = StubIcon;
|
|
export const FolderPlus = StubIcon;
|
|
export const FolderTree = StubIcon;
|
|
export const Gift = StubIcon;
|
|
export const GitBranch = StubIcon;
|
|
export const GitCommitHorizontal = StubIcon;
|
|
export const GitMerge = StubIcon;
|
|
export const GitPullRequest = StubIcon;
|
|
export const GitPullRequestClosed = StubIcon;
|
|
export const GitPullRequestDraft = StubIcon;
|
|
export const Globe = StubIcon;
|
|
export const Heart = StubIcon;
|
|
export const History = StubIcon;
|
|
export const Home = StubIcon;
|
|
export const Image = StubIcon;
|
|
export const Import = StubIcon;
|
|
export const Inbox = StubIcon;
|
|
export const Info = StubIcon;
|
|
export const Layers = StubIcon;
|
|
export const Link = StubIcon;
|
|
export const Link2 = StubIcon;
|
|
export const MessageSquare = StubIcon;
|
|
export const MessageSquarePlus = StubIcon;
|
|
export const Mic = StubIcon;
|
|
export const MicOff = StubIcon;
|
|
export const Monitor = StubIcon;
|
|
export const Moon = StubIcon;
|
|
export const MoreHorizontal = StubIcon;
|
|
export const MoreVertical = StubIcon;
|
|
export const MousePointer2 = StubIcon;
|
|
export const PackagePlus = StubIcon;
|
|
export const PanelLeft = StubIcon;
|
|
export const PanelsTopLeft = StubIcon;
|
|
export const Paperclip = StubIcon;
|
|
export const Pencil = StubIcon;
|
|
export const PencilRuler = StubIcon;
|
|
export const Pin = StubIcon;
|
|
export const PinOff = StubIcon;
|
|
export const Play = StubIcon;
|
|
export const Plug = StubIcon;
|
|
export const Plus = StubIcon;
|
|
export const QrCode = StubIcon;
|
|
export const RefreshCcw = StubIcon;
|
|
export const RefreshCw = StubIcon;
|
|
export const RotateCw = StubIcon;
|
|
export const Scan = StubIcon;
|
|
export const Search = StubIcon;
|
|
export const Server = StubIcon;
|
|
export const Settings = StubIcon;
|
|
export const Settings2 = StubIcon;
|
|
export const ShieldAlert = StubIcon;
|
|
export const ShieldCheck = StubIcon;
|
|
export const ShieldOff = StubIcon;
|
|
export const ShieldQuestionMark = StubIcon;
|
|
export const Smartphone = StubIcon;
|
|
export const Split = StubIcon;
|
|
export const Square = StubIcon;
|
|
export const SquarePen = StubIcon;
|
|
export const SquareTerminal = StubIcon;
|
|
export const Star = StubIcon;
|
|
export const Sun = StubIcon;
|
|
export const Terminal = StubIcon;
|
|
export const Trash2 = StubIcon;
|
|
export const TriangleAlert = StubIcon;
|
|
export const Undo2 = StubIcon;
|
|
export const Unlink = StubIcon;
|
|
export const Upload = StubIcon;
|
|
export const Wrench = StubIcon;
|
|
export const X = StubIcon;
|
|
export const XCircle = StubIcon;
|