ironOS native ios app
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: better ui

+22 -14
ios/PinecilTime.xcodeproj/project.xcworkspace/xcuserdata/kierank.xcuserdatad/UserInterfaceState.xcuserstate

This is a binary file and will not be displayed.

+21 -13
ios/PinecilTime/ContentView.swift
··· 84 84 // Device name 85 85 Text(bleManager.deviceName) 86 86 .font(.subheadline.bold()) 87 + .lineLimit(1) 88 + .truncationMode(.tail) 87 89 88 - Spacer() 90 + Spacer(minLength: 8) 89 91 90 92 // Stats 91 93 HStack(spacing: 12) { ··· 93 95 statItem(value: String(format: "%.1f", bleManager.liveData.voltage), unit: "V") 94 96 statItem(value: "\(bleManager.liveData.powerPercent)", unit: "%") 95 97 } 98 + .layoutPriority(1) 96 99 97 100 // Mode indicator 98 101 if let mode = bleManager.liveData.mode { 99 102 Image(systemName: mode.icon) 103 + .font(.caption) 100 104 .foregroundStyle(mode.isActive ? .orange : .secondary) 101 105 } 102 106 } ··· 126 130 // MARK: - Slider Panel 127 131 128 132 private var sliderPanel: some View { 129 - VStack(spacing: 12) { 130 - HStack { 131 - Text("Target") 132 - .font(.subheadline) 133 + HStack(spacing: 16) { 134 + // Target temperature display 135 + HStack(alignment: .firstTextBaseline, spacing: 1) { 136 + Text("\(Int(targetTemp))") 137 + .font(.system(size: 24, weight: .semibold, design: .rounded)) 138 + .contentTransition(.numericText()) 139 + Text("°") 140 + .font(.system(size: 14, weight: .regular)) 133 141 .foregroundStyle(.secondary) 134 - Spacer() 135 - Text("\(Int(targetTemp))°C") 136 - .font(.subheadline.monospacedDigit().bold()) 137 - .foregroundStyle(colorForTemp(targetTemp, maxTemp: 450)) 138 142 } 143 + .foregroundStyle(colorForTemp(targetTemp, maxTemp: 450)) 144 + .frame(width: 60) 139 145 146 + // Slider 140 147 Slider( 141 148 value: $targetTemp, 142 149 in: 10...450, ··· 161 168 } 162 169 } 163 170 .padding(.horizontal, 20) 164 - .padding(.vertical, 16) 165 - .background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 20)) 171 + .padding(.vertical, 14) 172 + .background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16)) 166 173 } 167 174 168 175 // MARK: - Helpers ··· 175 182 .font(.caption2) 176 183 .foregroundStyle(.secondary) 177 184 } 185 + .fixedSize() 178 186 } 179 187 180 188 private func colorForTemp(_ temp: Double, maxTemp: Double) -> Color { ··· 212 220 .ignoresSafeArea() 213 221 214 222 VStack(spacing: 20) { 215 - if bleManager.isScanning || bleManager.connectionState == .connecting { 223 + if bleManager.isScanning || bleManager.connectionState == BLEManager.ConnectionState.connecting { 216 224 ProgressView() 217 225 .scaleEffect(1.2) 218 226 .padding(.bottom, 4) 219 227 220 - Text(bleManager.connectionState == .connecting ? "Connecting..." : "Scanning...") 228 + Text(bleManager.connectionState == BLEManager.ConnectionState.connecting ? "Connecting..." : "Scanning...") 221 229 .font(.headline) 222 230 223 231 Text("Looking for your Pinecil")
+1 -1
ios/PinecilTime/Models.swift
··· 35 35 36 36 var icon: String { 37 37 switch self { 38 - case .homeScreen: return "house" 38 + case .homeScreen: return "powerplug" 39 39 case .soldering: return "flame.fill" 40 40 case .sleeping: return "moon.zzz.fill" 41 41 case .settingsMenu: return "gear"