The two pickers rhyme — one two-zone chrome, a face onto a standalone browser, a trigger onto the popover
The colour combo was a wide two-zone field with a second door onto the Colors panel; the symbol picker was a small square button with one. Both now subclass one `ComboFieldControl`, so they are the same width, height, radius and trigger by construction: click the face for the standalone picker, click the chevron for the quick list. The symbol face opens a new floating browser over the OS's own category, ordering and keyword plists out of CoreGlyphs.bundle — searchable, categorised, trademark-restricted glyphs withheld. The palette grows twelve to sixteen per table, filling the hue ring's four widest gaps with lime, jade, indigo and magenta at each table's own saturation and brightness. That gives the Style… popover's background grid a third row and the tint grid its third row of four, and both grids gain an Other… row onto the system colour picker — which the card sidebar's combo has had all along and the primary styling surface never did. An arbitrary hex already round-tripped; it is asserted now, including that an unquoted one is a YAML comment and no value. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
@@ -175,10 +175,14 @@ struct CardStyleSection: View {
|
||||
// MARK: - Symbol
|
||||
|
||||
/// The labeled **Symbol** row, below the background combo — `backgroundComboRow`'s own
|
||||
/// inspector-row shape, restated: caption leading, the compact control trailing. Unlike the
|
||||
/// combo, the picker gets no width of its own — `SymbolPicker`'s at-rest well is already
|
||||
/// font-derived and small (`SymbolPickerLayout.restSide`), matched to a text field's height, and
|
||||
/// stretching it would just be empty frame around a fixed-size button.
|
||||
/// inspector-row shape, restated: caption leading, the combo trailing, **at the same width**.
|
||||
///
|
||||
/// That width used to be the difference between the two rows. The picker was a 20pt bordered
|
||||
/// square with one hit zone sitting under a wide two-zone colour combo, and this is the sidebar
|
||||
/// where the mismatch was most visible — two adjacent rows setting two adjacent keys, looking
|
||||
/// like different kinds of control. Since the 2026-08-09 rework `SymbolPicker` *is* a combo
|
||||
/// (`ComboField.swift`), so the row hands it the identical `* 0.55` frame and the pair reads as
|
||||
/// one inspector.
|
||||
private var symbolRow: some View {
|
||||
HStack(spacing: 0) {
|
||||
Text("Symbol")
|
||||
@@ -193,6 +197,7 @@ struct CardStyleSection: View {
|
||||
currentColor: currentIconColor,
|
||||
onSelectColor: { applyIconColor($0) }
|
||||
)
|
||||
.frame(width: CardWindowMetrics.sidebarContentWidth(bodyPointSize: pointSize) * 0.55)
|
||||
// The same lock `StyleEditorView`'s whole body disabled under
|
||||
// (`.disabled(!store.acceptsBoardMutations)`, `StyleEditor.swift`) — the read-only lock
|
||||
// and the board's inline-editing rule alike, preserved exactly across the control swap
|
||||
|
||||
Reference in New Issue
Block a user