feat(i18n): localize Avalonia view strings via loc:Tr markup
Extract ~165 hardcoded UI strings across islands, modals, planning and
shell views into en.json; replace with {loc:Tr} bindings.
This commit is contained in:
@@ -8,6 +8,299 @@
|
|||||||
"tabGeneral": "General",
|
"tabGeneral": "General",
|
||||||
"tabWorktrees": "Worktrees",
|
"tabWorktrees": "Worktrees",
|
||||||
"tabFiles": "Files",
|
"tabFiles": "Files",
|
||||||
"tabPrime": "Prime Claude"
|
"tabPrime": "Prime Claude",
|
||||||
|
"general": {
|
||||||
|
"defaultInstructions": "Default instructions",
|
||||||
|
"defaultInstructionsPlaceholder": "Baseline instructions applied to every task",
|
||||||
|
"model": "Model",
|
||||||
|
"maxTurns": "Max turns",
|
||||||
|
"permission": "Permission",
|
||||||
|
"maxParallelExecutions": "Max parallel executions",
|
||||||
|
"maxParallelExecutionsHint": "How many queued tasks the worker runs at once.",
|
||||||
|
"reportExcludedPaths": "Report: excluded paths (one per line)",
|
||||||
|
"standupWeekday": "Standup weekday",
|
||||||
|
"weekdaySunday": "Sunday",
|
||||||
|
"weekdayMonday": "Monday",
|
||||||
|
"weekdayTuesday": "Tuesday",
|
||||||
|
"weekdayWednesday": "Wednesday",
|
||||||
|
"weekdayThursday": "Thursday",
|
||||||
|
"weekdayFriday": "Friday",
|
||||||
|
"weekdaySaturday": "Saturday"
|
||||||
|
},
|
||||||
|
"worktrees": {
|
||||||
|
"strategy": "Strategy",
|
||||||
|
"centralWorktreeRoot": "Central worktree root",
|
||||||
|
"autoCleanup": "Auto-cleanup finished worktrees after",
|
||||||
|
"days": "days",
|
||||||
|
"cleanupFinished": "Cleanup finished worktrees",
|
||||||
|
"forceRemoveAll": "Force-remove all worktrees",
|
||||||
|
"confirmRemoveAll": "Remove ALL worktrees? Uncommitted work will be lost.",
|
||||||
|
"removeAll": "Remove All"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"agentsSection": "AGENTS",
|
||||||
|
"agentsHint": "Restore bundled default agents. Existing files are not overwritten.",
|
||||||
|
"restoreDefaultAgents": "Restore default agents",
|
||||||
|
"promptsSection": "PROMPTS",
|
||||||
|
"systemPrompt": "System",
|
||||||
|
"planningPrompt": "Planning",
|
||||||
|
"agentPrompt": "Agent",
|
||||||
|
"openInEditor": "Open in editor"
|
||||||
|
},
|
||||||
|
"prime": {
|
||||||
|
"description": "Prime your Claude usage window by firing a single non-interactive ping on the days you choose, at a chosen time. Only runs while ClaudeDo is open. If the app starts within 30 minutes of the target time, the ping fires immediately.",
|
||||||
|
"addSchedule": "+ Add schedule",
|
||||||
|
"dayMo": "Mo",
|
||||||
|
"dayTu": "Tu",
|
||||||
|
"dayWe": "We",
|
||||||
|
"dayTh": "Th",
|
||||||
|
"dayFr": "Fr",
|
||||||
|
"daySa": "Sa",
|
||||||
|
"daySu": "Su"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"sortTip": "Sort",
|
||||||
|
"showCompletedTip": "Show completed",
|
||||||
|
"listSettingsTip": "List settings",
|
||||||
|
"addPlaceholder": "Add a task…",
|
||||||
|
"enterKey": "ENTER",
|
||||||
|
"notesPinnedRow": "Notes (daily notes)",
|
||||||
|
"overdue": "OVERDUE",
|
||||||
|
"tasks": "TASKS",
|
||||||
|
"clearCompletedTip": "Clear all completed",
|
||||||
|
"ctxSendToQueue": "Send to queue",
|
||||||
|
"ctxRemoveFromQueue": "Remove from queue",
|
||||||
|
"ctxCancelExecution": "Cancel execution",
|
||||||
|
"ctxMarkAs": "Mark as",
|
||||||
|
"ctxMarkDone": "Done",
|
||||||
|
"ctxMarkCancelled": "Cancelled",
|
||||||
|
"ctxRunInteractively": "Run interactively",
|
||||||
|
"ctxOpenPlanningSession": "Open planning Session",
|
||||||
|
"ctxResumePlanningSession": "Resume planning Session",
|
||||||
|
"ctxDiscardPlanningSession": "Discard planning session",
|
||||||
|
"ctxQueueSubtasks": "Queue subtasks sequentially",
|
||||||
|
"ctxScheduleFor": "Schedule for...",
|
||||||
|
"ctxClearSchedule": "Clear schedule",
|
||||||
|
"badgeDraft": "DRAFT",
|
||||||
|
"badgePlanned": "PLANNED",
|
||||||
|
"approve": "Approve",
|
||||||
|
"approveTip": "Approve — mark Done",
|
||||||
|
"reject": "Reject",
|
||||||
|
"rejectTip": "Reject with feedback and re-run",
|
||||||
|
"park": "Park",
|
||||||
|
"parkTip": "Send back to Idle for manual editing",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"cancelTip": "Cancel this task",
|
||||||
|
"removeFromQueueTip": "Remove from queue",
|
||||||
|
"scheduleTitle": "Schedule task",
|
||||||
|
"scheduleWhen": "WHEN",
|
||||||
|
"scheduleConfirm": "Schedule",
|
||||||
|
"rejectRerunTitle": "Reject & re-run",
|
||||||
|
"feedbackLabel": "FEEDBACK FOR THE AGENT",
|
||||||
|
"feedbackPlaceholder": "What should the agent fix?",
|
||||||
|
"rerun": "Re-run"
|
||||||
|
},
|
||||||
|
"lists": {
|
||||||
|
"heading": "Lists",
|
||||||
|
"searchPlaceholder": "Search tasks…",
|
||||||
|
"searchKbd": "Ctrl K",
|
||||||
|
"settingsTip": "Settings",
|
||||||
|
"smartListsLabel": "SMART LISTS",
|
||||||
|
"myListsLabel": "MY LISTS",
|
||||||
|
"contextSettings": "Settings...",
|
||||||
|
"contextWorktrees": "Worktrees…",
|
||||||
|
"contextOpenExplorer": "Open in Explorer",
|
||||||
|
"contextOpenTerminal": "Open in Terminal",
|
||||||
|
"newList": "New list",
|
||||||
|
"addReposTip": "Add repos as lists"
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"deleteTaskTip": "Delete task",
|
||||||
|
"closeTip": "Close",
|
||||||
|
"copyTaskIdTip": "Copy task ID",
|
||||||
|
"starTip": "Star",
|
||||||
|
"agentSettingsTip": "Agent settings",
|
||||||
|
"agentSettingsHeading": "Agent settings (overrides)",
|
||||||
|
"modelLabel": "Model",
|
||||||
|
"systemPromptLabel": "System prompt (appended)",
|
||||||
|
"agentFileLabel": "Agent file",
|
||||||
|
"mergeLabel": "MERGE",
|
||||||
|
"mergeTargetLabel": "Merge target",
|
||||||
|
"reviewCombinedDiff": "Review combined diff",
|
||||||
|
"mergeAllSubtasks": "Merge all subtasks",
|
||||||
|
"stepsLabel": "STEPS",
|
||||||
|
"addStepPlaceholder": "Add a step...",
|
||||||
|
"detailsLabel": "DETAILS",
|
||||||
|
"copyDescriptionTip": "Copy description to clipboard",
|
||||||
|
"toggleEditPreviewTip": "Toggle edit/preview",
|
||||||
|
"previewBtn": "Preview",
|
||||||
|
"editBtn": "Edit",
|
||||||
|
"descriptionPlaceholder": "Add task details (markdown supported)..."
|
||||||
|
},
|
||||||
|
"agent": {
|
||||||
|
"stopTip": "Stop agent",
|
||||||
|
"sendToQueue": "Send to queue",
|
||||||
|
"sendToQueueTip": "Queue this task for the worker to pick up",
|
||||||
|
"removeFromQueue": "Remove from queue",
|
||||||
|
"removeFromQueueTip": "Take this task back out of the queue",
|
||||||
|
"worktreeLabel": "WORKTREE",
|
||||||
|
"copyPathTip": "Copy path",
|
||||||
|
"diffLabel": "DIFF",
|
||||||
|
"openDiff": "Open diff",
|
||||||
|
"worktreeBtn": "Worktree",
|
||||||
|
"openWorktreeTip": "Open worktree in file explorer",
|
||||||
|
"continue": "Continue",
|
||||||
|
"continueTip": "Resume the last session and keep going",
|
||||||
|
"resetAndRetry": "Reset & retry",
|
||||||
|
"resetAndRetryTip": "Discard the worktree and re-queue the task to run from scratch"
|
||||||
|
},
|
||||||
|
"notes": {
|
||||||
|
"today": "Today",
|
||||||
|
"add": "Add",
|
||||||
|
"newNotePlaceholder": "New note…",
|
||||||
|
"save": "Save",
|
||||||
|
"delete": "Delete"
|
||||||
|
},
|
||||||
|
"session": {
|
||||||
|
"chipLive": "LIVE",
|
||||||
|
"chipDone": "DONE",
|
||||||
|
"chipFailed": "FAILED"
|
||||||
|
},
|
||||||
|
"modals": {
|
||||||
|
"about": {
|
||||||
|
"title": "ABOUT",
|
||||||
|
"version": "Version",
|
||||||
|
"data": "Data",
|
||||||
|
"logs": "Logs",
|
||||||
|
"config": "Config",
|
||||||
|
"open": "Open"
|
||||||
|
},
|
||||||
|
"workerConnection": {
|
||||||
|
"title": "WORKER NOT REACHABLE",
|
||||||
|
"body": "ClaudeDo can't reach the background worker. It is normally started automatically at logon. You can start it now, or reinstall if the problem persists.",
|
||||||
|
"dismiss": "Dismiss",
|
||||||
|
"rerunInstaller": "Rerun Installer",
|
||||||
|
"startWorker": "Start Worker"
|
||||||
|
},
|
||||||
|
"listSettings": {
|
||||||
|
"title": "LIST SETTINGS",
|
||||||
|
"deleteList": "Delete list",
|
||||||
|
"sectionGeneral": "GENERAL",
|
||||||
|
"name": "Name",
|
||||||
|
"workingDirectory": "Working directory",
|
||||||
|
"workingDirectoryPlaceholder": "(none)",
|
||||||
|
"browse": "Browse...",
|
||||||
|
"defaultCommitType": "Default commit type",
|
||||||
|
"sectionAgent": "AGENT",
|
||||||
|
"resetAgentSettings": "Reset agent settings",
|
||||||
|
"model": "Model",
|
||||||
|
"systemPrompt": "System prompt (appended)",
|
||||||
|
"agentFile": "Agent file"
|
||||||
|
},
|
||||||
|
"merge": {
|
||||||
|
"title": "MERGE WORKTREE",
|
||||||
|
"windowTitle": "Merge worktree",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"merge": "Merge",
|
||||||
|
"targetBranch": "Target branch",
|
||||||
|
"removeWorktree": "Remove worktree after merge",
|
||||||
|
"commitMessage": "Commit message",
|
||||||
|
"conflictedFiles": "Conflicted files:"
|
||||||
|
},
|
||||||
|
"diff": {
|
||||||
|
"title": "DIFF",
|
||||||
|
"windowTitle": "Diff",
|
||||||
|
"merge": "Merge…"
|
||||||
|
},
|
||||||
|
"worktree": {
|
||||||
|
"title": "Worktree"
|
||||||
|
},
|
||||||
|
"worktreesOverview": {
|
||||||
|
"refresh": "Refresh",
|
||||||
|
"cleanupFinished": "Cleanup finished",
|
||||||
|
"columnTask": "TASK",
|
||||||
|
"columnState": "STATE",
|
||||||
|
"columnDiff": "DIFF",
|
||||||
|
"columnAge": "AGE",
|
||||||
|
"phantom": "phantom",
|
||||||
|
"phantomTooltip": "Directory missing on disk",
|
||||||
|
"ctxShowDiff": "Show diff",
|
||||||
|
"ctxOpenInExplorer": "Open in Explorer",
|
||||||
|
"ctxJumpToTask": "Jump to task",
|
||||||
|
"ctxMerge": "Merge…",
|
||||||
|
"ctxDiscard": "Discard",
|
||||||
|
"ctxKeep": "Keep",
|
||||||
|
"ctxCopyBranch": "Copy branch",
|
||||||
|
"ctxCopyPath": "Copy path",
|
||||||
|
"ctxForceRemove": "Force remove"
|
||||||
|
},
|
||||||
|
"repoImport": {
|
||||||
|
"title": "ADD REPOS AS LISTS",
|
||||||
|
"windowTitle": "Add repos as lists",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"searchPlaceholder": "Search repos…",
|
||||||
|
"addFolder": "Add folder…",
|
||||||
|
"forgetFolders": "Forget folders",
|
||||||
|
"alreadyAdded": "(already added)"
|
||||||
|
},
|
||||||
|
"unfinishedPlanning": {
|
||||||
|
"title": "UNFINISHED PLANNING SESSION",
|
||||||
|
"windowTitle": "Unfinished planning session",
|
||||||
|
"discard": "Discard",
|
||||||
|
"finalize": "Finalize",
|
||||||
|
"resume": "Resume",
|
||||||
|
"draftTasksSuffix": " draft task(s) waiting to be finalized."
|
||||||
|
},
|
||||||
|
"weeklyReport": {
|
||||||
|
"title": "WEEKLY REPORT",
|
||||||
|
"windowTitle": "Weekly Report",
|
||||||
|
"from": "From",
|
||||||
|
"to": "To",
|
||||||
|
"generate": "Generate",
|
||||||
|
"regenerate": "Regenerate",
|
||||||
|
"emptyStateHint": "No report for this range yet. Click “Generate”."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"planning": {
|
||||||
|
"conflict": {
|
||||||
|
"windowTitle": "Merge conflict",
|
||||||
|
"modalTitle": "MERGE CONFLICT",
|
||||||
|
"openInVsCode": "Open all in VS Code",
|
||||||
|
"resolved": "I've resolved — continue",
|
||||||
|
"abort": "Abort this merge"
|
||||||
|
},
|
||||||
|
"diff": {
|
||||||
|
"windowTitle": "Planning — Combined diff",
|
||||||
|
"modalTitle": "PLANNING — COMBINED DIFF",
|
||||||
|
"previewCombined": "Preview combined",
|
||||||
|
"loading": "Loading…"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"controls": {
|
||||||
|
"datePicker": {
|
||||||
|
"today": "Today",
|
||||||
|
"tomorrow": "Tomorrow",
|
||||||
|
"nextMon": "Next Mon",
|
||||||
|
"clear": "Clear",
|
||||||
|
"time": "Time",
|
||||||
|
"done": "Done"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shell": {
|
||||||
|
"menu": {
|
||||||
|
"help": "Help",
|
||||||
|
"checkForUpdates": "Check for updates",
|
||||||
|
"restartWorker": "Restart worker",
|
||||||
|
"worktrees": "Worktrees…",
|
||||||
|
"weeklyReport": "Weekly Report…",
|
||||||
|
"about": "About…",
|
||||||
|
"addRepos": "Add repos as lists…"
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"available": "Update available: v",
|
||||||
|
"updateNow": "Update now",
|
||||||
|
"dismiss": "Dismiss"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<UserControl xmlns="https://github.com/avaloniaui"
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Controls.ThemedDatePicker"
|
x:Class="ClaudeDo.Ui.Views.Controls.ThemedDatePicker"
|
||||||
x:Name="Root">
|
x:Name="Root">
|
||||||
|
|
||||||
@@ -125,10 +126,10 @@
|
|||||||
MinWidth="300">
|
MinWidth="300">
|
||||||
<StackPanel Spacing="10">
|
<StackPanel Spacing="10">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="6">
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||||
<Button Classes="quick" Content="Today" Click="OnTodayClick"/>
|
<Button Classes="quick" Content="{loc:Tr controls.datePicker.today}" Click="OnTodayClick"/>
|
||||||
<Button Classes="quick" Content="Tomorrow" Click="OnTomorrowClick"/>
|
<Button Classes="quick" Content="{loc:Tr controls.datePicker.tomorrow}" Click="OnTomorrowClick"/>
|
||||||
<Button Classes="quick" Content="Next Mon" Click="OnNextMondayClick"/>
|
<Button Classes="quick" Content="{loc:Tr controls.datePicker.nextMon}" Click="OnNextMondayClick"/>
|
||||||
<Button Classes="quick" Content="Clear" Click="OnClearClick"/>
|
<Button Classes="quick" Content="{loc:Tr controls.datePicker.clear}" Click="OnClearClick"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<Grid ColumnDefinitions="Auto,*,Auto" Margin="0,2,0,0">
|
<Grid ColumnDefinitions="Auto,*,Auto" Margin="0,2,0,0">
|
||||||
@@ -146,14 +147,14 @@
|
|||||||
<Grid x:Name="TimeRow"
|
<Grid x:Name="TimeRow"
|
||||||
ColumnDefinitions="Auto,*,Auto"
|
ColumnDefinitions="Auto,*,Auto"
|
||||||
Margin="0,4,0,0">
|
Margin="0,4,0,0">
|
||||||
<TextBlock Grid.Column="0" Text="Time"
|
<TextBlock Grid.Column="0" Text="{loc:Tr controls.datePicker.time}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Foreground="{DynamicResource TextDimBrush}"
|
Foreground="{DynamicResource TextDimBrush}"
|
||||||
Margin="0,0,8,0"/>
|
Margin="0,0,8,0"/>
|
||||||
<TextBox Grid.Column="1" x:Name="TimeInput"
|
<TextBox Grid.Column="1" x:Name="TimeInput"
|
||||||
PlaceholderText="HH:mm" MaxLength="5"
|
PlaceholderText="HH:mm" MaxLength="5"
|
||||||
Text="{Binding #Root.TimeText, Mode=TwoWay}"/>
|
Text="{Binding #Root.TimeText, Mode=TwoWay}"/>
|
||||||
<Button Grid.Column="2" Content="Done"
|
<Button Grid.Column="2" Content="{loc:Tr controls.datePicker.done}"
|
||||||
Click="OnDoneClick"
|
Click="OnDoneClick"
|
||||||
Margin="8,0,0,0"/>
|
Margin="8,0,0,0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<UserControl xmlns="https://github.com/avaloniaui"
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.AgentStripView"
|
x:Class="ClaudeDo.Ui.Views.Islands.AgentStripView"
|
||||||
x:DataType="vm:DetailsIslandViewModel">
|
x:DataType="vm:DetailsIslandViewModel">
|
||||||
<Border Classes="agent-strip"
|
<Border Classes="agent-strip"
|
||||||
@@ -34,7 +35,7 @@
|
|||||||
Classes="icon-btn"
|
Classes="icon-btn"
|
||||||
Command="{Binding StopCommand}"
|
Command="{Binding StopCommand}"
|
||||||
IsVisible="{Binding IsRunning}"
|
IsVisible="{Binding IsRunning}"
|
||||||
ToolTip.Tip="Stop agent"
|
ToolTip.Tip="{loc:Tr agent.stopTip}"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<PathIcon Data="{StaticResource Icon.X}" Width="12" Height="12"
|
<PathIcon Data="{StaticResource Icon.X}" Width="12" Height="12"
|
||||||
Foreground="{DynamicResource BloodBrush}"/>
|
Foreground="{DynamicResource BloodBrush}"/>
|
||||||
@@ -42,19 +43,19 @@
|
|||||||
<!-- Send to queue — only when idle -->
|
<!-- Send to queue — only when idle -->
|
||||||
<Button Grid.Column="3"
|
<Button Grid.Column="3"
|
||||||
Classes="btn accent"
|
Classes="btn accent"
|
||||||
Content="Send to queue"
|
Content="{loc:Tr agent.sendToQueue}"
|
||||||
Command="{Binding EnqueueCommand}"
|
Command="{Binding EnqueueCommand}"
|
||||||
IsVisible="{Binding IsIdle}"
|
IsVisible="{Binding IsIdle}"
|
||||||
ToolTip.Tip="Queue this task for the worker to pick up"
|
ToolTip.Tip="{loc:Tr agent.sendToQueueTip}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Padding="10,4"/>
|
Padding="10,4"/>
|
||||||
<!-- Remove from queue — only when queued -->
|
<!-- Remove from queue — only when queued -->
|
||||||
<Button Grid.Column="3"
|
<Button Grid.Column="3"
|
||||||
Classes="btn"
|
Classes="btn"
|
||||||
Content="Remove from queue"
|
Content="{loc:Tr agent.removeFromQueue}"
|
||||||
Command="{Binding DequeueCommand}"
|
Command="{Binding DequeueCommand}"
|
||||||
IsVisible="{Binding IsQueued}"
|
IsVisible="{Binding IsQueued}"
|
||||||
ToolTip.Tip="Take this task back out of the queue"
|
ToolTip.Tip="{loc:Tr agent.removeFromQueueTip}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Padding="10,4"/>
|
Padding="10,4"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -64,7 +65,7 @@
|
|||||||
IsVisible="{Binding WorktreePath, Converter={x:Static ObjectConverters.IsNotNull}}">
|
IsVisible="{Binding WorktreePath, Converter={x:Static ObjectConverters.IsNotNull}}">
|
||||||
<TextBlock Grid.Column="0"
|
<TextBlock Grid.Column="0"
|
||||||
Classes="eyebrow"
|
Classes="eyebrow"
|
||||||
Text="WORKTREE"
|
Text="{loc:Tr agent.worktreeLabel}"
|
||||||
Foreground="{DynamicResource TextFaintBrush}"
|
Foreground="{DynamicResource TextFaintBrush}"
|
||||||
LetterSpacing="1.2"
|
LetterSpacing="1.2"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
@@ -76,7 +77,7 @@
|
|||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
<Button Grid.Column="2"
|
<Button Grid.Column="2"
|
||||||
Classes="icon-btn"
|
Classes="icon-btn"
|
||||||
ToolTip.Tip="Copy path"
|
ToolTip.Tip="{loc:Tr agent.copyPathTip}"
|
||||||
Click="OnCopyWorktreePathClick"
|
Click="OnCopyWorktreePathClick"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
|
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
|
||||||
@@ -105,7 +106,7 @@
|
|||||||
<Grid ColumnDefinitions="Auto,Auto,Auto,*">
|
<Grid ColumnDefinitions="Auto,Auto,Auto,*">
|
||||||
<TextBlock Grid.Column="0"
|
<TextBlock Grid.Column="0"
|
||||||
Classes="eyebrow"
|
Classes="eyebrow"
|
||||||
Text="DIFF"
|
Text="{loc:Tr agent.diffLabel}"
|
||||||
Foreground="{DynamicResource TextFaintBrush}"
|
Foreground="{DynamicResource TextFaintBrush}"
|
||||||
LetterSpacing="1.2"
|
LetterSpacing="1.2"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
@@ -136,27 +137,27 @@
|
|||||||
|
|
||||||
<!-- Action buttons -->
|
<!-- Action buttons -->
|
||||||
<StackPanel Orientation="Horizontal" Spacing="6" Margin="0,4,0,0">
|
<StackPanel Orientation="Horizontal" Spacing="6" Margin="0,4,0,0">
|
||||||
<Button Classes="btn" Content="Open diff" Command="{Binding OpenDiffCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr agent.openDiff}" Command="{Binding OpenDiffCommand}"/>
|
||||||
<Button Classes="btn" Command="{Binding OpenWorktreeCommand}"
|
<Button Classes="btn" Command="{Binding OpenWorktreeCommand}"
|
||||||
ToolTip.Tip="Open worktree in file explorer">
|
ToolTip.Tip="{loc:Tr agent.openWorktreeTip}">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="6" VerticalAlignment="Center">
|
<StackPanel Orientation="Horizontal" Spacing="6" VerticalAlignment="Center">
|
||||||
<PathIcon Data="{StaticResource Icon.ArrowOut}"
|
<PathIcon Data="{StaticResource Icon.ArrowOut}"
|
||||||
Width="11" Height="11"
|
Width="11" Height="11"
|
||||||
Foreground="{DynamicResource TextDimBrush}"/>
|
Foreground="{DynamicResource TextDimBrush}"/>
|
||||||
<TextBlock Text="Worktree" VerticalAlignment="Center"/>
|
<TextBlock Text="{loc:Tr agent.worktreeBtn}" VerticalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Classes="btn accent"
|
<Button Classes="btn accent"
|
||||||
Content="Continue"
|
Content="{loc:Tr agent.continue}"
|
||||||
Command="{Binding ContinueCommand}"
|
Command="{Binding ContinueCommand}"
|
||||||
IsVisible="{Binding ShowContinue}"
|
IsVisible="{Binding ShowContinue}"
|
||||||
ToolTip.Tip="Resume the last session and keep going"
|
ToolTip.Tip="{loc:Tr agent.continueTip}"
|
||||||
Padding="10,4"/>
|
Padding="10,4"/>
|
||||||
<Button Classes="btn"
|
<Button Classes="btn"
|
||||||
Content="Reset & retry"
|
Content="{loc:Tr agent.resetAndRetry}"
|
||||||
Command="{Binding ResetAndRetryCommand}"
|
Command="{Binding ResetAndRetryCommand}"
|
||||||
IsVisible="{Binding ShowResetAndRetry}"
|
IsVisible="{Binding ShowResetAndRetry}"
|
||||||
ToolTip.Tip="Discard the worktree and re-queue the task to run from scratch"
|
ToolTip.Tip="{loc:Tr agent.resetAndRetryTip}"
|
||||||
Padding="10,4"/>
|
Padding="10,4"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.DetailsIslandView"
|
x:Class="ClaudeDo.Ui.Views.Islands.DetailsIslandView"
|
||||||
x:DataType="vm:DetailsIslandViewModel">
|
x:DataType="vm:DetailsIslandViewModel">
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
@@ -15,7 +16,7 @@
|
|||||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||||
<Button Grid.Column="0" Classes="icon-btn"
|
<Button Grid.Column="0" Classes="icon-btn"
|
||||||
Command="{Binding DeleteTaskCommand}"
|
Command="{Binding DeleteTaskCommand}"
|
||||||
ToolTip.Tip="Delete task"
|
ToolTip.Tip="{loc:Tr details.deleteTaskTip}"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<PathIcon Data="{StaticResource Icon.Trash}" Width="14" Height="14"
|
<PathIcon Data="{StaticResource Icon.Trash}" Width="14" Height="14"
|
||||||
Foreground="{DynamicResource BloodBrush}"/>
|
Foreground="{DynamicResource BloodBrush}"/>
|
||||||
@@ -27,7 +28,7 @@
|
|||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
<Button Grid.Column="2" Classes="icon-btn"
|
<Button Grid.Column="2" Classes="icon-btn"
|
||||||
Command="{Binding CloseDetailsCommand}"
|
Command="{Binding CloseDetailsCommand}"
|
||||||
ToolTip.Tip="Close"
|
ToolTip.Tip="{loc:Tr details.closeTip}"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<PathIcon Data="{StaticResource Icon.X}" Width="14" Height="14"/>
|
<PathIcon Data="{StaticResource Icon.X}" Width="14" Height="14"/>
|
||||||
</Button>
|
</Button>
|
||||||
@@ -52,7 +53,7 @@
|
|||||||
Text="{Binding TaskIdBadge}"
|
Text="{Binding TaskIdBadge}"
|
||||||
Margin="0,0,0,4"
|
Margin="0,0,0,4"
|
||||||
Cursor="Hand"
|
Cursor="Hand"
|
||||||
ToolTip.Tip="Copy task ID"
|
ToolTip.Tip="{loc:Tr details.copyTaskIdTip}"
|
||||||
Tapped="OnTaskIdTapped"/>
|
Tapped="OnTaskIdTapped"/>
|
||||||
<TextBox Text="{Binding EditableTitle, Mode=TwoWay}"
|
<TextBox Text="{Binding EditableTitle, Mode=TwoWay}"
|
||||||
FontSize="{StaticResource FontSizeTaskTitle}" FontWeight="Medium"
|
FontSize="{StaticResource FontSizeTaskTitle}" FontWeight="Medium"
|
||||||
@@ -67,14 +68,14 @@
|
|||||||
Classes="icon-btn star-btn"
|
Classes="icon-btn star-btn"
|
||||||
Classes.on="{Binding Task.IsStarred}"
|
Classes.on="{Binding Task.IsStarred}"
|
||||||
Command="{Binding ToggleStarCommand}"
|
Command="{Binding ToggleStarCommand}"
|
||||||
ToolTip.Tip="Star"
|
ToolTip.Tip="{loc:Tr details.starTip}"
|
||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
Margin="6,0,0,0">
|
Margin="6,0,0,0">
|
||||||
<PathIcon Data="{StaticResource Icon.Star}" Width="14" Height="14"/>
|
<PathIcon Data="{StaticResource Icon.Star}" Width="14" Height="14"/>
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button Grid.Column="3" Classes="icon-btn"
|
<Button Grid.Column="3" Classes="icon-btn"
|
||||||
ToolTip.Tip="Agent settings"
|
ToolTip.Tip="{loc:Tr details.agentSettingsTip}"
|
||||||
IsEnabled="{Binding IsAgentSectionEnabled}"
|
IsEnabled="{Binding IsAgentSectionEnabled}"
|
||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
Margin="6,0,0,0">
|
Margin="6,0,0,0">
|
||||||
@@ -82,10 +83,10 @@
|
|||||||
<Button.Flyout>
|
<Button.Flyout>
|
||||||
<Flyout Placement="BottomEdgeAlignedRight" ShowMode="Standard">
|
<Flyout Placement="BottomEdgeAlignedRight" ShowMode="Standard">
|
||||||
<StackPanel Width="340" Spacing="10" Margin="4">
|
<StackPanel Width="340" Spacing="10" Margin="4">
|
||||||
<TextBlock Text="Agent settings (overrides)" FontWeight="SemiBold"/>
|
<TextBlock Text="{loc:Tr details.agentSettingsHeading}" FontWeight="SemiBold"/>
|
||||||
|
|
||||||
<StackPanel Spacing="2">
|
<StackPanel Spacing="2">
|
||||||
<TextBlock Classes="field-label" Text="Model"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr details.modelLabel}"/>
|
||||||
<ComboBox ItemsSource="{Binding TaskModelOptions}"
|
<ComboBox ItemsSource="{Binding TaskModelOptions}"
|
||||||
SelectedItem="{Binding TaskModelSelection, Mode=TwoWay}"
|
SelectedItem="{Binding TaskModelSelection, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch"/>
|
HorizontalAlignment="Stretch"/>
|
||||||
@@ -95,14 +96,14 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Spacing="2">
|
<StackPanel Spacing="2">
|
||||||
<TextBlock Classes="field-label" Text="System prompt (appended)"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr details.systemPromptLabel}"/>
|
||||||
<TextBox Text="{Binding TaskSystemPrompt, Mode=TwoWay}"
|
<TextBox Text="{Binding TaskSystemPrompt, Mode=TwoWay}"
|
||||||
AcceptsReturn="True" TextWrapping="Wrap" MinHeight="70"
|
AcceptsReturn="True" TextWrapping="Wrap" MinHeight="70"
|
||||||
PlaceholderText="{Binding EffectiveSystemPromptHint}"/>
|
PlaceholderText="{Binding EffectiveSystemPromptHint}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Spacing="2">
|
<StackPanel Spacing="2">
|
||||||
<TextBlock Classes="field-label" Text="Agent file"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr details.agentFileLabel}"/>
|
||||||
<ComboBox ItemsSource="{Binding TaskAgentOptions}"
|
<ComboBox ItemsSource="{Binding TaskAgentOptions}"
|
||||||
SelectedItem="{Binding TaskSelectedAgent, Mode=TwoWay}"
|
SelectedItem="{Binding TaskSelectedAgent, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch">
|
HorizontalAlignment="Stretch">
|
||||||
@@ -136,17 +137,17 @@
|
|||||||
<Border Classes="section-divider"
|
<Border Classes="section-divider"
|
||||||
IsVisible="{Binding Task.IsPlanningParent}">
|
IsVisible="{Binding Task.IsPlanningParent}">
|
||||||
<StackPanel Spacing="8">
|
<StackPanel Spacing="8">
|
||||||
<TextBlock Classes="section-label" Text="MERGE" Margin="0,0,0,2"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr details.mergeLabel}" Margin="0,0,0,2"/>
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Merge target"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr details.mergeTargetLabel}"/>
|
||||||
<ComboBox ItemsSource="{Binding MergeTargetBranches}"
|
<ComboBox ItemsSource="{Binding MergeTargetBranches}"
|
||||||
SelectedItem="{Binding SelectedMergeTarget, Mode=TwoWay}"
|
SelectedItem="{Binding SelectedMergeTarget, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch"/>
|
HorizontalAlignment="Stretch"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<Button Classes="btn" Content="Review combined diff"
|
<Button Classes="btn" Content="{loc:Tr details.reviewCombinedDiff}"
|
||||||
Command="{Binding ReviewCombinedDiffCommand}"/>
|
Command="{Binding ReviewCombinedDiffCommand}"/>
|
||||||
<Button Classes="btn" Content="Merge all subtasks"
|
<Button Classes="btn" Content="{loc:Tr details.mergeAllSubtasks}"
|
||||||
IsEnabled="{Binding CanMergeAll}"
|
IsEnabled="{Binding CanMergeAll}"
|
||||||
Command="{Binding MergeAllCommand}"
|
Command="{Binding MergeAllCommand}"
|
||||||
ToolTip.Tip="{Binding MergeAllDisabledReason}"/>
|
ToolTip.Tip="{Binding MergeAllDisabledReason}"/>
|
||||||
@@ -161,9 +162,9 @@
|
|||||||
<!-- Steps section -->
|
<!-- Steps section -->
|
||||||
<Border Classes="section-divider">
|
<Border Classes="section-divider">
|
||||||
<StackPanel Spacing="6">
|
<StackPanel Spacing="6">
|
||||||
<TextBlock Classes="section-label" Text="STEPS" Margin="0,0,0,2"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr details.stepsLabel}" Margin="0,0,0,2"/>
|
||||||
<TextBox Text="{Binding NewSubtaskTitle, Mode=TwoWay}"
|
<TextBox Text="{Binding NewSubtaskTitle, Mode=TwoWay}"
|
||||||
PlaceholderText="Add a step..."
|
PlaceholderText="{loc:Tr details.addStepPlaceholder}"
|
||||||
Padding="8"
|
Padding="8"
|
||||||
Background="{DynamicResource Surface2Brush}"
|
Background="{DynamicResource Surface2Brush}"
|
||||||
BorderBrush="{DynamicResource LineBrush}"
|
BorderBrush="{DynamicResource LineBrush}"
|
||||||
@@ -240,14 +241,14 @@
|
|||||||
<TextBlock Classes="meta"
|
<TextBlock Classes="meta"
|
||||||
Text="▸"
|
Text="▸"
|
||||||
IsVisible="{Binding !IsDescriptionExpanded}"/>
|
IsVisible="{Binding !IsDescriptionExpanded}"/>
|
||||||
<TextBlock Classes="section-label" Text="DETAILS"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr details.detailsLabel}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Grid.Column="2"
|
<Button Grid.Column="2"
|
||||||
Classes="icon-btn"
|
Classes="icon-btn"
|
||||||
Padding="6,2"
|
Padding="6,2"
|
||||||
Margin="0,0,4,0"
|
Margin="0,0,4,0"
|
||||||
ToolTip.Tip="Copy description to clipboard"
|
ToolTip.Tip="{loc:Tr details.copyDescriptionTip}"
|
||||||
IsVisible="{Binding IsDescriptionExpanded}"
|
IsVisible="{Binding IsDescriptionExpanded}"
|
||||||
Click="OnCopyDescriptionClick">
|
Click="OnCopyDescriptionClick">
|
||||||
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
|
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
|
||||||
@@ -256,17 +257,17 @@
|
|||||||
Classes="btn"
|
Classes="btn"
|
||||||
Command="{Binding ToggleEditDescriptionCommand}"
|
Command="{Binding ToggleEditDescriptionCommand}"
|
||||||
Padding="8,3"
|
Padding="8,3"
|
||||||
ToolTip.Tip="Toggle edit/preview"
|
ToolTip.Tip="{loc:Tr details.toggleEditPreviewTip}"
|
||||||
IsVisible="{Binding IsDescriptionEditorVisible}">
|
IsVisible="{Binding IsDescriptionEditorVisible}">
|
||||||
<TextBlock Text="Preview"/>
|
<TextBlock Text="{loc:Tr details.previewBtn}"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Grid.Column="3"
|
<Button Grid.Column="3"
|
||||||
Classes="btn"
|
Classes="btn"
|
||||||
Command="{Binding ToggleEditDescriptionCommand}"
|
Command="{Binding ToggleEditDescriptionCommand}"
|
||||||
Padding="8,3"
|
Padding="8,3"
|
||||||
ToolTip.Tip="Toggle edit/preview"
|
ToolTip.Tip="{loc:Tr details.toggleEditPreviewTip}"
|
||||||
IsVisible="{Binding IsDescriptionPreviewVisible}">
|
IsVisible="{Binding IsDescriptionPreviewVisible}">
|
||||||
<TextBlock Text="Edit"/>
|
<TextBlock Text="{loc:Tr details.editBtn}"/>
|
||||||
</Button>
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
@@ -275,7 +276,7 @@
|
|||||||
TextWrapping="Wrap"
|
TextWrapping="Wrap"
|
||||||
MinHeight="80"
|
MinHeight="80"
|
||||||
MaxHeight="320"
|
MaxHeight="320"
|
||||||
PlaceholderText="Add task details (markdown supported)..."
|
PlaceholderText="{loc:Tr details.descriptionPlaceholder}"
|
||||||
Padding="8"
|
Padding="8"
|
||||||
FontFamily="{DynamicResource MonoFont}"
|
FontFamily="{DynamicResource MonoFont}"
|
||||||
FontSize="{StaticResource FontSizeBody}"
|
FontSize="{StaticResource FontSizeBody}"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.ListsIslandView"
|
x:Class="ClaudeDo.Ui.Views.Islands.ListsIslandView"
|
||||||
x:DataType="vm:ListsIslandViewModel">
|
x:DataType="vm:ListsIslandViewModel">
|
||||||
<DockPanel LastChildFill="True">
|
<DockPanel LastChildFill="True">
|
||||||
@@ -9,7 +10,7 @@
|
|||||||
<!-- ── Header ── -->
|
<!-- ── Header ── -->
|
||||||
<Border DockPanel.Dock="Top" Classes="island-header">
|
<Border DockPanel.Dock="Top" Classes="island-header">
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="heading" Text="Lists"/>
|
<TextBlock Classes="heading" Text="{loc:Tr lists.heading}"/>
|
||||||
|
|
||||||
<!-- Search row -->
|
<!-- Search row -->
|
||||||
<Border Classes="search-wrap" Margin="0,8,0,12">
|
<Border Classes="search-wrap" Margin="0,8,0,12">
|
||||||
@@ -19,10 +20,10 @@
|
|||||||
Foreground="{DynamicResource TextFaintBrush}"
|
Foreground="{DynamicResource TextFaintBrush}"
|
||||||
Margin="2,0,0,0"/>
|
Margin="2,0,0,0"/>
|
||||||
<TextBox Grid.Column="1" x:Name="SearchBox" Classes="search-inner"
|
<TextBox Grid.Column="1" x:Name="SearchBox" Classes="search-inner"
|
||||||
PlaceholderText="Search tasks…"
|
PlaceholderText="{loc:Tr lists.searchPlaceholder}"
|
||||||
Text="{Binding SearchText, Mode=TwoWay}"/>
|
Text="{Binding SearchText, Mode=TwoWay}"/>
|
||||||
<Border Grid.Column="2" Classes="kbd" Margin="0,0,2,0">
|
<Border Grid.Column="2" Classes="kbd" Margin="0,0,2,0">
|
||||||
<TextBlock Text="Ctrl K"/>
|
<TextBlock Text="{loc:Tr lists.searchKbd}"/>
|
||||||
</Border>
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
@@ -57,7 +58,7 @@
|
|||||||
<!-- More button -->
|
<!-- More button -->
|
||||||
<Button Grid.Column="2" Classes="icon-btn" VerticalAlignment="Center"
|
<Button Grid.Column="2" Classes="icon-btn" VerticalAlignment="Center"
|
||||||
Command="{Binding OpenSettingsCommand}"
|
Command="{Binding OpenSettingsCommand}"
|
||||||
ToolTip.Tip="Settings">
|
ToolTip.Tip="{loc:Tr lists.settingsTip}">
|
||||||
<PathIcon Data="{StaticResource Icon.MoreHorizontal}"
|
<PathIcon Data="{StaticResource Icon.MoreHorizontal}"
|
||||||
Width="14" Height="14"
|
Width="14" Height="14"
|
||||||
Foreground="{DynamicResource TextMuteBrush}"/>
|
Foreground="{DynamicResource TextMuteBrush}"/>
|
||||||
@@ -70,7 +71,7 @@
|
|||||||
<StackPanel Margin="6,0,6,4">
|
<StackPanel Margin="6,0,6,4">
|
||||||
|
|
||||||
<!-- SMART LISTS section -->
|
<!-- SMART LISTS section -->
|
||||||
<TextBlock Classes="section-label" Text="SMART LISTS" Margin="10,10,10,4"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr lists.smartListsLabel}" Margin="10,10,10,4"/>
|
||||||
<ItemsControl ItemsSource="{Binding SmartLists}">
|
<ItemsControl ItemsSource="{Binding SmartLists}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate DataType="vm:ListNavItemViewModel">
|
<DataTemplate DataType="vm:ListNavItemViewModel">
|
||||||
@@ -109,7 +110,7 @@
|
|||||||
</ItemsControl>
|
</ItemsControl>
|
||||||
|
|
||||||
<!-- MY LISTS section -->
|
<!-- MY LISTS section -->
|
||||||
<TextBlock Classes="section-label" Text="MY LISTS" Margin="10,10,10,4"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr lists.myListsLabel}" Margin="10,10,10,4"/>
|
||||||
<ItemsControl ItemsSource="{Binding UserLists}">
|
<ItemsControl ItemsSource="{Binding UserLists}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate DataType="vm:ListNavItemViewModel">
|
<DataTemplate DataType="vm:ListNavItemViewModel">
|
||||||
@@ -127,18 +128,18 @@
|
|||||||
DragDrop.Drop="OnListDrop">
|
DragDrop.Drop="OnListDrop">
|
||||||
<Border.ContextMenu>
|
<Border.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="Settings..."
|
<MenuItem Header="{loc:Tr lists.contextSettings}"
|
||||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenListSettingsCommand}"
|
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenListSettingsCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Worktrees…"
|
<MenuItem Header="{loc:Tr lists.contextWorktrees}"
|
||||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenWorktreesOverviewCommand}"
|
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenWorktreesOverviewCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<Separator IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
<Separator IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||||||
<MenuItem Header="Open in Explorer"
|
<MenuItem Header="{loc:Tr lists.contextOpenExplorer}"
|
||||||
IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
||||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInExplorerCommand}"
|
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInExplorerCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Open in Terminal"
|
<MenuItem Header="{loc:Tr lists.contextOpenTerminal}"
|
||||||
IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
||||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInTerminalCommand}"
|
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInTerminalCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
@@ -191,14 +192,14 @@
|
|||||||
Foreground="{DynamicResource TextMuteBrush}"
|
Foreground="{DynamicResource TextMuteBrush}"
|
||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="body"
|
<TextBlock Classes="body"
|
||||||
Text="New list"
|
Text="{loc:Tr lists.newList}"
|
||||||
Foreground="{DynamicResource TextMuteBrush}"
|
Foreground="{DynamicResource TextMuteBrush}"
|
||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Grid.Column="1" Classes="icon-btn" Margin="6,0,0,0"
|
<Button Grid.Column="1" Classes="icon-btn" Margin="6,0,0,0"
|
||||||
Command="{Binding OpenRepoImportCommand}"
|
Command="{Binding OpenRepoImportCommand}"
|
||||||
ToolTip.Tip="Add repos as lists">
|
ToolTip.Tip="{loc:Tr lists.addReposTip}">
|
||||||
<PathIcon Data="{StaticResource Icon.Folder}"
|
<PathIcon Data="{StaticResource Icon.Folder}"
|
||||||
Width="14" Height="14"
|
Width="14" Height="14"
|
||||||
Foreground="{DynamicResource TextMuteBrush}"/>
|
Foreground="{DynamicResource TextMuteBrush}"/>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.NotesEditorView"
|
x:Class="ClaudeDo.Ui.Views.Islands.NotesEditorView"
|
||||||
x:DataType="vm:NotesEditorViewModel">
|
x:DataType="vm:NotesEditorViewModel">
|
||||||
<DockPanel Margin="16">
|
<DockPanel Margin="16">
|
||||||
@@ -9,14 +10,14 @@
|
|||||||
<Button Classes="btn" Content="‹" Command="{Binding PrevDayCommand}"/>
|
<Button Classes="btn" Content="‹" Command="{Binding PrevDayCommand}"/>
|
||||||
<ctl:ThemedDatePicker SelectedDate="{Binding CurrentDate, Mode=TwoWay}"/>
|
<ctl:ThemedDatePicker SelectedDate="{Binding CurrentDate, Mode=TwoWay}"/>
|
||||||
<Button Classes="btn" Content="›" Command="{Binding NextDayCommand}"/>
|
<Button Classes="btn" Content="›" Command="{Binding NextDayCommand}"/>
|
||||||
<Button Classes="btn" Content="Today" Command="{Binding TodayCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr notes.today}" Command="{Binding TodayCommand}"/>
|
||||||
<TextBlock Classes="meta" VerticalAlignment="Center" Text="{Binding CurrentDayLabel}"/>
|
<TextBlock Classes="meta" VerticalAlignment="Center" Text="{Binding CurrentDayLabel}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<DockPanel DockPanel.Dock="Top" Margin="0,12,0,8">
|
<DockPanel DockPanel.Dock="Top" Margin="0,12,0,8">
|
||||||
<Button DockPanel.Dock="Right" Classes="btn" Content="Add" Margin="8,0,0,0"
|
<Button DockPanel.Dock="Right" Classes="btn" Content="{loc:Tr notes.add}" Margin="8,0,0,0"
|
||||||
Command="{Binding AddBulletCommand}"/>
|
Command="{Binding AddBulletCommand}"/>
|
||||||
<TextBox PlaceholderText="New note…" Text="{Binding NewBulletText}">
|
<TextBox PlaceholderText="{loc:Tr notes.newNotePlaceholder}" Text="{Binding NewBulletText}">
|
||||||
<TextBox.KeyBindings>
|
<TextBox.KeyBindings>
|
||||||
<KeyBinding Gesture="Enter" Command="{Binding AddBulletCommand}"/>
|
<KeyBinding Gesture="Enter" Command="{Binding AddBulletCommand}"/>
|
||||||
</TextBox.KeyBindings>
|
</TextBox.KeyBindings>
|
||||||
@@ -29,8 +30,8 @@
|
|||||||
<DataTemplate x:DataType="vm:NoteBulletViewModel">
|
<DataTemplate x:DataType="vm:NoteBulletViewModel">
|
||||||
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,2" ColumnSpacing="6">
|
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,2" ColumnSpacing="6">
|
||||||
<TextBox Grid.Column="0" Text="{Binding Text}"/>
|
<TextBox Grid.Column="0" Text="{Binding Text}"/>
|
||||||
<Button Grid.Column="1" Classes="btn" Content="Save" Command="{Binding SaveCommand}"/>
|
<Button Grid.Column="1" Classes="btn" Content="{loc:Tr notes.save}" Command="{Binding SaveCommand}"/>
|
||||||
<Button Grid.Column="2" Classes="btn" Content="Delete" Command="{Binding DeleteCommand}"/>
|
<Button Grid.Column="2" Classes="btn" Content="{loc:Tr notes.delete}" Command="{Binding DeleteCommand}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ItemsControl.ItemTemplate>
|
</ItemsControl.ItemTemplate>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<UserControl xmlns="https://github.com/avaloniaui"
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.SessionTerminalView"
|
x:Class="ClaudeDo.Ui.Views.Islands.SessionTerminalView"
|
||||||
x:DataType="vm:DetailsIslandViewModel">
|
x:DataType="vm:DetailsIslandViewModel">
|
||||||
<Border Classes="terminal" Margin="18,8,18,0">
|
<Border Classes="terminal" Margin="18,8,18,0">
|
||||||
@@ -24,7 +25,7 @@
|
|||||||
Margin="0,0,8,0" VerticalAlignment="Center">
|
Margin="0,0,8,0" VerticalAlignment="Center">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
||||||
<Ellipse VerticalAlignment="Center"/>
|
<Ellipse VerticalAlignment="Center"/>
|
||||||
<TextBlock Text="LIVE" VerticalAlignment="Center"/>
|
<TextBlock Text="{loc:Tr session.chipLive}" VerticalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<!-- DONE chip -->
|
<!-- DONE chip -->
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
Margin="0,0,8,0" VerticalAlignment="Center">
|
Margin="0,0,8,0" VerticalAlignment="Center">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
||||||
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource MossBrush}"/>
|
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource MossBrush}"/>
|
||||||
<TextBlock Text="DONE" VerticalAlignment="Center"
|
<TextBlock Text="{loc:Tr session.chipDone}" VerticalAlignment="Center"
|
||||||
Foreground="{DynamicResource MossBrush}"/>
|
Foreground="{DynamicResource MossBrush}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
@@ -43,7 +44,7 @@
|
|||||||
Margin="0,0,8,0" VerticalAlignment="Center">
|
Margin="0,0,8,0" VerticalAlignment="Center">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
||||||
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource BloodBrush}"/>
|
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource BloodBrush}"/>
|
||||||
<TextBlock Text="FAILED" VerticalAlignment="Center"
|
<TextBlock Text="{loc:Tr session.chipFailed}" VerticalAlignment="Center"
|
||||||
Foreground="{DynamicResource BloodBrush}"/>
|
Foreground="{DynamicResource BloodBrush}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.TaskRowView"
|
x:Class="ClaudeDo.Ui.Views.Islands.TaskRowView"
|
||||||
x:DataType="vm:TaskRowViewModel">
|
x:DataType="vm:TaskRowViewModel">
|
||||||
<Grid>
|
<Grid>
|
||||||
@@ -32,38 +33,38 @@
|
|||||||
Classes.done="{Binding Done}">
|
Classes.done="{Binding Done}">
|
||||||
<Border.ContextMenu>
|
<Border.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="Send to queue"
|
<MenuItem Header="{loc:Tr tasks.ctxSendToQueue}"
|
||||||
IsVisible="{Binding CanSendToQueue}"
|
IsVisible="{Binding CanSendToQueue}"
|
||||||
Click="OnSendToQueueClick"/>
|
Click="OnSendToQueueClick"/>
|
||||||
<MenuItem Header="Remove from queue"
|
<MenuItem Header="{loc:Tr tasks.ctxRemoveFromQueue}"
|
||||||
IsVisible="{Binding CanRemoveFromQueue}"
|
IsVisible="{Binding CanRemoveFromQueue}"
|
||||||
Click="OnRemoveFromQueueClick"/>
|
Click="OnRemoveFromQueueClick"/>
|
||||||
<MenuItem Header="Cancel execution"
|
<MenuItem Header="{loc:Tr tasks.ctxCancelExecution}"
|
||||||
IsVisible="{Binding IsRunning}"
|
IsVisible="{Binding IsRunning}"
|
||||||
Click="OnCancelExecutionClick"/>
|
Click="OnCancelExecutionClick"/>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem Header="Mark as">
|
<MenuItem Header="{loc:Tr tasks.ctxMarkAs}">
|
||||||
<MenuItem Header="Done" Tag="Done" Click="OnSetStatusClick"/>
|
<MenuItem Header="{loc:Tr tasks.ctxMarkDone}" Tag="Done" Click="OnSetStatusClick"/>
|
||||||
<MenuItem Header="Cancelled" Tag="Cancelled" Click="OnSetStatusClick"/>
|
<MenuItem Header="{loc:Tr tasks.ctxMarkCancelled}" Tag="Cancelled" Click="OnSetStatusClick"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem Header="Run interactively"
|
<MenuItem Header="{loc:Tr tasks.ctxRunInteractively}"
|
||||||
Click="OnRunInteractivelyClick"/>
|
Click="OnRunInteractivelyClick"/>
|
||||||
<MenuItem Header="Open planning Session"
|
<MenuItem Header="{loc:Tr tasks.ctxOpenPlanningSession}"
|
||||||
Click="OnOpenPlanningSessionClick"
|
Click="OnOpenPlanningSessionClick"
|
||||||
IsVisible="{Binding CanOpenPlanningSession}"/>
|
IsVisible="{Binding CanOpenPlanningSession}"/>
|
||||||
<MenuItem Header="Resume planning Session"
|
<MenuItem Header="{loc:Tr tasks.ctxResumePlanningSession}"
|
||||||
Click="OnResumePlanningSessionClick"
|
Click="OnResumePlanningSessionClick"
|
||||||
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
||||||
<MenuItem Header="Discard planning session"
|
<MenuItem Header="{loc:Tr tasks.ctxDiscardPlanningSession}"
|
||||||
Click="OnDiscardPlanningSessionClick"
|
Click="OnDiscardPlanningSessionClick"
|
||||||
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
||||||
<MenuItem Header="Queue subtasks sequentially"
|
<MenuItem Header="{loc:Tr tasks.ctxQueueSubtasks}"
|
||||||
Click="OnQueuePlanningSubtasksClick"
|
Click="OnQueuePlanningSubtasksClick"
|
||||||
IsVisible="{Binding CanQueuePlan}"/>
|
IsVisible="{Binding CanQueuePlan}"/>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem Header="Schedule for..." Click="OnScheduleForClick"/>
|
<MenuItem Header="{loc:Tr tasks.ctxScheduleFor}" Click="OnScheduleForClick"/>
|
||||||
<MenuItem Header="Clear schedule"
|
<MenuItem Header="{loc:Tr tasks.ctxClearSchedule}"
|
||||||
IsVisible="{Binding HasSchedule}"
|
IsVisible="{Binding HasSchedule}"
|
||||||
Click="OnClearScheduleClick"/>
|
Click="OnClearScheduleClick"/>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
@@ -111,10 +112,10 @@
|
|||||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4"
|
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4"
|
||||||
VerticalAlignment="Center" Margin="4,0,0,0">
|
VerticalAlignment="Center" Margin="4,0,0,0">
|
||||||
<Border Classes="badge draft" IsVisible="{Binding IsDraft}">
|
<Border Classes="badge draft" IsVisible="{Binding IsDraft}">
|
||||||
<TextBlock Text="DRAFT"/>
|
<TextBlock Text="{loc:Tr tasks.badgeDraft}"/>
|
||||||
</Border>
|
</Border>
|
||||||
<Border Classes="badge planned" IsVisible="{Binding IsPlanned}">
|
<Border Classes="badge planned" IsVisible="{Binding IsPlanned}">
|
||||||
<TextBlock Text="PLANNED"/>
|
<TextBlock Text="{loc:Tr tasks.badgePlanned}"/>
|
||||||
</Border>
|
</Border>
|
||||||
<Border Classes="badge"
|
<Border Classes="badge"
|
||||||
Classes.planning="{Binding IsPlanActive}"
|
Classes.planning="{Binding IsPlanActive}"
|
||||||
@@ -141,24 +142,24 @@
|
|||||||
<!-- Review actions (visible when WaitingForReview) -->
|
<!-- Review actions (visible when WaitingForReview) -->
|
||||||
<StackPanel Orientation="Horizontal" Spacing="4"
|
<StackPanel Orientation="Horizontal" Spacing="4"
|
||||||
IsVisible="{Binding IsWaitingForReview}">
|
IsVisible="{Binding IsWaitingForReview}">
|
||||||
<Button Classes="btn" Content="Approve" MinWidth="0" Padding="8,2"
|
<Button Classes="btn" Content="{loc:Tr tasks.approve}" MinWidth="0" Padding="8,2"
|
||||||
ToolTip.Tip="Approve — mark Done"
|
ToolTip.Tip="{loc:Tr tasks.approveTip}"
|
||||||
Click="OnApproveReviewClick"/>
|
Click="OnApproveReviewClick"/>
|
||||||
<Button Classes="btn" Content="Reject" MinWidth="0" Padding="8,2"
|
<Button Classes="btn" Content="{loc:Tr tasks.reject}" MinWidth="0" Padding="8,2"
|
||||||
ToolTip.Tip="Reject with feedback and re-run"
|
ToolTip.Tip="{loc:Tr tasks.rejectTip}"
|
||||||
Click="OnRejectReviewClick"/>
|
Click="OnRejectReviewClick"/>
|
||||||
<Button Classes="btn" Content="Park" MinWidth="0" Padding="8,2"
|
<Button Classes="btn" Content="{loc:Tr tasks.park}" MinWidth="0" Padding="8,2"
|
||||||
ToolTip.Tip="Send back to Idle for manual editing"
|
ToolTip.Tip="{loc:Tr tasks.parkTip}"
|
||||||
Click="OnParkReviewClick"/>
|
Click="OnParkReviewClick"/>
|
||||||
<Button Classes="btn" Content="Cancel" MinWidth="0" Padding="8,2"
|
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" MinWidth="0" Padding="8,2"
|
||||||
ToolTip.Tip="Cancel this task"
|
ToolTip.Tip="{loc:Tr tasks.cancelTip}"
|
||||||
Click="OnCancelReviewClick"/>
|
Click="OnCancelReviewClick"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!-- Dequeue button (visible when row is Queued, or planning parent has queued subtasks) -->
|
<!-- Dequeue button (visible when row is Queued, or planning parent has queued subtasks) -->
|
||||||
<Button Classes="icon-btn dequeue-btn"
|
<Button Classes="icon-btn dequeue-btn"
|
||||||
IsVisible="{Binding CanRemoveFromQueue}"
|
IsVisible="{Binding CanRemoveFromQueue}"
|
||||||
ToolTip.Tip="Remove from queue"
|
ToolTip.Tip="{loc:Tr tasks.removeFromQueueTip}"
|
||||||
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).RemoveFromQueueCommand}"
|
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).RemoveFromQueueCommand}"
|
||||||
CommandParameter="{Binding}">
|
CommandParameter="{Binding}">
|
||||||
<PathIcon Width="10" Height="10" Data="{StaticResource Icon.X}"/>
|
<PathIcon Width="10" Height="10" Data="{StaticResource Icon.X}"/>
|
||||||
@@ -226,10 +227,10 @@
|
|||||||
BorderThickness="1" CornerRadius="10"
|
BorderThickness="1" CornerRadius="10"
|
||||||
Padding="16" Width="300">
|
Padding="16" Width="300">
|
||||||
<StackPanel Spacing="12">
|
<StackPanel Spacing="12">
|
||||||
<TextBlock Classes="title" Text="Schedule task"/>
|
<TextBlock Classes="title" Text="{loc:Tr tasks.scheduleTitle}"/>
|
||||||
|
|
||||||
<StackPanel Spacing="6">
|
<StackPanel Spacing="6">
|
||||||
<TextBlock Classes="eyebrow" Text="WHEN"
|
<TextBlock Classes="eyebrow" Text="{loc:Tr tasks.scheduleWhen}"
|
||||||
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
||||||
<ctl:ThemedDatePicker x:Name="ScheduleDate" ShowTime="True"
|
<ctl:ThemedDatePicker x:Name="ScheduleDate" ShowTime="True"
|
||||||
HorizontalAlignment="Stretch"/>
|
HorizontalAlignment="Stretch"/>
|
||||||
@@ -237,8 +238,8 @@
|
|||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" Margin="0,4,0,0">
|
HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||||
<Button Classes="btn" Content="Cancel" Click="OnScheduleCancelClick" MinWidth="76"/>
|
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" Click="OnScheduleCancelClick" MinWidth="76"/>
|
||||||
<Button Content="Schedule" Classes="accent" Click="OnScheduleSetClick" MinWidth="76"/>
|
<Button Content="{loc:Tr tasks.scheduleConfirm}" Classes="accent" Click="OnScheduleSetClick" MinWidth="76"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
@@ -258,18 +259,18 @@
|
|||||||
BorderThickness="1" CornerRadius="10"
|
BorderThickness="1" CornerRadius="10"
|
||||||
Padding="16" Width="320">
|
Padding="16" Width="320">
|
||||||
<StackPanel Spacing="12">
|
<StackPanel Spacing="12">
|
||||||
<TextBlock Classes="title" Text="Reject & re-run"/>
|
<TextBlock Classes="title" Text="{loc:Tr tasks.rejectRerunTitle}"/>
|
||||||
<StackPanel Spacing="6">
|
<StackPanel Spacing="6">
|
||||||
<TextBlock Classes="eyebrow" Text="FEEDBACK FOR THE AGENT"
|
<TextBlock Classes="eyebrow" Text="{loc:Tr tasks.feedbackLabel}"
|
||||||
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
||||||
<TextBox x:Name="RejectFeedback"
|
<TextBox x:Name="RejectFeedback"
|
||||||
AcceptsReturn="True" TextWrapping="Wrap"
|
AcceptsReturn="True" TextWrapping="Wrap"
|
||||||
MinHeight="80" PlaceholderText="What should the agent fix?"/>
|
MinHeight="80" PlaceholderText="{loc:Tr tasks.feedbackPlaceholder}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" Margin="0,4,0,0">
|
HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||||
<Button Classes="btn" Content="Cancel" Click="OnRejectCancelClick" MinWidth="76"/>
|
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" Click="OnRejectCancelClick" MinWidth="76"/>
|
||||||
<Button Content="Re-run" Classes="accent" Click="OnRejectConfirmClick" MinWidth="76"/>
|
<Button Content="{loc:Tr tasks.rerun}" Classes="accent" Click="OnRejectConfirmClick" MinWidth="76"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||||
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
||||||
xmlns:converters="using:Avalonia.Data.Converters"
|
xmlns:converters="using:Avalonia.Data.Converters"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Islands.TasksIslandView"
|
x:Class="ClaudeDo.Ui.Views.Islands.TasksIslandView"
|
||||||
x:DataType="vm:TasksIslandViewModel">
|
x:DataType="vm:TasksIslandViewModel">
|
||||||
<DockPanel LastChildFill="True">
|
<DockPanel LastChildFill="True">
|
||||||
@@ -27,15 +28,15 @@
|
|||||||
IsVisible="{Binding HasStatusPill}">
|
IsVisible="{Binding HasStatusPill}">
|
||||||
<TextBlock Text="{Binding StatusPill}"/>
|
<TextBlock Text="{Binding StatusPill}"/>
|
||||||
</Border>
|
</Border>
|
||||||
<Button Classes="icon-btn" Command="{Binding SortCommand}" ToolTip.Tip="Sort">
|
<Button Classes="icon-btn" Command="{Binding SortCommand}" ToolTip.Tip="{loc:Tr tasks.sortTip}">
|
||||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Sort}"/>
|
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Sort}"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Classes="icon-btn" Classes.active="{Binding IsShowingCompleted}"
|
<Button Classes="icon-btn" Classes.active="{Binding IsShowingCompleted}"
|
||||||
Command="{Binding ToggleShowCompletedCommand}"
|
Command="{Binding ToggleShowCompletedCommand}"
|
||||||
ToolTip.Tip="Show completed">
|
ToolTip.Tip="{loc:Tr tasks.showCompletedTip}">
|
||||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Eye}"/>
|
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Eye}"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Classes="icon-btn" Command="{Binding OpenListSettingsCommand}" ToolTip.Tip="List settings">
|
<Button Classes="icon-btn" Command="{Binding OpenListSettingsCommand}" ToolTip.Tip="{loc:Tr tasks.listSettingsTip}">
|
||||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Settings}"/>
|
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Settings}"/>
|
||||||
</Button>
|
</Button>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -50,7 +51,7 @@
|
|||||||
Foreground="{DynamicResource TextFaintBrush}"/>
|
Foreground="{DynamicResource TextFaintBrush}"/>
|
||||||
</Border>
|
</Border>
|
||||||
<TextBox Grid.Column="1" x:Name="AddTaskBox" Classes="add-task-input"
|
<TextBox Grid.Column="1" x:Name="AddTaskBox" Classes="add-task-input"
|
||||||
PlaceholderText="Add a task…"
|
PlaceholderText="{loc:Tr tasks.addPlaceholder}"
|
||||||
Text="{Binding NewTaskTitle, Mode=TwoWay}"
|
Text="{Binding NewTaskTitle, Mode=TwoWay}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Margin="12,0,0,0">
|
Margin="12,0,0,0">
|
||||||
@@ -60,7 +61,7 @@
|
|||||||
</TextBox>
|
</TextBox>
|
||||||
<Border Grid.Column="2" Classes="kbd kbd-enter" VerticalAlignment="Center"
|
<Border Grid.Column="2" Classes="kbd kbd-enter" VerticalAlignment="Center"
|
||||||
IsVisible="{Binding #AddTaskBox.IsFocused}">
|
IsVisible="{Binding #AddTaskBox.IsFocused}">
|
||||||
<TextBlock Text="ENTER"/>
|
<TextBlock Text="{loc:Tr tasks.enterKey}"/>
|
||||||
</Border>
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
@@ -71,7 +72,7 @@
|
|||||||
Margin="16,0,16,8"
|
Margin="16,0,16,8"
|
||||||
IsVisible="{Binding ShowNotesRow}"
|
IsVisible="{Binding ShowNotesRow}"
|
||||||
Command="{Binding OpenNotesCommand}"
|
Command="{Binding OpenNotesCommand}"
|
||||||
Content="Notes (daily notes)"/>
|
Content="{loc:Tr tasks.notesPinnedRow}"/>
|
||||||
|
|
||||||
<!-- Task list -->
|
<!-- Task list -->
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
@@ -80,7 +81,7 @@
|
|||||||
<!-- OVERDUE -->
|
<!-- OVERDUE -->
|
||||||
<StackPanel IsVisible="{Binding HasOverdue}">
|
<StackPanel IsVisible="{Binding HasOverdue}">
|
||||||
<TextBlock Classes="eyebrow section-label overdue"
|
<TextBlock Classes="eyebrow section-label overdue"
|
||||||
Text="OVERDUE" Margin="14,14,14,6"/>
|
Text="{loc:Tr tasks.overdue}" Margin="14,14,14,6"/>
|
||||||
<ItemsControl ItemsSource="{Binding OverdueItems}">
|
<ItemsControl ItemsSource="{Binding OverdueItems}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate DataType="vm:TaskRowViewModel">
|
<DataTemplate DataType="vm:TaskRowViewModel">
|
||||||
@@ -104,7 +105,7 @@
|
|||||||
<!-- TASKS -->
|
<!-- TASKS -->
|
||||||
<StackPanel IsVisible="{Binding HasOpen}">
|
<StackPanel IsVisible="{Binding HasOpen}">
|
||||||
<TextBlock Classes="eyebrow section-label"
|
<TextBlock Classes="eyebrow section-label"
|
||||||
Text="TASKS" Margin="14,14,14,6"
|
Text="{loc:Tr tasks.tasks}" Margin="14,14,14,6"
|
||||||
IsVisible="{Binding ShowOpenLabel}"/>
|
IsVisible="{Binding ShowOpenLabel}"/>
|
||||||
<ItemsControl ItemsSource="{Binding OpenItems}">
|
<ItemsControl ItemsSource="{Binding OpenItems}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
@@ -139,7 +140,7 @@
|
|||||||
Text="{Binding CompletedHeader}" VerticalAlignment="Center"/>
|
Text="{Binding CompletedHeader}" VerticalAlignment="Center"/>
|
||||||
<Button Grid.Column="1" Classes="icon-btn"
|
<Button Grid.Column="1" Classes="icon-btn"
|
||||||
Command="{Binding ClearCompletedCommand}"
|
Command="{Binding ClearCompletedCommand}"
|
||||||
ToolTip.Tip="Clear all completed"
|
ToolTip.Tip="{loc:Tr tasks.clearCompletedTip}"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<PathIcon Data="{StaticResource Icon.Trash}" Width="13" Height="13"
|
<PathIcon Data="{StaticResource Icon.Trash}" Width="13" Height="13"
|
||||||
Foreground="{DynamicResource BloodBrush}"/>
|
Foreground="{DynamicResource BloodBrush}"/>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels"
|
||||||
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
||||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.MainWindow"
|
x:Class="ClaudeDo.Ui.Views.MainWindow"
|
||||||
x:DataType="vm:IslandsShellViewModel"
|
x:DataType="vm:IslandsShellViewModel"
|
||||||
Title="ClaudeDo"
|
Title="ClaudeDo"
|
||||||
@@ -56,18 +57,18 @@
|
|||||||
<Menu Margin="12,0,0,0"
|
<Menu Margin="12,0,0,0"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<MenuItem Header="Help"
|
<MenuItem Header="{loc:Tr shell.menu.help}"
|
||||||
FontSize="{StaticResource FontSizeMono}"
|
FontSize="{StaticResource FontSizeMono}"
|
||||||
Foreground="{DynamicResource TextDimBrush}">
|
Foreground="{DynamicResource TextDimBrush}">
|
||||||
<MenuItem Header="Check for updates"
|
<MenuItem Header="{loc:Tr shell.menu.checkForUpdates}"
|
||||||
Command="{Binding CheckForUpdatesCommand}"/>
|
Command="{Binding CheckForUpdatesCommand}"/>
|
||||||
<MenuItem Header="Restart worker"
|
<MenuItem Header="{loc:Tr shell.menu.restartWorker}"
|
||||||
Command="{Binding RestartWorkerCommand}"/>
|
Command="{Binding RestartWorkerCommand}"/>
|
||||||
<MenuItem Header="Worktrees…"
|
<MenuItem Header="{loc:Tr shell.menu.worktrees}"
|
||||||
Command="{Binding OpenWorktreesOverviewGlobalCommand}"/>
|
Command="{Binding OpenWorktreesOverviewGlobalCommand}"/>
|
||||||
<MenuItem Header="Weekly Report…" Command="{Binding OpenWeeklyReportCommand}"/>
|
<MenuItem Header="{loc:Tr shell.menu.weeklyReport}" Command="{Binding OpenWeeklyReportCommand}"/>
|
||||||
<MenuItem Header="About…" Command="{Binding OpenAboutCommand}"/>
|
<MenuItem Header="{loc:Tr shell.menu.about}" Command="{Binding OpenAboutCommand}"/>
|
||||||
<MenuItem Header="Add repos as lists…" Command="{Binding OpenRepoImportCommand}"/>
|
<MenuItem Header="{loc:Tr shell.menu.addRepos}" Command="{Binding OpenRepoImportCommand}"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</Menu>
|
</Menu>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -104,7 +105,7 @@
|
|||||||
<TextBlock Grid.Column="0"
|
<TextBlock Grid.Column="0"
|
||||||
Classes="body"
|
Classes="body"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<Run Text="Update available: v"/>
|
<Run Text="{loc:Tr shell.update.available}"/>
|
||||||
<Run Text="{Binding UpdateCheck.CurrentVersion}"/>
|
<Run Text="{Binding UpdateCheck.CurrentVersion}"/>
|
||||||
<Run Text=" → v"/>
|
<Run Text=" → v"/>
|
||||||
<Run Text="{Binding UpdateBannerLatestVersion}"/>
|
<Run Text="{Binding UpdateBannerLatestVersion}"/>
|
||||||
@@ -112,11 +113,11 @@
|
|||||||
<Button Grid.Column="1"
|
<Button Grid.Column="1"
|
||||||
Classes="btn"
|
Classes="btn"
|
||||||
Margin="0,0,8,0"
|
Margin="0,0,8,0"
|
||||||
Content="Update now"
|
Content="{loc:Tr shell.update.updateNow}"
|
||||||
Command="{Binding UpdateNowCommand}"/>
|
Command="{Binding UpdateNowCommand}"/>
|
||||||
<Button Grid.Column="2"
|
<Button Grid.Column="2"
|
||||||
Classes="btn"
|
Classes="btn"
|
||||||
Content="Dismiss"
|
Content="{loc:Tr shell.update.dismiss}"
|
||||||
Command="{Binding DismissBannerCommand}"/>
|
Command="{Binding DismissBannerCommand}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.AboutModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.AboutModalView"
|
||||||
x:DataType="vm:AboutModalViewModel"
|
x:DataType="vm:AboutModalViewModel"
|
||||||
Title="About ClaudeDo"
|
Title="{loc:Tr modals.about.title}"
|
||||||
Width="620" Height="280"
|
Width="620" Height="280"
|
||||||
WindowDecorations="None"
|
WindowDecorations="None"
|
||||||
ExtendClientAreaToDecorationsHint="True"
|
ExtendClientAreaToDecorationsHint="True"
|
||||||
@@ -14,21 +15,21 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="ABOUT" CloseCommand="{Binding CloseCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.about.title}" CloseCommand="{Binding CloseCommand}">
|
||||||
<!-- Body -->
|
<!-- Body -->
|
||||||
<ScrollViewer Padding="20,16" HorizontalScrollBarVisibility="Disabled">
|
<ScrollViewer Padding="20,16" HorizontalScrollBarVisibility="Disabled">
|
||||||
<Grid RowDefinitions="Auto,Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="10" ColumnSpacing="8">
|
<Grid RowDefinitions="Auto,Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="10" ColumnSpacing="8">
|
||||||
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="0" Text="Version" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="0" Text="{loc:Tr modals.about.version}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="1" Text="{Binding AppVersion}" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Grid.Row="0" Grid.Column="1" Text="{Binding AppVersion}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="meta" Grid.Row="1" Grid.Column="0" Text="Data" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Grid.Row="1" Grid.Column="0" Text="{loc:Tr modals.about.data}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="path-mono" Grid.Row="1" Grid.Column="1" Text="{Binding DataFolderPath}" VerticalAlignment="Center"/>
|
<TextBlock Classes="path-mono" Grid.Row="1" Grid.Column="1" Text="{Binding DataFolderPath}" VerticalAlignment="Center"/>
|
||||||
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="Open" Command="{Binding OpenPathCommand}" CommandParameter="{Binding DataFolderPath}"/>
|
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="{loc:Tr modals.about.open}" Command="{Binding OpenPathCommand}" CommandParameter="{Binding DataFolderPath}"/>
|
||||||
<TextBlock Classes="meta" Grid.Row="2" Grid.Column="0" Text="Logs" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Grid.Row="2" Grid.Column="0" Text="{loc:Tr modals.about.logs}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="path-mono" Grid.Row="2" Grid.Column="1" Text="{Binding LogsFolderPath}" VerticalAlignment="Center"/>
|
<TextBlock Classes="path-mono" Grid.Row="2" Grid.Column="1" Text="{Binding LogsFolderPath}" VerticalAlignment="Center"/>
|
||||||
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="Open" Command="{Binding OpenPathCommand}" CommandParameter="{Binding LogsFolderPath}"/>
|
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="{loc:Tr modals.about.open}" Command="{Binding OpenPathCommand}" CommandParameter="{Binding LogsFolderPath}"/>
|
||||||
<TextBlock Classes="meta" Grid.Row="3" Grid.Column="0" Text="Config" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Grid.Row="3" Grid.Column="0" Text="{loc:Tr modals.about.config}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="path-mono" Grid.Row="3" Grid.Column="1" Text="{Binding WorkerConfigPath}" VerticalAlignment="Center"/>
|
<TextBlock Classes="path-mono" Grid.Row="3" Grid.Column="1" Text="{Binding WorkerConfigPath}" VerticalAlignment="Center"/>
|
||||||
<Button Classes="btn" Grid.Row="3" Grid.Column="2" Content="Open" Command="{Binding OpenPathCommand}" CommandParameter="{Binding WorkerConfigPath}"/>
|
<Button Classes="btn" Grid.Row="3" Grid.Column="2" Content="{loc:Tr modals.about.open}" Command="{Binding OpenPathCommand}" CommandParameter="{Binding WorkerConfigPath}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.DiffModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.DiffModalView"
|
||||||
x:DataType="vm:DiffModalViewModel"
|
x:DataType="vm:DiffModalViewModel"
|
||||||
Title="Diff"
|
Title="{loc:Tr modals.diff.windowTitle}"
|
||||||
Width="1200" Height="800" MinWidth="700" MinHeight="450"
|
Width="1200" Height="800" MinWidth="700" MinHeight="450"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
WindowDecorations="BorderOnly"
|
WindowDecorations="BorderOnly"
|
||||||
@@ -48,11 +49,11 @@
|
|||||||
</Style>
|
</Style>
|
||||||
</Window.Styles>
|
</Window.Styles>
|
||||||
|
|
||||||
<ctl:ModalShell Title="DIFF" CloseCommand="{Binding CloseCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.diff.title}" CloseCommand="{Binding CloseCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||||
<Button Classes="btn" Content="Merge…" Command="{Binding MergeCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr modals.diff.merge}" Command="{Binding MergeCommand}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ctl:ModalShell.Footer>
|
</ctl:ModalShell.Footer>
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.ListSettingsModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.ListSettingsModalView"
|
||||||
x:DataType="vm:ListSettingsModalViewModel"
|
x:DataType="vm:ListSettingsModalViewModel"
|
||||||
Title="List settings"
|
Title="{loc:Tr modals.listSettings.title}"
|
||||||
Width="520" Height="720"
|
Width="520" Height="720"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
MinWidth="460" MinHeight="520"
|
MinWidth="460" MinHeight="520"
|
||||||
@@ -19,14 +20,14 @@
|
|||||||
<KeyBinding Gesture="Enter" Command="{Binding SaveCommand}"/>
|
<KeyBinding Gesture="Enter" Command="{Binding SaveCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="LIST SETTINGS" CloseCommand="{Binding CancelCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.listSettings.title}" CloseCommand="{Binding CancelCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<Grid ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
<Grid ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
||||||
<Button Grid.Column="0" Content="Delete list" Classes="danger"
|
<Button Grid.Column="0" Content="{loc:Tr modals.listSettings.deleteList}" Classes="danger"
|
||||||
Command="{Binding DeleteCommand}" MinWidth="90"/>
|
Command="{Binding DeleteCommand}" MinWidth="90"/>
|
||||||
<StackPanel Grid.Column="2" Orientation="Horizontal" Spacing="8">
|
<StackPanel Grid.Column="2" Orientation="Horizontal" Spacing="8">
|
||||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
<Button Classes="btn" Content="{loc:Tr settings.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||||
<Button Content="Save" Classes="primary" Command="{Binding SaveCommand}" MinWidth="90"/>
|
<Button Content="{loc:Tr settings.save}" Classes="primary" Command="{Binding SaveCommand}" MinWidth="90"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</ctl:ModalShell.Footer>
|
</ctl:ModalShell.Footer>
|
||||||
@@ -37,24 +38,24 @@
|
|||||||
|
|
||||||
<!-- GENERAL -->
|
<!-- GENERAL -->
|
||||||
<StackPanel Spacing="0">
|
<StackPanel Spacing="0">
|
||||||
<TextBlock Classes="section-label" Text="GENERAL"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr modals.listSettings.sectionGeneral}"/>
|
||||||
<Border Classes="section">
|
<Border Classes="section">
|
||||||
<StackPanel Spacing="12">
|
<StackPanel Spacing="12">
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Name"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.name}"/>
|
||||||
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Working directory"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.workingDirectory}"/>
|
||||||
<Grid ColumnDefinitions="*,Auto">
|
<Grid ColumnDefinitions="*,Auto">
|
||||||
<TextBox Grid.Column="0" Text="{Binding WorkingDir}" PlaceholderText="(none)" />
|
<TextBox Grid.Column="0" Text="{Binding WorkingDir}" PlaceholderText="{loc:Tr modals.listSettings.workingDirectoryPlaceholder}" />
|
||||||
<Button Classes="btn" Grid.Column="1" Content="Browse..." Margin="8,0,0,0" Click="BrowseClicked" />
|
<Button Classes="btn" Grid.Column="1" Content="{loc:Tr modals.listSettings.browse}" Margin="8,0,0,0" Click="BrowseClicked" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Default commit type"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.defaultCommitType}"/>
|
||||||
<ComboBox ItemsSource="{Binding CommitTypeOptions}"
|
<ComboBox ItemsSource="{Binding CommitTypeOptions}"
|
||||||
SelectedItem="{Binding DefaultCommitType, Mode=TwoWay}"
|
SelectedItem="{Binding DefaultCommitType, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Left" MinWidth="160" />
|
HorizontalAlignment="Left" MinWidth="160" />
|
||||||
@@ -66,28 +67,28 @@
|
|||||||
<!-- AGENT -->
|
<!-- AGENT -->
|
||||||
<StackPanel Spacing="0">
|
<StackPanel Spacing="0">
|
||||||
<Grid ColumnDefinitions="*,Auto" Margin="4,0,0,6">
|
<Grid ColumnDefinitions="*,Auto" Margin="4,0,0,6">
|
||||||
<TextBlock Classes="section-label" Text="AGENT" Margin="0"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr modals.listSettings.sectionAgent}" Margin="0"/>
|
||||||
<Button Classes="btn" Grid.Column="1" Content="Reset agent settings"
|
<Button Classes="btn" Grid.Column="1" Content="{loc:Tr modals.listSettings.resetAgentSettings}"
|
||||||
Command="{Binding ResetAgentSettingsCommand}" />
|
Command="{Binding ResetAgentSettingsCommand}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Border Classes="section">
|
<Border Classes="section">
|
||||||
<StackPanel Spacing="12">
|
<StackPanel Spacing="12">
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Model"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.model}"/>
|
||||||
<ComboBox ItemsSource="{Binding ModelOptions}"
|
<ComboBox ItemsSource="{Binding ModelOptions}"
|
||||||
SelectedItem="{Binding SelectedModel, Mode=TwoWay}"
|
SelectedItem="{Binding SelectedModel, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Left" MinWidth="160" />
|
HorizontalAlignment="Left" MinWidth="160" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="System prompt (appended)"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.systemPrompt}"/>
|
||||||
<TextBox Text="{Binding SystemPrompt, Mode=TwoWay}"
|
<TextBox Text="{Binding SystemPrompt, Mode=TwoWay}"
|
||||||
AcceptsReturn="True" TextWrapping="Wrap"
|
AcceptsReturn="True" TextWrapping="Wrap"
|
||||||
MinHeight="80" />
|
MinHeight="80" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Agent file"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.listSettings.agentFile}"/>
|
||||||
<Grid ColumnDefinitions="*,Auto">
|
<Grid ColumnDefinitions="*,Auto">
|
||||||
<ComboBox Grid.Column="0"
|
<ComboBox Grid.Column="0"
|
||||||
ItemsSource="{Binding Agents}"
|
ItemsSource="{Binding Agents}"
|
||||||
@@ -102,7 +103,7 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.ItemTemplate>
|
</ComboBox.ItemTemplate>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
<Button Classes="btn" Grid.Column="1" Content="Browse..."
|
<Button Classes="btn" Grid.Column="1" Content="{loc:Tr modals.listSettings.browse}"
|
||||||
Margin="8,0,0,0" Click="BrowseAgentClicked" />
|
Margin="8,0,0,0" Click="BrowseAgentClicked" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock Classes="path-mono" Text="{Binding SelectedAgent.Path}"
|
<TextBlock Classes="path-mono" Text="{Binding SelectedAgent.Path}"
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.MergeModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.MergeModalView"
|
||||||
x:DataType="vm:MergeModalViewModel"
|
x:DataType="vm:MergeModalViewModel"
|
||||||
Title="Merge worktree"
|
Title="{loc:Tr modals.merge.windowTitle}"
|
||||||
Width="560" Height="460" MinWidth="460" MinHeight="360"
|
Width="560" Height="460" MinWidth="460" MinHeight="360"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
WindowDecorations="BorderOnly"
|
WindowDecorations="BorderOnly"
|
||||||
@@ -17,12 +18,12 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="MERGE WORKTREE" CloseCommand="{Binding CancelCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.merge.title}" CloseCommand="{Binding CancelCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
<Button Classes="btn" Content="{loc:Tr modals.merge.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||||
<Button Content="Merge" Classes="primary"
|
<Button Content="{loc:Tr modals.merge.merge}" Classes="primary"
|
||||||
Command="{Binding SubmitCommand}"
|
Command="{Binding SubmitCommand}"
|
||||||
IsDefault="True" MinWidth="90"/>
|
IsDefault="True" MinWidth="90"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -35,19 +36,19 @@
|
|||||||
<TextBlock Classes="title" Text="{Binding TaskTitle, StringFormat='Merging: {0}'}" />
|
<TextBlock Classes="title" Text="{Binding TaskTitle, StringFormat='Merging: {0}'}" />
|
||||||
|
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Target branch"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.merge.targetBranch}"/>
|
||||||
<ComboBox ItemsSource="{Binding Branches}"
|
<ComboBox ItemsSource="{Binding Branches}"
|
||||||
SelectedItem="{Binding SelectedBranch}"
|
SelectedItem="{Binding SelectedBranch}"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
IsEnabled="{Binding !IsBusy}" />
|
IsEnabled="{Binding !IsBusy}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<CheckBox Content="Remove worktree after merge"
|
<CheckBox Content="{loc:Tr modals.merge.removeWorktree}"
|
||||||
IsChecked="{Binding RemoveWorktree}"
|
IsChecked="{Binding RemoveWorktree}"
|
||||||
IsEnabled="{Binding !IsBusy}" />
|
IsEnabled="{Binding !IsBusy}" />
|
||||||
|
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Commit message"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr modals.merge.commitMessage}"/>
|
||||||
<TextBox Text="{Binding CommitMessage}"
|
<TextBox Text="{Binding CommitMessage}"
|
||||||
AcceptsReturn="True"
|
AcceptsReturn="True"
|
||||||
TextWrapping="Wrap"
|
TextWrapping="Wrap"
|
||||||
@@ -63,7 +64,7 @@
|
|||||||
<Border Classes="danger-box"
|
<Border Classes="danger-box"
|
||||||
IsVisible="{Binding HasConflict}">
|
IsVisible="{Binding HasConflict}">
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="title" Text="Conflicted files:" />
|
<TextBlock Classes="title" Text="{loc:Tr modals.merge.conflictedFiles}" />
|
||||||
<ItemsControl ItemsSource="{Binding ConflictFiles}">
|
<ItemsControl ItemsSource="{Binding ConflictFiles}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.RepoImportModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.RepoImportModalView"
|
||||||
x:DataType="vm:RepoImportModalViewModel"
|
x:DataType="vm:RepoImportModalViewModel"
|
||||||
Title="Add repos as lists"
|
Title="{loc:Tr modals.repoImport.windowTitle}"
|
||||||
Width="560" Height="480" MinWidth="420" MinHeight="320"
|
Width="560" Height="480" MinWidth="420" MinHeight="320"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
WindowDecorations="BorderOnly"
|
WindowDecorations="BorderOnly"
|
||||||
@@ -16,11 +17,11 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="ADD REPOS AS LISTS" CloseCommand="{Binding CancelCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.repoImport.title}" CloseCommand="{Binding CancelCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8" HorizontalAlignment="Right"
|
<StackPanel Orientation="Horizontal" Spacing="8" HorizontalAlignment="Right"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
<Button Classes="btn" Content="{loc:Tr modals.repoImport.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||||
<Button Content="{Binding CreateButtonText}" Command="{Binding CreateCommand}"
|
<Button Content="{Binding CreateButtonText}" Command="{Binding CreateCommand}"
|
||||||
IsEnabled="{Binding CanCreate}" MinWidth="120" Classes="primary"/>
|
IsEnabled="{Binding CanCreate}" MinWidth="120" Classes="primary"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
<!-- Toolbar: search + folder actions -->
|
<!-- Toolbar: search + folder actions -->
|
||||||
<StackPanel DockPanel.Dock="Top" Spacing="8" Margin="20,12,20,6">
|
<StackPanel DockPanel.Dock="Top" Spacing="8" Margin="20,12,20,6">
|
||||||
<TextBox Text="{Binding SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
<TextBox Text="{Binding SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||||
PlaceholderText="Search repos…"/>
|
PlaceholderText="{loc:Tr modals.repoImport.searchPlaceholder}"/>
|
||||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||||
<Button Classes="btn" Grid.Column="0" Content="Add folder…" Click="AddFolderClicked"/>
|
<Button Classes="btn" Grid.Column="0" Content="{loc:Tr modals.repoImport.addFolder}" Click="AddFolderClicked"/>
|
||||||
<Button Classes="btn" Grid.Column="2" Content="Forget folders"
|
<Button Classes="btn" Grid.Column="2" Content="{loc:Tr modals.repoImport.forgetFolders}"
|
||||||
Command="{Binding ForgetFoldersCommand}"
|
Command="{Binding ForgetFoldersCommand}"
|
||||||
IsVisible="{Binding HasFolders}"/>
|
IsVisible="{Binding HasFolders}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -55,7 +56,7 @@
|
|||||||
VerticalAlignment="Center" Margin="4,0,0,0"/>
|
VerticalAlignment="Center" Margin="4,0,0,0"/>
|
||||||
<TextBlock Classes="path-mono" Grid.Column="2" Text="{Binding FullPath}"
|
<TextBlock Classes="path-mono" Grid.Column="2" Text="{Binding FullPath}"
|
||||||
VerticalAlignment="Center" Margin="8,0,0,0"/>
|
VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||||||
<TextBlock Classes="meta" Grid.Column="3" Text="(already added)"
|
<TextBlock Classes="meta" Grid.Column="3" Text="{loc:Tr modals.repoImport.alreadyAdded}"
|
||||||
VerticalAlignment="Center" Margin="8,0,0,0"
|
VerticalAlignment="Center" Margin="8,0,0,0"
|
||||||
IsVisible="{Binding AlreadyAdded}"/>
|
IsVisible="{Binding AlreadyAdded}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
xmlns:locm="using:ClaudeDo.Localization"
|
xmlns:locm="using:ClaudeDo.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.SettingsModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.SettingsModalView"
|
||||||
x:DataType="vm:SettingsModalViewModel"
|
x:DataType="vm:SettingsModalViewModel"
|
||||||
Title="Settings"
|
Title="{loc:Tr settings.title}"
|
||||||
Width="580" Height="760" MinWidth="480" MinHeight="520"
|
Width="580" Height="760" MinWidth="480" MinHeight="520"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
WindowDecorations="BorderOnly"
|
WindowDecorations="BorderOnly"
|
||||||
@@ -21,12 +21,12 @@
|
|||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
|
|
||||||
<ctl:ModalShell Title="SETTINGS" CloseCommand="{Binding CancelCommand}">
|
<ctl:ModalShell Title="{loc:Tr settings.title}" CloseCommand="{Binding CancelCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||||
<Button Classes="btn" Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
|
<Button Classes="btn" Content="{loc:Tr settings.cancel}" Command="{Binding CancelCommand}" MinWidth="90"/>
|
||||||
<Button Content="Save" Classes="primary"
|
<Button Content="{loc:Tr settings.save}" Classes="primary"
|
||||||
Command="{Binding SaveCommand}"
|
Command="{Binding SaveCommand}"
|
||||||
IsEnabled="{Binding !IsBusy}" MinWidth="90"/>
|
IsEnabled="{Binding !IsBusy}" MinWidth="90"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
<TabControl Padding="20,16" TabStripPlacement="Top">
|
<TabControl Padding="20,16" TabStripPlacement="Top">
|
||||||
|
|
||||||
<TabItem Header="General">
|
<TabItem Header="{loc:Tr settings.tabGeneral}">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
@@ -60,101 +60,101 @@
|
|||||||
</ComboBox>
|
</ComboBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Default instructions"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.defaultInstructions}"/>
|
||||||
<TextBox AcceptsReturn="True" TextWrapping="Wrap" Height="110"
|
<TextBox AcceptsReturn="True" TextWrapping="Wrap" Height="110"
|
||||||
PlaceholderText="Baseline instructions applied to every task"
|
PlaceholderText="{loc:Tr settings.general.defaultInstructionsPlaceholder}"
|
||||||
Text="{Binding General.DefaultClaudeInstructions, Mode=TwoWay}"/>
|
Text="{Binding General.DefaultClaudeInstructions, Mode=TwoWay}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Grid ColumnDefinitions="*,12,*,12,*">
|
<Grid ColumnDefinitions="*,12,*,12,*">
|
||||||
<StackPanel Grid.Column="0" Spacing="4">
|
<StackPanel Grid.Column="0" Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Model"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.model}"/>
|
||||||
<ComboBox ItemsSource="{Binding General.Models}"
|
<ComboBox ItemsSource="{Binding General.Models}"
|
||||||
SelectedItem="{Binding General.DefaultModel, Mode=TwoWay}"
|
SelectedItem="{Binding General.DefaultModel, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch"/>
|
HorizontalAlignment="Stretch"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Grid.Column="2" Spacing="4">
|
<StackPanel Grid.Column="2" Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Max turns"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.maxTurns}"/>
|
||||||
<NumericUpDown Value="{Binding General.DefaultMaxTurns, Mode=TwoWay}"
|
<NumericUpDown Value="{Binding General.DefaultMaxTurns, Mode=TwoWay}"
|
||||||
Minimum="1" Maximum="200" Increment="1" FormatString="0"/>
|
Minimum="1" Maximum="200" Increment="1" FormatString="0"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Grid.Column="4" Spacing="4">
|
<StackPanel Grid.Column="4" Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Permission"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.permission}"/>
|
||||||
<ComboBox ItemsSource="{Binding General.PermissionModes}"
|
<ComboBox ItemsSource="{Binding General.PermissionModes}"
|
||||||
SelectedItem="{Binding General.DefaultPermissionMode, Mode=TwoWay}"
|
SelectedItem="{Binding General.DefaultPermissionMode, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch"/>
|
HorizontalAlignment="Stretch"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Max parallel executions"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.maxParallelExecutions}"/>
|
||||||
<NumericUpDown Value="{Binding General.MaxParallelExecutions, Mode=TwoWay}"
|
<NumericUpDown Value="{Binding General.MaxParallelExecutions, Mode=TwoWay}"
|
||||||
Minimum="1" Maximum="20" Increment="1" FormatString="0"
|
Minimum="1" Maximum="20" Increment="1" FormatString="0"
|
||||||
HorizontalAlignment="Left" Width="140"/>
|
HorizontalAlignment="Left" Width="140"/>
|
||||||
<TextBlock Text="How many queued tasks the worker runs at once."
|
<TextBlock Text="{loc:Tr settings.general.maxParallelExecutionsHint}"
|
||||||
Opacity="0.6" FontSize="12"/>
|
Opacity="0.6" FontSize="12"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Report: excluded paths (one per line)"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.reportExcludedPaths}"/>
|
||||||
<TextBox AcceptsReturn="True" MinHeight="60" Text="{Binding General.ReportExcludedPaths, Mode=TwoWay}"/>
|
<TextBox AcceptsReturn="True" MinHeight="60" Text="{Binding General.ReportExcludedPaths, Mode=TwoWay}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Standup weekday"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.general.standupWeekday}"/>
|
||||||
<ComboBox SelectedIndex="{Binding General.StandupWeekday, Mode=TwoWay}" HorizontalAlignment="Left">
|
<ComboBox SelectedIndex="{Binding General.StandupWeekday, Mode=TwoWay}" HorizontalAlignment="Left">
|
||||||
<ComboBoxItem>Sunday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdaySunday}"/>
|
||||||
<ComboBoxItem>Monday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdayMonday}"/>
|
||||||
<ComboBoxItem>Tuesday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdayTuesday}"/>
|
||||||
<ComboBoxItem>Wednesday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdayWednesday}"/>
|
||||||
<ComboBoxItem>Thursday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdayThursday}"/>
|
||||||
<ComboBoxItem>Friday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdayFriday}"/>
|
||||||
<ComboBoxItem>Saturday</ComboBoxItem>
|
<ComboBoxItem Content="{loc:Tr settings.general.weekdaySaturday}"/>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem Header="Worktrees">
|
<TabItem Header="{loc:Tr settings.tabWorktrees}">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||||
<Grid ColumnDefinitions="*,12,2*">
|
<Grid ColumnDefinitions="*,12,2*">
|
||||||
<StackPanel Grid.Column="0" Spacing="4">
|
<StackPanel Grid.Column="0" Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Strategy"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.worktrees.strategy}"/>
|
||||||
<ComboBox ItemsSource="{Binding Worktrees.WorktreeStrategies}"
|
<ComboBox ItemsSource="{Binding Worktrees.WorktreeStrategies}"
|
||||||
SelectedItem="{Binding Worktrees.WorktreeStrategy, Mode=TwoWay}"
|
SelectedItem="{Binding Worktrees.WorktreeStrategy, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch"/>
|
HorizontalAlignment="Stretch"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Grid.Column="2" Spacing="4">
|
<StackPanel Grid.Column="2" Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Central worktree root"/>
|
<TextBlock Classes="field-label" Text="{loc:Tr settings.worktrees.centralWorktreeRoot}"/>
|
||||||
<TextBox Text="{Binding Worktrees.CentralWorktreeRoot, Mode=TwoWay}"
|
<TextBox Text="{Binding Worktrees.CentralWorktreeRoot, Mode=TwoWay}"
|
||||||
PlaceholderText="e.g. C:\worktrees"/>
|
PlaceholderText="e.g. C:\worktrees"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<CheckBox IsChecked="{Binding Worktrees.WorktreeAutoCleanupEnabled, Mode=TwoWay}"
|
<CheckBox IsChecked="{Binding Worktrees.WorktreeAutoCleanupEnabled, Mode=TwoWay}"
|
||||||
Content="Auto-cleanup finished worktrees after"
|
Content="{loc:Tr settings.worktrees.autoCleanup}"
|
||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
<NumericUpDown Value="{Binding Worktrees.WorktreeAutoCleanupDays, Mode=TwoWay}"
|
<NumericUpDown Value="{Binding Worktrees.WorktreeAutoCleanupDays, Mode=TwoWay}"
|
||||||
Width="130" Minimum="1" Maximum="365" Increment="1" FormatString="0"
|
Width="130" Minimum="1" Maximum="365" Increment="1" FormatString="0"
|
||||||
IsEnabled="{Binding Worktrees.WorktreeAutoCleanupEnabled}"/>
|
IsEnabled="{Binding Worktrees.WorktreeAutoCleanupEnabled}"/>
|
||||||
<TextBlock Classes="body" Text="days" VerticalAlignment="Center"/>
|
<TextBlock Classes="body" Text="{loc:Tr settings.worktrees.days}" VerticalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Border BorderBrush="{DynamicResource LineBrush}" BorderThickness="0,1,0,0" Margin="0,4,0,0"/>
|
<Border BorderBrush="{DynamicResource LineBrush}" BorderThickness="0,1,0,0" Margin="0,4,0,0"/>
|
||||||
<StackPanel Spacing="8">
|
<StackPanel Spacing="8">
|
||||||
<Button Classes="btn" Content="Cleanup finished worktrees"
|
<Button Classes="btn" Content="{loc:Tr settings.worktrees.cleanupFinished}"
|
||||||
Command="{Binding Worktrees.CleanupWorktreesCommand}"
|
Command="{Binding Worktrees.CleanupWorktreesCommand}"
|
||||||
HorizontalAlignment="Left"/>
|
HorizontalAlignment="Left"/>
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<Button Content="Force-remove all worktrees" Classes="danger"
|
<Button Content="{loc:Tr settings.worktrees.forceRemoveAll}" Classes="danger"
|
||||||
Command="{Binding Worktrees.RequestResetConfirmCommand}"
|
Command="{Binding Worktrees.RequestResetConfirmCommand}"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
IsVisible="{Binding !Worktrees.ShowResetConfirm}"/>
|
IsVisible="{Binding !Worktrees.ShowResetConfirm}"/>
|
||||||
<Border Classes="danger-box"
|
<Border Classes="danger-box"
|
||||||
IsVisible="{Binding Worktrees.ShowResetConfirm}">
|
IsVisible="{Binding Worktrees.ShowResetConfirm}">
|
||||||
<StackPanel Spacing="8">
|
<StackPanel Spacing="8">
|
||||||
<TextBlock Text="Remove ALL worktrees? Uncommitted work will be lost."
|
<TextBlock Text="{loc:Tr settings.worktrees.confirmRemoveAll}"
|
||||||
Foreground="{DynamicResource TextBrush}" TextWrapping="Wrap"/>
|
Foreground="{DynamicResource TextBrush}" TextWrapping="Wrap"/>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<Button Classes="btn" Content="Cancel" Command="{Binding Worktrees.CancelResetConfirmCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr settings.cancel}" Command="{Binding Worktrees.CancelResetConfirmCommand}"/>
|
||||||
<Button Content="Remove All" Classes="danger"
|
<Button Content="{loc:Tr settings.worktrees.removeAll}" Classes="danger"
|
||||||
Command="{Binding Worktrees.ConfirmResetAllCommand}"/>
|
Command="{Binding Worktrees.ConfirmResetAllCommand}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -167,32 +167,32 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem Header="Files">
|
<TabItem Header="{loc:Tr settings.tabFiles}">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||||
<StackPanel Spacing="6">
|
<StackPanel Spacing="6">
|
||||||
<TextBlock Classes="section-label" Text="AGENTS"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr settings.files.agentsSection}"/>
|
||||||
<TextBlock Classes="meta" Text="Restore bundled default agents. Existing files are not overwritten."
|
<TextBlock Classes="meta" Text="{loc:Tr settings.files.agentsHint}"
|
||||||
TextWrapping="Wrap"/>
|
TextWrapping="Wrap"/>
|
||||||
<Button Classes="btn" Content="Restore default agents"
|
<Button Classes="btn" Content="{loc:Tr settings.files.restoreDefaultAgents}"
|
||||||
Command="{Binding Files.RestoreDefaultAgentsCommand}"
|
Command="{Binding Files.RestoreDefaultAgentsCommand}"
|
||||||
IsEnabled="{Binding !Files.IsBusy}"
|
IsEnabled="{Binding !Files.IsBusy}"
|
||||||
HorizontalAlignment="Left"/>
|
HorizontalAlignment="Left"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Spacing="6">
|
<StackPanel Spacing="6">
|
||||||
<TextBlock Classes="section-label" Text="PROMPTS"/>
|
<TextBlock Classes="section-label" Text="{loc:Tr settings.files.promptsSection}"/>
|
||||||
<Grid RowDefinitions="Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="8">
|
<Grid RowDefinitions="Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="8">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0" Classes="field-label" Text="System" VerticalAlignment="Center"/>
|
<TextBlock Grid.Row="0" Grid.Column="0" Classes="field-label" Text="{loc:Tr settings.files.systemPrompt}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Grid.Row="0" Grid.Column="1" Classes="path-mono" Text="{Binding Files.SystemPromptPath}" VerticalAlignment="Center"/>
|
<TextBlock Grid.Row="0" Grid.Column="1" Classes="path-mono" Text="{Binding Files.SystemPromptPath}" VerticalAlignment="Center"/>
|
||||||
<Button Classes="btn" Grid.Row="0" Grid.Column="2" Content="Open in editor"
|
<Button Classes="btn" Grid.Row="0" Grid.Column="2" Content="{loc:Tr settings.files.openInEditor}"
|
||||||
Command="{Binding Files.OpenPromptCommand}" CommandParameter="System"/>
|
Command="{Binding Files.OpenPromptCommand}" CommandParameter="System"/>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0" Classes="field-label" Text="Planning" VerticalAlignment="Center"/>
|
<TextBlock Grid.Row="1" Grid.Column="0" Classes="field-label" Text="{loc:Tr settings.files.planningPrompt}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="1" Classes="path-mono" Text="{Binding Files.PlanningPromptPath}" VerticalAlignment="Center"/>
|
<TextBlock Grid.Row="1" Grid.Column="1" Classes="path-mono" Text="{Binding Files.PlanningPromptPath}" VerticalAlignment="Center"/>
|
||||||
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="Open in editor"
|
<Button Classes="btn" Grid.Row="1" Grid.Column="2" Content="{loc:Tr settings.files.openInEditor}"
|
||||||
Command="{Binding Files.OpenPromptCommand}" CommandParameter="Planning"/>
|
Command="{Binding Files.OpenPromptCommand}" CommandParameter="Planning"/>
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0" Classes="field-label" Text="Agent" VerticalAlignment="Center"/>
|
<TextBlock Grid.Row="2" Grid.Column="0" Classes="field-label" Text="{loc:Tr settings.files.agentPrompt}" VerticalAlignment="Center"/>
|
||||||
<TextBlock Grid.Row="2" Grid.Column="1" Classes="path-mono" Text="{Binding Files.AgentPromptPath}" VerticalAlignment="Center"/>
|
<TextBlock Grid.Row="2" Grid.Column="1" Classes="path-mono" Text="{Binding Files.AgentPromptPath}" VerticalAlignment="Center"/>
|
||||||
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="Open in editor"
|
<Button Classes="btn" Grid.Row="2" Grid.Column="2" Content="{loc:Tr settings.files.openInEditor}"
|
||||||
Command="{Binding Files.OpenPromptCommand}" CommandParameter="Agent"/>
|
Command="{Binding Files.OpenPromptCommand}" CommandParameter="Agent"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -202,11 +202,11 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem Header="Prime Claude">
|
<TabItem Header="{loc:Tr settings.tabPrime}">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel Spacing="12" Margin="0,8,0,0">
|
<StackPanel Spacing="12" Margin="0,8,0,0">
|
||||||
<TextBlock Classes="meta" TextWrapping="Wrap"
|
<TextBlock Classes="meta" TextWrapping="Wrap"
|
||||||
Text="Prime your Claude usage window by firing a single non-interactive ping on the days you choose, at a chosen time. Only runs while ClaudeDo is open. If the app starts within 30 minutes of the target time, the ping fires immediately."/>
|
Text="{loc:Tr settings.prime.description}"/>
|
||||||
<ItemsControl ItemsSource="{Binding Prime.Rows}">
|
<ItemsControl ItemsSource="{Binding Prime.Rows}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate x:DataType="settings:PrimeScheduleRowViewModel">
|
<DataTemplate x:DataType="settings:PrimeScheduleRowViewModel">
|
||||||
@@ -216,13 +216,13 @@
|
|||||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto,Auto" ColumnSpacing="8">
|
<Grid ColumnDefinitions="Auto,*,Auto,Auto,Auto" ColumnSpacing="8">
|
||||||
<CheckBox Grid.Column="0" IsChecked="{Binding Enabled, Mode=TwoWay}" VerticalAlignment="Center"/>
|
<CheckBox Grid.Column="0" IsChecked="{Binding Enabled, Mode=TwoWay}" VerticalAlignment="Center"/>
|
||||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
|
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
|
||||||
<ToggleButton Classes="day-toggle" Content="Mo" IsChecked="{Binding Monday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayMo}" IsChecked="{Binding Monday, Mode=TwoWay}"/>
|
||||||
<ToggleButton Classes="day-toggle" Content="Tu" IsChecked="{Binding Tuesday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayTu}" IsChecked="{Binding Tuesday, Mode=TwoWay}"/>
|
||||||
<ToggleButton Classes="day-toggle" Content="We" IsChecked="{Binding Wednesday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayWe}" IsChecked="{Binding Wednesday, Mode=TwoWay}"/>
|
||||||
<ToggleButton Classes="day-toggle" Content="Th" IsChecked="{Binding Thursday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayTh}" IsChecked="{Binding Thursday, Mode=TwoWay}"/>
|
||||||
<ToggleButton Classes="day-toggle" Content="Fr" IsChecked="{Binding Friday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.dayFr}" IsChecked="{Binding Friday, Mode=TwoWay}"/>
|
||||||
<ToggleButton Classes="day-toggle" Content="Sa" IsChecked="{Binding Saturday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.daySa}" IsChecked="{Binding Saturday, Mode=TwoWay}"/>
|
||||||
<ToggleButton Classes="day-toggle" Content="Su" IsChecked="{Binding Sunday, Mode=TwoWay}"/>
|
<ToggleButton Classes="day-toggle" Content="{loc:Tr settings.prime.daySu}" IsChecked="{Binding Sunday, Mode=TwoWay}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TimePicker Grid.Column="2"
|
<TimePicker Grid.Column="2"
|
||||||
SelectedTime="{Binding TimeOfDay, Mode=TwoWay}"
|
SelectedTime="{Binding TimeOfDay, Mode=TwoWay}"
|
||||||
@@ -238,7 +238,7 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ItemsControl.ItemTemplate>
|
</ItemsControl.ItemTemplate>
|
||||||
</ItemsControl>
|
</ItemsControl>
|
||||||
<Button Classes="btn" Content="+ Add schedule" Command="{Binding Prime.AddScheduleCommand}" HorizontalAlignment="Left"/>
|
<Button Classes="btn" Content="{loc:Tr settings.prime.addSchedule}" Command="{Binding Prime.AddScheduleCommand}" HorizontalAlignment="Left"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="clr-namespace:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.UnfinishedPlanningModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.UnfinishedPlanningModalView"
|
||||||
x:DataType="vm:UnfinishedPlanningModalViewModel"
|
x:DataType="vm:UnfinishedPlanningModalViewModel"
|
||||||
Title="Unfinished planning session"
|
Title="{loc:Tr modals.unfinishedPlanning.windowTitle}"
|
||||||
Width="440" Height="200"
|
Width="440" Height="200"
|
||||||
CanResize="False"
|
CanResize="False"
|
||||||
WindowDecorations="None"
|
WindowDecorations="None"
|
||||||
@@ -16,13 +17,13 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="UNFINISHED PLANNING SESSION" CloseCommand="{Binding CancelCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.unfinishedPlanning.title}" CloseCommand="{Binding CancelCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||||
<Button Classes="btn" Content="Discard" Command="{Binding DiscardCommand}" MinWidth="80"/>
|
<Button Classes="btn" Content="{loc:Tr modals.unfinishedPlanning.discard}" Command="{Binding DiscardCommand}" MinWidth="80"/>
|
||||||
<Button Classes="btn" Content="Finalize" Command="{Binding FinalizeNowCommand}" MinWidth="80"/>
|
<Button Classes="btn" Content="{loc:Tr modals.unfinishedPlanning.finalize}" Command="{Binding FinalizeNowCommand}" MinWidth="80"/>
|
||||||
<Button Content="Resume" Command="{Binding ResumeCommand}" Classes="primary" MinWidth="80"/>
|
<Button Content="{loc:Tr modals.unfinishedPlanning.resume}" Command="{Binding ResumeCommand}" Classes="primary" MinWidth="80"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ctl:ModalShell.Footer>
|
</ctl:ModalShell.Footer>
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
TextTrimming="CharacterEllipsis"/>
|
TextTrimming="CharacterEllipsis"/>
|
||||||
<TextBlock Classes="body">
|
<TextBlock Classes="body">
|
||||||
<Run Text="{Binding DraftCount}"/>
|
<Run Text="{Binding DraftCount}"/>
|
||||||
<Run Text=" draft task(s) waiting to be finalized."/>
|
<Run Text="{loc:Tr modals.unfinishedPlanning.draftTasksSuffix}"/>
|
||||||
</TextBlock>
|
</TextBlock>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.WeeklyReportModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.WeeklyReportModalView"
|
||||||
x:DataType="vm:WeeklyReportModalViewModel"
|
x:DataType="vm:WeeklyReportModalViewModel"
|
||||||
Title="Weekly Report"
|
Title="{loc:Tr modals.weeklyReport.windowTitle}"
|
||||||
Width="820" Height="640"
|
Width="820" Height="640"
|
||||||
WindowDecorations="None"
|
WindowDecorations="None"
|
||||||
ExtendClientAreaToDecorationsHint="True"
|
ExtendClientAreaToDecorationsHint="True"
|
||||||
@@ -14,16 +15,16 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="WEEKLY REPORT" CloseCommand="{Binding CloseCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.weeklyReport.title}" CloseCommand="{Binding CloseCommand}">
|
||||||
<DockPanel Margin="20,16">
|
<DockPanel Margin="20,16">
|
||||||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8">
|
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8">
|
||||||
<TextBlock Classes="meta" Text="From" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Text="{loc:Tr modals.weeklyReport.from}" VerticalAlignment="Center"/>
|
||||||
<ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/>
|
<ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/>
|
||||||
<TextBlock Classes="meta" Text="To" VerticalAlignment="Center"/>
|
<TextBlock Classes="meta" Text="{loc:Tr modals.weeklyReport.to}" VerticalAlignment="Center"/>
|
||||||
<ctl:ThemedDatePicker SelectedDate="{Binding EndDate}"/>
|
<ctl:ThemedDatePicker SelectedDate="{Binding EndDate}"/>
|
||||||
<Button Classes="btn" Content="Generate" Command="{Binding GenerateCommand}"
|
<Button Classes="btn" Content="{loc:Tr modals.weeklyReport.generate}" Command="{Binding GenerateCommand}"
|
||||||
IsVisible="{Binding EmptyStateVisible}"/>
|
IsVisible="{Binding EmptyStateVisible}"/>
|
||||||
<Button Classes="btn" Content="Regenerate" Command="{Binding GenerateCommand}"
|
<Button Classes="btn" Content="{loc:Tr modals.weeklyReport.regenerate}" Command="{Binding GenerateCommand}"
|
||||||
IsVisible="{Binding HasReport}"/>
|
IsVisible="{Binding HasReport}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
@@ -31,7 +32,7 @@
|
|||||||
Text="{Binding StatusMessage}"/>
|
Text="{Binding StatusMessage}"/>
|
||||||
|
|
||||||
<TextBlock DockPanel.Dock="Top" Classes="meta" Margin="0,16"
|
<TextBlock DockPanel.Dock="Top" Classes="meta" Margin="0,16"
|
||||||
Text='No report for this range yet. Click “Generate”.'
|
Text="{loc:Tr modals.weeklyReport.emptyStateHint}"
|
||||||
IsVisible="{Binding EmptyStateVisible}"/>
|
IsVisible="{Binding EmptyStateVisible}"/>
|
||||||
|
|
||||||
<ScrollViewer IsVisible="{Binding HasReport}">
|
<ScrollViewer IsVisible="{Binding HasReport}">
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.WorkerConnectionModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.WorkerConnectionModalView"
|
||||||
x:DataType="vm:WorkerConnectionModalViewModel"
|
x:DataType="vm:WorkerConnectionModalViewModel"
|
||||||
Title="Worker not reachable"
|
Title="{loc:Tr modals.workerConnection.title}"
|
||||||
Width="520" Height="240"
|
Width="520" Height="240"
|
||||||
WindowDecorations="None"
|
WindowDecorations="None"
|
||||||
ExtendClientAreaToDecorationsHint="True"
|
ExtendClientAreaToDecorationsHint="True"
|
||||||
@@ -14,15 +15,15 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="WORKER NOT REACHABLE" CloseCommand="{Binding CloseCommand}">
|
<ctl:ModalShell Title="{loc:Tr modals.workerConnection.title}" CloseCommand="{Binding CloseCommand}">
|
||||||
<Grid RowDefinitions="*,Auto" Margin="20,16">
|
<Grid RowDefinitions="*,Auto" Margin="20,16">
|
||||||
<TextBlock Grid.Row="0" Classes="meta" TextWrapping="Wrap"
|
<TextBlock Grid.Row="0" Classes="meta" TextWrapping="Wrap"
|
||||||
Text="ClaudeDo can't reach the background worker. It is normally started automatically at logon. You can start it now, or reinstall if the problem persists."/>
|
Text="{loc:Tr modals.workerConnection.body}"/>
|
||||||
<StackPanel Grid.Row="1" Orientation="Horizontal" Spacing="8"
|
<StackPanel Grid.Row="1" Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" Margin="0,16,0,0">
|
HorizontalAlignment="Right" Margin="0,16,0,0">
|
||||||
<Button Classes="btn" Content="Dismiss" Command="{Binding CloseCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr modals.workerConnection.dismiss}" Command="{Binding CloseCommand}"/>
|
||||||
<Button Classes="btn" Content="Rerun Installer" Command="{Binding RerunInstallerCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr modals.workerConnection.rerunInstaller}" Command="{Binding RerunInstallerCommand}"/>
|
||||||
<Button Classes="btn primary" Content="Start Worker" Command="{Binding StartWorkerCommand}"/>
|
<Button Classes="btn primary" Content="{loc:Tr modals.workerConnection.startWorker}" Command="{Binding StartWorkerCommand}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</ctl:ModalShell>
|
</ctl:ModalShell>
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.WorktreeModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.WorktreeModalView"
|
||||||
x:DataType="vm:WorktreeModalViewModel"
|
x:DataType="vm:WorktreeModalViewModel"
|
||||||
Title="Worktree"
|
Title="{loc:Tr modals.worktree.title}"
|
||||||
Width="1100" Height="720"
|
Width="1100" Height="720"
|
||||||
MinWidth="640" MinHeight="400"
|
MinWidth="640" MinHeight="400"
|
||||||
WindowStartupLocation="CenterOwner"
|
WindowStartupLocation="CenterOwner"
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
PointerMoved="OnTitleBarMoved"
|
PointerMoved="OnTitleBarMoved"
|
||||||
PointerReleased="OnTitleBarReleased">
|
PointerReleased="OnTitleBarReleased">
|
||||||
<Grid ColumnDefinitions="*,Auto" Margin="14,0">
|
<Grid ColumnDefinitions="*,Auto" Margin="14,0">
|
||||||
<TextBlock Grid.Column="0" Text="Worktree" VerticalAlignment="Center"
|
<TextBlock Grid.Column="0" Text="{loc:Tr modals.worktree.title}" VerticalAlignment="Center"
|
||||||
FontFamily="{DynamicResource MonoFont}" FontSize="{StaticResource FontSizeBody}"
|
FontFamily="{DynamicResource MonoFont}" FontSize="{StaticResource FontSizeBody}"
|
||||||
Foreground="{DynamicResource TextMuteBrush}"/>
|
Foreground="{DynamicResource TextMuteBrush}"/>
|
||||||
<Button Grid.Column="1" Classes="icon-btn" Content="✕"
|
<Button Grid.Column="1" Classes="icon-btn" Content="✕"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
|
||||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Modals.WorktreesOverviewModalView"
|
x:Class="ClaudeDo.Ui.Views.Modals.WorktreesOverviewModalView"
|
||||||
x:DataType="vm:WorktreesOverviewModalViewModel"
|
x:DataType="vm:WorktreesOverviewModalViewModel"
|
||||||
Title="{Binding Title}"
|
Title="{Binding Title}"
|
||||||
@@ -22,38 +23,38 @@
|
|||||||
Tapped="OnRowTapped">
|
Tapped="OnRowTapped">
|
||||||
<Border.ContextMenu>
|
<Border.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="Show diff"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxShowDiff}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).ShowDiffCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).ShowDiffCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Open in Explorer"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxOpenInExplorer}"
|
||||||
IsEnabled="{Binding PathExistsOnDisk}"
|
IsEnabled="{Binding PathExistsOnDisk}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).OpenInExplorerCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).OpenInExplorerCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Jump to task"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxJumpToTask}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).JumpToTaskCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).JumpToTaskCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem Header="Merge…"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxMerge}"
|
||||||
IsEnabled="{Binding IsActive}"
|
IsEnabled="{Binding IsActive}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).MergeCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).MergeCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Discard"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxDiscard}"
|
||||||
IsEnabled="{Binding IsActive}"
|
IsEnabled="{Binding IsActive}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).DiscardCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).DiscardCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Keep"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxKeep}"
|
||||||
IsEnabled="{Binding IsActive}"
|
IsEnabled="{Binding IsActive}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).KeepCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).KeepCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem Header="Copy branch"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxCopyBranch}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).CopyBranchCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).CopyBranchCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<MenuItem Header="Copy path"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxCopyPath}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).CopyPathCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).CopyPathCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
<MenuItem Header="Force remove"
|
<MenuItem Header="{loc:Tr modals.worktreesOverview.ctxForceRemove}"
|
||||||
Foreground="{DynamicResource StatusErrorBrush}"
|
Foreground="{DynamicResource StatusErrorBrush}"
|
||||||
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).ForceRemoveCommand}"
|
Command="{Binding $parent[Window].((vm:WorktreesOverviewModalViewModel)DataContext).ForceRemoveCommand}"
|
||||||
CommandParameter="{Binding}"/>
|
CommandParameter="{Binding}"/>
|
||||||
@@ -66,9 +67,9 @@
|
|||||||
<TextBlock Classes="meta" Text="{Binding TaskStatus}"/>
|
<TextBlock Classes="meta" Text="{Binding TaskStatus}"/>
|
||||||
<TextBlock Classes="meta" Text="•"
|
<TextBlock Classes="meta" Text="•"
|
||||||
IsVisible="{Binding !PathExistsOnDisk}"/>
|
IsVisible="{Binding !PathExistsOnDisk}"/>
|
||||||
<TextBlock Classes="meta" Text="phantom" Foreground="{DynamicResource StatusErrorBrush}"
|
<TextBlock Classes="meta" Text="{loc:Tr modals.worktreesOverview.phantom}" Foreground="{DynamicResource StatusErrorBrush}"
|
||||||
IsVisible="{Binding !PathExistsOnDisk}"
|
IsVisible="{Binding !PathExistsOnDisk}"
|
||||||
ToolTip.Tip="Directory missing on disk"/>
|
ToolTip.Tip="{loc:Tr modals.worktreesOverview.phantomTooltip}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Border Grid.Column="1" CornerRadius="3" Padding="6,2" VerticalAlignment="Center"
|
<Border Grid.Column="1" CornerRadius="3" Padding="6,2" VerticalAlignment="Center"
|
||||||
@@ -95,8 +96,8 @@
|
|||||||
BorderThickness="0,0,0,1"
|
BorderThickness="0,0,0,1"
|
||||||
Padding="12,8">
|
Padding="12,8">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<Button Classes="btn" Content="Refresh" Command="{Binding RefreshCommand}" IsEnabled="{Binding !IsBusy}"/>
|
<Button Classes="btn" Content="{loc:Tr modals.worktreesOverview.refresh}" Command="{Binding RefreshCommand}" IsEnabled="{Binding !IsBusy}"/>
|
||||||
<Button Classes="btn" Content="Cleanup finished" Command="{Binding CleanupFinishedCommand}" IsEnabled="{Binding !IsBusy}"/>
|
<Button Classes="btn" Content="{loc:Tr modals.worktreesOverview.cleanupFinished}" Command="{Binding CleanupFinishedCommand}" IsEnabled="{Binding !IsBusy}"/>
|
||||||
<TextBlock Text="{Binding StatusMessage}" VerticalAlignment="Center" Margin="12,0,0,0"
|
<TextBlock Text="{Binding StatusMessage}" VerticalAlignment="Center" Margin="12,0,0,0"
|
||||||
Foreground="{DynamicResource TextDimBrush}"/>
|
Foreground="{DynamicResource TextDimBrush}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -107,10 +108,10 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<!-- Column headers -->
|
<!-- Column headers -->
|
||||||
<Grid ColumnDefinitions="*,90,80,80" Margin="12,0,12,4">
|
<Grid ColumnDefinitions="*,90,80,80" Margin="12,0,12,4">
|
||||||
<TextBlock Grid.Column="0" Classes="eyebrow" Text="TASK"/>
|
<TextBlock Grid.Column="0" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnTask}"/>
|
||||||
<TextBlock Grid.Column="1" Classes="eyebrow" Text="STATE"/>
|
<TextBlock Grid.Column="1" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnState}"/>
|
||||||
<TextBlock Grid.Column="2" Classes="eyebrow" Text="DIFF"/>
|
<TextBlock Grid.Column="2" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnDiff}"/>
|
||||||
<TextBlock Grid.Column="3" Classes="eyebrow" Text="AGE"/>
|
<TextBlock Grid.Column="3" Classes="eyebrow" Text="{loc:Tr modals.worktreesOverview.columnAge}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Border Height="1" Background="{DynamicResource LineBrush}" Margin="0,0,0,8"/>
|
<Border Height="1" Background="{DynamicResource LineBrush}" Margin="0,0,0,8"/>
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Planning"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Planning"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:DataType="vm:ConflictResolutionViewModel"
|
x:DataType="vm:ConflictResolutionViewModel"
|
||||||
x:Class="ClaudeDo.Ui.Views.Planning.ConflictResolutionView"
|
x:Class="ClaudeDo.Ui.Views.Planning.ConflictResolutionView"
|
||||||
Title="Merge conflict"
|
Title="{loc:Tr planning.conflict.windowTitle}"
|
||||||
Width="560" SizeToContent="Height" MinWidth="460"
|
Width="560" SizeToContent="Height" MinWidth="460"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
WindowDecorations="BorderOnly"
|
WindowDecorations="BorderOnly"
|
||||||
@@ -17,13 +18,13 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding AbortCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding AbortCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="MERGE CONFLICT" CloseCommand="{Binding AbortCommand}">
|
<ctl:ModalShell Title="{loc:Tr planning.conflict.modalTitle}" CloseCommand="{Binding AbortCommand}">
|
||||||
<ctl:ModalShell.Footer>
|
<ctl:ModalShell.Footer>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||||
<Button Classes="btn" Content="Open all in VS Code" Command="{Binding OpenInVsCodeCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr planning.conflict.openInVsCode}" Command="{Binding OpenInVsCodeCommand}"/>
|
||||||
<Button Classes="btn" Content="I've resolved — continue" Command="{Binding ContinueCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr planning.conflict.resolved}" Command="{Binding ContinueCommand}"/>
|
||||||
<Button Classes="btn" Content="Abort this merge" Command="{Binding AbortCommand}"/>
|
<Button Classes="btn" Content="{loc:Tr planning.conflict.abort}" Command="{Binding AbortCommand}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ctl:ModalShell.Footer>
|
</ctl:ModalShell.Footer>
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Planning"
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Planning"
|
||||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||||
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||||
x:Class="ClaudeDo.Ui.Views.Planning.PlanningDiffView"
|
x:Class="ClaudeDo.Ui.Views.Planning.PlanningDiffView"
|
||||||
x:DataType="vm:PlanningDiffViewModel"
|
x:DataType="vm:PlanningDiffViewModel"
|
||||||
Title="Planning — Combined diff"
|
Title="{loc:Tr planning.diff.windowTitle}"
|
||||||
Width="1100" Height="700" MinWidth="700" MinHeight="450"
|
Width="1100" Height="700" MinWidth="700" MinHeight="450"
|
||||||
CanResize="True"
|
CanResize="True"
|
||||||
WindowDecorations="BorderOnly"
|
WindowDecorations="BorderOnly"
|
||||||
@@ -17,7 +18,7 @@
|
|||||||
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
|
||||||
</Window.KeyBindings>
|
</Window.KeyBindings>
|
||||||
|
|
||||||
<ctl:ModalShell Title="PLANNING — COMBINED DIFF" CloseCommand="{Binding CloseCommand}">
|
<ctl:ModalShell Title="{loc:Tr planning.diff.modalTitle}" CloseCommand="{Binding CloseCommand}">
|
||||||
|
|
||||||
<!-- Toolbar row -->
|
<!-- Toolbar row -->
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
@@ -25,12 +26,12 @@
|
|||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Spacing="8"
|
Spacing="8"
|
||||||
Margin="8,6">
|
Margin="8,6">
|
||||||
<ToggleButton Content="Preview combined" IsChecked="{Binding IsCombinedMode}"/>
|
<ToggleButton Content="{loc:Tr planning.diff.previewCombined}" IsChecked="{Binding IsCombinedMode}"/>
|
||||||
<TextBlock Text="{Binding CombinedWarning}"
|
<TextBlock Text="{Binding CombinedWarning}"
|
||||||
Foreground="{DynamicResource BloodBrush}"
|
Foreground="{DynamicResource BloodBrush}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
IsVisible="{Binding CombinedWarning, Converter={x:Static ObjectConverters.IsNotNull}}"/>
|
IsVisible="{Binding CombinedWarning, Converter={x:Static ObjectConverters.IsNotNull}}"/>
|
||||||
<TextBlock Text="Loading…"
|
<TextBlock Text="{loc:Tr planning.diff.loading}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
IsVisible="{Binding IsLoadingCombined}"/>
|
IsVisible="{Binding IsLoadingCombined}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
Reference in New Issue
Block a user