From 855b1d7154d1dd412050f52052ef49fb938167d0 Mon Sep 17 00:00:00 2001 From: Stuart Meeks Date: Mon, 1 Jun 2026 07:35:12 +0000 Subject: [PATCH] Tags: add a visual icon picker for tag icons Adds a searchable glyph picker so tag icons can be chosen from a grid instead of typing a Segoe Fluent Icons code point. The free-text field remains as an escape hatch and persistence is unchanged (selection still flows through GlyphInput.Resolve). The catalogue is a curated 50-glyph set in appsettings.json beside the app, re-read each time the picker opens so edits need no rebuild. Core holds the model, provider abstraction and search/selection view model (unit-tested); the App reads the file and presents the dialog. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 8 ++ src/Snipdeck.App/App.xaml | 1 + src/Snipdeck.App/Bootstrap.cs | 1 + .../Services/GlyphCatalogueProvider.cs | 87 +++++++++++++ .../Services/WindowsShellInteractions.cs | 22 +++- src/Snipdeck.App/Snipdeck.App.csproj | 6 + src/Snipdeck.App/Views/GlyphPickerDialog.xaml | 72 +++++++++++ .../Views/GlyphPickerDialog.xaml.cs | 66 ++++++++++ src/Snipdeck.App/Views/ShellPage.xaml | 9 +- src/Snipdeck.App/appsettings.json | 55 +++++++++ .../Abstractions/IGlyphCatalogueProvider.cs | 20 +++ .../Abstractions/IShellInteractions.cs | 7 ++ .../Models/GlyphCatalogueEntry.cs | 47 ++++++++ .../ViewModels/GlyphPickerViewModel.cs | 74 ++++++++++++ .../ViewModels/ShellViewModel.cs | 2 +- .../ViewModels/TagIconsViewModel.cs | 32 ++++- .../Support/FakeShellInteractions.cs | 13 ++ .../ViewModels/GlyphPickerViewModelTests.cs | 114 ++++++++++++++++++ .../ViewModels/TagIconsViewModelTests.cs | 34 ++++++ 19 files changed, 663 insertions(+), 7 deletions(-) create mode 100644 src/Snipdeck.App/Services/GlyphCatalogueProvider.cs create mode 100644 src/Snipdeck.App/Views/GlyphPickerDialog.xaml create mode 100644 src/Snipdeck.App/Views/GlyphPickerDialog.xaml.cs create mode 100644 src/Snipdeck.App/appsettings.json create mode 100644 src/Snipdeck.Core/Abstractions/IGlyphCatalogueProvider.cs create mode 100644 src/Snipdeck.Core/Models/GlyphCatalogueEntry.cs create mode 100644 src/Snipdeck.Core/ViewModels/GlyphPickerViewModel.cs create mode 100644 tests/Snipdeck.Core.Tests/ViewModels/GlyphPickerViewModelTests.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 61f65d5..c1642f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added +- **Icon picker for tag icons.** The Tags view now has a **Choose…** button beside + each tag that opens a searchable grid of icons to pick from, so you no longer + have to know a Segoe Fluent Icons code point. Search filters by name, keyword or + code point, and the free-text field remains for pasting a glyph directly. The + catalogue is a curated set in `appsettings.json` beside the app — edit that file + to add or remove icons, and the picker reflects the change the next time it opens. + ### Changed - **Home, navigation and shared-parameters polish.** The Home page leads with a full-bleed hero banner (drop `Assets/HomeHero.png` to supply the image), the diff --git a/src/Snipdeck.App/App.xaml b/src/Snipdeck.App/App.xaml index fc25777..1c15dc1 100644 --- a/src/Snipdeck.App/App.xaml +++ b/src/Snipdeck.App/App.xaml @@ -56,6 +56,7 @@