release(ios): 发布 0.2.1 并重构图标与界面细节
- 应用图标改用与 Web favicon 同源的扁平标记,金色 SIM 卡体加三格递增信号,29pt 下仍可读 - 标签统一为胶囊形状,提高深色主题下的描边权重,避免标签在暗色下消失 - 消息卡片与详情分区卡片收紧行距,单屏信息密度明显提升 - 详情头部指标精简为 4 行,数据模块改为单条读数 - 批量选择勾选框移出名称区域,工具栏控件统一为等高 34pt - 分组编辑器改为点选即生效,移除说明文字与常驻禁用按钮
This commit is contained in:
@@ -28,41 +28,50 @@ private enum AIPalette {
|
||||
dynamicColor(light: light, dark: dark)
|
||||
}
|
||||
|
||||
static let canvas = color(light: rgba(245, 246, 248, 1), dark: rgba(6, 7, 9, 1))
|
||||
static let surface = color(light: rgba(255, 255, 255, 1), dark: rgba(18, 20, 24, 1))
|
||||
static let surfaceRaised = color(light: rgba(251, 252, 253, 1), dark: rgba(27, 30, 35, 1))
|
||||
static let control = color(light: rgba(243, 245, 247, 1), dark: rgba(26, 29, 34, 1))
|
||||
static let chrome = color(light: rgba(255, 255, 255, 0.82), dark: rgba(11, 12, 15, 0.82))
|
||||
static let ink = color(light: rgba(15, 18, 22, 1), dark: rgba(243, 245, 247, 1))
|
||||
static let muted = color(light: rgba(98, 107, 119, 1), dark: rgba(151, 160, 172, 1))
|
||||
static let line = color(light: rgba(227, 230, 234, 1), dark: rgba(255, 255, 255, 0.09))
|
||||
static let brand = color(light: rgba(13, 15, 18, 1), dark: rgba(8, 9, 11, 1))
|
||||
static let primary = color(light: rgba(17, 20, 25, 1), dark: rgba(220, 178, 111, 1))
|
||||
static let primaryTop = color(light: rgba(43, 49, 58, 1), dark: rgba(240, 209, 154, 1))
|
||||
static let primaryBottom = color(light: rgba(15, 18, 22, 1), dark: rgba(198, 154, 92, 1))
|
||||
static let onPrimary = color(light: rgba(255, 255, 255, 1), dark: rgba(12, 14, 17, 1))
|
||||
static let danger = color(light: rgba(190, 65, 57, 1), dark: rgba(242, 124, 113, 1))
|
||||
static let onDanger = color(light: rgba(255, 255, 255, 1), dark: rgba(22, 9, 8, 1))
|
||||
static let warning = color(light: rgba(170, 111, 23, 1), dark: rgba(226, 166, 65, 1))
|
||||
static let success = color(light: rgba(50, 150, 101, 1), dark: rgba(103, 198, 148, 1))
|
||||
// 浅色:中性冷灰底 + 纯白卡 + 极浅内嵌面,避免"灰蓝蒙层"把层级糊成一团。
|
||||
static let canvas = color(light: rgba(242, 244, 248, 1), dark: rgba(7, 10, 16, 1))
|
||||
static let surface = color(light: rgba(255, 255, 255, 1), dark: rgba(20, 26, 36, 1))
|
||||
static let surfaceRaised = color(light: rgba(255, 255, 255, 1), dark: rgba(26, 35, 49, 1))
|
||||
static let control = color(light: rgba(237, 241, 247, 1), dark: rgba(34, 44, 60, 1))
|
||||
static let tile = color(light: rgba(247, 249, 252, 1), dark: rgba(255, 255, 255, 0.05))
|
||||
static let tileLine = color(light: rgba(233, 239, 247, 1), dark: rgba(255, 255, 255, 0.08))
|
||||
static let chrome = color(light: rgba(255, 255, 255, 0.90), dark: rgba(12, 17, 25, 0.86))
|
||||
static let ink = color(light: rgba(15, 23, 41, 1), dark: rgba(241, 245, 249, 1))
|
||||
static let muted = color(light: rgba(92, 106, 128, 1), dark: rgba(154, 167, 184, 1))
|
||||
static let faint = color(light: rgba(141, 152, 170, 1), dark: rgba(112, 127, 148, 1))
|
||||
static let line = color(light: rgba(224, 231, 240, 1), dark: rgba(255, 255, 255, 0.10))
|
||||
static let brand = color(light: rgba(11, 27, 51, 1), dark: rgba(7, 10, 16, 1))
|
||||
static let primary = color(light: rgba(18, 96, 214, 1), dark: rgba(96, 165, 250, 1))
|
||||
static let onPrimary = color(light: rgba(255, 255, 255, 1), dark: rgba(5, 22, 43, 1))
|
||||
static let danger = color(light: rgba(199, 44, 44, 1), dark: rgba(248, 113, 113, 1))
|
||||
static let onDanger = color(light: rgba(255, 255, 255, 1), dark: rgba(24, 7, 7, 1))
|
||||
static let warning = color(light: rgba(176, 84, 12, 1), dark: rgba(245, 158, 11, 1))
|
||||
static let success = color(light: rgba(16, 124, 90, 1), dark: rgba(74, 222, 128, 1))
|
||||
static let segmentTrack = color(light: rgba(236, 240, 246, 1), dark: rgba(12, 17, 25, 1))
|
||||
static let segmentSelected = color(light: rgba(255, 255, 255, 1), dark: rgba(48, 61, 81, 1))
|
||||
static let cardShadow = color(light: rgba(15, 30, 60, 0.07), dark: rgba(0, 0, 0, 0.55))
|
||||
#elseif canImport(AppKit)
|
||||
static let canvas = Color(red: 0.953, green: 0.961, blue: 0.973)
|
||||
static let canvas = Color(red: 0.914, green: 0.933, blue: 0.961)
|
||||
static let surface = Color.white
|
||||
static let control = Color(red: 0.969, green: 0.976, blue: 0.984)
|
||||
static let ink = Color(red: 0.110, green: 0.153, blue: 0.220)
|
||||
static let muted = Color(red: 0.435, green: 0.486, blue: 0.561)
|
||||
static let line = Color(red: 0.878, green: 0.898, blue: 0.922)
|
||||
static let brand = Color(red: 0.075, green: 0.118, blue: 0.188)
|
||||
static let surfaceRaised = Color(red: 0.984, green: 0.988, blue: 0.992)
|
||||
static let chrome = Color.white.opacity(0.82)
|
||||
static let control = Color(red: 0.941, green: 0.957, blue: 0.980)
|
||||
static let ink = Color(red: 0.035, green: 0.086, blue: 0.169)
|
||||
static let muted = Color(red: 0.275, green: 0.341, blue: 0.435)
|
||||
static let line = Color(red: 0.827, green: 0.867, blue: 0.918)
|
||||
static let brand = Color(red: 0.035, green: 0.086, blue: 0.169)
|
||||
static let surfaceRaised = Color.white
|
||||
static let chrome = Color.white.opacity(0.86)
|
||||
static let onPrimary = Color.white
|
||||
static let onDanger = Color.white
|
||||
static let primary = Color(red: 0.067, green: 0.078, blue: 0.098)
|
||||
static let primaryTop = Color(red: 0.17, green: 0.19, blue: 0.23)
|
||||
static let primaryBottom = Color(red: 0.06, green: 0.07, blue: 0.09)
|
||||
static let danger = Color(red: 0.745, green: 0.255, blue: 0.224)
|
||||
static let warning = Color(red: 0.667, green: 0.435, blue: 0.09)
|
||||
static let success = Color(red: 0.196, green: 0.588, blue: 0.396)
|
||||
static let primary = Color(red: 0.145, green: 0.388, blue: 0.922)
|
||||
static let danger = Color(red: 0.784, green: 0.118, blue: 0.118)
|
||||
static let warning = Color(red: 0.706, green: 0.325, blue: 0.035)
|
||||
static let success = Color(red: 0.071, green: 0.502, blue: 0.361)
|
||||
static let tile = Color(red: 0.969, green: 0.976, blue: 0.988)
|
||||
static let tileLine = Color(red: 0.914, green: 0.937, blue: 0.969)
|
||||
static let faint = Color(red: 0.553, green: 0.596, blue: 0.667)
|
||||
static let segmentTrack = Color(red: 0.925, green: 0.941, blue: 0.965)
|
||||
static let segmentSelected = Color.white
|
||||
static let cardShadow = Color(red: 0.059, green: 0.118, blue: 0.235).opacity(0.07)
|
||||
#else
|
||||
private static func color(_ red: CGFloat, _ green: CGFloat, _ blue: CGFloat) -> Color {
|
||||
Color(red: red / 255, green: green / 255, blue: blue / 255)
|
||||
@@ -80,11 +89,15 @@ private enum AIPalette {
|
||||
static let onPrimary = color(255, 255, 255)
|
||||
static let onDanger = color(255, 255, 255)
|
||||
static let primary = color(17, 20, 25)
|
||||
static let primaryTop = color(43, 49, 58)
|
||||
static let primaryBottom = color(15, 18, 22)
|
||||
static let danger = color(190, 65, 57)
|
||||
static let warning = color(170, 111, 23)
|
||||
static let success = color(50, 150, 101)
|
||||
static let tile = color(247, 249, 252)
|
||||
static let tileLine = color(233, 239, 247)
|
||||
static let faint = color(141, 152, 170)
|
||||
static let segmentTrack = color(236, 240, 246)
|
||||
static let segmentSelected = color(255, 255, 255)
|
||||
static let cardShadow = color(15, 30, 60)
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -93,30 +106,39 @@ public enum AITheme {
|
||||
public static let surface = AIPalette.surface
|
||||
public static let surfaceRaised = AIPalette.surfaceRaised
|
||||
public static let control = AIPalette.control
|
||||
public static let tile = AIPalette.tile
|
||||
public static let tileLine = AIPalette.tileLine
|
||||
public static let chrome = AIPalette.chrome
|
||||
public static let ink = AIPalette.ink
|
||||
public static let muted = AIPalette.muted
|
||||
public static let faint = AIPalette.faint
|
||||
public static let line = AIPalette.line
|
||||
public static let brand = AIPalette.brand
|
||||
public static let primary = AIPalette.primary
|
||||
public static let primaryTop = AIPalette.primaryTop
|
||||
public static let primaryBottom = AIPalette.primaryBottom
|
||||
public static let onPrimary = AIPalette.onPrimary
|
||||
public static let danger = AIPalette.danger
|
||||
public static let onDanger = AIPalette.onDanger
|
||||
public static let warning = AIPalette.warning
|
||||
public static let success = AIPalette.success
|
||||
public static let segmentTrack = AIPalette.segmentTrack
|
||||
public static let segmentSelected = AIPalette.segmentSelected
|
||||
public static let cardShadow = AIPalette.cardShadow
|
||||
|
||||
public static let buttonHeight: CGFloat = 48
|
||||
public static let compactButtonHeight: CGFloat = 44
|
||||
public static let largeButtonHeight: CGFloat = 56
|
||||
public static let toolbarButtonHeight: CGFloat = 44
|
||||
public static let iconButtonSize: CGFloat = 44
|
||||
// 导航栏只给约 38pt 高度,44pt 的方块会被上下裁切,所以工具栏图标按钮单独取 34。
|
||||
public static let iconButtonSize: CGFloat = 34
|
||||
public static let iconButtonRadius: CGFloat = 11
|
||||
public static let buttonRadius: CGFloat = 16
|
||||
public static let cardRadius: CGFloat = 22
|
||||
public static let inputRadius: CGFloat = 16
|
||||
public static let inputHeight: CGFloat = 52
|
||||
public static let segmentedControlHeight: CGFloat = 44
|
||||
public static let tileRadius: CGFloat = 14
|
||||
public static let chipHeight: CGFloat = 34
|
||||
public static let compactControlHeight: CGFloat = 44
|
||||
public static let compactButtonMinWidth: CGFloat = 72
|
||||
public static let regularButtonMinWidth: CGFloat = 88
|
||||
public static let toolbarButtonMinWidth: CGFloat = 96
|
||||
|
||||
Reference in New Issue
Block a user