Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/Folium-iOS/Extensions/Color.swift
2 views
//
//  Color.swift
//  Folium-iOS
//
//  Created by Jarrod Norwell on 2/7/2025.
//

import SwiftUI
import UIKit

extension Color {
    static let vibrantBlues: [Self] = [
        .init(red: 0.70, green: 0.85, blue: 1.00), // sky blue
        .init(red: 0.55, green: 0.75, blue: 1.00),
        .init(red: 0.40, green: 0.65, blue: 1.00),
        .init(red: 0.30, green: 0.55, blue: 0.95),
        .init(red: 0.20, green: 0.45, blue: 0.90), // vibrant mid blue
        .init(red: 0.15, green: 0.40, blue: 0.80),
        .init(red: 0.10, green: 0.35, blue: 0.70),
        .init(red: 0.05, green: 0.30, blue: 0.60),
        .init(red: 0.00, green: 0.25, blue: 0.50)  // deep navy/teal
    ]
    
    static let vibrantBrowns: [Self] = [
        .init(red: 0.95, green: 0.90, blue: 0.80), // light beige
        .init(red: 0.90, green: 0.80, blue: 0.65),
        .init(red: 0.85, green: 0.70, blue: 0.50),
        .init(red: 0.80, green: 0.60, blue: 0.40),
        .init(red: 0.70, green: 0.50, blue: 0.30), // rich caramel
        .init(red: 0.60, green: 0.40, blue: 0.25),
        .init(red: 0.50, green: 0.30, blue: 0.20),
        .init(red: 0.40, green: 0.25, blue: 0.15),
        .init(red: 0.30, green: 0.20, blue: 0.10)  // deep chocolate
    ]
    
    static let vibrantGolds: [Self] = [
        .init(red: 1.00, green: 0.95, blue: 0.80), // pale champagne gold
        .init(red: 1.00, green: 0.90, blue: 0.60),
        .init(red: 1.00, green: 0.85, blue: 0.45),
        .init(red: 0.98, green: 0.80, blue: 0.30),
        .init(red: 0.95, green: 0.75, blue: 0.15), // vibrant metallic gold
        .init(red: 0.90, green: 0.65, blue: 0.10),
        .init(red: 0.85, green: 0.55, blue: 0.05),
        .init(red: 0.75, green: 0.45, blue: 0.05),
        .init(red: 0.65, green: 0.35, blue: 0.05)  // deep antique gold
    ]
    
    static let vibrantGreens: [Self] = [
        .init(red: 0.70, green: 1.00, blue: 0.70), // bright mint
        .init(red: 0.55, green: 0.95, blue: 0.55),
        .init(red: 0.40, green: 0.90, blue: 0.50),
        .init(red: 0.30, green: 0.85, blue: 0.45),
        .init(red: 0.20, green: 0.80, blue: 0.40), // strong mid green
        .init(red: 0.10, green: 0.75, blue: 0.35),
        .init(red: 0.05, green: 0.65, blue: 0.35),
        .init(red: 0.00, green: 0.55, blue: 0.35),
        .init(red: 0.00, green: 0.45, blue: 0.30)  // deep emerald
    ]
    
    static let vibrantMints: [Self] = [
        .init(red: 0.85, green: 1.00, blue: 0.90), // soft icy mint
        .init(red: 0.75, green: 1.00, blue: 0.85),
        .init(red: 0.65, green: 1.00, blue: 0.80),
        .init(red: 0.55, green: 0.95, blue: 0.75),
        .init(red: 0.45, green: 0.90, blue: 0.70), // vibrant mint green
        .init(red: 0.35, green: 0.85, blue: 0.65),
        .init(red: 0.25, green: 0.75, blue: 0.60),
        .init(red: 0.20, green: 0.65, blue: 0.55),
        .init(red: 0.15, green: 0.55, blue: 0.50)  // deep teal
    ]
    
    static let vibrantOranges: [Self] = [
        .init(red: 1.00, green: 0.85, blue: 0.70), // light peach
        .init(red: 1.00, green: 0.75, blue: 0.55),
        .init(red: 1.00, green: 0.65, blue: 0.40),
        .init(red: 1.00, green: 0.55, blue: 0.25),
        .init(red: 1.00, green: 0.45, blue: 0.10), // vibrant orange
        .init(red: 0.90, green: 0.40, blue: 0.05),
        .init(red: 0.80, green: 0.35, blue: 0.05),
        .init(red: 0.70, green: 0.30, blue: 0.05),
        .init(red: 0.60, green: 0.25, blue: 0.05)  // deep burnt orange
    ]
    
    static let vibrantPinks: [Self] = [
        .init(red: 1.00, green: 0.85, blue: 0.90), // soft pastel pink
        .init(red: 1.00, green: 0.75, blue: 0.85),
        .init(red: 1.00, green: 0.65, blue: 0.80),
        .init(red: 1.00, green: 0.55, blue: 0.75),
        .init(red: 1.00, green: 0.45, blue: 0.70), // vibrant hot pink
        .init(red: 0.95, green: 0.35, blue: 0.65),
        .init(red: 0.90, green: 0.25, blue: 0.60),
        .init(red: 0.80, green: 0.20, blue: 0.55),
        .init(red: 0.70, green: 0.10, blue: 0.50)  // deep magenta
    ]
    
    static let vibrantPurples: [Self] = [
        .init(red: 0.90, green: 0.85, blue: 1.00), // soft lavender
        .init(red: 0.80, green: 0.70, blue: 1.00),
        .init(red: 0.70, green: 0.55, blue: 1.00),
        .init(red: 0.60, green: 0.45, blue: 0.95),
        .init(red: 0.55, green: 0.35, blue: 0.90), // vibrant royal purple
        .init(red: 0.50, green: 0.30, blue: 0.80),
        .init(red: 0.45, green: 0.25, blue: 0.70),
        .init(red: 0.40, green: 0.20, blue: 0.60),
        .init(red: 0.35, green: 0.15, blue: 0.50)  // deep plum
    ]
    
    static let vibrantRainbow: [Self] = [
        .init(red: 1.00, green: 0.30, blue: 0.30), // red
        .init(red: 1.00, green: 0.55, blue: 0.20), // orange
        .init(red: 1.00, green: 0.90, blue: 0.25), // yellow
        .init(red: 0.30, green: 0.85, blue: 0.30), // green
        .init(red: 0.00, green: 0.65, blue: 0.85), // cyan / turquoise
        .init(red: 0.20, green: 0.45, blue: 0.90), // blue
        .init(red: 0.45, green: 0.35, blue: 0.85), // indigo
        .init(red: 0.70, green: 0.40, blue: 0.85), // violet
        .init(red: 0.90, green: 0.35, blue: 0.70)  // magenta
    ]
    
    static let vibrantReds: [Self] = [
        .init(red: 1.00, green: 0.75, blue: 0.75), // light pink
        .init(red: 1.00, green: 0.60, blue: 0.60),
        .init(red: 1.00, green: 0.50, blue: 0.50),
        .init(red: 0.95, green: 0.40, blue: 0.40),
        .init(red: 0.90, green: 0.30, blue: 0.30), // vibrant mid red
        .init(red: 0.80, green: 0.20, blue: 0.20),
        .init(red: 0.70, green: 0.15, blue: 0.15),
        .init(red: 0.60, green: 0.10, blue: 0.10),
        .init(red: 0.50, green: 0.05, blue: 0.05)  // deep crimson
    ]
    
    static let vibrantViolets: [Self] = [
        .init(red: 0.90, green: 0.80, blue: 1.00), // soft lilac
        .init(red: 0.80, green: 0.65, blue: 1.00),
        .init(red: 0.70, green: 0.55, blue: 1.00),
        .init(red: 0.60, green: 0.45, blue: 0.95),
        .init(red: 0.50, green: 0.35, blue: 0.90), // vibrant mid violet
        .init(red: 0.45, green: 0.30, blue: 0.80),
        .init(red: 0.40, green: 0.25, blue: 0.70),
        .init(red: 0.35, green: 0.20, blue: 0.60),
        .init(red: 0.30, green: 0.15, blue: 0.50)  // deep indigo
    ]
    
    static let vibrantYellows: [Self] = [
        .init(red: 1.00, green: 0.98, blue: 0.80), // pale lemon
        .init(red: 1.00, green: 0.95, blue: 0.60),
        .init(red: 1.00, green: 0.90, blue: 0.40),
        .init(red: 1.00, green: 0.85, blue: 0.25),
        .init(red: 1.00, green: 0.80, blue: 0.10), // vibrant golden yellow
        .init(red: 0.95, green: 0.75, blue: 0.05),
        .init(red: 0.90, green: 0.65, blue: 0.00),
        .init(red: 0.80, green: 0.55, blue: 0.00),
        .init(red: 0.70, green: 0.45, blue: 0.00)  // deep amber
    ]
}

extension Color {
    var uiColour: UIColor { .init(self) }
    
    static let coldWarm: [Self] = [
        .init(red: 0.85, green: 0.55, blue: 0.52),
        .init(red: 0.92, green: 0.75, blue: 0.50),
        .init(red: 0.90, green: 0.85, blue: 0.60),
        .init(red: 0.55, green: 0.70, blue: 0.55),
        .init(red: 0.45, green: 0.65, blue: 0.75),
        .init(red: 0.55, green: 0.50, blue: 0.75),
        .init(red: 0.75, green: 0.55, blue: 0.75),
        .init(red: 0.80, green: 0.60, blue: 0.65),
        .init(red: 0.75, green: 0.75, blue: 0.78)
    ]
    
    static let blues: [Self] = [
        .init(red: 0.85, green: 0.92, blue: 1.00),
        .init(red: 0.68, green: 0.80, blue: 0.90),
        .init(red: 0.58, green: 0.70, blue: 0.82),
        .init(red: 0.50, green: 0.60, blue: 0.75),
        .init(red: 0.42, green: 0.52, blue: 0.68),
        .init(red: 0.35, green: 0.45, blue: 0.60),
        .init(red: 0.28, green: 0.38, blue: 0.55),
        .init(red: 0.22, green: 0.32, blue: 0.50),
        .init(red: 0.18, green: 0.26, blue: 0.42)
    ]
    
    static let grays: [Self] = [
        .init(red: 0.95, green: 0.95, blue: 0.95),
        .init(red: 0.85, green: 0.85, blue: 0.85),
        .init(red: 0.75, green: 0.75, blue: 0.75),
        .init(red: 0.60, green: 0.60, blue: 0.60),
        .init(red: 0.50, green: 0.50, blue: 0.50),
        .init(red: 0.40, green: 0.40, blue: 0.40),
        .init(red: 0.30, green: 0.30, blue: 0.30),
        .init(red: 0.20, green: 0.20, blue: 0.20),
        .init(red: 0.10, green: 0.10, blue: 0.10)
    ]
    
    static let graysWithBlue: [Self] = [
        .init(red: 0.94, green: 0.94, blue: 0.97),
        .init(red: 0.83, green: 0.83, blue: 0.88),
        .init(red: 0.73, green: 0.73, blue: 0.78),
        .init(red: 0.58, green: 0.58, blue: 0.65),
        .init(red: 0.48, green: 0.48, blue: 0.55),
        .init(red: 0.38, green: 0.38, blue: 0.45),
        .init(red: 0.28, green: 0.28, blue: 0.35),
        .init(red: 0.18, green: 0.18, blue: 0.25),
        .init(red: 0.08, green: 0.08, blue: 0.15)
    ]
    
    static let graysWithGreen: [Self] = [
        .init(red: 0.94, green: 0.96, blue: 0.94),
        .init(red: 0.83, green: 0.86, blue: 0.83),
        .init(red: 0.73, green: 0.76, blue: 0.73),
        .init(red: 0.58, green: 0.62, blue: 0.58),
        .init(red: 0.48, green: 0.52, blue: 0.48),
        .init(red: 0.38, green: 0.42, blue: 0.38),
        .init(red: 0.28, green: 0.33, blue: 0.28),
        .init(red: 0.18, green: 0.23, blue: 0.18),
        .init(red: 0.08, green: 0.13, blue: 0.08)
    ]
    
    static let graysWithOrange: [Self] = [
        .init(red: 0.97, green: 0.95, blue: 0.90),
        .init(red: 0.88, green: 0.85, blue: 0.80),
        .init(red: 0.78, green: 0.75, blue: 0.70),
        .init(red: 0.63, green: 0.60, blue: 0.55),
        .init(red: 0.53, green: 0.50, blue: 0.45),
        .init(red: 0.43, green: 0.40, blue: 0.35),
        .init(red: 0.33, green: 0.30, blue: 0.25),
        .init(red: 0.23, green: 0.20, blue: 0.15),
        .init(red: 0.13, green: 0.10, blue: 0.05)
    ]
    
    static let greens: [Self] = [
        .init(red: 0.90, green: 0.95, blue: 0.90),
        .init(red: 0.75, green: 0.90, blue: 0.75),
        .init(red: 0.65, green: 0.85, blue: 0.65),
        .init(red: 0.55, green: 0.75, blue: 0.55),
        .init(red: 0.45, green: 0.65, blue: 0.45),
        .init(red: 0.40, green: 0.60, blue: 0.40),
        .init(red: 0.35, green: 0.50, blue: 0.35),
        .init(red: 0.30, green: 0.40, blue: 0.30),
        .init(red: 0.25, green: 0.35, blue: 0.25)
    ]
    
    static let oranges: [Self] = [
        .init(red: 1.00, green: 0.93, blue: 0.88),
        .init(red: 0.95, green: 0.82, blue: 0.72),
        .init(red: 0.88, green: 0.72, blue: 0.60),
        .init(red: 0.80, green: 0.62, blue: 0.48),
        .init(red: 0.72, green: 0.52, blue: 0.38),
        .init(red: 0.65, green: 0.45, blue: 0.32),
        .init(red: 0.55, green: 0.40, blue: 0.28),
        .init(red: 0.45, green: 0.35, blue: 0.22),
        .init(red: 0.38, green: 0.30, blue: 0.18)
    ]
    
    static let purples: [Self] = [
        .init(red: 0.95, green: 0.88, blue: 0.98),
        .init(red: 0.88, green: 0.78, blue: 0.95),
        .init(red: 0.80, green: 0.68, blue: 0.90),
        .init(red: 0.72, green: 0.58, blue: 0.85),
        .init(red: 0.62, green: 0.48, blue: 0.78),
        .init(red: 0.52, green: 0.40, blue: 0.70),
        .init(red: 0.45, green: 0.35, blue: 0.62),
        .init(red: 0.38, green: 0.30, blue: 0.55),
        .init(red: 0.32, green: 0.25, blue: 0.48)
    ]
    
    static let reds: [Self] = [
        .init(red: 1.00, green: 0.90, blue: 0.90),
        .init(red: 0.95, green: 0.75, blue: 0.75),
        .init(red: 0.85, green: 0.65, blue: 0.65),
        .init(red: 0.75, green: 0.55, blue: 0.55),
        .init(red: 0.65, green: 0.45, blue: 0.45),
        .init(red: 0.58, green: 0.38, blue: 0.38),
        .init(red: 0.50, green: 0.32, blue: 0.32),
        .init(red: 0.42, green: 0.26, blue: 0.26),
        .init(red: 0.35, green: 0.20, blue: 0.20)
    ]
    
    static let warm: [Self] = [
        .init(red: 0.78, green: 0.72, blue: 0.60),
        .init(red: 0.72, green: 0.60, blue: 0.48),
        .init(red: 0.64, green: 0.48, blue: 0.38),
        .init(red: 0.58, green: 0.40, blue: 0.42),
        .init(red: 0.50, green: 0.34, blue: 0.50),
        .init(red: 0.42, green: 0.28, blue: 0.58),
        .init(red: 0.36, green: 0.24, blue: 0.54),
        .init(red: 0.28, green: 0.18, blue: 0.44),
        .init(red: 0.20, green: 0.14, blue: 0.34)
    ]
}