From 993d4028a2b3319a027187d891e485946cc8771c Mon Sep 17 00:00:00 2001 From: sysadmin Date: Wed, 10 Jun 2026 00:27:11 +0100 Subject: [PATCH] feat(apps): AppsStep grouped checkboxes Co-Authored-By: Claude Opus 4.8 --- .../Components/Steps/AppsStep.razor | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 windows/welcome/src/SilverOS.Welcome.UI/Components/Steps/AppsStep.razor diff --git a/windows/welcome/src/SilverOS.Welcome.UI/Components/Steps/AppsStep.razor b/windows/welcome/src/SilverOS.Welcome.UI/Components/Steps/AppsStep.razor new file mode 100644 index 0000000..e2d7498 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.UI/Components/Steps/AppsStep.razor @@ -0,0 +1,45 @@ +@using SilverOS.Welcome.Core.Apps +@inject WizardState State + +
+

Choose your apps

+

We'll install these during setup. The SilverLABS Stack (browser, VPN, keys) is already included.

+ + @foreach (var grp in _groups) + { +

@GroupTitle(grp.Key)

+
+ @foreach (var app in grp) + { + + } +
+ } +
+ +@code { + [Parameter] public IReadOnlyList Apps { get; set; } = Array.Empty(); + + private IEnumerable> _groups => + Apps.GroupBy(a => a.Group).OrderByDescending(g => g.Key == "essentials"); + + private static string GroupTitle(string g) => g switch + { + "essentials" => "Essentials", + "developer" => "Developer tools", + "journalist" => "Journalist tools", + "daily-driver" => "Everyday apps", + "privacy-max" => "Privacy tools", + _ => g + }; + + void Toggle(string id, bool on) + { + if (on) State.SelectedApps.Add(id); else State.SelectedApps.Remove(id); + } +}