// // Line.swift // VDS // // Created by Nadigadda, Sumanth on 24/03/23. // import Foundation import UIKit import VDSColorTokens @objc(VDSLine) open class Line: View { //-------------------------------------------------- // MARK: - Enums //-------------------------------------------------- public enum Style: String, CaseIterable { case primary, secondary } public enum Orientation: String, CaseIterable { case horizontal, vertical } //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- open var style: Style = .primary { didSet { setNeedsUpdate() } } open var orientation: Orientation = .horizontal { didSet { setNeedsUpdate() } } //-------------------------------------------------- // MARK: - Configuration //-------------------------------------------------- open var lineViewColorConfiguration: AnyColorable = { let config = KeyedColorConfiguration(keyPath: \.style) config.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forKey: .primary) config.setSurfaceColors(VDSColor.elementsLowcontrastOnlight, VDSColor.elementsLowcontrastOndark, forKey: .secondary) return config.eraseToAnyColorable() }() //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- open override var intrinsicContentSize: CGSize { if orientation == .vertical { return .init(width: 1, height: bounds.height) } else { return .init(width: bounds.width, height: 1) } } /// Resets to default settings. open override func reset() { super.reset() style = .primary orientation = .horizontal } open override func setup() { super.setup() } /// Function used to make changes to the View based off a change events or from local properties. open override func updateView() { super.updateView() backgroundColor = lineViewColorConfiguration.getColor(self) invalidateIntrinsicContentSize() } }