The board's symbol takes a tint — a 4×2 colour row under the picker's glyphs, and the glyph itself moves into the titlebar
iconColor stops being hand-written-only (user-ruled, superseding 03's "schema yes, control no"): it rides StyleCommand.apply → applyStyle as the third styled dimension — per-dimension no-op skip, one bracket, one history step, ExpectedField.iconColor for staleness. The SymbolPicker grows an opt-in colour row (leading None plus seven Palette.foregrounds hues, None removes the key); the board popover is its one caller. The window-title widget now draws the board's resolved glyph in that tint beside the name. Doc realignment filed on the Redesign board (Minor). Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -23,6 +23,23 @@ struct SymbolPickerCatalogDefaultSetTests {
|
||||
}
|
||||
}
|
||||
|
||||
@Suite("SymbolPicker ▸ the colour row")
|
||||
struct SymbolPickerColorSetTests {
|
||||
|
||||
@Test("Seven unique tints — the leading None plus these fills the 4×2 grid exactly")
|
||||
func shape() {
|
||||
#expect(SymbolPickerCatalog.colorSet.count
|
||||
== SymbolPickerLayout.colorColumns * SymbolPickerLayout.colorRows - 1)
|
||||
#expect(Set(SymbolPickerCatalog.colorSet).count == SymbolPickerCatalog.colorSet.count)
|
||||
}
|
||||
|
||||
@Test("Every entry is a palette name that resolves — pins the list against typos and palette drift")
|
||||
func everyNameResolves() {
|
||||
let missing = SymbolPickerCatalog.colorSet.filter { Palette.color(named: $0) == nil }
|
||||
#expect(missing.isEmpty, "unresolvable palette names: \(missing)")
|
||||
}
|
||||
}
|
||||
|
||||
@Suite("SymbolPicker ▸ filter")
|
||||
struct SymbolPickerFilterTests {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user