feat(workspace,settings): model menu chip in the composer, compact settings panels

The workspace home's composer takes ONE Model chip (ModelMenu: model list
plus Effort) and moves AI Router / Permission / Local-New worktree into the
row under it; Settings drops the General-page cost card and export row,
PricingSettings and the empty states are compacted for settings panels.
This commit is contained in:
2026-10-02 17:49:05 +07:00
parent da1b17778c
commit fadecaddd0
23 changed files with 925 additions and 640 deletions
+10 -4
View File
@@ -75,20 +75,26 @@ export interface EmptyStateProps {
description: string;
/** Optional CTA rendered below the description (button, link, or form). */
action?: React.ReactNode;
/** Inside a card (a settings panel) rather than a whole page: less padding. */
compact?: boolean;
}
/**
* Renders a vertically centered empty state inside the main content column.
* @param props See {@link EmptyStateProps}.
*/
export function EmptyState({ icon: Icon, title, description, action }: EmptyStateProps) {
export function EmptyState({ icon: Icon, title, description, action, compact }: EmptyStateProps) {
return (
<div className="flex flex-col items-center justify-center py-20 text-center">
<div className="w-14 h-14 rounded-2xl bg-surface-4 flex items-center justify-center mb-5">
<div
className={`flex flex-col items-center justify-center text-center ${compact ? "py-8" : "py-20"}`}
>
<div
className={`rounded-2xl bg-surface-4 flex items-center justify-center ${compact ? "w-10 h-10 mb-3" : "w-14 h-14 mb-5"}`}
>
<Icon className="w-6 h-6 text-fg-muted" />
</div>
<h3 className="text-base font-medium text-fg-secondary mb-2">{title}</h3>
<p className="text-sm text-fg-muted max-w-md mb-6">{description}</p>
<p className={`text-sm text-fg-muted max-w-md ${compact ? "" : "mb-6"}`}>{description}</p>
{action}
</div>
);