diff --git a/src/Angor/Avalonia/AngorApp.Model/Amounts/AmountUI.cs b/src/Angor/Avalonia/AngorApp.Model/Amounts/AmountUI.cs
index 3aa640ce8..e575a21e6 100644
--- a/src/Angor/Avalonia/AngorApp.Model/Amounts/AmountUI.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/Amounts/AmountUI.cs
@@ -6,4 +6,8 @@ public class AmountUI(long sats, string symbol = "BTC") : IAmountUI
{
public long Sats { get; } = sats;
public string Symbol { get; } = symbol;
+
+ public static AmountUI FromBtc(int btc) => new(btc * 100_000_000);
+ public static AmountUI FromBtc(decimal btc) => new((long)(btc * 100_000_000));
+ public static AmountUI FromBtc(double btc) => new((long)(btc * 100_000_000));
}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp.Model/Contracts/Amounts/IAmountUI.cs b/src/Angor/Avalonia/AngorApp.Model/Contracts/Amounts/IAmountUI.cs
index dd2b30972..3ef72eec6 100644
--- a/src/Angor/Avalonia/AngorApp.Model/Contracts/Amounts/IAmountUI.cs
+++ b/src/Angor/Avalonia/AngorApp.Model/Contracts/Amounts/IAmountUI.cs
@@ -8,7 +8,7 @@ public interface IAmountUI
public string BtcString => $"{Btc:0.00 000 000} " + Symbol;
- private decimal Btc => Sats / (decimal)1_0000_0000;
+ public decimal Btc => Sats / (decimal)1_0000_0000;
public string DecimalString => $"{Btc:G} {Symbol}";
public string RoundedDecimalString => $"{Btc:N2} {Symbol}";
diff --git a/src/Angor/Avalonia/AngorApp/AngorApp.csproj b/src/Angor/Avalonia/AngorApp/AngorApp.csproj
index fb45bd9a9..3b2e725bb 100644
--- a/src/Angor/Avalonia/AngorApp/AngorApp.csproj
+++ b/src/Angor/Avalonia/AngorApp/AngorApp.csproj
@@ -9,7 +9,7 @@
- Assets/angor-app-icon-light.png
+ Assets/angor-app-icon-light84c17bc6d299ec806d065d7d23c9b42aa21f330e.png
Assets/angor-app-icon-dark.png
diff --git a/src/Angor/Avalonia/AngorApp/Composition/Registrations/Services/ModelServices.cs b/src/Angor/Avalonia/AngorApp/Composition/Registrations/Services/ModelServices.cs
index f62f9d037..45168214b 100644
--- a/src/Angor/Avalonia/AngorApp/Composition/Registrations/Services/ModelServices.cs
+++ b/src/Angor/Avalonia/AngorApp/Composition/Registrations/Services/ModelServices.cs
@@ -16,7 +16,7 @@ public static IServiceCollection AddModelServices(this IServiceCollection servic
return services
.AddSingleton()
.AddSingleton()
- .AddScoped()
+ .AddScoped()
.AddScoped()
.AddSingleton()
.AddSingleton()
diff --git a/src/Angor/Avalonia/AngorApp/IProjectTypeViewModel.cs b/src/Angor/Avalonia/AngorApp/IProjectTypeViewModel.cs
new file mode 100644
index 000000000..c0c762a48
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/IProjectTypeViewModel.cs
@@ -0,0 +1,6 @@
+namespace AngorApp
+{
+ public interface IProjectTypeViewModel : IHaveTitle
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/ProjectTypeConverter.cs b/src/Angor/Avalonia/AngorApp/ProjectTypeConverter.cs
new file mode 100644
index 000000000..a1a48366b
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/ProjectTypeConverter.cs
@@ -0,0 +1,19 @@
+using AngorApp.UI.Flows.CreateProject.Wizard;
+using Avalonia.Data.Converters;
+using Avalonia.Media;
+
+namespace AngorApp
+{
+ public static class ProjectTypeConverter
+ {
+ public static FuncValueConverter ToBrush { get; } =
+ new FuncValueConverter(type =>
+ {
+ return type.Name switch
+ {
+ "Investment" => Brushes.Green,
+ _ => Brushes.Orange,
+ };
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/CreateProjectFlowV2.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/CreateProjectFlowV2.cs
new file mode 100644
index 000000000..09fbfb598
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/CreateProjectFlowV2.cs
@@ -0,0 +1,67 @@
+using Angor.Sdk.Common;
+using Angor.Sdk.Funding.Founder;
+using Angor.Sdk.Funding.Founder.Dtos;
+using Angor.Sdk.Funding.Founder.Operations;
+using AngorApp.UI.Flows.CreateProject.Wizard;
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject;
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model;
+using Zafiro.Avalonia.Controls.Wizards.Slim;
+using Zafiro.UI.Navigation;
+using Zafiro.UI.Wizards.Slim;
+using Zafiro.UI.Wizards.Slim.Builder;
+
+namespace AngorApp.UI.Flows.CreateProject
+{
+ public class CreateProjectFlowV2(
+ INavigator navigator,
+ IFounderAppService founderAppService,
+ IWalletContext walletContext
+ )
+ : ICreateProjectFlow
+ {
+ public Task>> CreateProject()
+ {
+ var createWizardResult = from wallet in walletContext.GetDefaultWallet()
+ from seed in GetProjectSeed(wallet.Id)
+ select CreateInvestmentProjectWizard();
+
+ NewProject newProject = null!;
+
+ var rootWizard = WizardBuilder
+ .StartWith(() => new WelcomeViewModel()).NextCommand(model => model.Start)
+ .Then(_ => new ProjectTypeViewModel())
+ .NextCommand(_ => StartSubwizard())
+ .WithCompletionFinalStep();
+
+ return createWizardResult.Map(wizard => rootWizard.Navigate(navigator));
+ }
+
+ private IEnhancedCommand> StartSubwizard()
+ {
+ return ReactiveCommand
+ .CreateFromTask(() => CreateInvestmentProjectWizard().Navigate(navigator).ToResult("Salute"))
+ .Enhance();
+ }
+
+ private SlimWizard CreateInvestmentProjectWizard()
+ {
+ var newProject = new NewProject();
+ var wizard = WizardBuilder
+ .StartWith(() => new ProjectProfileViewModel(newProject)).NextUnit().Always()
+ .Then(_ => new ProjectImagesViewModel(newProject)).NextUnit().Always()
+ .Then(_ => new FundingConfigurationViewModel(newProject)).NextUnit().Always()
+ .Then(_ => new StagesViewModel(newProject)).NextUnit().Always()
+ .Then(_ => new ReviewAndDeployViewModel(newProject)).NextResult(_ => Result.Success(""))
+ .Always()
+ .WithCommitFinalStep();
+
+ return wizard;
+ }
+
+ private async Task> GetProjectSeed(WalletId walletId)
+ {
+ var result = await founderAppService.CreateNewProjectKeysAsync(new CreateProjectNewKeys.CreateProjectNewKeysRequest(walletId));
+ return result.Map(response => response.ProjectSeedDto);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml
new file mode 100644
index 000000000..74a58127d
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml
@@ -0,0 +1,358 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Configure your funding target, window, and project nature.
+
+
+
+
+
+
+
+
+
+ Set your target funding amount
+
+
+
+
+
+
+ Target Amount (BTC) *
+
+
+
+
+
+ BTC
+
+
+
+
+
+ The minimum amount your project needs to raise
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fundraising Window
+
+ Help
+
+
+
+
+
+
+
+
+ Start Date
+
+
+
+ Automatically set to today
+
+
+
+
+
+ End Date *
+
+
+
+
+ Must be before first stage (chosen on next screen)
+
+
+
+
+ 1
+ 2
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Project Nature (Penalty)
+
+ Help
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 24
+ 24
+ 4
+ 12
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml.cs
new file mode 100644
index 000000000..75c99984b
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public partial class FundingConfigurationView : UserControl
+ {
+ public FundingConfigurationView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationViewModel.cs
new file mode 100644
index 000000000..c01efa1a4
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationViewModel.cs
@@ -0,0 +1,40 @@
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model;
+
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public interface IFundingConfigurationViewModel
+ {
+ IEnumerable AmountPresets { get; }
+ }
+
+ public class FundingConfigurationViewModelSample : IFundingConfigurationViewModel
+ {
+ public IEnumerable AmountPresets { get; } =
+ [
+ AmountUI.FromBtc(0.25),
+ AmountUI.FromBtc(0.5),
+ AmountUI.FromBtc(1),
+ AmountUI.FromBtc(2.5),
+ ];
+ }
+
+ public class FundingConfigurationViewModel : IHaveTitle, IFundingConfigurationViewModel
+ {
+ public NewProject NewProject { get; }
+
+ public FundingConfigurationViewModel(NewProject newProject)
+ {
+ NewProject = newProject;
+ }
+
+ public IObservable Title => Observable.Return("Funding Configuration");
+
+ public IEnumerable AmountPresets { get; } =
+ [
+ AmountUI.FromBtc(0.25),
+ AmountUI.FromBtc(0.5),
+ AmountUI.FromBtc(1),
+ AmountUI.FromBtc(2.5),
+ ];
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/Model/NewProject.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/Model/NewProject.cs
new file mode 100644
index 000000000..8df686092
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/Model/NewProject.cs
@@ -0,0 +1,9 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model
+{
+ public class NewProject
+ {
+ public string Name { get; set; }
+ public string Description { get; set; }
+ public string Website { get; set; }
+ }
+}
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesView.axaml
new file mode 100644
index 000000000..16af1d29e
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesView.axaml
@@ -0,0 +1,254 @@
+
+
+ 220
+ 120
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Upload your project's banner and profile images.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 820×312px recommended
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 170×170px
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesView.axaml.cs
new file mode 100644
index 000000000..0527484a0
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public partial class ProjectImagesView : UserControl
+ {
+ public ProjectImagesView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesViewModel.cs
new file mode 100644
index 000000000..d02b8af8b
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesViewModel.cs
@@ -0,0 +1,16 @@
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model;
+
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public class ProjectImagesViewModel : IHaveTitle
+ {
+ public NewProject NewProject { get; }
+
+ public ProjectImagesViewModel(NewProject newProject)
+ {
+ NewProject = newProject;
+ }
+
+ public IObservable Title => Observable.Return("Project Images");
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesViewModelSample.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesViewModelSample.cs
new file mode 100644
index 000000000..a773a13fb
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectImagesViewModelSample.cs
@@ -0,0 +1,8 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public class ProjectImagesViewModelSample : IProjectTypeViewModel
+ {
+ public IObservable Title => Observable.Return("Title");
+ public bool IsStarted { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileView.axaml
new file mode 100644
index 000000000..78c05c026
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileView.axaml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tell us about your project and what you're building.
+
+
+
+
+
+ Project Name *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ About *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Project Website
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileView.axaml.cs
new file mode 100644
index 000000000..2ebbb8740
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public partial class ProjectProfileView : UserControl
+ {
+ public ProjectProfileView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileViewModel.cs
new file mode 100644
index 000000000..c9fd46df6
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ProjectProfileViewModel.cs
@@ -0,0 +1,16 @@
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model;
+
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public class ProjectProfileViewModel : IHaveTitle
+ {
+ public NewProject NewProject { get; }
+
+ public ProjectProfileViewModel(NewProject newProject)
+ {
+ NewProject = newProject;
+ }
+
+ public IObservable Title => Observable.Return("Project Profile");
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployView.axaml
new file mode 100644
index 000000000..3d6fd7d46
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployView.axaml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Project Profile
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Funding Configuration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Funding Stages
+
+
+
+
+
+
+ Public Keys & IDs (Advanced)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ready to deploy
+ Please review all information carefully. Once deployed only profile information can be changed. Your project will be live on bitcoin MainNet.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployView.axaml.cs
new file mode 100644
index 000000000..e88bf0744
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public partial class ReviewAndDeployView : UserControl
+ {
+ public ReviewAndDeployView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployViewModel.cs
new file mode 100644
index 000000000..75f52e454
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/ReviewAndDeployViewModel.cs
@@ -0,0 +1,16 @@
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model;
+
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public class ReviewAndDeployViewModel : IHaveTitle
+ {
+ public NewProject NewProject { get; }
+
+ public ReviewAndDeployViewModel(NewProject newProject)
+ {
+ NewProject = newProject;
+ }
+
+ public IObservable Title => Observable.Return("Review & Deploy");
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesView.axaml
new file mode 100644
index 000000000..9de61a8ac
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesView.axaml
@@ -0,0 +1,9 @@
+
+ Design pending. Please, go to the next page.
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesView.axaml.cs
new file mode 100644
index 000000000..5af4628c5
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public partial class StagesView : UserControl
+ {
+ public StagesView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesViewModel.cs
new file mode 100644
index 000000000..828a0ced1
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/StagesViewModel.cs
@@ -0,0 +1,16 @@
+using AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model;
+
+namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject
+{
+ public class StagesViewModel : IHaveTitle
+ {
+ public NewProject NewProject { get; }
+
+ public StagesViewModel(NewProject newProject)
+ {
+ NewProject = newProject;
+ }
+
+ public IObservable Title => Observable.Return("Stages");
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeView.axaml
new file mode 100644
index 000000000..366ef7535
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeView.axaml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Choose the type of project you want to launch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeView.axaml.cs
new file mode 100644
index 000000000..855048e7d
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard
+{
+ public partial class ProjectTypeView : UserControl
+ {
+ public ProjectTypeView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeViewModel.cs
new file mode 100644
index 000000000..2bbe1430b
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/ProjectTypeViewModel.cs
@@ -0,0 +1,20 @@
+using System.Security.Principal;
+
+namespace AngorApp.UI.Flows.CreateProject.Wizard
+{
+ public partial class ProjectTypeViewModel : ReactiveObject, IHaveTitle
+ {
+ [Reactive] private ProjectType projectType;
+
+ public IObservable Title => Observable.Return("Project Type");
+
+ public IEnumerable ProjectTypes { get; } =
+ [
+ new("Investment", "One-time funding with start and end dates.", new Icon("fa-arrow-trend-up")),
+ new("Fund", "Recurring funding with periodic contributions.", new Icon("fa-bitcoin")),
+ new("Subscription", "Ongoing subscription-based funding model.", new Icon("fa-arrows-rotate"))
+ ];
+ }
+
+ public record ProjectType(string Name, string Description, object Icon);
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeView.axaml b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeView.axaml
new file mode 100644
index 000000000..cbccb567b
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeView.axaml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+ Welcome
+ Create and launch your project to raise funding from the Bitcoin community.
+
+
+ A small fee is required to prevent spam and will be paid when you submit your project for deployment.
+
+
+ Start
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeView.axaml.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeView.axaml.cs
new file mode 100644
index 000000000..df6ab9197
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeView.axaml.cs
@@ -0,0 +1,10 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard
+{
+ public partial class WelcomeView : UserControl
+ {
+ public WelcomeView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeViewModel.cs
new file mode 100644
index 000000000..cd4707ff4
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/WelcomeViewModel.cs
@@ -0,0 +1,9 @@
+namespace AngorApp.UI.Flows.CreateProject.Wizard
+{
+ public class WelcomeViewModel : IHaveTitle
+ {
+ public IEnhancedCommand> Start { get; } = EnhancedCommand.Create(() => Result.Success(Unit.Default));
+
+ public IObservable Title => Observable.Return("Welcome");
+ };
+}
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionView.axaml b/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionView.axaml
index 1e089f367..5442d51e4 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionView.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionView.axaml
@@ -28,10 +28,10 @@
-
+
-
+
@@ -44,7 +44,7 @@
-
+
@@ -61,4 +61,4 @@
-
\ No newline at end of file
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionViewModel.cs b/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionViewModel.cs
index d024cfa43..b0f1375c8 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionViewModel.cs
+++ b/src/Angor/Avalonia/AngorApp/UI/Sections/FindProjects/FindProjectsSectionViewModel.cs
@@ -46,7 +46,7 @@ private Task>> DoLoadItems()
return projectAppService
.Latest(new LatestProjects.LatestProjectsRequest())
.Map(response => response.Projects)
- .TraverseSequentially(dto => projectAppService.GetProjectStatistics(dto.Id)
+ .MapSequentially(dto => projectAppService.GetProjectStatistics(dto.Id)
.Map(statistics => new FindProjectItem(dto, statistics, projectAppService, detailsFactory, navigator)));
}
diff --git a/src/Angor/Avalonia/AngorApp/UI/Sections/Home/HomeSectionView.axaml b/src/Angor/Avalonia/AngorApp/UI/Sections/Home/HomeSectionView.axaml
index 807b49547..81ee96ee7 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Sections/Home/HomeSectionView.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Sections/Home/HomeSectionView.axaml
@@ -7,34 +7,34 @@
x:Class="AngorApp.UI.Sections.Home.HomeSectionView" x:DataType="new:HomeSectionSectionViewModel">
-
+
-
- Fund Projects
+
+ Fund Projects
Discover and fund innovative Bitcoin projects on the Angor platform.
-
+
-
+
- Get Projects Funded
+ Get Projects Funded
Create and launch your own projects to raise funding from the Bitcoin community.
-
-
+
+
-
\ No newline at end of file
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Shared/Controls/AngorConverters.cs b/src/Angor/Avalonia/AngorApp/UI/Shared/Controls/AngorConverters.cs
index 297fb6fb0..674824532 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Shared/Controls/AngorConverters.cs
+++ b/src/Angor/Avalonia/AngorApp/UI/Shared/Controls/AngorConverters.cs
@@ -1,3 +1,4 @@
+using System.Globalization;
using System.Diagnostics;
using System.Text.Json;
using Angor.Shared.Utilities;
@@ -41,6 +42,12 @@ public static class AngorConverters
return offset.Value.ToString("d");
});
+ public static readonly FuncValueConverter MonthLabel = new(value =>
+ {
+ var label = value == 1 ? "month" : "month".Pluralize();
+ return label.Humanize(LetterCasing.Title);
+ });
+
public static FuncValueConverter StringToQRCode { get; } = new(s =>
{
Debug.Assert(s != null, nameof(s) + " != null");
@@ -59,4 +66,20 @@ public static class AngorConverters
}));
public static IValueConverter HexToNpub { get;} = new FuncValueConverter(s => s == null ? null : NostrConversionHelper.ConvertHexToNpub(s));
+
+ public static IValueConverter FallbackIfNullOrEmpty { get; } = new FallbackIfNullOrEmptyConverter();
+
+ private sealed class FallbackIfNullOrEmptyConverter : IValueConverter
+ {
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ var fallback = parameter?.ToString() ?? string.Empty;
+ return value is string s && !string.IsNullOrWhiteSpace(s) ? s : fallback;
+ }
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ return value;
+ }
+ }
}
diff --git a/src/Angor/Avalonia/AngorApp/UI/Shared/Styles/Styles.axaml b/src/Angor/Avalonia/AngorApp/UI/Shared/Styles/Styles.axaml
index def7a784d..f8b9893bc 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Shared/Styles/Styles.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Shared/Styles/Styles.axaml
@@ -115,7 +115,7 @@
-
\ No newline at end of file
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Shell/ShellView.axaml b/src/Angor/Avalonia/AngorApp/UI/Shell/ShellView.axaml
index ab65af3c4..5cee45225 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Shell/ShellView.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Shell/ShellView.axaml
@@ -5,7 +5,7 @@
xmlns:generic="clr-namespace:System.Collections.Generic;assembly=System.Collections"
xmlns:shell="clr-namespace:AngorApp.UI.Shell"
mc:Ignorable="d" d:DesignWidth="1200" d:DesignHeight="650"
- x:Class="AngorApp.UI.Shell.ShellView" x:DataType="shell:IShellViewModel" Background="{DynamicResource Background}">
+ x:Class="AngorApp.UI.Shell.ShellView" x:DataType="shell:IShellViewModel" Background="{DynamicResource AppBackground}">
@@ -13,28 +13,28 @@
-
+
@@ -62,13 +62,13 @@
-
+
-
+
@@ -76,8 +76,8 @@
-
+
-
\ No newline at end of file
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/Buttons.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/Buttons.axaml
index aa088c7c0..3b3086691 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/Buttons.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/Buttons.axaml
@@ -2,12 +2,12 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-
-
-
-
-
-
+
+
+
+
+
+
@@ -24,7 +24,7 @@
-
+
@@ -32,4 +32,4 @@
-
\ No newline at end of file
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/ListBox.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/ListBox.axaml
new file mode 100644
index 000000000..46318ee7a
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Custom/ListBox.axaml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Icons.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Icons.axaml
index 8e61777fa..ef84fc980 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Icons.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Icons.axaml
@@ -4,4 +4,5 @@
M 13 10 V 3 L 4 14 H 11 V 21 L 20 10 H 13 Z
m 59.886719,4.4863281 c -1.07495,0.5899597 -1.63314,1.8065382 -2.234996,2.8273089 -3.214053,6.681439 -6.271027,13.43767 -9.461081,20.131215 -6.345644,13.595261 -12.73279,27.170711 -19.124329,40.744944 -0.887942,1.935861 -1.872609,4.056333 -2.685454,5.88247 -0.643109,1.671055 -1.555067,3.277459 -1.847656,5.058593 -0.220023,1.768085 1.161632,3.160566 2.421875,4.181641 2.705637,1.946282 5.64285,3.540645 8.442648,5.344828 6.962457,4.279407 13.887935,8.620935 20.897564,12.822152 1.430271,0.79318 3.123174,1.30651 4.762109,1.06837 2.198587,-0.67634 4.040894,-2.12779 6.02925,-3.237557 7.817802,-4.852046 15.742335,-9.532452 23.509054,-14.466543 1.424729,-1.011022 3.039184,-1.876992 4.10827,-3.291464 1.11554,-1.67289 0.293473,-3.724997 -0.316253,-5.421215 C 90.835394,68.226406 87.075999,60.412197 83.417969,52.537109 77.515085,39.892865 71.528971,27.253248 65.683594,14.603516 64.886087,12.887707 63.986906,11.009213 63.201172,9.4199219 62.426775,7.9858816 61.756748,6.4706036 60.801096,5.1493769 60.538495,4.9024504 60.247043,4.5572525 59.886719,4.4863281 Z M 75.022242,71.785024 c 0.281395,0.69611 0.563287,1.392019 0.844946,2.088023 -4.825832,3.012072 -9.658587,6.018137 -14.527344,8.957031 C 60.086898,83.48834 58.603096,83.06479 57.534492,82.248701 52.968781,79.424599 48.366191,76.660696 43.835938,73.78125 48.99544,62.73373 55.050972,50.823685 60.23687,39.78852 65.209256,50.3146 70.244238,61.064005 75.022242,71.785024 Z M 16.769531,98.128906 c -1.734672,0.208861 -2.458123,2.039204 -3.238281,3.357424 -3.01348,5.77302 -5.6814402,11.71853 -8.4648438,17.60351 -0.5229742,1.32192 -1.0763019,2.87073 -0.5390624,4.26758 0.6196273,0.95591 1.9434053,0.73048 2.9201167,0.90896 2.0945798,0.1919 4.1944745,0.31533 6.2946745,0.1396 2.046675,-0.16417 4.39538,0.0723 6.02413,-1.43517 1.512184,-1.39517 2.24257,-3.39011 3.227756,-5.1518 1.584234,-3.34954 3.298058,-6.66045 4.502611,-10.17052 0.532374,-1.57427 -0.06009,-3.38648 -1.417218,-4.34484 -2.527613,-1.84781 -5.23303,-3.453387 -7.990774,-4.928295 -0.414334,-0.178574 -0.866489,-0.280917 -1.319109,-0.246449 z M 103.03711,98.125 c -2.35697,0.424382 -4.321459,1.93311 -6.326704,3.15037 -1.35792,0.98806 -3.018139,1.7188 -3.951517,3.17273 -0.798734,1.43253 -0.376512,3.18737 0.128493,4.64671 1.639807,3.59809 3.334574,7.20073 5.101467,10.66798 0.834174,1.81162 2.047101,3.77984 4.153781,4.21358 3.05079,0.50728 6.10647,0.42207 9.19092,0.37966 1.23407,-0.11407 2.54746,-0.0974 3.69184,-0.61775 0.99649,-0.71585 0.66696,-2.15584 0.39274,-3.15933 -2.72199,-6.21989 -5.56197,-12.39205 -8.61344,-18.45786 -0.79186,-1.32152 -1.37899,-2.917004 -2.72365,-3.782142 -0.31574,-0.179207 -0.68546,-0.231419 -1.04393,-0.213948 z
M30,13.21A3.93,3.93,0,1,1,36.8,9.27L41.86,18A3.94,3.94,0,1,1,35.05,22L30,13.21Zm31.45,13A35.23,35.23,0,1,1,36.52,36.52,35.13,35.13,0,0,1,61.44,26.2ZM58.31,4A3.95,3.95,0,1,1,66.2,4V14.06a3.95,3.95,0,1,1-7.89,0V4ZM87.49,10.1A3.93,3.93,0,1,1,94.3,14l-5.06,8.76a3.93,3.93,0,1,1-6.81-3.92l5.06-8.75ZM109.67,30a3.93,3.93,0,1,1,3.94,6.81l-8.75,5.06a3.94,3.94,0,1,1-4-6.81L109.67,30Zm9.26,28.32a3.95,3.95,0,1,1,0,7.89H108.82a3.95,3.95,0,1,1,0-7.89Zm-6.15,29.18a3.93,3.93,0,1,1-3.91,6.81l-8.76-5.06A3.93,3.93,0,1,1,104,82.43l8.75,5.06ZM92.89,109.67a3.93,3.93,0,1,1-6.81,3.94L81,104.86a3.94,3.94,0,0,1,6.81-4l5.06,8.76Zm-28.32,9.26a3.95,3.95,0,1,1-7.89,0V108.82a3.95,3.95,0,1,1,7.89,0v10.11Zm-29.18-6.15a3.93,3.93,0,0,1-6.81-3.91l5.06-8.76A3.93,3.93,0,1,1,40.45,104l-5.06,8.75ZM13.21,92.89a3.93,3.93,0,1,1-3.94-6.81L18,81A3.94,3.94,0,1,1,22,87.83l-8.76,5.06ZM4,64.57a3.95,3.95,0,1,1,0-7.89H14.06a3.95,3.95,0,1,1,0,7.89ZM10.1,35.39A3.93,3.93,0,1,1,14,28.58l8.76,5.06a3.93,3.93,0,1,1-3.92,6.81L10.1,35.39Z
+ M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12
\ No newline at end of file
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/NewTheme.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/NewTheme.axaml
index 825eec47c..dc2536b47 100644
--- a/src/Angor/Avalonia/AngorApp/UI/Themes/New/NewTheme.axaml
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/NewTheme.axaml
@@ -9,8 +9,7 @@
-
-
+
@@ -40,130 +39,180 @@
- #F9F9F9
- White
- #19000000
- #6B7280
- #2D5A3D
- #2D5A3D
- #0A0A0A
- #E9E9E9
- White
- White
+ #F9F9F9
+ White
+ #19000000
+ #6B7280
+ #0A0A0A
+ #2D5A3D
+ #2D5A3D
+ #F7931A
+ #E9E9E9
+ White
+ White
+ #E5E7EB
+ #FAF9F6
+
+
+
+
+
+
+
0 0 30 0 LightGray
0 0 20 0 LightGray
0 5 25 0 LightGray
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
- #0A0A0A
- #B31A1A1A
- #19FFFFFF
- #A0A0A0
- #E5E8E1
- #5FAF78
- #FAFAFA
- #3A3A3A
- #202020
- #2A2A2A
+ #0A0A0A
+ #B31A1A1A
+ #19FFFFFF
+ #A0A0A0
+ #FAFAFA
+ #5FAF78
+ #E5E8E1
+ #F7931A
+ #3A3A3A
+ #202020
+ #2A2A2A
+ #333333
+ #0A0A0A
+
+
+
+
+
+
+
+
+
+
0 0 0 0 Transparent
0 0 0 0 LightGray
0 0 0 0 LightGray
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+ #2D5A3D
+
+
+
+
+
-
-
-
-
-
-
-
-
- 5
- 10
- 12
- 20
- 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
- HOLA
-
-
-
-
-
-
-
+
+
+
+ HOLA
+
+
+
+
+
+
+
+
+
-
-
- HOLA
-
-
-
-
-
-
-
+
+
+
+ HOLA
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/ButtonStylesTemplate.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/ButtonStylesTemplate.axaml
new file mode 100644
index 000000000..6b8547d44
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/ButtonStylesTemplate.axaml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+ Buttons
+ NewTheme (local-only) – style classes
+
+
+
+ EnhancedButton
+
+
+ Default
+
+
+
+
+
+ Accent
+
+
+
+
+
+ Secondary
+
+
+
+
+
+ Outline
+
+
+
+
+
+ ToggleButton
+
+
+ Widget (unchecked)
+
+
+
+
+
+
+ Widget (checked)
+
+
+
+
+
+
+ Widget (disabled)
+
+
+
+
+
+
+ ProgressRing
+
+
+
+
+
+
+
+
+
+
+ Buttons
+ Dark variant preview
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/ColorsAndBrushesTemplate.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/ColorsAndBrushesTemplate.axaml
new file mode 100644
index 000000000..2c7bf558a
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/ColorsAndBrushesTemplate.axaml
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
+ Colors & Brushes
+ NewTheme (local-only) – resource keys
+
+
+
+ Colors (Color resources)
+
+
+ Key
+ Swatch
+ Typical usage
+
+ AppBackground
+
+
+
+
+
+ App/page background.
+
+ Surface
+
+
+
+
+
+ Panels, cards, containers.
+
+ CardSurface
+
+
+
+
+
+ Elevated surfaces and cards.
+
+ SurfaceHover
+
+
+
+
+
+ Hover background states.
+
+ SurfaceSelected
+
+
+
+
+
+ Selected items, active surfaces.
+
+ SurfaceSubtle
+
+
+
+
+
+ Subtle separators and neutral fills.
+
+ Stroke
+
+
+
+
+
+ Borders, separators, outlines.
+
+ TextMuted
+
+
+
+
+
+ Secondary text, hints, metadata.
+
+ TextStrong
+
+
+
+
+
+ Primary text and emphasis.
+
+ Accent / Brand
+
+
+
+
+
+ Brand highlights, accents, progress.
+
+
+ Brushes
+
+ Key
+ Swatch
+ Typical usage
+
+ ProgressBrush
+
+ Progress indicators / gradients.
+
+ PrimaryButton*
+
+ Primary buttons (default EnhancedButton).
+
+ AccentButton*
+
+ Accent buttons (EnhancedButton.Classes="Accent").
+
+ SecondaryButton*
+
+ Secondary buttons (EnhancedButton.Classes="Secondary").
+
+
+ Shadows (BoxShadows)
+
+
+ SectionShadow
+
+
+ ItemShadow
+
+
+ ItemShadowBig
+
+
+
+
+
+
+
+
+
+
+
+ Colors & Brushes
+ Dark variant preview
+
+
+
+ Primary surfaces
+
+
+
+
+
+ Surface
+
+
+ SurfaceHover
+
+
+ ProgressBrush
+
+
+
+ Buttons
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/NewTheme.LocalOnly.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/NewTheme.LocalOnly.axaml
new file mode 100644
index 000000000..c447b4411
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/NewTheme.LocalOnly.axaml
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+ #F9F9F9
+ White
+ #19000000
+ #6B7280
+ #0A0A0A
+ #2D5A3D
+ #2D5A3D
+ #F7931A
+ #E9E9E9
+ White
+ White
+ #E5E7EB
+
+
+
+
+
+
+
+
+ 0 0 30 0 LightGray
+ 0 0 20 0 LightGray
+ 0 5 25 0 LightGray
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #0A0A0A
+ #B31A1A1A
+ #19FFFFFF
+ #A0A0A0
+ #FAFAFA
+ #E5E8E1
+ #5FAF78
+ #F7931A
+ #3A3A3A
+ #202020
+ #2A2A2A
+ #333333
+
+
+
+
+
+
+
+
+ 0 0 0 0 Transparent
+ 0 0 0 0 LightGray
+ 0 0 0 0 LightGray
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/TextStylesTemplate.axaml b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/TextStylesTemplate.axaml
new file mode 100644
index 000000000..a28ff0513
--- /dev/null
+++ b/src/Angor/Avalonia/AngorApp/UI/Themes/New/Templates/TextStylesTemplate.axaml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+ Text Styles
+ NewTheme (local-only) – reference sheet
+
+
+
+
+
+ Style
+ Example
+ Usage
+
+ TextBlock.Title
+ Page Title
+ Top-level headings (pages, screens, dialogs).
+
+ TextBlock.Header
+ Section header with a long title that trims
+ Section titles inside a page; use when space is limited.
+
+ TextBlock.Big
+ Emphasized text
+ Primary emphasis (key values, totals, callouts).
+
+ TextBlock.Subtitle
+ Supporting subtitle
+ Secondary headings, intro lines, or brief summaries.
+
+ TextBlock.Regular
+ Body text paragraph example.
+ Default body copy for descriptions and longer content.
+
+ TextBlock.Strong
+ Strong emphasis
+ Inline emphasis inside regular text (labels, key parts).
+
+ Run.Label / Run.Thin
+
+
+
+
+ Inline styling within a single TextBlock sentence.
+
+
+
+
+
+
+
+
+
+
+ Text Styles
+ Dark variant preview
+
+
+
+ Header
+
+
+
+
+ Strong text uses TextStrong color.
+
+
+
+
+
+
+
+
diff --git a/src/Angor/Avalonia/Directory.Packages.props b/src/Angor/Avalonia/Directory.Packages.props
index c9dc05695..678977d91 100644
--- a/src/Angor/Avalonia/Directory.Packages.props
+++ b/src/Angor/Avalonia/Directory.Packages.props
@@ -47,15 +47,15 @@
-
+
-
-
-
+
+
+
-
+