From 9a853f8777230e0639261b5bc817201ec2d9deca Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Thu, 14 May 2026 12:52:26 -0500 Subject: fix: center align medium widget --- Hutch.xcodeproj/project.pbxproj | 24 +++++----- HutchWidgetExtension/NeedsAttentionWidget.swift | 62 ++++++++++++------------- 2 files changed, 41 insertions(+), 45 deletions(-) diff --git a/Hutch.xcodeproj/project.pbxproj b/Hutch.xcodeproj/project.pbxproj index 3db982e..5d9aef3 100644 --- a/Hutch.xcodeproj/project.pbxproj +++ b/Hutch.xcodeproj/project.pbxproj @@ -597,7 +597,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Hutch/Hutch.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 85; + CURRENT_PROJECT_VERSION = 86; DEVELOPMENT_TEAM = ZCNAX3VL9D; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -614,7 +614,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.4.0; + MARKETING_VERSION = 3.4.1; PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -634,7 +634,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Hutch/Hutch.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 85; + CURRENT_PROJECT_VERSION = 86; DEVELOPMENT_TEAM = ZCNAX3VL9D; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -651,7 +651,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.4.0; + MARKETING_VERSION = 3.4.1; PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -714,7 +714,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_ENTITLEMENTS = HutchWidgetExtension/HutchWidgetExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 85; + CURRENT_PROJECT_VERSION = 86; DEVELOPMENT_TEAM = ZCNAX3VL9D; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = HutchWidgetExtension/Info.plist; @@ -724,7 +724,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 3.4.0; + MARKETING_VERSION = 3.4.1; PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchWidgetExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -743,7 +743,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_ENTITLEMENTS = HutchWidgetExtension/HutchWidgetExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 85; + CURRENT_PROJECT_VERSION = 86; DEVELOPMENT_TEAM = ZCNAX3VL9D; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = HutchWidgetExtension/Info.plist; @@ -753,7 +753,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 3.4.0; + MARKETING_VERSION = 3.4.1; PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchWidgetExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -772,7 +772,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 84; + CURRENT_PROJECT_VERSION = 86; DEVELOPMENT_TEAM = ZCNAX3VL9D; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = HutchSafariExtension/Info.plist; @@ -782,7 +782,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 3.3.1; + MARKETING_VERSION = 3.4.1; PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchSafariExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -801,7 +801,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 84; + CURRENT_PROJECT_VERSION = 86; DEVELOPMENT_TEAM = ZCNAX3VL9D; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = HutchSafariExtension/Info.plist; @@ -811,7 +811,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 3.3.1; + MARKETING_VERSION = 3.4.1; PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchSafariExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/HutchWidgetExtension/NeedsAttentionWidget.swift b/HutchWidgetExtension/NeedsAttentionWidget.swift index 016f1c9..f682177 100644 --- a/HutchWidgetExtension/NeedsAttentionWidget.swift +++ b/HutchWidgetExtension/NeedsAttentionWidget.swift @@ -99,37 +99,34 @@ private struct NeedsAttentionWidgetView: View { } private func mediumView(snapshot: NeedsAttentionSnapshot) -> some View { - VStack(alignment: .leading, spacing: 0) { - HStack(alignment: .top, spacing: 12) { - Link(destination: HutchDeepLinkURL.home) { - metricColumn( - count: snapshot.unreadInboxThreads, - label: "Unread", - systemImage: "tray", - tint: unreadTint(for: snapshot.unreadInboxThreads) - ) - } - Link(destination: HutchDeepLinkURL.trackers) { - metricColumn( - count: snapshot.assignedOpenTickets, - label: "Assigned", - systemImage: "ticket" - ) - } - Link(destination: HutchDeepLinkURL.builds) { - metricColumn( - count: snapshot.failedBuilds, - label: "Failed", - systemImage: "hammer", - tint: failedTint(for: snapshot.failedBuilds) - ) - } + HStack(alignment: .center, spacing: 12) { + Link(destination: HutchDeepLinkURL.home) { + metricColumn( + count: snapshot.unreadInboxThreads, + label: "Unread", + systemImage: "tray", + tint: unreadTint(for: snapshot.unreadInboxThreads) + ) + } + Link(destination: HutchDeepLinkURL.trackers) { + metricColumn( + count: snapshot.assignedOpenTickets, + label: "Assigned", + systemImage: "ticket" + ) + } + Link(destination: HutchDeepLinkURL.builds) { + metricColumn( + count: snapshot.failedBuilds, + label: "Failed", + systemImage: "hammer", + tint: failedTint(for: snapshot.failedBuilds) + ) } - Spacer(minLength: 0) } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .padding(.horizontal, 16) - .padding(.top, 18) - .padding(.bottom, 16) + .padding(.vertical, 16) } private func largeView(snapshot: NeedsAttentionSnapshot) -> some View { @@ -203,13 +200,12 @@ private struct NeedsAttentionWidgetView: View { } private func metricColumn(count: Int?, label: String, systemImage: String, tint: Color = .primary) -> some View { - VStack(alignment: .leading, spacing: 8) { + VStack(alignment: .center, spacing: 8) { HStack(alignment: .center, spacing: 10) { Image(systemName: systemImage) .font(.title3.weight(.semibold)) .foregroundStyle(tint) - .frame(width: 24, alignment: .leading) - .padding(.trailing, 4) + .frame(width: 24, alignment: .center) Text(displayCount(count)) .font(.system(size: 28, weight: .semibold, design: .rounded)) .monospacedDigit() @@ -222,9 +218,9 @@ private struct NeedsAttentionWidgetView: View { .foregroundStyle(.secondary) .lineLimit(1) .minimumScaleFactor(0.85) - .frame(height: 16, alignment: .topLeading) + .frame(height: 16, alignment: .center) } - .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + .frame(maxWidth: .infinity, alignment: .center) } private func metricRow(count: Int?, label: String, systemImage: String, tint: Color = .primary) -> some View { -- cgit v1.2.3