Add position-based colorful Home shortcut palettes

Colorful shortcut cards now color by grid position instead of shortcut
identity, so colors stay in the same slot when shortcuts are reordered.

Adds a Palette option (Classic default, plus Sunset, Meadow, Berry,
Grape) and a Custom palette with a swatch-list editor (ColorPicker + hex
fields) and a switchable comma-separated text field. Color is resolved
per position and wraps by palette length, wired via a new
homeShortcutColorfulColor environment value and a Color(hex:) extension.
This commit is contained in:
Arkadiusz Fal
2026-05-28 23:26:05 +02:00
parent bcd4206c55
commit 486024834d
10 changed files with 596 additions and 51 deletions

View File

@@ -9,6 +9,9 @@
},
"·" : {
},
"#RRGGBB" : {
},
"%@" : {
@@ -3674,17 +3677,6 @@
}
}
},
"home.editShortcuts" : {
"comment" : "Context menu action on Home shortcuts to open Home settings",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Edit Shortcuts"
}
}
}
},
"home.downloads.notAvailable" : {
"comment" : "Downloads not available on tvOS",
"localizations" : {
@@ -3707,6 +3699,17 @@
}
}
},
"home.editShortcuts" : {
"comment" : "Context menu action on Home shortcuts to open Home settings",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Edit Shortcuts"
}
}
}
},
"home.empty.description" : {
"comment" : "Library tab placeholder description",
"localizations" : {
@@ -4203,6 +4206,17 @@
}
}
},
"home.settings.shortcuts.palette" : {
"comment" : "Label/header for the colorful palette picker",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Palette"
}
}
}
},
"home.settings.shortcuts.style" : {
"comment" : "Label for shortcuts card style picker in library settings",
"localizations" : {
@@ -4225,39 +4239,6 @@
}
}
},
"home.shortcuts.style.accent" : {
"comment" : "Accent card style option",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accent"
}
}
}
},
"home.shortcuts.style.colorful" : {
"comment" : "Colorful card style option",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Colorful"
}
}
}
},
"home.shortcuts.style.plain" : {
"comment" : "Plain card style option",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Plain"
}
}
}
},
"home.settings.sourceDisabled" : {
},
@@ -4393,6 +4374,182 @@
}
}
},
"home.shortcuts.palette.berry" : {
"comment" : "Colorful palette name",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Berry"
}
}
}
},
"home.shortcuts.palette.classic" : {
"comment" : "Colorful palette name",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Classic"
}
}
}
},
"home.shortcuts.palette.custom" : {
"comment" : "Colorful palette name for the user-defined palette",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Custom"
}
}
}
},
"home.shortcuts.palette.custom.add" : {
"comment" : "Button to add a color to the custom palette",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Add Color"
}
}
}
},
"home.shortcuts.palette.custom.footer" : {
"comment" : "Footer explaining the custom palette editor",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Colors are applied to cards by position and repeat once the list runs out."
}
}
}
},
"home.shortcuts.palette.custom.header" : {
"comment" : "Header for the custom palette editor section",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Custom Colors"
}
}
}
},
"home.shortcuts.palette.custom.mode" : {
"comment" : "Accessibility label for the custom palette edit-mode picker",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Edit Mode"
}
}
}
},
"home.shortcuts.palette.custom.mode.list" : {
"comment" : "Custom palette edit mode: swatch list",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "List"
}
}
}
},
"home.shortcuts.palette.custom.mode.text" : {
"comment" : "Custom palette edit mode: raw text",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Text"
}
}
}
},
"home.shortcuts.palette.custom.placeholder" : {
"comment" : "Placeholder for the custom palette hex text field",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "#FF6B6B, #4D96FF, #6BCB77"
}
}
}
},
"home.shortcuts.palette.grape" : {
"comment" : "Colorful palette name",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Grape"
}
}
}
},
"home.shortcuts.palette.meadow" : {
"comment" : "Colorful palette name",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Meadow"
}
}
}
},
"home.shortcuts.palette.sunset" : {
"comment" : "Colorful palette name",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sunset"
}
}
}
},
"home.shortcuts.style.accent" : {
"comment" : "Accent card style option",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accent"
}
}
}
},
"home.shortcuts.style.colorful" : {
"comment" : "Colorful card style option",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Colorful"
}
}
}
},
"home.shortcuts.style.plain" : {
"comment" : "Plain card style option",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Plain"
}
}
}
},
"home.subscriptions.subtitle" : {
"comment" : "Subscriptions card subtitle in library",
"localizations" : {