Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions examples/SimpleExample/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.7)
base64
nkf
rexml
activesupport (6.1.7.10)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
atomos (0.1.3)
base64 (0.3.0)
benchmark (0.5.0)
bigdecimal (3.3.1)
claide (1.1.0)
cocoapods (1.15.2)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.15.2)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 2.1, < 3.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.6.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (>= 2.3.0, < 3.0)
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 2.3.0, < 3.0)
xcodeproj (>= 1.23.0, < 2.0)
cocoapods-core (1.15.2)
activesupport (>= 5.0, < 8)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (2.1)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.3.3)
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
ffi (1.17.2)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.9.0)
mutex_m
i18n (1.14.7)
concurrent-ruby (~> 1.0)
json (2.7.6)
logger (1.7.0)
minitest (5.25.4)
molinillo (0.8.0)
mutex_m (0.3.0)
nanaimo (0.3.0)
nap (1.1.0)
netrc (0.11.0)
nkf (0.2.0)
public_suffix (4.0.7)
rexml (3.4.4)
ruby-macho (2.5.1)
typhoeus (1.5.0)
ethon (>= 0.9.0, < 0.16.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
xcodeproj (1.25.1)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (>= 3.3.6, < 4.0)
zeitwerk (2.6.18)

PLATFORMS
ruby

DEPENDENCIES
activesupport (>= 6.1.7.5, != 7.1.0)
benchmark
bigdecimal
cocoapods (>= 1.13, != 1.15.1, != 1.15.0)
concurrent-ruby (< 1.3.4)
logger
mutex_m
xcodeproj (< 1.26.0)

RUBY VERSION
ruby 2.6.10p210

BUNDLED WITH
1.17.2
122 changes: 61 additions & 61 deletions examples/SimpleExample/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2389,7 +2389,7 @@ DEPENDENCIES:
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
- React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
- react-native-encrypted-storage (from `../../../node_modules/react-native-encrypted-storage`)
- react-native-encrypted-storage (from `../node_modules/react-native-encrypted-storage`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
Expand Down Expand Up @@ -2512,7 +2512,7 @@ EXTERNAL SOURCES:
React-microtasksnativemodule:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks"
react-native-encrypted-storage:
:path: "../../../node_modules/react-native-encrypted-storage"
:path: "../node_modules/react-native-encrypted-storage"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-webview:
Expand Down Expand Up @@ -2588,75 +2588,75 @@ SPEC CHECKSUMS:
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca
RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669
RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f
RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077
RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a
RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89
React: f1486d005993b0af01943af1850d3d4f3b597545
React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe
React-Core: 559823921b4f294c2840fa8238ca958a29ddc211
React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e
React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b
React-Core: d6d8c1fd33697cec596d33b820456505ee305686
React-CoreModules: 81ab751a7668ba161440f9623b994e1a6a3019fe
React-cxxreact: 16f2a2751d0dce8b569f23c1914edc90f655b01b
React-debug: e01581e1589f329e61c95b332bf7f4969b10564b
React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa
React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb
React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e
React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d
React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695
React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70
React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467
React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7
React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e
React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601
React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3
React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09
React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e
React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84
React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b
React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5
React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee
React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9
React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850
React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d
React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381
React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e
React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb
react-native-encrypted-storage: 569d114e329b1c2c2d9f8c84bcdbe4478dda2258
react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616
react-native-webview: ec195db71ebf55705d7b46a7da5f1b1746bb7efd
React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac
React-defaultsnativemodule: e956b1d8fe15cc79d23061db229bf88170565f2f
React-domnativemodule: a18b0f7a31b9c75f12fa369baece5542d1265b36
React-Fabric: c0237a32c3c0dbea2d2b294c8e95605e1dfe2f57
React-FabricComponents: 65b03884bd5d9f24c79a631d7d26f0fa079bc4aa
React-FabricImage: de1ea2f2a0b32ad02e5cbb64827d1eec0439cf0d
React-featureflags: 02de9c35256cc624269b01d670d99e1fd706ea8d
React-featureflagsnativemodule: 8b84e67edbaa7b9318390c5bd3ae19790a74f356
React-graphics: 004b40c1b236ea3bb8de6693439bef9797922ba9
React-hermes: 2179a018b2f86652f6f33ef23efd9e5ac284b247
React-idlecallbacksnativemodule: f54ea68f984b12e42feed1e7110623b2c38df4d1
React-ImageManager: 9dd04b7b62bc5397f876ca5fb1b712e700ce390c
React-jserrorhandler: 2f90bf50fffea1d012e7f3d717c6adf748b1813d
React-jsi: b27208f8866e53238534f65f304903e4eff25e05
React-jsiexecutor: 1d3e827797f592c393860dea91aaa6d53c7715e7
React-jsinspector: bda319277ae779bc476b736fe3a497c6aed304cd
React-jsinspectorcdp: 69e1736edfd5420037680b7b4557fa748c3c8216
React-jsinspectornetwork: 7aa707b057c6129b4af59e0c9160436bbab25022
React-jsinspectortracing: b4a8a328ad2697f9638daa4b7cc054e0303fa47f
React-jsitooling: a6c7e2829437b28665e97a398b3374d443125e24
React-jsitracing: d87ae17dd0eef7844e605945da926c5433fe2b51
React-logger: d27dd2000f520bf891d24f6e141cde34df41f0ee
React-Mapbuffer: 0746ffab5ac0f49b7c9347338e3d0c1d9dd634c8
React-microtasksnativemodule: b0fb3f97372df39bda3e657536039f1af227cc29
react-native-encrypted-storage: db300a3f2f0aba1e818417c1c0a6be549038deb7
react-native-safe-area-context: 6d8a7b750e496e37bda47c938320bf2c734d441f
react-native-webview: 9f111dfbcfc826084d6c507f569e5e03342ee1c1
React-NativeModulesApple: 9ec9240159974c94886ebbe4caec18e3395f6aef
React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436
React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454
React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e
React-perflogger: ccf4fd2664b00818645e588623c7531a8b32d114
React-performancetimeline: a866ba759d8e06e9ba174b4421677edcae487baf
React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218
React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72
React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83
React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a
React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a
React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf
React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add
React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542
React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b
React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a
React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358
React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4
React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b
React-RCTAnimation: 2edeebfba175cc2e937e2752209ab605d3c48f21
React-RCTAppDelegate: e292321e83ee966897244a032216a70930b758d6
React-RCTBlob: 8dfb24b6dd4a5af45e1e59e2fd925b2df1e44d08
React-RCTFabric: b25b02a2016f5cb15926a60c77a8d75865aa3558
React-RCTFBReactNativeSpec: 20338571a1ed853d01da6c68576aa6e8e107b6f6
React-RCTImage: c7fe8c2f2ae8bad98ab4d944d5d50a889da4b652
React-RCTLinking: 9ac21ce9f1af914bb01c06af3752db2ec840d0ee
React-RCTNetwork: 09a5de71d757dbad4b3fe3615839290200b932aa
React-RCTRuntime: da3f1e0ce088c20350044cdf1efcd7f8d9b9b40c
React-RCTSettings: fee112652ac7569ea9abe910206e1685f5f9adba
React-RCTText: 7ee9d0bc16b3a8149f8df6d70c48e724d0db1d89
React-RCTVibration: 619d613abaeb05f6fbc2b2e5e33f724f05df8eb8
React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd
React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860
React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b
React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82
React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e
React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9
React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac
React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5
React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68
React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a
ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9
ReactCodegen: 4d203eddf6f977caa324640a20f92e70408d648b
ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120
React-renderercss: 3decb27a81648fcdee837c59994b51fff5be5a67
React-rendererdebug: 3b9a92d36932af52e1b473f2a89ea4b05dbdecdf
React-RuntimeApple: 4e35fb74be4b721c2e1fd6d54ec66456fa7043e9
React-RuntimeCore: 0fd7ac6e3e9dd20cb47e87c6b9f35832dd445d5e
React-runtimeexecutor: 7680156c9f3a5a49c688bc33f9ec5ea1b00527f5
React-RuntimeHermes: 435b7104a3c749af6251353dcb7317a8e53cbd73
React-runtimescheduler: 8056b916168e446ea44531883928034e62e76a81
React-timing: 36da85e32e53008ce73f87528818191e7f2508ba
React-utils: 71e53d55ce778c6e7c7c9db4b1b9d63ef8f55289
ReactAppDependencyProvider: 448b422f8af1dedf81374eacc90a15439a0ed7f5
ReactCodegen: 3baedb0c33f963250c866151b825a3c5194b12f1
ReactCommon: e897f9a1b4afab370cfefaaf5fb3c80371bc3937
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0
Yoga: fa23995c18b65978347b096d0836f4f5093df545

PODFILE CHECKSUM: caa3b1c0eb720af4b5b95ccf1991b4f988d100f0

COCOAPODS: 1.16.2
COCOAPODS: 1.15.2
37 changes: 31 additions & 6 deletions src/components/Prompt/Button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,30 @@ interface Props {
survey?: Survey;
}

const calculateLuminance = (hexColor: string): number => {
// Remove # if present
const hex = hexColor.replace('#', '');

// Convert hex to RGB (0-255)
const r = parseInt(hex.substring(0, 2), 16);
const g = parseInt(hex.substring(2, 4), 16);
const b = parseInt(hex.substring(4, 6), 16);

// Linearize sRGB values (gamma correction) per WCAG spec
const linearize = (channel: number): number => {
const c = channel / 255;
return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
};

const rLinear = linearize(r);
const gLinear = linearize(g);
const bLinear = linearize(b);

// Calculate relative luminance using WCAG formula
// https://www.w3.org/TR/WCAG20/#relativeluminancedef
return 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear;
};

const PromptButton: (Props: Props) => React.ReactElement = ({
color,
colorDark,
Expand All @@ -26,23 +50,24 @@ const PromptButton: (Props: Props) => React.ReactElement = ({
survey,
}) => {
let backgroundColor;
let textColor;

switch (survey?.appearance) {
case Themes.Dark:
backgroundColor = colorDark || color;
textColor = Colors.Black;
break;
case Themes.Light:
backgroundColor = color;
textColor = Colors.White;
break;
default:
Appearance.getColorScheme() === Themes.Dark
? ((backgroundColor = colorDark || color), (textColor = Colors.Black))
: ((backgroundColor = color), (textColor = Colors.White));
backgroundColor =
Appearance.getColorScheme() === Themes.Dark
? colorDark || color
: color;
}

const luminance = calculateLuminance(backgroundColor);
const textColor = luminance < 0.5 ? Colors.White : Colors.Black;

return (
<View>
<TouchableHighlight
Expand Down