AX Agent 메인 UI를 claw-code 축으로 전면 재배치
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- ChatWindow 메인 레이아웃을 기존 카드형 AX 틀에서 벗어나 사이드바·본문·컴포저 중심의 더 평평한 claw-code 스타일로 재정렬 - 창 기본 크기, 사이드바 폭, 상단 탭 헤더, 검색 바, 빈 상태, 컴포저 외곽선과 입력축을 다시 조정해 메시지 축과 입력축이 같은 중심선을 공유하도록 변경 - 메시지 버블, compact pill, 이전 대화 로드 카드, planning 카드의 패딩·코너·메타 밀도를 낮춰 transcript 우선 시각 언어로 통일 - README와 docs/DEVELOPMENT.md에 2026-04-05 18:30 (KST) 기준 작업 이력 및 claw-code 대비 진척율 반영 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0 / 오류 0)
This commit is contained in:
@@ -862,6 +862,11 @@ ow + toggle 시각 언어로 통일했습니다.
|
||||
- 같은 변경에서 `Paused/Resumed` 실행 이벤트는 `debug`가 아닐 때 본문 타임라인에 기본 노출되지 않게 줄여 Cowork/Code 실행 중 시각적 노이즈를 더 낮췄습니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 18:20 (KST)
|
||||
- AX Agent 메인 UI도 `claw-code` 기준으로 한 번 더 크게 재배치했습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 창 기본 크기, 사이드바 폭, 상단 헤더, 탭 그룹, 본문 스크롤 축, 빈 상태, 컴포저 외곽선과 입력부를 평평한 transcript 중심 구조로 다시 정리했고, 장식성 그림자와 두꺼운 카드 느낌을 더 많이 걷어냈습니다.
|
||||
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 메시지 버블, assistant 헤더, 실행 요약 pill, 이전 대화 로드 카드, 계획 카드의 라운드/패딩/메타 밀도를 전반적으로 줄이고, 반응형 폭 계산도 `message 960 / composer 900` 축으로 다시 맞춰 창이 줄어들 때 `claw-code`처럼 더 자연스럽게 따라가도록 조정했습니다.
|
||||
- 현재 `claw-code` 대비 추정 진척율은 핵심 엔진 `88%`, 채팅 메인 UI `94%`, Cowork/Code 상태 UX `89%`, 내부 설정 연결 `88%`, 전체 AX Agent `92%` 정도입니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 18:30 (KST)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4621,3 +4621,9 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
|
||||
- 같은 변경에서 `AddAgentEventBanner(...)`는 `Paused/Resumed`를 `debug`가 아닐 때 기본 타임라인에 그리지 않게 바꿔 Cowork/Code 실행 중 흔한 상태 전환 배너 노출을 더 줄였습니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 18:20 (KST)
|
||||
- AX Agent 메인 UI도 `claw-code` 기준으로 전면 재정비했습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 창 기본 크기, 사이드바 폭, 상단 탭 헤더, 검색 바, 메시지 스크롤 축, 빈 상태, 컴포저를 더 평평하고 밀도 높은 구조로 다시 잡았고, 이전 카드형 장식과 큰 코너/그림자를 한 단계 더 걷어냈습니다.
|
||||
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 사용자/assistant 버블, assistant 헤더, compact pill, 이전 대화 로드 카드, planning 카드의 패딩/메타/폰트와 여백을 다시 줄여 transcript 우선 구조로 맞췄습니다. `UpdateResponsiveChatLayout()`도 `message 960 / composer 900` 축으로 재설정해 창 축소·확대 시 본문과 입력축이 더 같은 중심선을 공유하도록 바꿨습니다.
|
||||
- 같은 변경에서 사이드바 열림 폭은 `220`, 최소 폭은 `168`로 다시 줄여 `claw-code`처럼 좌측 내비가 본문을 덜 먹도록 조정했습니다.
|
||||
- 현재 `claw-code` 대비 추정 진척율은 핵심 엔진 `88%`, 채팅 메인 UI `94%`, Cowork/Code 상태 UX `89%`, 내부 설정 연결 `88%`, 전체 AX Agent `92%` 정도로 봅니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 18:30 (KST)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
|
||||
Title="AX Copilot — AX Agent"
|
||||
Width="1100" Height="760"
|
||||
MinWidth="700" MinHeight="520"
|
||||
Width="1180" Height="820"
|
||||
MinWidth="780" MinHeight="560"
|
||||
WindowStyle="None"
|
||||
UseLayoutRounding="True"
|
||||
SnapsToDevicePixels="True"
|
||||
@@ -27,12 +27,12 @@
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="Cursor" Value="Hand"/>
|
||||
<Setter Property="Padding" Value="8,6"/>
|
||||
<Setter Property="Padding" Value="8,5"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="Bd" Background="{TemplateBinding Background}"
|
||||
CornerRadius="8" Padding="{TemplateBinding Padding}"
|
||||
CornerRadius="6" Padding="{TemplateBinding Padding}"
|
||||
Opacity="1">
|
||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
@@ -53,15 +53,15 @@
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="Cursor" Value="Hand"/>
|
||||
<Setter Property="Width" Value="40"/>
|
||||
<Setter Property="Height" Value="40"/>
|
||||
<Setter Property="Margin" Value="2,0,0,0"/>
|
||||
<Setter Property="Width" Value="34"/>
|
||||
<Setter Property="Height" Value="34"/>
|
||||
<Setter Property="Margin" Value="1,0,0,0"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="Bd"
|
||||
Background="{TemplateBinding Background}"
|
||||
CornerRadius="8"
|
||||
CornerRadius="6"
|
||||
Opacity="1"
|
||||
RenderTransformOrigin="0.5,0.5">
|
||||
<Border.RenderTransform>
|
||||
@@ -174,15 +174,15 @@
|
||||
<!-- 탭 버튼 -->
|
||||
<Style x:Key="TopTabBtn" TargetType="RadioButton">
|
||||
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
|
||||
<Setter Property="FontSize" Value="11.5"/>
|
||||
<Setter Property="FontSize" Value="11"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="Cursor" Value="Hand"/>
|
||||
<Setter Property="Padding" Value="14,4"/>
|
||||
<Setter Property="Padding" Value="13,4"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="RadioButton">
|
||||
<Border x:Name="Bd" Background="Transparent"
|
||||
CornerRadius="6" Padding="{TemplateBinding Padding}">
|
||||
CornerRadius="999" Padding="{TemplateBinding Padding}">
|
||||
<ContentPresenter x:Name="Cp" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
@@ -406,7 +406,7 @@
|
||||
<!-- 축소 아이콘 바 (사이드바 닫힘 시 표시) -->
|
||||
<ColumnDefinition x:Name="IconBarColumn" Width="0"/>
|
||||
<!-- 사이드바 (열림 시 표시) -->
|
||||
<ColumnDefinition x:Name="SidebarColumn" Width="236" MinWidth="0"/>
|
||||
<ColumnDefinition x:Name="SidebarColumn" Width="220" MinWidth="0"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<!-- 미리보기 스플리터 -->
|
||||
<ColumnDefinition x:Name="SplitterColumn" Width="0"/>
|
||||
@@ -422,9 +422,9 @@
|
||||
Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="44"/>
|
||||
<RowDefinition Height="40"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="44"/>
|
||||
<RowDefinition Height="40"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 상단 아이콘들 -->
|
||||
@@ -472,38 +472,31 @@
|
||||
<!-- 좌측: 사이드바 -->
|
||||
<!-- ══════════════════════════════════════════════════════ -->
|
||||
<Border x:Name="SidebarPanel" Grid.Column="1"
|
||||
Background="{DynamicResource LauncherBackground}"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="0,0,1,0">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="40"/>
|
||||
<RowDefinition Height="36"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="46"/>
|
||||
<RowDefinition Height="42"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 헤더 -->
|
||||
<Grid Grid.Row="0" Margin="10,0">
|
||||
<Grid Grid.Row="0" Margin="12,0,12,0">
|
||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<Border Background="{DynamicResource HintBackground}" CornerRadius="5"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1"
|
||||
Width="18" Height="18">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="9.5"
|
||||
Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<TextBlock Text="AX Agent" FontSize="11.5" FontWeight="SemiBold"
|
||||
<TextBlock Text="AX Agent" FontSize="11" FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource PrimaryText}"
|
||||
VerticalAlignment="Center" Margin="7,0,0,0"/>
|
||||
VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- 상단 액션 -->
|
||||
<Grid Grid.Row="1" Margin="10,1,10,5">
|
||||
<Grid Grid.Row="1" Margin="12,2,12,6">
|
||||
<StackPanel>
|
||||
<Border x:Name="SidebarNewChatTrigger"
|
||||
Background="Transparent"
|
||||
@@ -643,7 +636,7 @@
|
||||
</Grid>
|
||||
|
||||
<!-- 상단 필터 드롭다운 -->
|
||||
<Border Grid.Row="2" Margin="10,0,10,3">
|
||||
<Border Grid.Row="2" Margin="12,0,12,4">
|
||||
<Button x:Name="BtnCategoryDrop" Style="{StaticResource GhostBtn}"
|
||||
HorizontalAlignment="Stretch" Padding="7,3.5"
|
||||
Click="BtnCategoryDrop_Click">
|
||||
@@ -666,7 +659,7 @@
|
||||
</Border>
|
||||
|
||||
<!-- 탭별 좌측 메뉴 -->
|
||||
<Border Grid.Row="3" Margin="10,0,10,5"
|
||||
<Border Grid.Row="3" Margin="12,0,12,6"
|
||||
Background="Transparent"
|
||||
BorderBrush="Transparent"
|
||||
BorderThickness="0"
|
||||
@@ -837,13 +830,13 @@
|
||||
<!-- ══════════════════════════════════════════════════════ -->
|
||||
<Grid Grid.Column="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="46"/>
|
||||
<RowDefinition Height="42"/>
|
||||
<RowDefinition Height="Auto"/> <!-- 서브 바: 제목 + 프리뷰 -->
|
||||
<RowDefinition Height="Auto"/> <!-- 스티키 진행률 바 -->
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/> <!-- 입력 바 + Popup들 -->
|
||||
<RowDefinition Height="Auto"/> <!-- 파일 탐색기 -->
|
||||
<RowDefinition Height="Auto"/> <!-- 상태바 -->
|
||||
<RowDefinition Height="30"/> <!-- 상태바 -->
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- ── 서브 바: 제목 + 프리뷰 버튼 (AX Agent 스타일) ── -->
|
||||
@@ -1026,11 +1019,11 @@
|
||||
<StackPanel Grid.Column="0"
|
||||
Orientation="Horizontal"
|
||||
VerticalAlignment="Center"
|
||||
Margin="46,0,0,0"
|
||||
Margin="42,0,0,0"
|
||||
Visibility="Collapsed">
|
||||
<TextBlock x:Name="CurrentTabTitle"
|
||||
Text="AX Agent"
|
||||
FontSize="13"
|
||||
FontSize="12"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource PrimaryText}"/>
|
||||
</StackPanel>
|
||||
@@ -1039,9 +1032,9 @@
|
||||
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"
|
||||
Width="28"
|
||||
Height="28"
|
||||
Background="{DynamicResource HintBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1"
|
||||
Background="Transparent"
|
||||
BorderBrush="Transparent"
|
||||
BorderThickness="0"
|
||||
Cursor="Hand"
|
||||
Click="BtnToggleSidebar_Click" ToolTip="사이드바 열기/닫기"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
@@ -1051,7 +1044,7 @@
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}"
|
||||
CornerRadius="7">
|
||||
CornerRadius="6">
|
||||
<Grid Width="28" Height="28">
|
||||
<StackPanel HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center">
|
||||
@@ -1094,8 +1087,10 @@
|
||||
<!-- 중앙: 탭 메뉴 -->
|
||||
<Border Grid.Column="1"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
Background="{DynamicResource HintBackground}"
|
||||
CornerRadius="9" Padding="2.5"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1"
|
||||
CornerRadius="999" Padding="2"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<RadioButton x:Name="TabChat" Content="Chat" Style="{StaticResource TopTabBtn}"
|
||||
@@ -1113,7 +1108,7 @@
|
||||
<!-- 우: 최소화 + 최대화 + 닫기 -->
|
||||
<StackPanel Grid.Column="2"
|
||||
Orientation="Horizontal" HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
VerticalAlignment="Center" Margin="0,0,4,0"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<Button Style="{StaticResource TitleBarActionButton}" Click="BtnMinimize_Click" ToolTip="최소화">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="12"
|
||||
@@ -1134,9 +1129,9 @@
|
||||
<!-- ── 메시지 내 검색 바 (Ctrl+F) ── -->
|
||||
<Border x:Name="MessageSearchBar" Grid.Row="3" Visibility="Collapsed"
|
||||
Panel.ZIndex="5" VerticalAlignment="Top"
|
||||
Background="{DynamicResource HintBackground}"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,0,0,1"
|
||||
Padding="12,6" Margin="40,0,40,0" CornerRadius="0,0,10,10">
|
||||
Padding="10,5" Margin="28,0,28,0" CornerRadius="0,0,8,8">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
@@ -1181,10 +1176,10 @@
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
Background="{DynamicResource LauncherBackground}"
|
||||
Padding="18,10,18,6">
|
||||
Padding="24,12,24,8">
|
||||
<StackPanel x:Name="MessagePanel"
|
||||
Margin="0,0,0,12"
|
||||
MaxWidth="880"
|
||||
Margin="0,0,0,8"
|
||||
MaxWidth="960"
|
||||
HorizontalAlignment="Center">
|
||||
<StackPanel.RenderTransform>
|
||||
<TranslateTransform/>
|
||||
@@ -1196,8 +1191,8 @@
|
||||
<Grid x:Name="EmptyState" Grid.Row="3"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Center"
|
||||
MaxWidth="840"
|
||||
Margin="18,8,18,8">
|
||||
MaxWidth="960"
|
||||
Margin="24,10,24,12">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="16"/>
|
||||
@@ -1208,31 +1203,29 @@
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Top"
|
||||
Margin="0,10,0,2">
|
||||
<Border x:Name="EmptyIcon" CornerRadius="14" Width="44" Height="44"
|
||||
HorizontalAlignment="Center" Margin="0,0,0,12"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="22"
|
||||
<Border x:Name="EmptyIcon" CornerRadius="12" Width="36" Height="36"
|
||||
HorizontalAlignment="Center" Margin="0,0,0,10"
|
||||
Background="{DynamicResource HintBackground}">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="18"
|
||||
Foreground="{DynamicResource AccentColor}"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
|
||||
<TextBlock x:Name="EmptyStateTitle" Text="작업을 시작하세요" FontSize="18" FontWeight="SemiBold"
|
||||
<TextBlock x:Name="EmptyStateTitle" Text="작업을 시작하세요" FontSize="16" FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource PrimaryText}" HorizontalAlignment="Center"/>
|
||||
<TextBlock x:Name="EmptyStateDesc" Text="프롬프트를 입력하거나 아래 작업 유형을 선택하면 됩니다"
|
||||
FontSize="11.5" Foreground="{DynamicResource SecondaryText}"
|
||||
FontSize="11" Foreground="{DynamicResource SecondaryText}"
|
||||
HorizontalAlignment="Center"
|
||||
TextAlignment="Center"
|
||||
Width="320"
|
||||
Margin="0,6,0,0"/>
|
||||
Width="340"
|
||||
Margin="0,5,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<ScrollViewer x:Name="TopicPresetScrollViewer"
|
||||
Grid.Row="2"
|
||||
VerticalScrollBarVisibility="Disabled"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
MaxHeight="376"
|
||||
MaxHeight="360"
|
||||
Margin="0"
|
||||
Padding="0,2,0,0">
|
||||
<!-- 대화 주제 버튼 (프리셋에서 동적 생성) -->
|
||||
@@ -1560,23 +1553,20 @@
|
||||
|
||||
<!-- ── 입력 바 ── -->
|
||||
<Border x:Name="ComposerShell" Grid.Row="4"
|
||||
Margin="18,0,18,14"
|
||||
Margin="24,0,24,12"
|
||||
Width="Auto"
|
||||
MaxWidth="820"
|
||||
MaxWidth="900"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Bottom">
|
||||
<StackPanel HorizontalAlignment="Stretch">
|
||||
<Border x:Name="DraftPreviewCard"
|
||||
Visibility="Collapsed"
|
||||
Background="{DynamicResource LauncherBackground}"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1"
|
||||
CornerRadius="12"
|
||||
Padding="9,7,9,7"
|
||||
Margin="0,0,0,5">
|
||||
<Border.Effect>
|
||||
<DropShadowEffect BlurRadius="10" ShadowDepth="0" Opacity="0.05"/>
|
||||
</Border.Effect>
|
||||
CornerRadius="10"
|
||||
Padding="8,6,8,6"
|
||||
Margin="0,0,0,4">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@@ -1627,9 +1617,9 @@
|
||||
<!-- 무지개 글로우 외부 테두리 (메시지 전송 시 애니메이션) -->
|
||||
<StackPanel x:Name="DraftQueuePanel"
|
||||
Visibility="Collapsed"
|
||||
Margin="0,0,0,8"/>
|
||||
Margin="0,0,0,6"/>
|
||||
<Border x:Name="InputGlowBorder" CornerRadius="14" Opacity="0"
|
||||
Margin="-3" IsHitTestVisible="False">
|
||||
Margin="-1" IsHitTestVisible="False">
|
||||
<Border.BorderBrush>
|
||||
<LinearGradientBrush x:Name="RainbowBrush" StartPoint="0,0" EndPoint="1,1">
|
||||
<GradientStop Color="#FF6B6B" Offset="0.0"/>
|
||||
@@ -1642,20 +1632,17 @@
|
||||
</LinearGradientBrush>
|
||||
</Border.BorderBrush>
|
||||
<Border.BorderThickness>
|
||||
<Thickness>3</Thickness>
|
||||
<Thickness>1.5</Thickness>
|
||||
</Border.BorderThickness>
|
||||
<Border.Effect>
|
||||
<BlurEffect Radius="6"/>
|
||||
<BlurEffect Radius="2"/>
|
||||
</Border.Effect>
|
||||
</Border>
|
||||
<!-- 실제 입력 영역 -->
|
||||
<Border x:Name="InputBorder"
|
||||
Background="{DynamicResource LauncherBackground}"
|
||||
CornerRadius="9" Padding="4"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
CornerRadius="12" Padding="3"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
|
||||
<Border.Effect>
|
||||
<DropShadowEffect BlurRadius="10" ShadowDepth="0" Opacity="0.04"/>
|
||||
</Border.Effect>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
@@ -1665,7 +1652,7 @@
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Row 0: 모델 셀렉터 + 템플릿 버튼 -->
|
||||
<Grid Grid.Row="0" Margin="1,0,1,2">
|
||||
<Grid Grid.Row="0" Margin="3,1,3,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@@ -1677,7 +1664,7 @@
|
||||
HorizontalAlignment="Left"
|
||||
Margin="0"
|
||||
MinHeight="24"
|
||||
Padding="7,2"
|
||||
Padding="6,2"
|
||||
Click="BtnModelSelector_Click"
|
||||
ToolTip="모델/추론 빠른 설정"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
@@ -1697,9 +1684,9 @@
|
||||
</Button>
|
||||
<Border x:Name="TokenUsageCard"
|
||||
Grid.Column="2"
|
||||
Margin="4,0,0,0"
|
||||
Margin="6,0,0,0"
|
||||
Padding="4,2"
|
||||
CornerRadius="7"
|
||||
CornerRadius="999"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
@@ -1776,8 +1763,8 @@
|
||||
HorizontalAlignment="Right"
|
||||
Margin="0"
|
||||
MinHeight="24"
|
||||
MinWidth="58"
|
||||
Padding="7,2"
|
||||
MinWidth="56"
|
||||
Padding="6,2"
|
||||
Click="BtnTemplateSelector_Click"
|
||||
ToolTip="프롬프트 템플릿"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
@@ -1954,7 +1941,7 @@
|
||||
PreviewKeyDown="InputBox_PreviewKeyDown"
|
||||
TextChanged="InputBox_TextChanged"
|
||||
TextWrapping="Wrap"
|
||||
MinHeight="36" MaxHeight="144"
|
||||
MinHeight="40" MaxHeight="148"
|
||||
VerticalScrollBarVisibility="Auto"/>
|
||||
<!-- 워터마크 (프롬프트 카드 안내문구) -->
|
||||
<TextBlock x:Name="InputWatermark"
|
||||
@@ -1988,7 +1975,7 @@
|
||||
|
||||
<!-- 파일 첨부 -->
|
||||
<Button x:Name="BtnAttach" Style="{StaticResource GhostBtn}" Grid.Column="1"
|
||||
Width="32" Height="32" Margin="0,0,4,0" VerticalAlignment="Bottom"
|
||||
Width="32" Height="32" Margin="0,0,6,0" VerticalAlignment="Bottom"
|
||||
Click="BtnAttach_Click" ToolTip="파일 첨부"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True"
|
||||
AllowDrop="True">
|
||||
@@ -2008,8 +1995,8 @@
|
||||
|
||||
<!-- 일시정지 -->
|
||||
<Border x:Name="BtnPause" Grid.Column="3"
|
||||
Width="30" Height="30" Margin="0,0,4,0"
|
||||
CornerRadius="8" Cursor="Hand"
|
||||
Width="30" Height="30" Margin="0,0,6,0"
|
||||
CornerRadius="10" Cursor="Hand"
|
||||
Background="{DynamicResource ItemHoverBackground}" Visibility="Collapsed"
|
||||
VerticalAlignment="Bottom"
|
||||
MouseLeftButtonUp="BtnPause_Click"
|
||||
@@ -2022,13 +2009,13 @@
|
||||
|
||||
<!-- 중지/전송 -->
|
||||
<Button x:Name="BtnStop" Grid.Column="3"
|
||||
Width="36" Height="36" Margin="4,0,4,0"
|
||||
Width="36" Height="36" Margin="6,0,6,0"
|
||||
Cursor="Hand" Click="BtnStop_Click"
|
||||
VerticalAlignment="Bottom" Visibility="Collapsed"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<Button.Template>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border Background="#DC2626" CornerRadius="18">
|
||||
<Border Background="#DC2626" CornerRadius="12">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets"
|
||||
FontSize="13" Foreground="White"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
@@ -2037,13 +2024,13 @@
|
||||
</Button.Template>
|
||||
</Button>
|
||||
<Button x:Name="BtnSend" Grid.Column="4"
|
||||
Width="38" Height="38" Margin="8,0,4,0"
|
||||
Width="38" Height="38" Margin="6,0,2,0"
|
||||
Cursor="Hand" Click="BtnSend_Click"
|
||||
VerticalAlignment="Bottom">
|
||||
<Button.Template>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="Bd" Background="{DynamicResource AccentColor}"
|
||||
CornerRadius="19">
|
||||
CornerRadius="12">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets"
|
||||
FontSize="13" Foreground="White"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
|
||||
@@ -2879,12 +2879,12 @@ public partial class ChatWindow : Window
|
||||
|
||||
if (animated)
|
||||
{
|
||||
AnimateSidebar(0, 248, () => SidebarColumn.MinWidth = 184);
|
||||
AnimateSidebar(0, 220, () => SidebarColumn.MinWidth = 168);
|
||||
}
|
||||
else
|
||||
{
|
||||
SidebarColumn.MinWidth = 184;
|
||||
SidebarColumn.Width = new GridLength(248);
|
||||
SidebarColumn.MinWidth = 168;
|
||||
SidebarColumn.Width = new GridLength(220);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -4161,7 +4161,7 @@ public partial class ChatWindow : Window
|
||||
Background = Brushes.Transparent,
|
||||
BorderBrush = borderBrush,
|
||||
BorderThickness = new Thickness(1),
|
||||
Padding = new Thickness(8, 4, 8, 4),
|
||||
Padding = new Thickness(7, 3, 7, 3),
|
||||
Cursor = System.Windows.Input.Cursors.Hand,
|
||||
Foreground = primaryText,
|
||||
HorizontalAlignment = HorizontalAlignment.Center,
|
||||
@@ -4176,17 +4176,16 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
Text = "\uE70D",
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 9,
|
||||
FontSize = 8,
|
||||
Foreground = secondaryText,
|
||||
Margin = new Thickness(0, 0, 5, 0),
|
||||
Margin = new Thickness(0, 0, 4, 0),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
},
|
||||
new TextBlock
|
||||
{
|
||||
Text = $"이전 대화 {hiddenCount:N0}개",
|
||||
FontSize = 10,
|
||||
FontWeight = FontWeights.SemiBold,
|
||||
Foreground = primaryText,
|
||||
FontSize = 9.25,
|
||||
Foreground = secondaryText,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
}
|
||||
}
|
||||
@@ -4201,8 +4200,8 @@ public partial class ChatWindow : Window
|
||||
|
||||
return new Border
|
||||
{
|
||||
CornerRadius = new CornerRadius(12),
|
||||
Margin = new Thickness(0, 2, 0, 10),
|
||||
CornerRadius = new CornerRadius(10),
|
||||
Margin = new Thickness(0, 2, 0, 8),
|
||||
Padding = new Thickness(0),
|
||||
Background = Brushes.Transparent,
|
||||
BorderBrush = Brushes.Transparent,
|
||||
@@ -4332,12 +4331,12 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
return new Border
|
||||
{
|
||||
Background = hintBg,
|
||||
BorderBrush = borderBrush,
|
||||
BorderThickness = new Thickness(1),
|
||||
Background = Brushes.Transparent,
|
||||
BorderBrush = Brushes.Transparent,
|
||||
BorderThickness = new Thickness(0),
|
||||
CornerRadius = new CornerRadius(999),
|
||||
Padding = new Thickness(8, 4, 8, 4),
|
||||
Margin = new Thickness(10, 3, 170, 3),
|
||||
Padding = new Thickness(6, 2, 6, 2),
|
||||
Margin = new Thickness(8, 2, 220, 2),
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
Child = new StackPanel
|
||||
{
|
||||
@@ -4348,16 +4347,16 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
Text = "\uE9CE",
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 9,
|
||||
FontSize = 8,
|
||||
Foreground = accentBrush,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
},
|
||||
new TextBlock
|
||||
{
|
||||
Text = summary,
|
||||
FontSize = 9.5,
|
||||
FontSize = 8.75,
|
||||
Foreground = secondaryText,
|
||||
Margin = new Thickness(5, 0, 0, 0),
|
||||
Margin = new Thickness(4, 0, 0, 0),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
}
|
||||
}
|
||||
@@ -4381,12 +4380,12 @@ public partial class ChatWindow : Window
|
||||
|
||||
if (isUser)
|
||||
{
|
||||
// 사용자: 우측 정렬, 얇고 단정한 카드
|
||||
// 사용자: claw-code 쪽처럼 더 얇은 transcript 버블
|
||||
var wrapper = new StackPanel
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Right,
|
||||
MaxWidth = GetMessageMaxWidth(),
|
||||
Margin = new Thickness(208, 2, 12, 2),
|
||||
Margin = new Thickness(240, 3, 10, 3),
|
||||
};
|
||||
|
||||
var bubble = new Border
|
||||
@@ -4394,16 +4393,16 @@ public partial class ChatWindow : Window
|
||||
Background = userBubbleBg,
|
||||
BorderBrush = borderBrush,
|
||||
BorderThickness = new Thickness(1),
|
||||
CornerRadius = new CornerRadius(11),
|
||||
Padding = new Thickness(10, 6.5, 10, 6.5),
|
||||
CornerRadius = new CornerRadius(9),
|
||||
Padding = new Thickness(11, 7, 11, 7),
|
||||
Child = new TextBlock
|
||||
{
|
||||
Text = content,
|
||||
TextAlignment = TextAlignment.Left,
|
||||
FontSize = 11.25,
|
||||
FontSize = 12,
|
||||
Foreground = primaryText,
|
||||
TextWrapping = TextWrapping.Wrap,
|
||||
LineHeight = 17.5,
|
||||
LineHeight = 18,
|
||||
}
|
||||
};
|
||||
wrapper.Children.Add(bubble);
|
||||
@@ -4414,7 +4413,7 @@ public partial class ChatWindow : Window
|
||||
Orientation = Orientation.Horizontal,
|
||||
HorizontalAlignment = HorizontalAlignment.Right,
|
||||
Opacity = 0,
|
||||
Margin = new Thickness(0, 1, 0, 0),
|
||||
Margin = new Thickness(0, 2, 0, 0),
|
||||
};
|
||||
var capturedUserContent = content;
|
||||
var userBtnColor = secondaryText;
|
||||
@@ -4431,7 +4430,7 @@ public partial class ChatWindow : Window
|
||||
userBottomBar.Children.Add(new TextBlock
|
||||
{
|
||||
Text = timestamp.ToString("HH:mm"),
|
||||
FontSize = 7.5, Opacity = 0.36,
|
||||
FontSize = 8, Opacity = 0.34,
|
||||
Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray,
|
||||
HorizontalAlignment = HorizontalAlignment.Right,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
@@ -4464,24 +4463,24 @@ public partial class ChatWindow : Window
|
||||
return;
|
||||
}
|
||||
|
||||
// 어시스턴트: 좌측 정렬, 정돈된 카드
|
||||
// 어시스턴트: 카드보다 transcript 행에 가까운 스타일
|
||||
var container = new StackPanel
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
MaxWidth = GetMessageMaxWidth(),
|
||||
Margin = new Thickness(4, 2, 178, 2)
|
||||
Margin = new Thickness(2, 4, 210, 4)
|
||||
};
|
||||
if (animate) ApplyMessageEntryAnimation(container);
|
||||
|
||||
// AI 에이전트 이름 + 아이콘
|
||||
var (agentName, _, _) = GetAgentIdentity();
|
||||
var headerSp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(2, 0, 0, 0.5) };
|
||||
var headerSp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(2, 0, 0, 1.5) };
|
||||
|
||||
var iconBlock = new TextBlock
|
||||
{
|
||||
Text = "\uE945",
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 6.5,
|
||||
FontSize = 7.5,
|
||||
Foreground = secondaryText,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
};
|
||||
@@ -4490,10 +4489,10 @@ public partial class ChatWindow : Window
|
||||
headerSp.Children.Add(new TextBlock
|
||||
{
|
||||
Text = agentName,
|
||||
FontSize = 7.5,
|
||||
FontWeight = FontWeights.Normal,
|
||||
FontSize = 8.5,
|
||||
FontWeight = FontWeights.Medium,
|
||||
Foreground = secondaryText,
|
||||
Margin = new Thickness(2.5, 0, 0, 0),
|
||||
Margin = new Thickness(4, 0, 0, 0),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
});
|
||||
container.Children.Add(headerSp);
|
||||
@@ -4503,8 +4502,8 @@ public partial class ChatWindow : Window
|
||||
Background = assistantBubbleBg,
|
||||
BorderBrush = borderBrush,
|
||||
BorderThickness = new Thickness(1),
|
||||
CornerRadius = new CornerRadius(11),
|
||||
Padding = new Thickness(10, 6.5, 10, 6.5),
|
||||
CornerRadius = new CornerRadius(9),
|
||||
Padding = new Thickness(11, 8, 11, 8),
|
||||
};
|
||||
var contentStack = new StackPanel();
|
||||
|
||||
@@ -4633,7 +4632,7 @@ public partial class ChatWindow : Window
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
Margin = new Thickness(2, 0.5, 0, 0),
|
||||
Margin = new Thickness(2, 2, 0, 0),
|
||||
Opacity = 0
|
||||
};
|
||||
|
||||
@@ -4653,7 +4652,7 @@ public partial class ChatWindow : Window
|
||||
actionBar.Children.Add(new TextBlock
|
||||
{
|
||||
Text = aiTimestamp.ToString("HH:mm"),
|
||||
FontSize = 7.75, Opacity = 0.38,
|
||||
FontSize = 8, Opacity = 0.34,
|
||||
Foreground = btnColor,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = new Thickness(3, 0, 0, 0),
|
||||
@@ -9413,17 +9412,18 @@ public partial class ChatWindow : Window
|
||||
var primaryText = TryFindResource("PrimaryText") as Brush ?? Brushes.Black;
|
||||
var secondaryText = TryFindResource("SecondaryText") as Brush ?? Brushes.DimGray;
|
||||
var itemBg = TryFindResource("ItemBackground") as Brush ?? BrushFromHex("#FFFFFF");
|
||||
var hintBg = TryFindResource("HintBackground") as Brush ?? BrushFromHex("#F8FAFC");
|
||||
var borderBrush = TryFindResource("BorderColor") as Brush ?? BrushFromHex("#E2E8F0");
|
||||
var accentBrush = TryFindResource("AccentColor") as Brush ?? BrushFromHex("#4B5EFC");
|
||||
|
||||
var card = new Border
|
||||
{
|
||||
Background = itemBg,
|
||||
Background = hintBg,
|
||||
BorderBrush = borderBrush,
|
||||
BorderThickness = new Thickness(1),
|
||||
CornerRadius = new CornerRadius(14),
|
||||
Padding = new Thickness(12, 10, 12, 10),
|
||||
Margin = new Thickness(14, 4, 180, 8),
|
||||
CornerRadius = new CornerRadius(10),
|
||||
Padding = new Thickness(10, 8, 10, 8),
|
||||
Margin = new Thickness(8, 3, 228, 6),
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
MaxWidth = GetMessageMaxWidth(),
|
||||
};
|
||||
@@ -9431,20 +9431,20 @@ public partial class ChatWindow : Window
|
||||
var sp = new StackPanel();
|
||||
|
||||
// 헤더
|
||||
var header = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 0, 0, 5) };
|
||||
var header = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 0, 0, 4) };
|
||||
header.Children.Add(new TextBlock
|
||||
{
|
||||
Text = "\uE9D5", // plan icon
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 10.5,
|
||||
FontSize = 9,
|
||||
Foreground = accentBrush,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = new Thickness(0, 0, 5, 0),
|
||||
Margin = new Thickness(0, 0, 4, 0),
|
||||
});
|
||||
header.Children.Add(new TextBlock
|
||||
{
|
||||
Text = $"작업 {steps.Count}개 · 0 완료",
|
||||
FontSize = 10.25, FontWeight = FontWeights.SemiBold,
|
||||
FontSize = 9.5, FontWeight = FontWeights.SemiBold,
|
||||
Foreground = secondaryText,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
});
|
||||
@@ -9460,7 +9460,7 @@ public partial class ChatWindow : Window
|
||||
Minimum = 0,
|
||||
Maximum = steps.Count,
|
||||
Value = 0,
|
||||
Height = 4,
|
||||
Height = 3,
|
||||
Foreground = accentBrush,
|
||||
Background = TryFindResource("HintBackground") as Brush ?? BrushFromHex("#E5E7EB"),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
@@ -9473,9 +9473,9 @@ public partial class ChatWindow : Window
|
||||
_planProgressText = new TextBlock
|
||||
{
|
||||
Text = "0%",
|
||||
FontSize = 9.25, FontWeight = FontWeights.SemiBold,
|
||||
FontSize = 8.5, FontWeight = FontWeights.SemiBold,
|
||||
Foreground = secondaryText,
|
||||
Margin = new Thickness(6, 0, 0, 0),
|
||||
Margin = new Thickness(5, 0, 0, 0),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
};
|
||||
Grid.SetColumn(_planProgressText, 1);
|
||||
@@ -9489,26 +9489,26 @@ public partial class ChatWindow : Window
|
||||
var stepRow = new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
Margin = new Thickness(0, 1, 0, 1),
|
||||
Margin = new Thickness(0, 1, 0, 0),
|
||||
Tag = i, // 인덱스 저장
|
||||
};
|
||||
|
||||
stepRow.Children.Add(new TextBlock
|
||||
{
|
||||
Text = "○", // 빈 원 (미완료)
|
||||
FontSize = 10,
|
||||
FontSize = 9,
|
||||
Foreground = secondaryText,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = new Thickness(0, 0, 5, 0),
|
||||
Margin = new Thickness(0, 0, 4, 0),
|
||||
Tag = "status",
|
||||
});
|
||||
stepRow.Children.Add(new TextBlock
|
||||
{
|
||||
Text = $"{i + 1}. {steps[i]}",
|
||||
FontSize = 10,
|
||||
FontSize = 9.5,
|
||||
Foreground = primaryText,
|
||||
TextWrapping = TextWrapping.Wrap,
|
||||
MaxWidth = Math.Max(320, GetMessageMaxWidth() - 60),
|
||||
MaxWidth = Math.Max(320, GetMessageMaxWidth() - 52),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
});
|
||||
|
||||
@@ -10996,14 +10996,14 @@ public partial class ChatWindow : Window
|
||||
|
||||
// claw-code처럼 메시지 축과 입력축이 같은 중심선을 공유하도록,
|
||||
// 본문 폭 상한을 조금 더 낮추고 창 폭 변화에 더 부드럽게 반응시킵니다.
|
||||
var contentWidth = Math.Max(340, viewportWidth - 28);
|
||||
var messageWidth = Math.Clamp(contentWidth * 0.88, 340, 880);
|
||||
var composerWidth = Math.Clamp(contentWidth * 0.82, 340, 820);
|
||||
var contentWidth = Math.Max(360, viewportWidth - 24);
|
||||
var messageWidth = Math.Clamp(contentWidth * 0.9, 360, 960);
|
||||
var composerWidth = Math.Clamp(contentWidth * 0.86, 360, 900);
|
||||
|
||||
if (contentWidth < 760)
|
||||
{
|
||||
messageWidth = Math.Clamp(contentWidth - 8, 332, 780);
|
||||
composerWidth = Math.Clamp(contentWidth - 14, 328, 740);
|
||||
messageWidth = Math.Clamp(contentWidth - 10, 344, 820);
|
||||
composerWidth = Math.Clamp(contentWidth - 14, 340, 780);
|
||||
}
|
||||
|
||||
var changed = false;
|
||||
|
||||
Reference in New Issue
Block a user