diff --git a/packages/ui/src/App.tsx b/packages/ui/src/App.tsx index 48ca7ef3..1d537d77 100644 --- a/packages/ui/src/App.tsx +++ b/packages/ui/src/App.tsx @@ -828,7 +828,7 @@ function App({ apis }: AppProps) { - +
@@ -873,7 +873,7 @@ function App({ apis }: AppProps) { - +
@@ -891,7 +891,7 @@ function App({ apis }: AppProps) { - +
@@ -916,7 +916,7 @@ function App({ apis }: AppProps) { - +
diff --git a/packages/ui/src/components/chat/ChatInput.tsx b/packages/ui/src/components/chat/ChatInput.tsx index 5e516297..014885d9 100644 --- a/packages/ui/src/components/chat/ChatInput.tsx +++ b/packages/ui/src/components/chat/ChatInput.tsx @@ -431,7 +431,7 @@ const PermissionAutoAcceptButton = React.memo(function PermissionAutoAcceptButto } return ( - + {button} @@ -454,7 +454,7 @@ const FocusModeButton = React.memo(function FocusModeButton(props: FocusModeButt const { t } = useI18n(); return ( - + - - {isExpanded ? ( -
- -
- ) : null} -
+ + + + {labelHead} + + {t('chat.pendingChanges.changedInWorkspace')} + + + {totalAdded > 0 ? +{totalAdded} : null} + {totalRemoved > 0 ? -{totalRemoved} : null} + + {isExpanded ? ( + + ) : ( + + )} + + } + /> + + + + + + + + ); }); diff --git a/packages/ui/src/components/chat/StatusRow.tsx b/packages/ui/src/components/chat/StatusRow.tsx index 7d15cee4..6b2d1735 100644 --- a/packages/ui/src/components/chat/StatusRow.tsx +++ b/packages/ui/src/components/chat/StatusRow.tsx @@ -87,7 +87,7 @@ const TodoItemRow: React.FC = ({ todo }) => { return (
- + {statusIcon} @@ -103,7 +103,7 @@ const TodoItemRow: React.FC = ({ todo }) => { > {todo.content} - + = ({
- + {showSelectedPreviewButton ? ( - + - + diff --git a/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx b/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx index 8f9b1911..e91bf09b 100644 --- a/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx +++ b/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx @@ -804,7 +804,7 @@ export const NotificationSettings: React.FC = () => {
{t('settings.notifications.page.summary.modelLabel')} - + diff --git a/packages/ui/src/components/sections/openchamber/OpenChamberVisualSettings.tsx b/packages/ui/src/components/sections/openchamber/OpenChamberVisualSettings.tsx index 6ed0308b..93b29462 100644 --- a/packages/ui/src/components/sections/openchamber/OpenChamberVisualSettings.tsx +++ b/packages/ui/src/components/sections/openchamber/OpenChamberVisualSettings.tsx @@ -689,7 +689,7 @@ export const OpenChamberVisualSettings: React.FC > {themesReloading ? t('settings.openchamber.visual.actions.reloadingThemes') : t('settings.openchamber.visual.actions.reloadThemes')} - + -
- - {description} - +
{formBody}
+ -
-
- - {title} - -

- {description} -

-
-
- - -
- {formBody} -
-
- -
-
- {footerRow} -
-
- - - +
+
{footerRow}
+
+ + ); } diff --git a/packages/ui/src/components/session/ScheduledTasksDialog.tsx b/packages/ui/src/components/session/ScheduledTasksDialog.tsx index 3af907cc..a4a59fb2 100644 --- a/packages/ui/src/components/session/ScheduledTasksDialog.tsx +++ b/packages/ui/src/components/session/ScheduledTasksDialog.tsx @@ -192,7 +192,9 @@ export function ScheduledTasksDialog() { const [selectedProjectID, setSelectedProjectID] = React.useState(''); const [tasks, setTasks] = React.useState([]); - const [loading, setLoading] = React.useState(false); + // Start in loading state so the first frame after open shows the spinner, + // not an empty/select-project flash before the fetch effect runs. + const [loading, setLoading] = React.useState(true); const [editorOpen, setEditorOpen] = React.useState(false); const [editorTask, setEditorTask] = React.useState(null); const [mutatingTaskID, setMutatingTaskID] = React.useState(null); @@ -276,6 +278,7 @@ export function ScheduledTasksDialog() { void reloadTasks(preferredProjectID); } else { setTasks([]); + setLoading(false); } }, [open, activeProject, projects, reloadTasks]); @@ -427,6 +430,7 @@ export function ScheduledTasksDialog() { projectSelector )} +
{loading ? (
{t('sessions.scheduledTasks.dialog.loading')} @@ -579,6 +583,7 @@ export function ScheduledTasksDialog() { })}
)} +
); diff --git a/packages/ui/src/components/session/sidebar/sortableItems.tsx b/packages/ui/src/components/session/sidebar/sortableItems.tsx index bd31aec5..33aea845 100644 --- a/packages/ui/src/components/session/sidebar/sortableItems.tsx +++ b/packages/ui/src/components/session/sidebar/sortableItems.tsx @@ -166,7 +166,7 @@ export const SortableProjectItem: React.FC = ({ style={{ backgroundColor: isDesktopShell && isStuck ? 'transparent' : undefined }} >
- + -
- - {t('multiRun.window.description')} - - onOpenChange(false)} - onCancel={() => onOpenChange(false)} - isWindowed - /> - + /> +
+ +
+ +
+ + {t('multiRun.window.description')} + + onOpenChange(false)} + onCancel={() => onOpenChange(false)} + isWindowed + /> +
+
); diff --git a/packages/ui/src/components/views/PlanView.tsx b/packages/ui/src/components/views/PlanView.tsx index 3b1964fb..0dd0a3ce 100644 --- a/packages/ui/src/components/views/PlanView.tsx +++ b/packages/ui/src/components/views/PlanView.tsx @@ -628,7 +628,7 @@ export const PlanView: React.FC = ({ targetPath = null }) => { {resolvedPath ? (
- +
diff --git a/packages/ui/src/components/views/git/HistoryCommitRow.tsx b/packages/ui/src/components/views/git/HistoryCommitRow.tsx index 223b83e0..24fe26de 100644 --- a/packages/ui/src/components/views/git/HistoryCommitRow.tsx +++ b/packages/ui/src/components/views/git/HistoryCommitRow.tsx @@ -88,7 +88,7 @@ export const HistoryCommitRow = React.memo(({ {entry.hash.slice(0, 8)} - +