mirror of
https://github.com/warmbly/warmbly.git
synced 2026-10-12 16:02:44 +00:00
feat: draw the iOS sign-in, onboarding, workspace picker and server-unreachable surfaces on the sky photo (showcase card, feature pill, gear and back buttons, step badge, retry and workspace actions) with native Liquid Glass instead of flat frosted tiles
This commit is contained in:
@@ -57,13 +57,6 @@ enum WTheme {
|
||||
: UIColor.white.withAlphaComponent(min(0.8, 0.35 + opacity * 2.5)) })
|
||||
}
|
||||
|
||||
/// A tile's edge on the sky: white on the night, a faint ink line on the photo.
|
||||
static func skyEdge(_ opacity: Double) -> Color {
|
||||
Color(UIColor { $0.userInterfaceStyle == .dark
|
||||
? UIColor.white.withAlphaComponent(opacity)
|
||||
: UIColor(red: 0.07, green: 0.09, blue: 0.15, alpha: 0.08) })
|
||||
}
|
||||
|
||||
// Accent (sky)
|
||||
static let accent = Color.dynamic(light: 0x0A8DE6, dark: 0x3DB8FF)
|
||||
static let accentDeep = Color.dynamic(light: 0x0670C2, dark: 0x0EA5E9)
|
||||
|
||||
@@ -926,22 +926,7 @@ struct FeatureShowcase: View {
|
||||
}
|
||||
.padding(22)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.background {
|
||||
RoundedRectangle(cornerRadius: 24, style: .continuous)
|
||||
.fill(WTheme.skyTile(0.045))
|
||||
.background(.ultraThinMaterial.opacity(0.25), in: RoundedRectangle(cornerRadius: 24, style: .continuous))
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 24, style: .continuous)
|
||||
.strokeBorder(
|
||||
LinearGradient(
|
||||
colors: [.white.opacity(0.22), .white.opacity(0.05)],
|
||||
startPoint: .top,
|
||||
endPoint: .bottom
|
||||
),
|
||||
lineWidth: 1
|
||||
)
|
||||
)
|
||||
}
|
||||
.glassEffect(.regular, in: RoundedRectangle(cornerRadius: 24, style: .continuous))
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
@@ -979,8 +964,7 @@ struct FeatureTicker: View {
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
.padding(.horizontal, 15)
|
||||
.frame(height: 36)
|
||||
.background(WTheme.skyTile(0.14), in: Capsule())
|
||||
.overlay(Capsule().strokeBorder(WTheme.skyEdge(0.25), lineWidth: 1))
|
||||
.glassEffect(.regular, in: Capsule())
|
||||
.id(index)
|
||||
.transition(.blurReplace)
|
||||
}
|
||||
|
||||
@@ -64,8 +64,7 @@ struct FlowSkyButton: View {
|
||||
.font(.system(size: 15, weight: .semibold))
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
.frame(width: 40, height: 40)
|
||||
.background(WTheme.skyTile(0.12), in: Circle())
|
||||
.overlay(Circle().strokeBorder(WTheme.skyEdge(0.16), lineWidth: 1))
|
||||
.glassEffect(.regular.interactive(), in: Circle())
|
||||
}
|
||||
.buttonStyle(PressableButtonStyle())
|
||||
.accessibilityLabel(label)
|
||||
@@ -83,8 +82,7 @@ struct FlowSkyPill: View {
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
.padding(.horizontal, 15)
|
||||
.frame(height: 36)
|
||||
.background(WTheme.skyTile(0.12), in: Capsule())
|
||||
.overlay(Capsule().strokeBorder(WTheme.skyEdge(0.16), lineWidth: 1))
|
||||
.glassEffect(.regular.interactive(), in: Capsule())
|
||||
.buttonStyle(PressableButtonStyle())
|
||||
}
|
||||
}
|
||||
@@ -152,8 +150,7 @@ struct FlowSkyStage: View {
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
.contentTransition(.symbolEffect(.replace))
|
||||
.frame(width: 56, height: 56)
|
||||
.background(WTheme.skyTile(0.16), in: Circle())
|
||||
.overlay(Circle().strokeBorder(WTheme.skyEdge(0.3), lineWidth: 1))
|
||||
.glassEffect(.regular, in: Circle())
|
||||
Text(title)
|
||||
.font(.system(size: 16, weight: .semibold))
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
|
||||
@@ -61,7 +61,7 @@ struct OrgPickerView: View {
|
||||
.foregroundStyle(WTheme.onSky.opacity(0.9))
|
||||
.padding(.horizontal, 14)
|
||||
.frame(height: 34)
|
||||
.background(WTheme.skyTile(0.16), in: Capsule())
|
||||
.glassEffect(.regular.interactive(), in: Capsule())
|
||||
.buttonStyle(PressableButtonStyle())
|
||||
}
|
||||
.padding(.horizontal, 16)
|
||||
@@ -73,14 +73,11 @@ struct OrgPickerView: View {
|
||||
HeroFlightScene()
|
||||
|
||||
VStack(spacing: 12) {
|
||||
ZStack {
|
||||
Circle().fill(WTheme.skyTile(0.16))
|
||||
Circle().strokeBorder(WTheme.skyEdge(0.3), lineWidth: 1)
|
||||
Image(systemName: "person.2.fill")
|
||||
.font(.system(size: 20, weight: .semibold))
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
}
|
||||
.frame(width: 54, height: 54)
|
||||
Image(systemName: "person.2.fill")
|
||||
.font(.system(size: 20, weight: .semibold))
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
.frame(width: 54, height: 54)
|
||||
.glassEffect(.regular, in: Circle())
|
||||
|
||||
Text("Choose a workspace")
|
||||
.font(.system(size: 15.5, weight: .bold))
|
||||
|
||||
@@ -82,7 +82,7 @@ struct UnreachableView: View {
|
||||
.foregroundStyle(WTheme.onSky)
|
||||
.padding(.horizontal, 18)
|
||||
.padding(.vertical, 9)
|
||||
.background(WTheme.skyTile(0.18), in: Capsule())
|
||||
.glassEffect(.regular.interactive(), in: Capsule())
|
||||
}
|
||||
.buttonStyle(TapScaleStyle())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user