feat: initial release v0.1.0
- Custom Keyboard Extension with push-to-talk UI - iOS 26 SpeechAnalyzer + DictationTranscriber (iOS 18 SF fallback) - OpenAI-compatible LLM client (4 built-in providers + custom) - 3-page onboarding flow + provider config UI - App Group shared storage for cross-process config - 8s LLM timeout with raw-transcript fallback - App Store privacy manifests for both targets - SwiftLint + XcodeGen + GitHub Actions CI - Unit tests (4/4 passing)
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
// Theme.swift
|
||||
// OSGKeyboard · Main App
|
||||
//
|
||||
// Centralised colours, fonts, and reusable modifiers so the app looks
|
||||
// coherent. Inspired by Typeless: dark base, soft frosted surfaces,
|
||||
// generous whitespace, large rounded buttons.
|
||||
|
||||
import SwiftUI
|
||||
|
||||
enum Theme {
|
||||
static let background = Color(red: 0.07, green: 0.07, blue: 0.08)
|
||||
static let card = Color(white: 0.12)
|
||||
static let accent = Color(red: 0.36, green: 0.78, blue: 0.98) // soft cyan
|
||||
static let danger = Color(red: 0.97, green: 0.42, blue: 0.45)
|
||||
static let textPrimary = Color.white
|
||||
static let textSecondary = Color(white: 0.7)
|
||||
static let divider = Color(white: 0.18)
|
||||
}
|
||||
|
||||
extension View {
|
||||
func cardStyle() -> some View {
|
||||
self
|
||||
.padding(16)
|
||||
.background(Theme.card, in: RoundedRectangle(cornerRadius: 14, style: .continuous))
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 14, style: .continuous)
|
||||
.stroke(Theme.divider, lineWidth: 0.5)
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user