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:
@@ -1,6 +1,7 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.AgentStripView"
|
||||
x:DataType="vm:DetailsIslandViewModel">
|
||||
<Border Classes="agent-strip"
|
||||
@@ -34,7 +35,7 @@
|
||||
Classes="icon-btn"
|
||||
Command="{Binding StopCommand}"
|
||||
IsVisible="{Binding IsRunning}"
|
||||
ToolTip.Tip="Stop agent"
|
||||
ToolTip.Tip="{loc:Tr agent.stopTip}"
|
||||
VerticalAlignment="Center">
|
||||
<PathIcon Data="{StaticResource Icon.X}" Width="12" Height="12"
|
||||
Foreground="{DynamicResource BloodBrush}"/>
|
||||
@@ -42,19 +43,19 @@
|
||||
<!-- Send to queue — only when idle -->
|
||||
<Button Grid.Column="3"
|
||||
Classes="btn accent"
|
||||
Content="Send to queue"
|
||||
Content="{loc:Tr agent.sendToQueue}"
|
||||
Command="{Binding EnqueueCommand}"
|
||||
IsVisible="{Binding IsIdle}"
|
||||
ToolTip.Tip="Queue this task for the worker to pick up"
|
||||
ToolTip.Tip="{loc:Tr agent.sendToQueueTip}"
|
||||
VerticalAlignment="Center"
|
||||
Padding="10,4"/>
|
||||
<!-- Remove from queue — only when queued -->
|
||||
<Button Grid.Column="3"
|
||||
Classes="btn"
|
||||
Content="Remove from queue"
|
||||
Content="{loc:Tr agent.removeFromQueue}"
|
||||
Command="{Binding DequeueCommand}"
|
||||
IsVisible="{Binding IsQueued}"
|
||||
ToolTip.Tip="Take this task back out of the queue"
|
||||
ToolTip.Tip="{loc:Tr agent.removeFromQueueTip}"
|
||||
VerticalAlignment="Center"
|
||||
Padding="10,4"/>
|
||||
</Grid>
|
||||
@@ -64,7 +65,7 @@
|
||||
IsVisible="{Binding WorktreePath, Converter={x:Static ObjectConverters.IsNotNull}}">
|
||||
<TextBlock Grid.Column="0"
|
||||
Classes="eyebrow"
|
||||
Text="WORKTREE"
|
||||
Text="{loc:Tr agent.worktreeLabel}"
|
||||
Foreground="{DynamicResource TextFaintBrush}"
|
||||
LetterSpacing="1.2"
|
||||
VerticalAlignment="Center"
|
||||
@@ -76,7 +77,7 @@
|
||||
VerticalAlignment="Center"/>
|
||||
<Button Grid.Column="2"
|
||||
Classes="icon-btn"
|
||||
ToolTip.Tip="Copy path"
|
||||
ToolTip.Tip="{loc:Tr agent.copyPathTip}"
|
||||
Click="OnCopyWorktreePathClick"
|
||||
VerticalAlignment="Center">
|
||||
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
|
||||
@@ -105,7 +106,7 @@
|
||||
<Grid ColumnDefinitions="Auto,Auto,Auto,*">
|
||||
<TextBlock Grid.Column="0"
|
||||
Classes="eyebrow"
|
||||
Text="DIFF"
|
||||
Text="{loc:Tr agent.diffLabel}"
|
||||
Foreground="{DynamicResource TextFaintBrush}"
|
||||
LetterSpacing="1.2"
|
||||
VerticalAlignment="Center"
|
||||
@@ -136,27 +137,27 @@
|
||||
|
||||
<!-- Action buttons -->
|
||||
<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}"
|
||||
ToolTip.Tip="Open worktree in file explorer">
|
||||
ToolTip.Tip="{loc:Tr agent.openWorktreeTip}">
|
||||
<StackPanel Orientation="Horizontal" Spacing="6" VerticalAlignment="Center">
|
||||
<PathIcon Data="{StaticResource Icon.ArrowOut}"
|
||||
Width="11" Height="11"
|
||||
Foreground="{DynamicResource TextDimBrush}"/>
|
||||
<TextBlock Text="Worktree" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{loc:Tr agent.worktreeBtn}" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Classes="btn accent"
|
||||
Content="Continue"
|
||||
Content="{loc:Tr agent.continue}"
|
||||
Command="{Binding ContinueCommand}"
|
||||
IsVisible="{Binding ShowContinue}"
|
||||
ToolTip.Tip="Resume the last session and keep going"
|
||||
ToolTip.Tip="{loc:Tr agent.continueTip}"
|
||||
Padding="10,4"/>
|
||||
<Button Classes="btn"
|
||||
Content="Reset & retry"
|
||||
Content="{loc:Tr agent.resetAndRetry}"
|
||||
Command="{Binding ResetAndRetryCommand}"
|
||||
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"/>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.DetailsIslandView"
|
||||
x:DataType="vm:DetailsIslandViewModel">
|
||||
<DockPanel>
|
||||
@@ -15,7 +16,7 @@
|
||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||
<Button Grid.Column="0" Classes="icon-btn"
|
||||
Command="{Binding DeleteTaskCommand}"
|
||||
ToolTip.Tip="Delete task"
|
||||
ToolTip.Tip="{loc:Tr details.deleteTaskTip}"
|
||||
VerticalAlignment="Center">
|
||||
<PathIcon Data="{StaticResource Icon.Trash}" Width="14" Height="14"
|
||||
Foreground="{DynamicResource BloodBrush}"/>
|
||||
@@ -27,7 +28,7 @@
|
||||
VerticalAlignment="Center"/>
|
||||
<Button Grid.Column="2" Classes="icon-btn"
|
||||
Command="{Binding CloseDetailsCommand}"
|
||||
ToolTip.Tip="Close"
|
||||
ToolTip.Tip="{loc:Tr details.closeTip}"
|
||||
VerticalAlignment="Center">
|
||||
<PathIcon Data="{StaticResource Icon.X}" Width="14" Height="14"/>
|
||||
</Button>
|
||||
@@ -52,7 +53,7 @@
|
||||
Text="{Binding TaskIdBadge}"
|
||||
Margin="0,0,0,4"
|
||||
Cursor="Hand"
|
||||
ToolTip.Tip="Copy task ID"
|
||||
ToolTip.Tip="{loc:Tr details.copyTaskIdTip}"
|
||||
Tapped="OnTaskIdTapped"/>
|
||||
<TextBox Text="{Binding EditableTitle, Mode=TwoWay}"
|
||||
FontSize="{StaticResource FontSizeTaskTitle}" FontWeight="Medium"
|
||||
@@ -67,14 +68,14 @@
|
||||
Classes="icon-btn star-btn"
|
||||
Classes.on="{Binding Task.IsStarred}"
|
||||
Command="{Binding ToggleStarCommand}"
|
||||
ToolTip.Tip="Star"
|
||||
ToolTip.Tip="{loc:Tr details.starTip}"
|
||||
VerticalAlignment="Top"
|
||||
Margin="6,0,0,0">
|
||||
<PathIcon Data="{StaticResource Icon.Star}" Width="14" Height="14"/>
|
||||
</Button>
|
||||
|
||||
<Button Grid.Column="3" Classes="icon-btn"
|
||||
ToolTip.Tip="Agent settings"
|
||||
ToolTip.Tip="{loc:Tr details.agentSettingsTip}"
|
||||
IsEnabled="{Binding IsAgentSectionEnabled}"
|
||||
VerticalAlignment="Top"
|
||||
Margin="6,0,0,0">
|
||||
@@ -82,10 +83,10 @@
|
||||
<Button.Flyout>
|
||||
<Flyout Placement="BottomEdgeAlignedRight" ShowMode="Standard">
|
||||
<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">
|
||||
<TextBlock Classes="field-label" Text="Model"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr details.modelLabel}"/>
|
||||
<ComboBox ItemsSource="{Binding TaskModelOptions}"
|
||||
SelectedItem="{Binding TaskModelSelection, Mode=TwoWay}"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
@@ -95,14 +96,14 @@
|
||||
</StackPanel>
|
||||
|
||||
<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}"
|
||||
AcceptsReturn="True" TextWrapping="Wrap" MinHeight="70"
|
||||
PlaceholderText="{Binding EffectiveSystemPromptHint}"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Spacing="2">
|
||||
<TextBlock Classes="field-label" Text="Agent file"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr details.agentFileLabel}"/>
|
||||
<ComboBox ItemsSource="{Binding TaskAgentOptions}"
|
||||
SelectedItem="{Binding TaskSelectedAgent, Mode=TwoWay}"
|
||||
HorizontalAlignment="Stretch">
|
||||
@@ -136,17 +137,17 @@
|
||||
<Border Classes="section-divider"
|
||||
IsVisible="{Binding Task.IsPlanningParent}">
|
||||
<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">
|
||||
<TextBlock Classes="field-label" Text="Merge target"/>
|
||||
<TextBlock Classes="field-label" Text="{loc:Tr details.mergeTargetLabel}"/>
|
||||
<ComboBox ItemsSource="{Binding MergeTargetBranches}"
|
||||
SelectedItem="{Binding SelectedMergeTarget, Mode=TwoWay}"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||
<Button Classes="btn" Content="Review combined diff"
|
||||
<Button Classes="btn" Content="{loc:Tr details.reviewCombinedDiff}"
|
||||
Command="{Binding ReviewCombinedDiffCommand}"/>
|
||||
<Button Classes="btn" Content="Merge all subtasks"
|
||||
<Button Classes="btn" Content="{loc:Tr details.mergeAllSubtasks}"
|
||||
IsEnabled="{Binding CanMergeAll}"
|
||||
Command="{Binding MergeAllCommand}"
|
||||
ToolTip.Tip="{Binding MergeAllDisabledReason}"/>
|
||||
@@ -161,9 +162,9 @@
|
||||
<!-- Steps section -->
|
||||
<Border Classes="section-divider">
|
||||
<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}"
|
||||
PlaceholderText="Add a step..."
|
||||
PlaceholderText="{loc:Tr details.addStepPlaceholder}"
|
||||
Padding="8"
|
||||
Background="{DynamicResource Surface2Brush}"
|
||||
BorderBrush="{DynamicResource LineBrush}"
|
||||
@@ -240,14 +241,14 @@
|
||||
<TextBlock Classes="meta"
|
||||
Text="▸"
|
||||
IsVisible="{Binding !IsDescriptionExpanded}"/>
|
||||
<TextBlock Classes="section-label" Text="DETAILS"/>
|
||||
<TextBlock Classes="section-label" Text="{loc:Tr details.detailsLabel}"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="2"
|
||||
Classes="icon-btn"
|
||||
Padding="6,2"
|
||||
Margin="0,0,4,0"
|
||||
ToolTip.Tip="Copy description to clipboard"
|
||||
ToolTip.Tip="{loc:Tr details.copyDescriptionTip}"
|
||||
IsVisible="{Binding IsDescriptionExpanded}"
|
||||
Click="OnCopyDescriptionClick">
|
||||
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
|
||||
@@ -256,17 +257,17 @@
|
||||
Classes="btn"
|
||||
Command="{Binding ToggleEditDescriptionCommand}"
|
||||
Padding="8,3"
|
||||
ToolTip.Tip="Toggle edit/preview"
|
||||
ToolTip.Tip="{loc:Tr details.toggleEditPreviewTip}"
|
||||
IsVisible="{Binding IsDescriptionEditorVisible}">
|
||||
<TextBlock Text="Preview"/>
|
||||
<TextBlock Text="{loc:Tr details.previewBtn}"/>
|
||||
</Button>
|
||||
<Button Grid.Column="3"
|
||||
Classes="btn"
|
||||
Command="{Binding ToggleEditDescriptionCommand}"
|
||||
Padding="8,3"
|
||||
ToolTip.Tip="Toggle edit/preview"
|
||||
ToolTip.Tip="{loc:Tr details.toggleEditPreviewTip}"
|
||||
IsVisible="{Binding IsDescriptionPreviewVisible}">
|
||||
<TextBlock Text="Edit"/>
|
||||
<TextBlock Text="{loc:Tr details.editBtn}"/>
|
||||
</Button>
|
||||
</Grid>
|
||||
|
||||
@@ -275,7 +276,7 @@
|
||||
TextWrapping="Wrap"
|
||||
MinHeight="80"
|
||||
MaxHeight="320"
|
||||
PlaceholderText="Add task details (markdown supported)..."
|
||||
PlaceholderText="{loc:Tr details.descriptionPlaceholder}"
|
||||
Padding="8"
|
||||
FontFamily="{DynamicResource MonoFont}"
|
||||
FontSize="{StaticResource FontSizeBody}"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:converters="using:ClaudeDo.Ui.Converters"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.ListsIslandView"
|
||||
x:DataType="vm:ListsIslandViewModel">
|
||||
<DockPanel LastChildFill="True">
|
||||
@@ -9,7 +10,7 @@
|
||||
<!-- ── Header ── -->
|
||||
<Border DockPanel.Dock="Top" Classes="island-header">
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="heading" Text="Lists"/>
|
||||
<TextBlock Classes="heading" Text="{loc:Tr lists.heading}"/>
|
||||
|
||||
<!-- Search row -->
|
||||
<Border Classes="search-wrap" Margin="0,8,0,12">
|
||||
@@ -19,10 +20,10 @@
|
||||
Foreground="{DynamicResource TextFaintBrush}"
|
||||
Margin="2,0,0,0"/>
|
||||
<TextBox Grid.Column="1" x:Name="SearchBox" Classes="search-inner"
|
||||
PlaceholderText="Search tasks…"
|
||||
PlaceholderText="{loc:Tr lists.searchPlaceholder}"
|
||||
Text="{Binding SearchText, Mode=TwoWay}"/>
|
||||
<Border Grid.Column="2" Classes="kbd" Margin="0,0,2,0">
|
||||
<TextBlock Text="Ctrl K"/>
|
||||
<TextBlock Text="{loc:Tr lists.searchKbd}"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -57,7 +58,7 @@
|
||||
<!-- More button -->
|
||||
<Button Grid.Column="2" Classes="icon-btn" VerticalAlignment="Center"
|
||||
Command="{Binding OpenSettingsCommand}"
|
||||
ToolTip.Tip="Settings">
|
||||
ToolTip.Tip="{loc:Tr lists.settingsTip}">
|
||||
<PathIcon Data="{StaticResource Icon.MoreHorizontal}"
|
||||
Width="14" Height="14"
|
||||
Foreground="{DynamicResource TextMuteBrush}"/>
|
||||
@@ -70,7 +71,7 @@
|
||||
<StackPanel Margin="6,0,6,4">
|
||||
|
||||
<!-- 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.ItemTemplate>
|
||||
<DataTemplate DataType="vm:ListNavItemViewModel">
|
||||
@@ -109,7 +110,7 @@
|
||||
</ItemsControl>
|
||||
|
||||
<!-- 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.ItemTemplate>
|
||||
<DataTemplate DataType="vm:ListNavItemViewModel">
|
||||
@@ -127,18 +128,18 @@
|
||||
DragDrop.Drop="OnListDrop">
|
||||
<Border.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Settings..."
|
||||
<MenuItem Header="{loc:Tr lists.contextSettings}"
|
||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenListSettingsCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Worktrees…"
|
||||
<MenuItem Header="{loc:Tr lists.contextWorktrees}"
|
||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenWorktreesOverviewCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<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}}"
|
||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInExplorerCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
<MenuItem Header="Open in Terminal"
|
||||
<MenuItem Header="{loc:Tr lists.contextOpenTerminal}"
|
||||
IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
|
||||
Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInTerminalCommand}"
|
||||
CommandParameter="{Binding}"/>
|
||||
@@ -191,14 +192,14 @@
|
||||
Foreground="{DynamicResource TextMuteBrush}"
|
||||
VerticalAlignment="Center"/>
|
||||
<TextBlock Classes="body"
|
||||
Text="New list"
|
||||
Text="{loc:Tr lists.newList}"
|
||||
Foreground="{DynamicResource TextMuteBrush}"
|
||||
VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="1" Classes="icon-btn" Margin="6,0,0,0"
|
||||
Command="{Binding OpenRepoImportCommand}"
|
||||
ToolTip.Tip="Add repos as lists">
|
||||
ToolTip.Tip="{loc:Tr lists.addReposTip}">
|
||||
<PathIcon Data="{StaticResource Icon.Folder}"
|
||||
Width="14" Height="14"
|
||||
Foreground="{DynamicResource TextMuteBrush}"/>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.NotesEditorView"
|
||||
x:DataType="vm:NotesEditorViewModel">
|
||||
<DockPanel Margin="16">
|
||||
@@ -9,14 +10,14 @@
|
||||
<Button Classes="btn" Content="‹" Command="{Binding PrevDayCommand}"/>
|
||||
<ctl:ThemedDatePicker SelectedDate="{Binding CurrentDate, Mode=TwoWay}"/>
|
||||
<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}"/>
|
||||
</StackPanel>
|
||||
|
||||
<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}"/>
|
||||
<TextBox PlaceholderText="New note…" Text="{Binding NewBulletText}">
|
||||
<TextBox PlaceholderText="{loc:Tr notes.newNotePlaceholder}" Text="{Binding NewBulletText}">
|
||||
<TextBox.KeyBindings>
|
||||
<KeyBinding Gesture="Enter" Command="{Binding AddBulletCommand}"/>
|
||||
</TextBox.KeyBindings>
|
||||
@@ -29,8 +30,8 @@
|
||||
<DataTemplate x:DataType="vm:NoteBulletViewModel">
|
||||
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,2" ColumnSpacing="6">
|
||||
<TextBox Grid.Column="0" Text="{Binding Text}"/>
|
||||
<Button Grid.Column="1" Classes="btn" Content="Save" Command="{Binding SaveCommand}"/>
|
||||
<Button Grid.Column="2" Classes="btn" Content="Delete" Command="{Binding DeleteCommand}"/>
|
||||
<Button Grid.Column="1" Classes="btn" Content="{loc:Tr notes.save}" Command="{Binding SaveCommand}"/>
|
||||
<Button Grid.Column="2" Classes="btn" Content="{loc:Tr notes.delete}" Command="{Binding DeleteCommand}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.SessionTerminalView"
|
||||
x:DataType="vm:DetailsIslandViewModel">
|
||||
<Border Classes="terminal" Margin="18,8,18,0">
|
||||
@@ -24,7 +25,7 @@
|
||||
Margin="0,0,8,0" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
||||
<Ellipse VerticalAlignment="Center"/>
|
||||
<TextBlock Text="LIVE" VerticalAlignment="Center"/>
|
||||
<TextBlock Text="{loc:Tr session.chipLive}" VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<!-- DONE chip -->
|
||||
@@ -33,7 +34,7 @@
|
||||
Margin="0,0,8,0" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
||||
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource MossBrush}"/>
|
||||
<TextBlock Text="DONE" VerticalAlignment="Center"
|
||||
<TextBlock Text="{loc:Tr session.chipDone}" VerticalAlignment="Center"
|
||||
Foreground="{DynamicResource MossBrush}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
@@ -43,7 +44,7 @@
|
||||
Margin="0,0,8,0" VerticalAlignment="Center">
|
||||
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
|
||||
<Ellipse VerticalAlignment="Center" Fill="{DynamicResource BloodBrush}"/>
|
||||
<TextBlock Text="FAILED" VerticalAlignment="Center"
|
||||
<TextBlock Text="{loc:Tr session.chipFailed}" VerticalAlignment="Center"
|
||||
Foreground="{DynamicResource BloodBrush}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.TaskRowView"
|
||||
x:DataType="vm:TaskRowViewModel">
|
||||
<Grid>
|
||||
@@ -32,38 +33,38 @@
|
||||
Classes.done="{Binding Done}">
|
||||
<Border.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Send to queue"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxSendToQueue}"
|
||||
IsVisible="{Binding CanSendToQueue}"
|
||||
Click="OnSendToQueueClick"/>
|
||||
<MenuItem Header="Remove from queue"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxRemoveFromQueue}"
|
||||
IsVisible="{Binding CanRemoveFromQueue}"
|
||||
Click="OnRemoveFromQueueClick"/>
|
||||
<MenuItem Header="Cancel execution"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxCancelExecution}"
|
||||
IsVisible="{Binding IsRunning}"
|
||||
Click="OnCancelExecutionClick"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Mark as">
|
||||
<MenuItem Header="Done" Tag="Done" Click="OnSetStatusClick"/>
|
||||
<MenuItem Header="Cancelled" Tag="Cancelled" Click="OnSetStatusClick"/>
|
||||
<MenuItem Header="{loc:Tr tasks.ctxMarkAs}">
|
||||
<MenuItem Header="{loc:Tr tasks.ctxMarkDone}" Tag="Done" Click="OnSetStatusClick"/>
|
||||
<MenuItem Header="{loc:Tr tasks.ctxMarkCancelled}" Tag="Cancelled" Click="OnSetStatusClick"/>
|
||||
</MenuItem>
|
||||
<Separator/>
|
||||
<MenuItem Header="Run interactively"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxRunInteractively}"
|
||||
Click="OnRunInteractivelyClick"/>
|
||||
<MenuItem Header="Open planning Session"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxOpenPlanningSession}"
|
||||
Click="OnOpenPlanningSessionClick"
|
||||
IsVisible="{Binding CanOpenPlanningSession}"/>
|
||||
<MenuItem Header="Resume planning Session"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxResumePlanningSession}"
|
||||
Click="OnResumePlanningSessionClick"
|
||||
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
||||
<MenuItem Header="Discard planning session"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxDiscardPlanningSession}"
|
||||
Click="OnDiscardPlanningSessionClick"
|
||||
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
||||
<MenuItem Header="Queue subtasks sequentially"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxQueueSubtasks}"
|
||||
Click="OnQueuePlanningSubtasksClick"
|
||||
IsVisible="{Binding CanQueuePlan}"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Schedule for..." Click="OnScheduleForClick"/>
|
||||
<MenuItem Header="Clear schedule"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxScheduleFor}" Click="OnScheduleForClick"/>
|
||||
<MenuItem Header="{loc:Tr tasks.ctxClearSchedule}"
|
||||
IsVisible="{Binding HasSchedule}"
|
||||
Click="OnClearScheduleClick"/>
|
||||
</ContextMenu>
|
||||
@@ -111,10 +112,10 @@
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4"
|
||||
VerticalAlignment="Center" Margin="4,0,0,0">
|
||||
<Border Classes="badge draft" IsVisible="{Binding IsDraft}">
|
||||
<TextBlock Text="DRAFT"/>
|
||||
<TextBlock Text="{loc:Tr tasks.badgeDraft}"/>
|
||||
</Border>
|
||||
<Border Classes="badge planned" IsVisible="{Binding IsPlanned}">
|
||||
<TextBlock Text="PLANNED"/>
|
||||
<TextBlock Text="{loc:Tr tasks.badgePlanned}"/>
|
||||
</Border>
|
||||
<Border Classes="badge"
|
||||
Classes.planning="{Binding IsPlanActive}"
|
||||
@@ -141,24 +142,24 @@
|
||||
<!-- Review actions (visible when WaitingForReview) -->
|
||||
<StackPanel Orientation="Horizontal" Spacing="4"
|
||||
IsVisible="{Binding IsWaitingForReview}">
|
||||
<Button Classes="btn" Content="Approve" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Approve — mark Done"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.approve}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.approveTip}"
|
||||
Click="OnApproveReviewClick"/>
|
||||
<Button Classes="btn" Content="Reject" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Reject with feedback and re-run"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.reject}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.rejectTip}"
|
||||
Click="OnRejectReviewClick"/>
|
||||
<Button Classes="btn" Content="Park" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Send back to Idle for manual editing"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.park}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.parkTip}"
|
||||
Click="OnParkReviewClick"/>
|
||||
<Button Classes="btn" Content="Cancel" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Cancel this task"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.cancelTip}"
|
||||
Click="OnCancelReviewClick"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Dequeue button (visible when row is Queued, or planning parent has queued subtasks) -->
|
||||
<Button Classes="icon-btn dequeue-btn"
|
||||
IsVisible="{Binding CanRemoveFromQueue}"
|
||||
ToolTip.Tip="Remove from queue"
|
||||
ToolTip.Tip="{loc:Tr tasks.removeFromQueueTip}"
|
||||
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).RemoveFromQueueCommand}"
|
||||
CommandParameter="{Binding}">
|
||||
<PathIcon Width="10" Height="10" Data="{StaticResource Icon.X}"/>
|
||||
@@ -226,10 +227,10 @@
|
||||
BorderThickness="1" CornerRadius="10"
|
||||
Padding="16" Width="300">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="title" Text="Schedule task"/>
|
||||
<TextBlock Classes="title" Text="{loc:Tr tasks.scheduleTitle}"/>
|
||||
|
||||
<StackPanel Spacing="6">
|
||||
<TextBlock Classes="eyebrow" Text="WHEN"
|
||||
<TextBlock Classes="eyebrow" Text="{loc:Tr tasks.scheduleWhen}"
|
||||
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
||||
<ctl:ThemedDatePicker x:Name="ScheduleDate" ShowTime="True"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
@@ -237,8 +238,8 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||
<Button Classes="btn" Content="Cancel" Click="OnScheduleCancelClick" MinWidth="76"/>
|
||||
<Button Content="Schedule" Classes="accent" Click="OnScheduleSetClick" MinWidth="76"/>
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" Click="OnScheduleCancelClick" MinWidth="76"/>
|
||||
<Button Content="{loc:Tr tasks.scheduleConfirm}" Classes="accent" Click="OnScheduleSetClick" MinWidth="76"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
@@ -258,18 +259,18 @@
|
||||
BorderThickness="1" CornerRadius="10"
|
||||
Padding="16" Width="320">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="title" Text="Reject & re-run"/>
|
||||
<TextBlock Classes="title" Text="{loc:Tr tasks.rejectRerunTitle}"/>
|
||||
<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"/>
|
||||
<TextBox x:Name="RejectFeedback"
|
||||
AcceptsReturn="True" TextWrapping="Wrap"
|
||||
MinHeight="80" PlaceholderText="What should the agent fix?"/>
|
||||
MinHeight="80" PlaceholderText="{loc:Tr tasks.feedbackPlaceholder}"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||
<Button Classes="btn" Content="Cancel" Click="OnRejectCancelClick" MinWidth="76"/>
|
||||
<Button Content="Re-run" Classes="accent" Click="OnRejectConfirmClick" MinWidth="76"/>
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" Click="OnRejectCancelClick" MinWidth="76"/>
|
||||
<Button Content="{loc:Tr tasks.rerun}" Classes="accent" Click="OnRejectConfirmClick" MinWidth="76"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:islands="using:ClaudeDo.Ui.Views.Islands"
|
||||
xmlns:converters="using:Avalonia.Data.Converters"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.TasksIslandView"
|
||||
x:DataType="vm:TasksIslandViewModel">
|
||||
<DockPanel LastChildFill="True">
|
||||
@@ -27,15 +28,15 @@
|
||||
IsVisible="{Binding HasStatusPill}">
|
||||
<TextBlock Text="{Binding StatusPill}"/>
|
||||
</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}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" Classes.active="{Binding IsShowingCompleted}"
|
||||
Command="{Binding ToggleShowCompletedCommand}"
|
||||
ToolTip.Tip="Show completed">
|
||||
ToolTip.Tip="{loc:Tr tasks.showCompletedTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Eye}"/>
|
||||
</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}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
@@ -50,7 +51,7 @@
|
||||
Foreground="{DynamicResource TextFaintBrush}"/>
|
||||
</Border>
|
||||
<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}"
|
||||
VerticalAlignment="Center"
|
||||
Margin="12,0,0,0">
|
||||
@@ -60,7 +61,7 @@
|
||||
</TextBox>
|
||||
<Border Grid.Column="2" Classes="kbd kbd-enter" VerticalAlignment="Center"
|
||||
IsVisible="{Binding #AddTaskBox.IsFocused}">
|
||||
<TextBlock Text="ENTER"/>
|
||||
<TextBlock Text="{loc:Tr tasks.enterKey}"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Border>
|
||||
@@ -71,7 +72,7 @@
|
||||
Margin="16,0,16,8"
|
||||
IsVisible="{Binding ShowNotesRow}"
|
||||
Command="{Binding OpenNotesCommand}"
|
||||
Content="Notes (daily notes)"/>
|
||||
Content="{loc:Tr tasks.notesPinnedRow}"/>
|
||||
|
||||
<!-- Task list -->
|
||||
<ScrollViewer>
|
||||
@@ -80,7 +81,7 @@
|
||||
<!-- OVERDUE -->
|
||||
<StackPanel IsVisible="{Binding HasOverdue}">
|
||||
<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.ItemTemplate>
|
||||
<DataTemplate DataType="vm:TaskRowViewModel">
|
||||
@@ -104,7 +105,7 @@
|
||||
<!-- TASKS -->
|
||||
<StackPanel IsVisible="{Binding HasOpen}">
|
||||
<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}"/>
|
||||
<ItemsControl ItemsSource="{Binding OpenItems}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
@@ -139,7 +140,7 @@
|
||||
Text="{Binding CompletedHeader}" VerticalAlignment="Center"/>
|
||||
<Button Grid.Column="1" Classes="icon-btn"
|
||||
Command="{Binding ClearCompletedCommand}"
|
||||
ToolTip.Tip="Clear all completed"
|
||||
ToolTip.Tip="{loc:Tr tasks.clearCompletedTip}"
|
||||
VerticalAlignment="Center">
|
||||
<PathIcon Data="{StaticResource Icon.Trash}" Width="13" Height="13"
|
||||
Foreground="{DynamicResource BloodBrush}"/>
|
||||
|
||||
Reference in New Issue
Block a user