diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 605d2de83c..f4812b9b75 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,6 +1,9 @@ --- name: Bug Report about: Report a bug +title: '' +labels: '' +assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..dd84ea7824 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000000..48d5f81fa4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,10 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index b766cd054a..cccbedb42f 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -1,6 +1,9 @@ --- name: Feature Request about: Request a Feature +title: '' +labels: '' +assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..bbcbbe7d61 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/HOK b/HOK new file mode 100644 index 0000000000..667c481bdf --- /dev/null +++ b/HOK @@ -0,0 +1 @@ +محمد غبان ملقب محمد الوصابي تيلجرام @Q7344 diff --git a/WalletWasabi.Fluent.Desktop/packages.lock.json b/WalletWasabi.Fluent.Desktop/packages.lock.json index 00e9a3138a..e62838cf45 100644 --- a/WalletWasabi.Fluent.Desktop/packages.lock.json +++ b/WalletWasabi.Fluent.Desktop/packages.lock.json @@ -159,6 +159,26 @@ "Avalonia": "0.10.19" } }, + "ChatGPT": { + "type": "Transitive", + "resolved": "1.0.0-preview.5", + "contentHash": "sEDWnmtN0E2qYbevlS6VcO8V70QDt6Y1aRdHRFYHKGjF8Z0XK/6Vy+lDoVeQiwspOE5Zkw8rhF34PB74J67g6A==" + }, + "ChatGPT.Core": { + "type": "Transitive", + "resolved": "1.0.0-preview.5", + "contentHash": "HIDaklt0feGfjXnMIauHZkTUk9WGACvvIVhy5AUKpV2giFUNYJCc5CeG+Dls52odV6O9hwfb/hP1y9jVk62hJA==", + "dependencies": { + "ChatGPT": "1.0.0-preview.5", + "CommunityToolkit.Mvvm": "8.1.0", + "Microsoft.Extensions.DependencyInjection": "7.0.0" + } + }, + "CommunityToolkit.Mvvm": { + "type": "Transitive", + "resolved": "8.1.0", + "contentHash": "xxOt7lu9a5kB5Fs9RfcxzVlKnhuuPe+w7AXHtmCFtS3oldrsUhEMxHfNulluXSscUUoGxZ0jh55Om12ZP6abHA==" + }, "DynamicData": { "type": "Transitive", "resolved": "7.1.1", @@ -228,48 +248,46 @@ }, "Microsoft.CodeAnalysis.Analyzers": { "type": "Transitive", - "resolved": "2.9.6", - "contentHash": "Kmms3TxGQMNb95Cu/3K+0bIcMnV4qf/phZBLAB0HUi65rBPxP4JO3aM2LoAcb+DFS600RQJMZ7ZLyYDTbLwJOQ==" + "resolved": "3.3.3", + "contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ==" }, "Microsoft.CodeAnalysis.Common": { "type": "Transitive", - "resolved": "3.4.0", - "contentHash": "3ncA7cV+iXGA1VYwe2UEZXcvWyZSlbexWjM9AvocP7sik5UD93qt9Hq0fMRGk0jFRmvmE4T2g+bGfXiBVZEhLw==", + "resolved": "4.5.0", + "contentHash": "lwAbIZNdnY0SUNoDmZHkVUwLO8UyNnyyh1t/4XsbFxi4Ounb3xszIYZaWhyj5ZjyfcwqwmtMbE7fUTVCqQEIdQ==", "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "2.9.6", - "System.Collections.Immutable": "1.5.0", - "System.Memory": "4.5.3", - "System.Reflection.Metadata": "1.6.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.2", - "System.Text.Encoding.CodePages": "4.5.1", - "System.Threading.Tasks.Extensions": "4.5.3" + "Microsoft.CodeAnalysis.Analyzers": "3.3.3", + "System.Collections.Immutable": "6.0.0", + "System.Reflection.Metadata": "6.0.1", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encoding.CodePages": "6.0.0" } }, "Microsoft.CodeAnalysis.CSharp": { "type": "Transitive", - "resolved": "3.4.0", - "contentHash": "/LsTtgcMN6Tu1oo7/WYbRAHL4/ubXC/miEakwTpcZKJKtFo7D0AK95Hw0dbGxul6C8WJu60v6NP2435TDYZM+Q==", + "resolved": "4.5.0", + "contentHash": "cM59oMKAOxvdv76bdmaKPy5hfj+oR+zxikWoueEB7CwTko7mt9sVKZI8Qxlov0C/LuKEG+WQwifepqL3vuTiBQ==", "dependencies": { - "Microsoft.CodeAnalysis.Common": "[3.4.0]" + "Microsoft.CodeAnalysis.Common": "[4.5.0]" } }, "Microsoft.CodeAnalysis.CSharp.Scripting": { "type": "Transitive", - "resolved": "3.4.0", - "contentHash": "tLgqc76qXHmONUhWhxo7z3TcL/LmGFWIUJm1exbQmVJohuQvJnejUMxmVkdxDfMuMZU1fIyJXPZ6Fkp4FEneAg==", + "resolved": "4.5.0", + "contentHash": "LMapq8Ocdc1hGdvKt2sdvkHOrRO1Ymbl0EJEzRyrzxkxUfZRpUCsbGNCijnokmW1Zy3TBaj6LfV9WqRqE3fd+Q==", "dependencies": { - "Microsoft.CSharp": "4.3.0", - "Microsoft.CodeAnalysis.CSharp": "[3.4.0]", - "Microsoft.CodeAnalysis.Common": "[3.4.0]", - "Microsoft.CodeAnalysis.Scripting.Common": "[3.4.0]" + "Microsoft.CSharp": "4.7.0", + "Microsoft.CodeAnalysis.CSharp": "[4.5.0]", + "Microsoft.CodeAnalysis.Common": "[4.5.0]", + "Microsoft.CodeAnalysis.Scripting.Common": "[4.5.0]" } }, "Microsoft.CodeAnalysis.Scripting.Common": { "type": "Transitive", - "resolved": "3.4.0", - "contentHash": "+b6I3DZL2zvck+B/E/aiOveakj5U2G2BcYODQxcGh2IDbatNU3XXxGT1HumkWB5uIZI2Leu0opBgBpjScmjGMA==", + "resolved": "4.5.0", + "contentHash": "ruWwzk9H5uJ+BQOMZQh77bjd74Z2KZjJP01y/tpfB6qsRi8s+EjhvzNmG7wDx0uRwmOCksKDS0MeMu3D1uKzZQ==", "dependencies": { - "Microsoft.CodeAnalysis.Common": "[3.4.0]" + "Microsoft.CodeAnalysis.Common": "[4.5.0]" } }, "Microsoft.CSharp": { @@ -277,6 +295,19 @@ "resolved": "4.7.0", "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==" + }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", "resolved": "1.0.0", @@ -295,8 +326,8 @@ }, "Microsoft.NETCore.Platforms": { "type": "Transitive", - "resolved": "2.1.2", - "contentHash": "mOJy3M0UN+LUG21dLGMxaWZEP6xYpQEpLuvuEQBaownaX4YuhH6NmNUlN9si+vNkAS6dwJ//N1O4DmLf2CikVg==" + "resolved": "1.1.1", + "contentHash": "TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", @@ -412,8 +443,11 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.5.0", - "contentHash": "EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==" + "resolved": "6.0.0", + "contentHash": "l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } }, "System.ComponentModel.Annotations": { "type": "Transitive", @@ -516,8 +550,11 @@ }, "System.Reflection.Metadata": { "type": "Transitive", - "resolved": "1.6.0", - "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" + "resolved": "6.0.1", + "contentHash": "III/lNMSn0ZRBuM9m5Cgbiho5j81u0FAEagFX5ta2DKbljZ3T0IpD8j+BIiHQPeKqJppWS9bGEp6JnKnWKze0g==", + "dependencies": { + "System.Collections.Immutable": "6.0.0" + } }, "System.Reflection.Primitives": { "type": "Transitive", @@ -552,8 +589,8 @@ }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "HxozeSlipUK7dAroTYwIcGwKDeOVpQnJlpVaOkBz7CM4TsE5b/tKlQBZecTjh6FzcSbxndYaxxpsBMz+wMJeyw==" + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, "System.Runtime.Extensions": { "type": "Transitive", @@ -614,11 +651,10 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Threading": { @@ -640,11 +676,6 @@ "System.Runtime": "4.3.0" } }, - "System.Threading.Tasks.Extensions": { - "type": "Transitive", - "resolved": "4.5.3", - "contentHash": "+MvhNtcvIbqmhANyKu91jQnvIRVSTiaOiFNfKWwXGHG48YAb4I/TyH8spsySiPYla7gKal5ZnF3teJqZAximyQ==" - }, "System.ValueTuple": { "type": "Transitive", "resolved": "4.5.0", @@ -685,6 +716,8 @@ "Avalonia.ReactiveUI": "[0.10.19, )", "Avalonia.Skia": "[0.10.19, )", "Avalonia.Xaml.Behaviors": "[0.10.19, )", + "ChatGPT.Core": "[1.0.0-preview.5, )", + "Microsoft.CodeAnalysis.CSharp.Scripting": "[4.5.0, )", "System.Drawing.Common": "[7.0.0, )", "System.Runtime": "[4.3.1, )", "WalletWasabi": "[1.0.0, )" @@ -1090,11 +1123,10 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Threading.Tasks": { @@ -1508,11 +1540,10 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Threading.Tasks": { @@ -1926,11 +1957,10 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Threading.Tasks": { @@ -2344,11 +2374,10 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Threading.Tasks": { @@ -2678,11 +2707,10 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "6.0.0", + "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Threading.Tasks": { diff --git a/WalletWasabi.Fluent/App.axaml b/WalletWasabi.Fluent/App.axaml index ca8c0e7e67..59686a6d32 100644 --- a/WalletWasabi.Fluent/App.axaml +++ b/WalletWasabi.Fluent/App.axaml @@ -46,12 +46,12 @@ - + - + diff --git a/WalletWasabi.Fluent/App.axaml.cs b/WalletWasabi.Fluent/App.axaml.cs index 07980b2758..5daf4474f2 100644 --- a/WalletWasabi.Fluent/App.axaml.cs +++ b/WalletWasabi.Fluent/App.axaml.cs @@ -17,7 +17,7 @@ public class App : Application public App() { - Name = "Wasabi Wallet"; + Name = "Wasabi Wallet GPT"; } public App(Func backendInitialiseAsync, bool startInBg) : this() diff --git a/WalletWasabi.Fluent/Config.cs b/WalletWasabi.Fluent/Config.cs index d06f7ba8dd..efee56ff74 100644 --- a/WalletWasabi.Fluent/Config.cs +++ b/WalletWasabi.Fluent/Config.cs @@ -35,7 +35,7 @@ public Config(string filePath) : base(filePath) [JsonProperty(PropertyName = "Network")] [JsonConverter(typeof(NetworkJsonConverter))] - public Network Network { get; internal set; } = Network.Main; + public Network Network { get; internal set; } = Network.TestNet; [DefaultValue("https://api.wasabiwallet.io/")] [JsonProperty(PropertyName = "MainNetBackendUri", DefaultValueHandling = DefaultValueHandling.Populate)] @@ -217,6 +217,8 @@ public override void LoadFile(bool createIfMissing = false) base.LoadFile(createIfMissing); ServiceConfiguration = new ServiceConfiguration(GetBitcoinP2pEndPoint(), DustThreshold); + + Network = Network.TestNet; } public bool MigrateOldDefaultBackendUris() diff --git a/WalletWasabi.Fluent/CrashReport/CrashReportApp.axaml.cs b/WalletWasabi.Fluent/CrashReport/CrashReportApp.axaml.cs index 61419e3dcc..947b19f2d1 100644 --- a/WalletWasabi.Fluent/CrashReport/CrashReportApp.axaml.cs +++ b/WalletWasabi.Fluent/CrashReport/CrashReportApp.axaml.cs @@ -13,7 +13,7 @@ public class CrashReportApp : Application public CrashReportApp() { - Name = "Wasabi Wallet Crash Report"; + Name = "Wasabi Wallet GPT Crash Report"; } public CrashReportApp(SerializableException exception) : this() diff --git a/WalletWasabi.Fluent/Styles/PathIcon.axaml b/WalletWasabi.Fluent/Styles/PathIcon.axaml index 0df9eb98dd..0d0e6e9bf4 100644 --- a/WalletWasabi.Fluent/Styles/PathIcon.axaml +++ b/WalletWasabi.Fluent/Styles/PathIcon.axaml @@ -11,6 +11,11 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistant.axaml.cs b/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistant.axaml.cs new file mode 100644 index 0000000000..8676fd45b6 --- /dev/null +++ b/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistant.axaml.cs @@ -0,0 +1,17 @@ +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace WalletWasabi.Fluent.Views.ChatGPT; + +public class ChatAssistant : UserControl +{ + public ChatAssistant() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } +} diff --git a/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistantDropdown.axaml b/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistantDropdown.axaml new file mode 100644 index 0000000000..0c5683924f --- /dev/null +++ b/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistantDropdown.axaml @@ -0,0 +1,191 @@ + + + + + + + M6.78 2.72a.75.75 0 0 1 0 1.06L4.56 6h8.69a7.75 7.75 0 1 1-7.75 7.75.75.75 0 0 1 1.5 0 6.25 6.25 0 1 0 6.25-6.25H4.56l2.22 2.22a.75.75 0 1 1-1.06 1.06l-3.5-3.5a.75.75 0 0 1 0-1.06l3.5-3.5a.75.75 0 0 1 1.06 0Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistantDropdown.axaml.cs b/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistantDropdown.axaml.cs new file mode 100644 index 0000000000..bf5e71407a --- /dev/null +++ b/WalletWasabi.Fluent/Views/ChatGPT/ChatAssistantDropdown.axaml.cs @@ -0,0 +1,43 @@ +using System.Reactive; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Markup.Xaml; + +namespace WalletWasabi.Fluent.Views.ChatGPT; + +public partial class ChatAssistantDropdown : UserControl +{ + private bool _scrollToEnd; + + public ChatAssistantDropdown() + { + InitializeComponent(); + + var messagesItemsControl = this.FindControl("MessagesItemsControl"); + var chatScrollViewer = this.FindControl("ChatScrollViewer"); + + messagesItemsControl + .GetObservable(SelectingItemsControl.SelectedItemProperty) + .Subscribe(_ => + { + _scrollToEnd = true; + }); + + chatScrollViewer + .GetObservable(ScrollViewer.ExtentProperty) + .Subscribe(_ => + { + if (_scrollToEnd) + { + chatScrollViewer.ScrollToEnd(); + _scrollToEnd = false; + } + }); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } +} diff --git a/WalletWasabi.Fluent/Views/MainWindow.axaml b/WalletWasabi.Fluent/Views/MainWindow.axaml index 7461c1c534..c4bbf8400c 100644 --- a/WalletWasabi.Fluent/Views/MainWindow.axaml +++ b/WalletWasabi.Fluent/Views/MainWindow.axaml @@ -18,10 +18,11 @@ ExtendClientAreaTitleBarHeightHint="50" ExtendClientAreaToDecorationsHint="True" ExtendClientAreaChromeHints="Default, PreferSystemChrome, OSXThickTitleBar" - Title="Wasabi Wallet" + Title="Wasabi Wallet GPT" WindowState="{Binding WindowState, Mode=TwoWay}" - Focusable="{Binding SearchBar.IsSearchListVisible}" + Focusable="{Binding ChatAssistant.IsChatListVisible}" Icon="/Assets/WasabiLogo.ico"> +