feat(apple/widgets): Dynamic Island rebuild + brand purple everywhere (re-landed post-rebase)

Re-lands the island rebuild: a concurrent session's pull-rebase reordered the
pick against the canvas-previews commit and the pre-rebuild file content won;
the working tree kept the intended final state (BrandColor.swift itself
survived tracked). Content identical to the original commit message:

The widgets rendered system BLUE because Color.brand lived in PunktfunkKit,
which the extension never links — moved to PunktfunkShared (Kit re-exports
Shared). Island rebuilt: expanded = identity leading + elapsed clock trailing
+ one purposeful bottom row (status dot/stage + live latency/bitrate stats
line, End at the trailing edge); compact trailing = the one glanceable number
(live latency green / disconnect countdown orange / state glyph); keylineTint
brand. Lock Screen banner shares the same StatusLine/StatsLine pieces.

swift build + PunktfunkWidgetsExtension build green on the rebased base.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 16:36:36 +02:00
parent b781b38b77
commit a65c47874d
3 changed files with 162 additions and 68 deletions
@@ -94,7 +94,7 @@ private struct SmallHostView: View {
VStack(alignment: .leading, spacing: 6) {
Image(systemName: "play.tv.fill")
.font(.title2)
.foregroundStyle(.tint)
.foregroundStyle(Color.brand)
Spacer(minLength: 0)
Text(host.displayName)
.font(.headline)
@@ -122,12 +122,12 @@ private struct MediumHostsView: View {
VStack(alignment: .leading, spacing: 8) {
Text("Punktfunk")
.font(.caption).bold()
.foregroundStyle(.tint)
.foregroundStyle(Color.brand)
ForEach(hosts.prefix(4)) { host in
Link(destination: connectURL(host)) {
HStack {
Image(systemName: "play.tv.fill")
.foregroundStyle(.tint)
.foregroundStyle(Color.brand)
Text(host.displayName)
.font(.subheadline)
.lineLimit(1)