Skip to content

Commit 9fba5a8

Browse files
committed
Merge release/v1.7.0 into master
2 parents 0a04389 + e3e75e5 commit 9fba5a8

17 files changed

+479
-29
lines changed

README.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,22 @@ Thunder Basics is a set of useful utilities for handling basic iOS development t
66

77
# Installation
88

9-
Setting up your app to use Thunder Basics is a simple and quick process. For now Thunder Basics is built as a static framework, meaning you will need to include the whole Xcode project in your workspace.
9+
Setting up your app to use ThunderBasics is a simple and quick process. You can choose between a manual installation, or use Carthage.
10+
11+
## Carthage
12+
13+
- Add `github "3sidedcube/ThunderBasics" == 1.7.0` to your Cartfile.
14+
- Run `carthage update --platform ios` to fetch the framework.
15+
- Drag `ThunderBasics` into your project's _Linked Frameworks and Libraries_ section from the `Carthage/Build` folder.
16+
- Add the Build Phases script step as defined [here](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos).
17+
18+
## Manual
19+
20+
- Clone as a submodule, or download this repo
21+
- Import ThunderBasics.xcproject into your project
22+
- Add ThunderBasics.framework to your Embedded Binaries.
23+
- Wherever you want to use ThunderBasics use `import ThunderBasics` if you're using swift.
1024

11-
+ Import ThunderBasics.xcproject into your project
12-
+ Add ThunderBasics.framework to your Embedded Binaries.
13-
+ Wherever you want to use ThunderBasics use `import ThunderBasics` if you're using swift.
1425

1526
# Code level documentation
1627

ThunderBasics.xcodeproj/project.pbxproj

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
980AE1D6220896A700540E8E /* iso639_2.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 980AE1D5220896A700540E8E /* iso639_2.bundle */; };
1818
980AE269220AFD8C00540E8E /* Locale+ISO639_2Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 980AE268220AFD8C00540E8E /* Locale+ISO639_2Tests.swift */; };
1919
980AE26B220AFF7400540E8E /* ThunderBasics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C272EF8419C831AB004BD339 /* ThunderBasics.framework */; };
20+
B10F06C324B4B3EA00B3F8BC /* nebraska.jpg in Resources */ = {isa = PBXBuildFile; fileRef = B10F06C224B4B3EA00B3F8BC /* nebraska.jpg */; };
21+
B10F06C524B4C01300B3F8BC /* mit.png in Resources */ = {isa = PBXBuildFile; fileRef = B10F06C424B4C01300B3F8BC /* mit.png */; };
2022
B11063B41F41ABC6003E5814 /* Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B11063B31F41ABC6003E5814 /* Navigation.swift */; };
2123
B11266EB227C7AA000D68360 /* UIView+Frame.swift in Sources */ = {isa = PBXBuildFile; fileRef = B146C3B921906B8A00A1DBCD /* UIView+Frame.swift */; };
2224
B11266EC227C7D3900D68360 /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = B146C3C121908FB900A1DBCD /* UIColor+HexString.swift */; };
@@ -47,6 +49,7 @@
4749
B16234D21C91F775001669BA /* ThunderBasicsMac.h in Headers */ = {isa = PBXBuildFile; fileRef = B16234D11C91F775001669BA /* ThunderBasicsMac.h */; settings = {ATTRIBUTES = (Public, ); }; };
4850
B16234EC1C91FA3C001669BA /* NSObject+AddedProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B6CF891C4E47DB00CDC978 /* NSObject+AddedProperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
4951
B163D2FE1FB33F6C00BF4CEC /* DynamicFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = B163D2FD1FB33F6C00BF4CEC /* DynamicFont.swift */; };
52+
B1740ACF24B5BDCF00915122 /* nyt.jpg in Resources */ = {isa = PBXBuildFile; fileRef = B1740ACE24B5BDCF00915122 /* nyt.jpg */; };
5053
B1898CD1230D7A9000A1F5D1 /* AccessibilityRefreshingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1898CD0230D7A9000A1F5D1 /* AccessibilityRefreshingViewController.swift */; };
5154
B190A858228DBCB600E44821 /* ThunderBasicsTests_macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = B190A857228DBCB600E44821 /* ThunderBasicsTests_macOS.swift */; };
5255
B190A85A228DBCB600E44821 /* ThunderBasics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B16234AB1C91F5E3001669BA /* ThunderBasics.framework */; };
@@ -74,6 +77,15 @@
7477
B1E6FC49218C729500971DC3 /* UIColor+Comparison.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E6FC48218C729500971DC3 /* UIColor+Comparison.swift */; };
7578
B1E6FC4B218CAA8800971DC3 /* UIImage+Effects.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E6FC4A218CAA8800971DC3 /* UIImage+Effects.swift */; };
7679
B1E6FC4D218CABF900971DC3 /* UIImage+Crop.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E6FC4C218CABF900971DC3 /* UIImage+Crop.swift */; };
80+
B1EDB93D24B3821000B427A6 /* ImageColorAnalysisTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1EDB93C24B3821000B427A6 /* ImageColorAnalysisTests.swift */; };
81+
B1EDB93F24B3828D00B427A6 /* flowers.jpg in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB93E24B3828D00B427A6 /* flowers.jpg */; };
82+
B1EDB94624B3B8B500B427A6 /* nonEdgePrimary.png in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB94524B3B8B500B427A6 /* nonEdgePrimary.png */; };
83+
B1EDB94A24B3C40300B427A6 /* colouredBg.png in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB94924B3C40300B427A6 /* colouredBg.png */; };
84+
B1EDB94C24B3C7D400B427A6 /* 3scLogo.png in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB94B24B3C7D400B427A6 /* 3scLogo.png */; };
85+
B1EDB94E24B4604300B427A6 /* jacksonPollock.jpg in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB94D24B4604200B427A6 /* jacksonPollock.jpg */; };
86+
B1EDB95524B47CE200B427A6 /* vincent.jpg in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB95424B47CE100B427A6 /* vincent.jpg */; };
87+
B1EDB95824B48A4200B427A6 /* arcLogo.jpg in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB95724B48A4200B427A6 /* arcLogo.jpg */; };
88+
B1EDB95A24B4939D00B427A6 /* camrote.png in Resources */ = {isa = PBXBuildFile; fileRef = B1EDB95924B4939D00B427A6 /* camrote.png */; };
7789
B1FA1795230EE22C00AB9891 /* UIView+IntrinsicContentSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1FA1794230EE22C00AB9891 /* UIView+IntrinsicContentSize.swift */; };
7890
B811830F246070E200D0EC88 /* DateFormatterExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B811830E246070E200D0EC88 /* DateFormatterExtensionsTests.swift */; };
7991
B834865923D9E47A00F52BA6 /* UIEdgeInsets+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B834865823D9E47A00F52BA6 /* UIEdgeInsets+Extensions.swift */; };
@@ -103,6 +115,8 @@
103115
980AE1D32208968800540E8E /* Locale+ISO639_2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Locale+ISO639_2.swift"; sourceTree = "<group>"; };
104116
980AE1D5220896A700540E8E /* iso639_2.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = iso639_2.bundle; sourceTree = "<group>"; };
105117
980AE268220AFD8C00540E8E /* Locale+ISO639_2Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Locale+ISO639_2Tests.swift"; sourceTree = "<group>"; };
118+
B10F06C224B4B3EA00B3F8BC /* nebraska.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = nebraska.jpg; sourceTree = "<group>"; };
119+
B10F06C424B4C01300B3F8BC /* mit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mit.png; sourceTree = "<group>"; };
106120
B11063B31F41ABC6003E5814 /* Navigation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Navigation.swift; sourceTree = "<group>"; };
107121
B1212A242321643800B43379 /* AccessibleButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibleButton.swift; sourceTree = "<group>"; };
108122
B12BD5DF1C48052000D07A58 /* LoadingButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingButton.swift; sourceTree = "<group>"; };
@@ -129,6 +143,7 @@
129143
B16234C41C91F625001669BA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
130144
B16234D11C91F775001669BA /* ThunderBasicsMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThunderBasicsMac.h; sourceTree = "<group>"; };
131145
B163D2FD1FB33F6C00BF4CEC /* DynamicFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicFont.swift; sourceTree = "<group>"; };
146+
B1740ACE24B5BDCF00915122 /* nyt.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = nyt.jpg; sourceTree = "<group>"; };
132147
B1898CD0230D7A9000A1F5D1 /* AccessibilityRefreshingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityRefreshingViewController.swift; sourceTree = "<group>"; };
133148
B190A855228DBCB600E44821 /* ThunderBasicsTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ThunderBasicsTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
134149
B190A857228DBCB600E44821 /* ThunderBasicsTests_macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThunderBasicsTests_macOS.swift; sourceTree = "<group>"; };
@@ -150,6 +165,15 @@
150165
B1E6FC48218C729500971DC3 /* UIColor+Comparison.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Comparison.swift"; sourceTree = "<group>"; };
151166
B1E6FC4A218CAA8800971DC3 /* UIImage+Effects.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Effects.swift"; sourceTree = "<group>"; };
152167
B1E6FC4C218CABF900971DC3 /* UIImage+Crop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Crop.swift"; sourceTree = "<group>"; };
168+
B1EDB93C24B3821000B427A6 /* ImageColorAnalysisTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageColorAnalysisTests.swift; sourceTree = "<group>"; };
169+
B1EDB93E24B3828D00B427A6 /* flowers.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = flowers.jpg; sourceTree = "<group>"; };
170+
B1EDB94524B3B8B500B427A6 /* nonEdgePrimary.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = nonEdgePrimary.png; sourceTree = "<group>"; };
171+
B1EDB94924B3C40300B427A6 /* colouredBg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = colouredBg.png; sourceTree = "<group>"; };
172+
B1EDB94B24B3C7D400B427A6 /* 3scLogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 3scLogo.png; sourceTree = "<group>"; };
173+
B1EDB94D24B4604200B427A6 /* jacksonPollock.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jacksonPollock.jpg; sourceTree = "<group>"; };
174+
B1EDB95424B47CE100B427A6 /* vincent.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = vincent.jpg; sourceTree = "<group>"; };
175+
B1EDB95724B48A4200B427A6 /* arcLogo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = arcLogo.jpg; sourceTree = "<group>"; };
176+
B1EDB95924B4939D00B427A6 /* camrote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = camrote.png; sourceTree = "<group>"; };
153177
B1FA1794230EE22C00AB9891 /* UIView+IntrinsicContentSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+IntrinsicContentSize.swift"; sourceTree = "<group>"; };
154178
B811830E246070E200D0EC88 /* DateFormatterExtensionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatterExtensionsTests.swift; sourceTree = "<group>"; };
155179
B834865823D9E47A00F52BA6 /* UIEdgeInsets+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIEdgeInsets+Extensions.swift"; sourceTree = "<group>"; };
@@ -450,13 +474,25 @@
450474
B146C3CD2190978900A1DBCD /* UIColorHexStringTests.swift */,
451475
980AE268220AFD8C00540E8E /* Locale+ISO639_2Tests.swift */,
452476
B811830E246070E200D0EC88 /* DateFormatterExtensionsTests.swift */,
477+
B1EDB93C24B3821000B427A6 /* ImageColorAnalysisTests.swift */,
453478
);
454479
path = ThunderBasicsTests;
455480
sourceTree = "<group>";
456481
};
457482
C272EF9119C831AC004BD339 /* Supporting Files */ = {
458483
isa = PBXGroup;
459484
children = (
485+
B10F06C424B4C01300B3F8BC /* mit.png */,
486+
B10F06C224B4B3EA00B3F8BC /* nebraska.jpg */,
487+
B1740ACE24B5BDCF00915122 /* nyt.jpg */,
488+
B1EDB95724B48A4200B427A6 /* arcLogo.jpg */,
489+
B1EDB95924B4939D00B427A6 /* camrote.png */,
490+
B1EDB94D24B4604200B427A6 /* jacksonPollock.jpg */,
491+
B1EDB94B24B3C7D400B427A6 /* 3scLogo.png */,
492+
B1EDB94924B3C40300B427A6 /* colouredBg.png */,
493+
B1EDB94524B3B8B500B427A6 /* nonEdgePrimary.png */,
494+
B1EDB93E24B3828D00B427A6 /* flowers.jpg */,
495+
B1EDB95424B47CE100B427A6 /* vincent.jpg */,
460496
C272EF9219C831AC004BD339 /* Info.plist */,
461497
);
462498
name = "Supporting Files";
@@ -649,6 +685,17 @@
649685
isa = PBXResourcesBuildPhase;
650686
buildActionMask = 2147483647;
651687
files = (
688+
B10F06C524B4C01300B3F8BC /* mit.png in Resources */,
689+
B1EDB94C24B3C7D400B427A6 /* 3scLogo.png in Resources */,
690+
B1EDB93F24B3828D00B427A6 /* flowers.jpg in Resources */,
691+
B1EDB95A24B4939D00B427A6 /* camrote.png in Resources */,
692+
B1EDB94E24B4604300B427A6 /* jacksonPollock.jpg in Resources */,
693+
B10F06C324B4B3EA00B3F8BC /* nebraska.jpg in Resources */,
694+
B1EDB94A24B3C40300B427A6 /* colouredBg.png in Resources */,
695+
B1EDB94624B3B8B500B427A6 /* nonEdgePrimary.png in Resources */,
696+
B1740ACF24B5BDCF00915122 /* nyt.jpg in Resources */,
697+
B1EDB95824B48A4200B427A6 /* arcLogo.jpg in Resources */,
698+
B1EDB95524B47CE200B427A6 /* vincent.jpg in Resources */,
652699
);
653700
runOnlyForDeploymentPostprocessing = 0;
654701
};
@@ -742,6 +789,7 @@
742789
B146C3CE2190978900A1DBCD /* UIColorHexStringTests.swift in Sources */,
743790
B811830F246070E200D0EC88 /* DateFormatterExtensionsTests.swift in Sources */,
744791
980AE269220AFD8C00540E8E /* Locale+ISO639_2Tests.swift in Sources */,
792+
B1EDB93D24B3821000B427A6 /* ImageColorAnalysisTests.swift in Sources */,
745793
);
746794
runOnlyForDeploymentPostprocessing = 0;
747795
};
@@ -774,7 +822,7 @@
774822
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
775823
MACH_O_TYPE = mh_dylib;
776824
MACOSX_DEPLOYMENT_TARGET = 10.12;
777-
MARKETING_VERSION = 1.6.0;
825+
MARKETING_VERSION = 1.7.0;
778826
PRODUCT_BUNDLE_IDENTIFIER = com.threesidedcube.ThunderBasicsMac;
779827
PRODUCT_NAME = ThunderBasics;
780828
SDKROOT = macosx;
@@ -804,7 +852,7 @@
804852
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
805853
MACH_O_TYPE = mh_dylib;
806854
MACOSX_DEPLOYMENT_TARGET = 10.12;
807-
MARKETING_VERSION = 1.6.0;
855+
MARKETING_VERSION = 1.7.0;
808856
PRODUCT_BUNDLE_IDENTIFIER = com.threesidedcube.ThunderBasicsMac;
809857
PRODUCT_NAME = ThunderBasics;
810858
SDKROOT = macosx;
@@ -1000,7 +1048,7 @@
10001048
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
10011049
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
10021050
MACH_O_TYPE = mh_dylib;
1003-
MARKETING_VERSION = 1.6.0;
1051+
MARKETING_VERSION = 1.7.0;
10041052
ONLY_ACTIVE_ARCH = NO;
10051053
PRODUCT_BUNDLE_IDENTIFIER = "com.threesidedcube.$(PRODUCT_NAME:rfc1034identifier)";
10061054
PRODUCT_NAME = ThunderBasics;
@@ -1029,7 +1077,7 @@
10291077
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
10301078
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
10311079
MACH_O_TYPE = mh_dylib;
1032-
MARKETING_VERSION = 1.6.0;
1080+
MARKETING_VERSION = 1.7.0;
10331081
PRODUCT_BUNDLE_IDENTIFIER = "com.threesidedcube.$(PRODUCT_NAME:rfc1034identifier)";
10341082
PRODUCT_NAME = ThunderBasics;
10351083
SKIP_INSTALL = YES;

ThunderBasics/UIColor+Comparison.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,20 @@ extension UIColor {
7171
/// Returns whether the colour is near enough to black or white
7272
/// to be considered so
7373
public var isNearBlackOrWhite: Bool {
74+
return isNearBlackOrWhite(threshold: 0.09)
75+
}
76+
77+
/// Returns whether the colour is near enough to black or white to be considered so
78+
/// - Parameter threshold: The threshold to use when performing the calculation
79+
public func isNearBlackOrWhite(threshold: CGFloat) -> Bool {
7480

7581
var red: CGFloat = 0.0
7682
var green: CGFloat = 0.0
7783
var blue: CGFloat = 0.0
7884
getRed(&red, green: &green, blue: &blue, alpha: nil)
7985

8086
let values = [red, green, blue]
81-
return values.allSatisfy({ $0 > 0.91 }) || values.allSatisfy({ $0 < 0.09 })
87+
return values.allSatisfy({ $0 > (1.0 - threshold) }) || values.allSatisfy({ $0 < threshold })
8288
}
8389

8490
/// Returns the contrast ratio between two colours

ThunderBasics/UIColor+Helpers.swift

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,36 @@ import UIKit
1010

1111
extension UIColor {
1212

13+
/// A structual representation of a colour's RGBA components as floats
14+
/// between 0 and 1
15+
public struct RGBAComponents: Equatable {
16+
17+
/// Red component of the colour [0, 1]
18+
public let red: CGFloat
19+
20+
/// Green component of the colour [0, 1]
21+
public let green: CGFloat
22+
23+
/// Blue component of the colour [0, 1]
24+
public let blue: CGFloat
25+
26+
/// The alpha component of the colour [0, 1]
27+
public let alpha: CGFloat
28+
29+
/// Public default memberwise initialiser
30+
/// - Parameters:
31+
/// - red: The red component of the colour
32+
/// - green: The green component of the colour
33+
/// - blue: The blue component of the colour
34+
/// - alpha: The alpha component of the colour
35+
public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
36+
self.red = red
37+
self.green = green
38+
self.blue = blue
39+
self.alpha = alpha
40+
}
41+
}
42+
1343
/// Returns a random colour
1444
public var random: UIColor {
1545
let red = CGFloat.random(in: 0 ... 1)
@@ -24,7 +54,7 @@ extension UIColor {
2454
}
2555

2656
/// Returns the RGBA components of the colour
27-
public var rgbaComponents: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)? {
57+
public var rgbaComponents: RGBAComponents? {
2858

2959
var red: CGFloat = 0.0
3060
var green: CGFloat = 0.0
@@ -35,7 +65,7 @@ extension UIColor {
3565
return nil
3666
}
3767

38-
return (red, green, blue, alpha)
68+
return .init(red: red, green: green, blue: blue, alpha: alpha)
3969
}
4070

4171
/// Returns the HSBA components of the colour

0 commit comments

Comments
 (0)