Compare commits

...

4 Commits

50 changed files with 1147 additions and 53 deletions

View File

@ -441,8 +441,7 @@
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "SelfieCam needs photo library access to automatically save your captured photos to your device, making them available in the Photos app and other compatible applications.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_BackgroundColor = LaunchBackground;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
@ -479,8 +478,7 @@
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "SelfieCam needs photo library access to automatically save your captured photos to your device, making them available in the Photos app and other compatible applications.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_BackgroundColor = LaunchBackground;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 18.6;

View File

@ -1,4 +1,4 @@
//
//
// SelfieCamApp.swift
// SelfieCam
//
@ -16,8 +16,14 @@ struct SelfieCamApp: App {
var body: some Scene {
WindowGroup {
AppLaunchView(config: .selfieCam) {
ContentView()
ZStack {
Color.BrandColors.primary
.ignoresSafeArea()
AppLaunchView(config: .selfieCam) {
ContentView()
.preferredColorScheme(.dark)
}
}
}
}

View File

@ -60,6 +60,8 @@ struct ContentView: View {
.transition(.opacity)
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.BrandColors.primary.ignoresSafeArea())
// Settings button overlay - only show when NOT in photo review mode
.overlay(alignment: .topTrailing) {
if !showPhotoReview {

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.65", "green": "0.18", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.65", "green": "0.18", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.65", "green": "0.18", "blue": "0.35" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.95", "blue": "0.90" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.95", "blue": "0.90" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.95", "blue": "0.90" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.300", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.300", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.300", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.200", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.200", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.200", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.45", "green": "0.12", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.45", "green": "0.12", "blue": "0.35" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.45", "green": "0.12", "blue": "0.35" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.700", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.700", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.700", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.800", "red": "1.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.800", "red": "1.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.800", "red": "1.000", "green": "0.000", "blue": "0.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.75", "green": "0.20", "blue": "0.40" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.75", "green": "0.20", "blue": "0.40" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.75", "green": "0.20", "blue": "0.40" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.40", "blue": "0.55" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.40", "blue": "0.55" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.40", "blue": "0.55" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.95", "green": "0.45", "blue": "0.60" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.100", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.000", "green": "0.000", "blue": "0.000" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "1.000", "green": "1.000", "blue": "1.000" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.150", "red": "0.85", "green": "0.25", "blue": "0.45" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.9", "green": "0.3", "blue": "0.3" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.9", "green": "0.3", "blue": "0.3" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.9", "green": "0.3", "blue": "0.3" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.5", "green": "0.7", "blue": "0.95" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.5", "green": "0.7", "blue": "0.95" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.5", "green": "0.7", "blue": "0.95" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.2", "green": "0.8", "blue": "0.4" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.2", "green": "0.8", "blue": "0.4" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.2", "green": "0.8", "blue": "0.4" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.75", "blue": "0.2" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.75", "blue": "0.2" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.75", "blue": "0.2" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.14", "green": "0.10", "blue": "0.16" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.94", "green": "0.92", "blue": "0.93" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.14", "green": "0.10", "blue": "0.16" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.09", "blue": "0.14" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.96", "green": "0.95", "blue": "0.96" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.09", "blue": "0.14" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.10", "green": "0.07", "blue": "0.12" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.98", "green": "0.97", "blue": "0.98" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.10", "green": "0.07", "blue": "0.12" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.08", "green": "0.06", "blue": "0.10" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "0.98", "blue": "0.98" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.08", "green": "0.06", "blue": "0.10" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.08", "blue": "0.14" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.96", "green": "0.94", "blue": "0.95" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.12", "green": "0.08", "blue": "0.14" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.12", "blue": "0.18" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.92", "green": "0.90", "blue": "0.91" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.12", "blue": "0.18" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.11", "blue": "0.18" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.92", "green": "0.89", "blue": "0.91" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.16", "green": "0.11", "blue": "0.18" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,4 @@
{
"info" : { "author" : "xcode", "version" : 1 },
"properties" : { "provides-namespace" : true }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.250", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.250", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.250", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.350", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.350", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.350", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "1.000", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.650", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.650", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.650", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,28 @@
{
"colors" : [
{
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "light" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "0.0", "green": "0.0", "blue": "0.0" }
}
},
{
"appearances" : [ { "appearance": "luminosity", "value": "dark" } ],
"idiom" : "universal",
"color" : {
"color-space" : "display-p3",
"components" : { "alpha": "0.500", "red": "1.0", "green": "1.0", "blue": "1.0" }
}
}
],
"info" : { "author" : "xcode", "version" : 1 }
}

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.85" green="0.25" blue="0.45" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

View File

@ -1,4 +1,4 @@
//
//
// BrandingConfig.swift
// SelfieCam
//
@ -12,15 +12,15 @@ import Bedrock
extension Color {
/// SelfieCam branding colors for icon and launch screen.
enum Branding {
enum BrandColors {
/// Primary gradient color - rich magenta/rose for a vibrant, modern selfie aesthetic.
static let primary = Color(red: 0.85, green: 0.25, blue: 0.45)
static let primary = Color("Branding/primary")
/// Secondary gradient color - deeper magenta/purple for depth.
static let secondary = Color(red: 0.45, green: 0.12, blue: 0.35)
static let secondary = Color("Branding/secondary")
/// Accent color - soft white/cream for clean, bright text and icons.
static let accent = Color.white
static let accent = Color("Branding/accent")
}
}
@ -33,9 +33,9 @@ extension AppIconConfig {
title: "SELFIE",
subtitle: "CAM",
iconSymbol: "camera.fill",
primaryColor: Color.Branding.primary,
secondaryColor: Color.Branding.secondary,
accentColor: Color.Branding.accent
primaryColor: Color.BrandColors.primary,
secondaryColor: Color.BrandColors.secondary,
accentColor: Color.BrandColors.accent
)
}
@ -52,9 +52,9 @@ extension LaunchScreenConfig {
decorativeSymbol: "circle.fill",
patternStyle: .radial,
layoutStyle: .iconAboveTitle,
primaryColor: Color.Branding.primary,
secondaryColor: Color.Branding.secondary,
accentColor: Color.Branding.accent,
primaryColor: Color.BrandColors.primary,
secondaryColor: Color.BrandColors.secondary,
accentColor: Color.BrandColors.accent,
titleColor: .white,
iconSize: 52,
titleSize: 38,

View File

@ -1,4 +1,4 @@
//
//
// SelfieCamTheme.swift
// SelfieCam
//
@ -15,37 +15,37 @@ import Bedrock
/// Provides more visual separation than neutral grays.
public enum SelfieCamSurfaceColors: SurfaceColorProvider {
/// Primary background - deep rose-tinted dark
public static let primary = Color(red: 0.08, green: 0.06, blue: 0.10)
public static let primary = Color("Surface/primary")
/// Secondary/elevated surface - slightly lighter with rose tint
public static let secondary = Color(red: 0.12, green: 0.08, blue: 0.14)
public static let secondary = Color("Surface/secondary")
/// Tertiary/card surface - more elevated
public static let tertiary = Color(red: 0.16, green: 0.11, blue: 0.18)
public static let tertiary = Color("Surface/tertiary")
/// Overlay background (for sheets/modals) - deep with subtle rose
public static let overlay = Color(red: 0.10, green: 0.07, blue: 0.12)
public static let overlay = Color("Surface/overlay")
/// Card/grouped element background - distinct from primary
public static let card = Color(red: 0.14, green: 0.10, blue: 0.16)
public static let card = Color("Surface/card")
/// Subtle fill for grouped content sections
public static let groupedFill = Color(red: 0.12, green: 0.09, blue: 0.14)
public static let groupedFill = Color("Surface/groupedFill")
/// Section fill for list sections - slightly more visible
public static let sectionFill = Color(red: 0.16, green: 0.12, blue: 0.18)
public static let sectionFill = Color("Surface/sectionFill")
}
// MARK: - SelfieCam Text Colors
/// Text colors optimized for rose-tinted dark backgrounds.
public enum SelfieCamTextColors: TextColorProvider {
public static let primary = Color.white
public static let secondary = Color.white.opacity(Design.Opacity.accent)
public static let tertiary = Color.white.opacity(Design.Opacity.medium)
public static let disabled = Color.white.opacity(Design.Opacity.light)
public static let placeholder = Color.white.opacity(Design.Opacity.overlay)
public static let inverse = Color.black
public static let primary = Color("Text/primary")
public static let secondary = Color("Text/secondary")
public static let tertiary = Color("Text/tertiary")
public static let disabled = Color("Text/disabled")
public static let placeholder = Color("Text/placeholder")
public static let inverse = Color("Text/inverse")
}
// MARK: - SelfieCam Accent Colors
@ -53,57 +53,57 @@ public enum SelfieCamTextColors: TextColorProvider {
/// Accent colors derived from the app's branding magenta/rose.
public enum SelfieCamAccentColors: AccentColorProvider {
/// Primary accent - bright magenta/rose from branding
public static let primary = Color(red: 0.85, green: 0.25, blue: 0.45)
public static let primary = Color("Accent/primary")
/// Light variant - softer pink
public static let light = Color(red: 0.95, green: 0.45, blue: 0.60)
public static let light = Color("Accent/light")
/// Dark variant - deeper magenta
public static let dark = Color(red: 0.65, green: 0.18, blue: 0.35)
public static let dark = Color("Accent/dark")
/// Secondary accent - soft cream/warm white for contrast
public static let secondary = Color(red: 1.0, green: 0.95, blue: 0.90)
public static let secondary = Color("Accent/secondary")
}
// MARK: - SelfieCam Button Colors
/// Button colors matching the branded theme.
public enum SelfieCamButtonColors: ButtonColorProvider {
public static let primaryLight = Color(red: 0.95, green: 0.40, blue: 0.55)
public static let primaryDark = Color(red: 0.75, green: 0.20, blue: 0.40)
public static let secondary = Color.white.opacity(Design.Opacity.subtle)
public static let destructive = Color.red.opacity(Design.Opacity.heavy)
public static let cancelText = Color.white.opacity(Design.Opacity.strong)
public static let primaryLight = Color("Button/primaryLight")
public static let primaryDark = Color("Button/primaryDark")
public static let secondary = Color("Button/secondary")
public static let destructive = Color("Button/destructive")
public static let cancelText = Color("Button/cancelText")
}
// MARK: - SelfieCam Status Colors
/// Standard semantic status colors.
public enum SelfieCamStatusColors: StatusColorProvider {
public static let success = Color(red: 0.2, green: 0.8, blue: 0.4)
public static let warning = Color(red: 1.0, green: 0.75, blue: 0.2)
public static let error = Color(red: 0.9, green: 0.3, blue: 0.3)
public static let info = Color(red: 0.5, green: 0.7, blue: 0.95)
public static let success = Color("Status/success")
public static let warning = Color("Status/warning")
public static let error = Color("Status/error")
public static let info = Color("Status/info")
}
// MARK: - SelfieCam Border Colors
/// Border colors for the rose-tinted theme.
public enum SelfieCamBorderColors: BorderColorProvider {
public static let subtle = Color.white.opacity(Design.Opacity.subtle)
public static let standard = Color.white.opacity(Design.Opacity.hint)
public static let emphasized = Color.white.opacity(Design.Opacity.light)
public static let selected = SelfieCamAccentColors.primary.opacity(Design.Opacity.medium)
public static let subtle = Color("Border/subtle")
public static let standard = Color("Border/standard")
public static let emphasized = Color("Border/emphasized")
public static let selected = Color("Border/selected")
}
// MARK: - SelfieCam Interactive Colors
/// Interactive state colors for the theme.
public enum SelfieCamInteractiveColors: InteractiveColorProvider {
public static let selected = SelfieCamAccentColors.primary.opacity(Design.Opacity.selection)
public static let hover = Color.white.opacity(Design.Opacity.subtle)
public static let pressed = Color.white.opacity(Design.Opacity.hint)
public static let focus = SelfieCamAccentColors.light
public static let selected = Color("Interactive/selected")
public static let hover = Color("Interactive/hover")
public static let pressed = Color("Interactive/pressed")
public static let focus = Color("Interactive/focus")
}
// MARK: - SelfieCam Theme