@usercentrics/react-native-sdk 2.25.0 → 2.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/android/build-legacy.gradle +1 -1
  2. package/android/build.gradle.kts +1 -1
  3. package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt +102 -2
  4. package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +19 -1
  5. package/android/src/main/java/com/usercentrics/reactnative/extensions/BannerSettingsExtensions.kt +2 -1
  6. package/android/src/main/java/com/usercentrics/reactnative/extensions/GppDataExtensions.kt +83 -0
  7. package/android/src/main/java/com/usercentrics/reactnative/extensions/UserDecisionExtensions.kt +2 -1
  8. package/android/src/main/java/com/usercentrics/reactnative/extensions/UsercentricsCMPDataExtensions.kt +44 -2
  9. package/android/src/test/java/com/usercentrics/reactnative/extensions/NullabilityTest.kt +189 -0
  10. package/ios/Extensions/GppData+Dict.swift +45 -0
  11. package/ios/Extensions/GppSectionChangePayload+Dict.swift +10 -0
  12. package/ios/Extensions/UIImage+UsercentricsLogoDict.swift +31 -6
  13. package/ios/Extensions/UsercentricsCMPData+Dict.swift +6 -2
  14. package/ios/Manager/UsercentricsManager.swift +28 -3
  15. package/ios/RNUsercentricsModule+TurboModule.mm +34 -0
  16. package/ios/RNUsercentricsModule.mm +11 -7
  17. package/ios/RNUsercentricsModule.swift +72 -21
  18. package/ios/RNUsercentricsModuleSpec.h +13 -0
  19. package/lib/NativeUsercentrics.d.ts +8 -2
  20. package/lib/NativeUsercentrics.js.map +1 -1
  21. package/lib/Usercentrics.d.ts +8 -2
  22. package/lib/Usercentrics.js +23 -3
  23. package/lib/Usercentrics.js.map +1 -1
  24. package/lib/fabric/NativeUsercentricsModule.d.ts +7 -1
  25. package/lib/fabric/NativeUsercentricsModule.js.map +1 -1
  26. package/lib/models/CCPASettings.d.ts +3 -1
  27. package/lib/models/CCPASettings.js +3 -1
  28. package/lib/models/CCPASettings.js.map +1 -1
  29. package/lib/models/GppData.d.ts +6 -0
  30. package/lib/models/GppData.js +8 -0
  31. package/lib/models/GppData.js.map +1 -0
  32. package/lib/models/GppSectionChangePayload.d.ts +4 -0
  33. package/lib/models/GppSectionChangePayload.js +6 -0
  34. package/lib/models/GppSectionChangePayload.js.map +1 -0
  35. package/lib/models/TCF2Settings.d.ts +2 -2
  36. package/lib/models/TCF2Settings.js +2 -2
  37. package/lib/models/TCF2Settings.js.map +1 -1
  38. package/lib/models/UsercentricsSettings.d.ts +3 -1
  39. package/lib/models/UsercentricsSettings.js +3 -1
  40. package/lib/models/UsercentricsSettings.js.map +1 -1
  41. package/lib/models/index.d.ts +2 -0
  42. package/lib/models/index.js +2 -0
  43. package/lib/models/index.js.map +1 -1
  44. package/package.json +2 -2
  45. package/react-native-usercentrics.podspec +6 -12
  46. package/src/NativeUsercentrics.ts +10 -1
  47. package/src/Usercentrics.tsx +31 -3
  48. package/src/__tests__/index.test.ts +66 -1
  49. package/src/__tests__/mocks.ts +17 -1
  50. package/src/fabric/NativeUsercentricsModule.ts +8 -1
  51. package/src/models/CCPASettings.tsx +7 -1
  52. package/src/models/GppData.tsx +15 -0
  53. package/src/models/GppSectionChangePayload.tsx +7 -0
  54. package/src/models/TCF2Settings.tsx +3 -3
  55. package/src/models/UsercentricsSettings.tsx +6 -0
  56. package/src/models/index.tsx +2 -0
@@ -3,13 +3,38 @@ import UIKit
3
3
 
4
4
  extension UIImage {
5
5
  convenience init?(from dictionary: NSDictionary?) {
6
- guard
7
- let dictionary = dictionary,
8
- let logoName = dictionary["logoName"] as? String
9
- else {
10
- return nil
6
+ guard let dictionary = dictionary else { return nil }
7
+
8
+ if let logoPath = dictionary["logoPath"] as? String, !logoPath.isEmpty,
9
+ let image = Self.image(fromLogoPath: logoPath),
10
+ let cgImage = image.cgImage {
11
+ self.init(cgImage: cgImage, scale: image.scale, orientation: image.imageOrientation)
12
+ return
13
+ }
14
+
15
+ if let logoName = dictionary["logoName"] as? String, !logoName.isEmpty {
16
+ self.init(named: logoName)
17
+ return
11
18
  }
12
19
 
13
- self.init(named: logoName)
20
+ return nil
21
+ }
22
+
23
+ private static func image(fromLogoPath logoPath: String) -> UIImage? {
24
+ if logoPath.hasPrefix("file://") {
25
+ let path = logoPath.replacingOccurrences(of: "file://", with: "")
26
+ if let image = UIImage(contentsOfFile: path) { return image }
27
+ }
28
+ else if logoPath.hasPrefix("/") {
29
+ if let image = UIImage(contentsOfFile: logoPath) { return image }
30
+ }
31
+ else if logoPath.hasPrefix("http://") || logoPath.hasPrefix("https://"),
32
+ let url = URL(string: logoPath),
33
+ let data = try? Data(contentsOf: url),
34
+ let image = UIImage(data: data) {
35
+ return image
36
+ }
37
+ if let image = UIImage(named: logoPath) { return image }
38
+ return nil
14
39
  }
15
40
  }
@@ -45,6 +45,8 @@ extension UsercentricsSettings {
45
45
  "publishedApps": (self.publishedApps?.map { $0.toDictionary() } ?? nil) as Any,
46
46
  "renewConsentsTimestamp": self.renewConsentsTimestamp as Any,
47
47
  "consentWebhook": self.consentWebhook as Any,
48
+ "gppSignalingEnabled": self.gppSignalingEnabled,
49
+ "gpcSignalHonoured": self.gpcSignalHonoured,
48
50
  ]
49
51
  }
50
52
  }
@@ -164,6 +166,8 @@ extension CCPASettings {
164
166
  "secondLayerDescription" : self.secondLayerDescription as Any,
165
167
  "secondLayerHideLanguageSwitch" : self.secondLayerHideLanguageSwitch,
166
168
  "btnMoreInfo" : self.btnMoreInfo as Any,
169
+ "mspaCoveredTransaction" : self.mspaCoveredTransaction,
170
+ "mspaMode" : self.mspaMode?.ordinal as Any,
167
171
  ]
168
172
  }
169
173
  }
@@ -208,7 +212,6 @@ extension TCF2Settings {
208
212
  "disabledSpecialFeatures" : self.disabledSpecialFeatures,
209
213
  "firstLayerShowDescriptions" : self.firstLayerShowDescriptions,
210
214
  "hideNonIabOnFirstLayer" : self.hideNonIabOnFirstLayer,
211
- "resurfacePeriodEnded" : self.resurfacePeriodEnded,
212
215
  "resurfacePurposeChanged" : self.resurfacePurposeChanged,
213
216
  "resurfaceVendorAdded" : self.resurfaceVendorAdded,
214
217
  "firstLayerDescription" : self.firstLayerDescription as Any,
@@ -231,7 +234,8 @@ extension TCF2Settings {
231
234
  "scope": self.scope.ordinal,
232
235
  "changedPurposes": self.changedPurposes?.toDictionary() as Any,
233
236
  "acmV2Enabled": self.acmV2Enabled,
234
- "selectedATPIds": self.selectedATPIds
237
+ "selectedATPIds": self.selectedATPIds,
238
+ "resurfacePeriod": self.resurfacePeriod,
235
239
  ]
236
240
  }
237
241
  }
@@ -19,16 +19,21 @@ public protocol UsercentricsManager {
19
19
  func getCMPData() -> UsercentricsCMPData
20
20
  func getUserSessionData() -> String
21
21
  func getUSPData() -> CCPAData
22
+ func getGPPData() -> GppData
23
+ func getGPPString() -> String?
24
+ func setGPPConsent(sectionName: String, fieldName: String, value: Any)
22
25
  func getTCFData(callback: @escaping (TCFData) -> Void)
23
26
  func getABTestingVariant() -> String?
27
+ func getDpsMetadata(templateId: String) -> [String: Any]?
24
28
  func getAdditionalConsentModeData() -> AdditionalConsentModeData
29
+ func onGppSectionChange(callback: @escaping (GppSectionChangePayload) -> Void) -> UsercentricsDisposableEvent<GppSectionChangePayload>
25
30
 
26
31
  func changeLanguage(language: String, onSuccess: @escaping (() -> Void), onFailure: @escaping ((Error) -> Void))
27
32
 
28
33
  func acceptAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
29
34
  func acceptAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
30
35
 
31
- func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent]
36
+ func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?, unsavedVendorLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent]
32
37
  func denyAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent]
33
38
 
34
39
  func saveDecisionsForTCF(tcfDecisions: TCFUserDecisions,
@@ -92,10 +97,30 @@ final class UsercentricsManagerImplementation: UsercentricsManager {
92
97
  return UsercentricsCore.shared.getUSPData()
93
98
  }
94
99
 
100
+ func getGPPData() -> GppData {
101
+ return UsercentricsCore.shared.getGPPData()
102
+ }
103
+
104
+ func getGPPString() -> String? {
105
+ return UsercentricsCore.shared.getGPPString()
106
+ }
107
+
108
+ func setGPPConsent(sectionName: String, fieldName: String, value: Any) {
109
+ UsercentricsCore.shared.setGPPConsent(sectionName: sectionName, fieldName: fieldName, value: value)
110
+ }
111
+
112
+ func onGppSectionChange(callback: @escaping (GppSectionChangePayload) -> Void) -> UsercentricsDisposableEvent<GppSectionChangePayload> {
113
+ return UsercentricsEvent.shared.onGppSectionChange(callback: callback)
114
+ }
115
+
95
116
  func getTCFData(callback: @escaping (TCFData) -> Void) {
96
117
  UsercentricsCore.shared.getTCFData(callback: callback)
97
118
  }
98
119
 
120
+ func getDpsMetadata(templateId: String) -> [String: Any]? {
121
+ return UsercentricsCore.shared.getDpsMetadata(templateId: templateId)
122
+ }
123
+
99
124
  func getAdditionalConsentModeData() -> AdditionalConsentModeData {
100
125
  return UsercentricsCore.shared.getAdditionalConsentModeData()
101
126
  }
@@ -112,8 +137,8 @@ final class UsercentricsManagerImplementation: UsercentricsManager {
112
137
  return UsercentricsCore.shared.acceptAll(consentType: consentType)
113
138
  }
114
139
 
115
- func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent] {
116
- return UsercentricsCore.shared.denyAllForTCF(fromLayer: fromLayer, consentType: consentType, unsavedPurposeLIDecisions: unsavedPurposeLIDecisions)
140
+ func denyAllForTCF(fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: [KotlinInt: KotlinBoolean]?, unsavedVendorLIDecisions: [KotlinInt: KotlinBoolean]?) -> [UsercentricsServiceConsent] {
141
+ return UsercentricsCore.shared.denyAllForTCF(fromLayer: fromLayer, consentType: consentType, unsavedPurposeLIDecisions: unsavedPurposeLIDecisions, unsavedVendorLIDecisions: unsavedVendorLIDecisions)
117
142
  }
118
143
 
119
144
  func denyAll(consentType: UsercentricsConsentType) -> [UsercentricsServiceConsent] {
@@ -0,0 +1,34 @@
1
+ //
2
+ // RNUsercentricsModule+TurboModule.mm
3
+ // getTurboModule: implementation for RN 0.78+ (New Architecture).
4
+ // RCTTurboModule protocol requires C++ return type (shared_ptr<TurboModule>), hence Obj-C++.
5
+ //
6
+
7
+ #import <React/RCTBridgeModule.h>
8
+
9
+ #if RCT_NEW_ARCH_ENABLED
10
+
11
+ #import <ReactCommon/RCTTurboModule.h>
12
+
13
+ // Header generated by the app's codegen (ReactCodegen pod; path may vary by RN version)
14
+ #if __has_include(<ReactCodegen/RNUsercentricsModule/RNUsercentricsModule.h>)
15
+ #import <ReactCodegen/RNUsercentricsModule/RNUsercentricsModule.h>
16
+ #else
17
+ #import "RNUsercentricsModule/RNUsercentricsModule.h"
18
+ #endif
19
+
20
+ // RNUsercentricsModule is defined in Swift (RNUsercentricsModule.swift).
21
+ // Minimal declaration so the compiler accepts the category; the real implementation is in Swift.
22
+ @interface RNUsercentricsModule : NSObject
23
+ @end
24
+
25
+ @implementation RNUsercentricsModule (TurboModule)
26
+
27
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
28
+ (const facebook::react::ObjCTurboModule::InitParams &)params {
29
+ return std::make_shared<facebook::react::NativeUsercentricsModuleSpecJSI>(params);
30
+ }
31
+
32
+ @end
33
+
34
+ #endif // RCT_NEW_ARCH_ENABLED
@@ -10,10 +10,6 @@
10
10
  @interface RCT_EXTERN_MODULE(RNUsercentricsModule, NSObject)
11
11
  RCT_EXTERN_METHOD(configure:(NSDictionary *)dict)
12
12
 
13
- RCT_EXTERN_METHOD(showCMP:(NSDictionary *)dict
14
- resolve:(RCTPromiseResolveBlock)resolve
15
- reject:(RCTPromiseRejectBlock)reject)
16
-
17
13
  RCT_EXTERN_METHOD(showFirstLayer:(NSDictionary *)dict
18
14
  resolve:(RCTPromiseResolveBlock)resolve
19
15
  reject:(RCTPromiseRejectBlock)reject)
@@ -29,9 +25,6 @@ RCT_EXTERN_METHOD(restoreUserSession:(NSString *)controllerId
29
25
  RCT_EXTERN_METHOD(isReady:(RCTPromiseResolveBlock)resolve
30
26
  reject:(RCTPromiseRejectBlock)reject)
31
27
 
32
- RCT_EXTERN_METHOD(getTCFString:(RCTPromiseResolveBlock)resolve
33
- reject:(RCTPromiseRejectBlock)reject)
34
-
35
28
  RCT_EXTERN_METHOD(getControllerId:(RCTPromiseResolveBlock)resolve
36
29
  reject:(RCTPromiseRejectBlock)reject)
37
30
 
@@ -50,6 +43,12 @@ RCT_EXTERN_METHOD(getUserSessionData:(RCTPromiseResolveBlock)resolve
50
43
  RCT_EXTERN_METHOD(getUSPData:(RCTPromiseResolveBlock)resolve
51
44
  reject:(RCTPromiseRejectBlock)reject)
52
45
 
46
+ RCT_EXTERN_METHOD(getGPPData:(RCTPromiseResolveBlock)resolve
47
+ reject:(RCTPromiseRejectBlock)reject)
48
+
49
+ RCT_EXTERN_METHOD(getGPPString:(RCTPromiseResolveBlock)resolve
50
+ reject:(RCTPromiseRejectBlock)reject)
51
+
53
52
  RCT_EXTERN_METHOD(getTCFData:(RCTPromiseResolveBlock)resolve
54
53
  reject:(RCTPromiseRejectBlock)reject)
55
54
 
@@ -72,6 +71,7 @@ RCT_EXTERN_METHOD(acceptAll:(double)consentType
72
71
  RCT_EXTERN_METHOD(denyAllForTCF:(double)fromLayer
73
72
  consentType:(double)consentType
74
73
  unsavedPurposeLIDecisions:(NSArray)unsavedPurposeLIDecisions
74
+ unsavedVendorLIDecisions:(NSArray)unsavedVendorLIDecisions
75
75
  resolve:(RCTPromiseResolveBlock)resolve
76
76
  reject:(RCTPromiseRejectBlock)reject)
77
77
 
@@ -100,6 +100,10 @@ RCT_EXTERN_METHOD(setCMPId:(double)id)
100
100
 
101
101
  RCT_EXTERN_METHOD(setABTestingVariant:(NSString *)variant)
102
102
 
103
+ RCT_EXTERN_METHOD(setGPPConsent:(NSString *)sectionName
104
+ fieldName:(NSString *)fieldName
105
+ value:(NSDictionary *)value)
106
+
103
107
  RCT_EXTERN_METHOD(track:(double)event)
104
108
 
105
109
  RCT_EXTERN_METHOD(clearUserSession:(RCTPromiseResolveBlock)resolve
@@ -5,28 +5,47 @@ import UIKit
5
5
  import React
6
6
 
7
7
  #if RCT_NEW_ARCH_ENABLED
8
- #if canImport(RNUsercentricsModuleSpec)
8
+ #if canImport(ReactCodegen)
9
+ // RN ≥ 0.79: getTurboModule: implemented in RNUsercentricsModule+TurboModule.mm (do not import ReactCodegen in Swift — C++ module)
10
+ #elseif canImport(React_Codegen)
11
+ // RN 0.78
12
+ import React_Codegen
13
+ #elseif canImport(RNUsercentricsModuleSpec)
9
14
  // RN ≤ 0.77
10
15
  import RNUsercentricsModuleSpec
11
- #else
12
- // RN ≥ 0.78
13
- import React_Codegen
14
16
  #endif
15
17
  #endif
16
18
 
17
19
  @objc(RNUsercentricsModule)
18
- class RNUsercentricsModule: NSObject {
20
+ class RNUsercentricsModule: RCTEventEmitter {
19
21
 
20
22
  var usercentricsManager: UsercentricsManager = UsercentricsManagerImplementation()
21
23
  var queue: DispatchQueueManager = DispatchQueue.main
24
+ private var gppSectionChangeSubscription: UsercentricsDisposableEvent<GppSectionChangePayload>?
22
25
 
23
- @objc static func moduleName() -> String! {
26
+ @objc override static func moduleName() -> String! {
24
27
  return "RNUsercentricsModule"
25
28
  }
26
29
 
27
- @objc static func requiresMainQueueSetup() -> Bool {
30
+ @objc override static func requiresMainQueueSetup() -> Bool {
28
31
  return true
29
32
  }
33
+
34
+ override func supportedEvents() -> [String]! {
35
+ return [Self.onGppSectionChangeEvent]
36
+ }
37
+
38
+ override func startObserving() {
39
+ guard gppSectionChangeSubscription == nil else { return }
40
+ gppSectionChangeSubscription = usercentricsManager.onGppSectionChange { [weak self] payload in
41
+ self?.sendEvent(withName: Self.onGppSectionChangeEvent, body: payload.toDictionary())
42
+ }
43
+ }
44
+
45
+ override func stopObserving() {
46
+ gppSectionChangeSubscription?.dispose()
47
+ gppSectionChangeSubscription = nil
48
+ }
30
49
 
31
50
  @objc func configure(_ dict: NSDictionary) -> Void {
32
51
  queue.async { [weak self] in
@@ -123,10 +142,28 @@ class RNUsercentricsModule: NSObject {
123
142
  resolve(usercentricsManager.getUSPData().toDictionary())
124
143
  }
125
144
 
145
+ @objc func getGPPData(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
146
+ resolve(usercentricsManager.getGPPData().toDictionary())
147
+ }
148
+
149
+ @objc func getGPPString(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
150
+ resolve(usercentricsManager.getGPPString())
151
+ }
152
+
153
+ @objc func setGPPConsent(_ sectionName: String, fieldName: String, value: NSDictionary) -> Void {
154
+ let unwrapped = value["value"] ?? NSNull()
155
+ usercentricsManager.setGPPConsent(sectionName: sectionName, fieldName: fieldName, value: unwrapped)
156
+ }
157
+
126
158
  @objc func getABTestingVariant(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
127
159
  resolve(usercentricsManager.getABTestingVariant())
128
160
  }
129
161
 
162
+ @objc func getDpsMetadata(_ templateId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
163
+ let metadata = usercentricsManager.getDpsMetadata(templateId: templateId)
164
+ resolve(metadata as NSDictionary?)
165
+ }
166
+
130
167
  @objc func getAdditionalConsentModeData(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
131
168
  resolve(usercentricsManager.getAdditionalConsentModeData().toDictionary())
132
169
  }
@@ -158,20 +195,26 @@ class RNUsercentricsModule: NSObject {
158
195
  @objc func denyAllForTCF(_ fromLayer: Double,
159
196
  consentType: Double,
160
197
  unsavedPurposeLIDecisions: [NSDictionary],
198
+ unsavedVendorLIDecisions: [NSDictionary],
161
199
  resolve: @escaping RCTPromiseResolveBlock,
162
200
  reject: @escaping RCTPromiseRejectBlock) -> Void {
163
- var decisions: [KotlinInt: KotlinBoolean]? = nil
164
- if !unsavedPurposeLIDecisions.isEmpty {
165
- decisions = [:]
166
- for dict in unsavedPurposeLIDecisions {
167
- if let id = dict["id"] as? Int,
168
- let consent = dict["legitimateInterestConsent"] as? Bool {
169
- decisions?[KotlinInt(int: Int32(id))] = KotlinBoolean(bool: consent)
170
- }
201
+ let services = usercentricsManager.denyAllForTCF(
202
+ fromLayer: .initialize(from: Int(fromLayer)),
203
+ consentType: .initialize(from: Int(consentType)),
204
+ unsavedPurposeLIDecisions: extractLIDecisionsMap(unsavedPurposeLIDecisions),
205
+ unsavedVendorLIDecisions: extractLIDecisionsMap(unsavedVendorLIDecisions)
206
+ )
207
+ resolve(services.toListOfDictionary())
208
+ }
209
+
210
+ private func extractLIDecisionsMap(_ decisions: [NSDictionary]) -> [KotlinInt: KotlinBoolean]? {
211
+ guard !decisions.isEmpty else { return nil }
212
+ return decisions.reduce(into: [:]) { result, dict in
213
+ if let id = dict["id"] as? Int,
214
+ let consent = dict["legitimateInterestConsent"] as? Bool {
215
+ result[KotlinInt(int: Int32(id))] = KotlinBoolean(bool: consent)
171
216
  }
172
217
  }
173
- let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: Int(fromLayer)), consentType: .initialize(from: Int(consentType)), unsavedPurposeLIDecisions: decisions)
174
- resolve(services.toListOfDictionary())
175
218
  }
176
219
 
177
220
  @objc func denyAll(_ consentType: Double,
@@ -225,17 +268,25 @@ class RNUsercentricsModule: NSObject {
225
268
  reject("usercentrics_reactNative_clearUserSession_error", error.localizedDescription, error)
226
269
  }
227
270
  }
271
+
272
+ private static let onGppSectionChangeEvent = "onGppSectionChange"
228
273
  }
229
274
 
230
275
  // MARK: - RCTBridgeModule & TurboModule Conformance
231
276
  #if RCT_NEW_ARCH_ENABLED
232
- extension RNUsercentricsModule: NativeUsercentricsSpec {
277
+ #if canImport(React_Codegen)
278
+ // RN 0.78: codegen-generated protocol
279
+ extension RNUsercentricsModule: NativeUsercentricsModuleSpec {
233
280
  func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
234
281
  return self
235
282
  }
236
283
  }
237
- #else
238
- extension RNUsercentricsModule: RCTBridgeModule {
239
-
284
+ #elseif canImport(RNUsercentricsModuleSpec)
285
+ // RN 0.77
286
+ extension RNUsercentricsModule: NativeUsercentricsSpec {
287
+ func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
288
+ return self
289
+ }
240
290
  }
241
291
  #endif
292
+ #endif
@@ -36,6 +36,10 @@ NS_ASSUME_NONNULL_BEGIN
36
36
  - (void)getCMPData:(RCTPromiseResolveBlock)resolve
37
37
  reject:(RCTPromiseRejectBlock)reject;
38
38
 
39
+ - (void)getDpsMetadata:(NSString *)templateId
40
+ resolve:(RCTPromiseResolveBlock)resolve
41
+ reject:(RCTPromiseRejectBlock)reject;
42
+
39
43
  - (void)getAdditionalConsentModeData:(RCTPromiseResolveBlock)resolve
40
44
  reject:(RCTPromiseRejectBlock)reject;
41
45
 
@@ -48,12 +52,21 @@ NS_ASSUME_NONNULL_BEGIN
48
52
  - (void)getUSPData:(RCTPromiseResolveBlock)resolve
49
53
  reject:(RCTPromiseRejectBlock)reject;
50
54
 
55
+ - (void)getGPPData:(RCTPromiseResolveBlock)resolve
56
+ reject:(RCTPromiseRejectBlock)reject;
57
+
58
+ - (void)getGPPString:(RCTPromiseResolveBlock)resolve
59
+ reject:(RCTPromiseRejectBlock)reject;
60
+
51
61
  - (void)getABTestingVariant:(RCTPromiseResolveBlock)resolve
52
62
  reject:(RCTPromiseRejectBlock)reject;
53
63
 
54
64
  // Configuration Setters
55
65
  - (void)setCMPId:(double)cmpId;
56
66
  - (void)setABTestingVariant:(NSString *)variant;
67
+ - (void)setGPPConsent:(NSString *)sectionName
68
+ fieldName:(NSString *)fieldName
69
+ value:(NSDictionary *)value;
57
70
  - (void)changeLanguage:(NSString *)language
58
71
  resolve:(RCTPromiseResolveBlock)resolve
59
72
  reject:(RCTPromiseRejectBlock)reject;
@@ -1,5 +1,5 @@
1
1
  import { TurboModule } from 'react-native';
2
- import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, UserDecision, TCFUserDecisions, TCFUserDecisionOnPurpose } from './models';
2
+ import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, GppData, UserDecision, TCFUserDecisions, TCFUserDecisionOnPurpose, TCFUserDecisionOnVendor } from './models';
3
3
  export interface Spec extends TurboModule {
4
4
  configure(options: UsercentricsOptions): void;
5
5
  isReady(): Promise<UsercentricsReadyStatus>;
@@ -14,18 +14,24 @@ export interface Spec extends TurboModule {
14
14
  getTCFData(): Promise<TCFData>;
15
15
  getUserSessionData(): Promise<string>;
16
16
  getUSPData(): Promise<CCPAData>;
17
+ getGPPData(): Promise<GppData>;
18
+ getGPPString(): Promise<string | null>;
17
19
  getABTestingVariant(): Promise<string>;
20
+ getDpsMetadata(templateId: string): Promise<Record<string, unknown> | null>;
18
21
  setCMPId(id: number): void;
19
22
  setABTestingVariant(variant: string): void;
23
+ setGPPConsent(sectionName: string, fieldName: string, value: Object): void;
20
24
  changeLanguage(language: string): Promise<void>;
21
25
  acceptAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
22
26
  acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
23
27
  denyAll(consentType: number): Promise<Array<UsercentricsServiceConsent>>;
24
- denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<TCFUserDecisionOnPurpose>): Promise<Array<UsercentricsServiceConsent>>;
28
+ denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<TCFUserDecisionOnPurpose>, unsavedVendorLIDecisions: Array<TCFUserDecisionOnVendor>): Promise<Array<UsercentricsServiceConsent>>;
25
29
  saveDecisions(decisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
26
30
  saveDecisionsForTCF(tcfDecisions: TCFUserDecisions, fromLayer: number, saveDecisions: Array<UserDecision>, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
27
31
  saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<UsercentricsServiceConsent>>;
28
32
  track(event: number): void;
33
+ addListener(eventName: string): void;
34
+ removeListeners(count: number): void;
29
35
  }
30
36
  declare const _default: Spec;
31
37
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AA+D/E,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC;AAEzH,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D;QAC1D,sDAAsD;QACtD,wCAAwC;QACxC,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED,eAAe,oBAA4B,CAAC"}
1
+ {"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAwE/E,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC;AAEzH,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D;QAC1D,sDAAsD;QACtD,wCAAwC;QACxC,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED,eAAe,oBAA4B,CAAC"}
@@ -1,4 +1,5 @@
1
- import { AdditionalConsentModeData, BannerSettings, CCPAData, TCFData, TCFDecisionUILayer, TCFUserDecisionOnPurpose, TCFUserDecisions, UsercentricsAnalyticsEventType, UsercentricsCMPData, UsercentricsConsentType, UsercentricsConsentUserResponse, UsercentricsOptions, UsercentricsReadyStatus, UsercentricsServiceConsent, UserDecision } from './models';
1
+ import { EmitterSubscription } from 'react-native';
2
+ import { AdditionalConsentModeData, BannerSettings, CCPAData, GppData, GppSectionChangePayload, TCFData, TCFDecisionUILayer, TCFUserDecisionOnPurpose, TCFUserDecisionOnVendor, TCFUserDecisions, UsercentricsAnalyticsEventType, UsercentricsCMPData, UsercentricsConsentType, UsercentricsConsentUserResponse, UsercentricsOptions, UsercentricsReadyStatus, UsercentricsServiceConsent, UserDecision } from './models';
2
3
  export declare const Usercentrics: {
3
4
  configure: (options: UsercentricsOptions) => void;
4
5
  status: () => Promise<UsercentricsReadyStatus>;
@@ -11,18 +12,23 @@ export declare const Usercentrics: {
11
12
  getCMPData: () => Promise<UsercentricsCMPData>;
12
13
  getUserSessionData: () => Promise<string>;
13
14
  getCCPAData: () => Promise<CCPAData>;
15
+ getGPPData: () => Promise<GppData>;
16
+ getGPPString: () => Promise<string | null>;
14
17
  getTCFData: () => Promise<TCFData>;
15
18
  getAdditionalConsentModeData: () => Promise<AdditionalConsentModeData>;
19
+ getDpsMetadata: (templateId: string) => Promise<Record<string, unknown> | null>;
16
20
  changeLanguage: (language: string) => Promise<void>;
17
21
  acceptAll: (consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
18
22
  acceptAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
19
23
  denyAll: (consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
20
- denyAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions?: TCFUserDecisionOnPurpose[]) => Promise<Array<UsercentricsServiceConsent>>;
24
+ denyAllForTCF: (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions?: TCFUserDecisionOnPurpose[], unsavedVendorLIDecisions?: TCFUserDecisionOnVendor[]) => Promise<Array<UsercentricsServiceConsent>>;
21
25
  saveDecisions: (decisions: UserDecision[], consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
22
26
  saveDecisionsForTCF: (tcfDecisions: TCFUserDecisions, fromLayer: TCFDecisionUILayer, decisions: UserDecision[], consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
23
27
  saveOptOutForCCPA: (isOptedOut: boolean, consentType: UsercentricsConsentType) => Promise<Array<UsercentricsServiceConsent>>;
24
28
  setCMPId: (id: number) => void;
25
29
  setABTestingVariant: (variant: string) => void;
30
+ setGPPConsent: (sectionName: string, fieldName: string, value: unknown) => Promise<void>;
26
31
  track: (event: UsercentricsAnalyticsEventType) => Promise<void>;
27
32
  clearUserSession: () => Promise<UsercentricsReadyStatus>;
33
+ onGppSectionChange: (callback: (payload: GppSectionChangePayload) => void) => EmitterSubscription;
28
34
  };
@@ -1,7 +1,8 @@
1
- import { NativeModules } from 'react-native';
1
+ import { NativeEventEmitter, NativeModules } from 'react-native';
2
2
  import NativeUsercentrics from './NativeUsercentrics';
3
3
  // Use TurboModule when available, fallback to legacy bridge
4
4
  const RNUsercentricsModule = NativeUsercentrics || NativeModules.RNUsercentricsModule;
5
+ const eventEmitter = new NativeEventEmitter(RNUsercentricsModule);
5
6
  export const Usercentrics = {
6
7
  configure: (options) => {
7
8
  RNUsercentricsModule.configure(options);
@@ -45,6 +46,14 @@ export const Usercentrics = {
45
46
  await RNUsercentricsModule.isReady();
46
47
  return RNUsercentricsModule.getUSPData();
47
48
  },
49
+ getGPPData: async () => {
50
+ await RNUsercentricsModule.isReady();
51
+ return RNUsercentricsModule.getGPPData();
52
+ },
53
+ getGPPString: async () => {
54
+ await RNUsercentricsModule.isReady();
55
+ return RNUsercentricsModule.getGPPString();
56
+ },
48
57
  getTCFData: async () => {
49
58
  await RNUsercentricsModule.isReady();
50
59
  return RNUsercentricsModule.getTCFData();
@@ -53,6 +62,10 @@ export const Usercentrics = {
53
62
  await RNUsercentricsModule.isReady();
54
63
  return RNUsercentricsModule.getAdditionalConsentModeData();
55
64
  },
65
+ getDpsMetadata: async (templateId) => {
66
+ await RNUsercentricsModule.isReady();
67
+ return RNUsercentricsModule.getDpsMetadata(templateId);
68
+ },
56
69
  changeLanguage: async (language) => {
57
70
  await RNUsercentricsModule.isReady();
58
71
  return RNUsercentricsModule.changeLanguage(language);
@@ -69,9 +82,9 @@ export const Usercentrics = {
69
82
  await RNUsercentricsModule.isReady();
70
83
  return RNUsercentricsModule.denyAll(consentType);
71
84
  },
72
- denyAllForTCF: async (fromLayer, consentType, unsavedPurposeLIDecisions = []) => {
85
+ denyAllForTCF: async (fromLayer, consentType, unsavedPurposeLIDecisions = [], unsavedVendorLIDecisions = []) => {
73
86
  await RNUsercentricsModule.isReady();
74
- return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions);
87
+ return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions, unsavedVendorLIDecisions);
75
88
  },
76
89
  saveDecisions: async (decisions, consentType) => {
77
90
  await RNUsercentricsModule.isReady();
@@ -91,6 +104,10 @@ export const Usercentrics = {
91
104
  setABTestingVariant: (variant) => {
92
105
  RNUsercentricsModule.setABTestingVariant(variant);
93
106
  },
107
+ setGPPConsent: async (sectionName, fieldName, value) => {
108
+ await RNUsercentricsModule.isReady();
109
+ RNUsercentricsModule.setGPPConsent(sectionName, fieldName, { value });
110
+ },
94
111
  track: async (event) => {
95
112
  await RNUsercentricsModule.isReady();
96
113
  RNUsercentricsModule.track(event);
@@ -99,5 +116,8 @@ export const Usercentrics = {
99
116
  await RNUsercentricsModule.isReady();
100
117
  return RNUsercentricsModule.clearUserSession();
101
118
  },
119
+ onGppSectionChange: (callback) => {
120
+ return eventEmitter.addListener("onGppSectionChange", callback);
121
+ },
102
122
  };
103
123
  //# sourceMappingURL=Usercentrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"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"}
@@ -13,18 +13,24 @@ export interface Spec extends TurboModule {
13
13
  getTCFData(): Promise<Object>;
14
14
  getUserSessionData(): Promise<string>;
15
15
  getUSPData(): Promise<Object>;
16
+ getGPPData(): Promise<Object>;
17
+ getGPPString(): Promise<string | null>;
16
18
  getABTestingVariant(): Promise<string>;
19
+ getDpsMetadata(templateId: string): Promise<Object | null>;
17
20
  setCMPId(id: number): void;
18
21
  setABTestingVariant(variant: string): void;
22
+ setGPPConsent(sectionName: string, fieldName: string, value: Object): void;
19
23
  changeLanguage(language: string): Promise<void>;
20
24
  acceptAll(consentType: number): Promise<Array<Object>>;
21
25
  acceptAllForTCF(fromLayer: number, consentType: number): Promise<Array<Object>>;
22
26
  denyAll(consentType: number): Promise<Array<Object>>;
23
- denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<Object>): Promise<Array<Object>>;
27
+ denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array<Object>, unsavedVendorLIDecisions: Array<Object>): Promise<Array<Object>>;
24
28
  saveDecisions(decisions: Array<Object>, consentType: number): Promise<Array<Object>>;
25
29
  saveDecisionsForTCF(tcfDecisions: Object, fromLayer: number, saveDecisions: Array<Object>, consentType: number): Promise<Array<Object>>;
26
30
  saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise<Array<Object>>;
27
31
  track(event: number): void;
32
+ addListener(eventName: string): void;
33
+ removeListeners(count: number): void;
28
34
  }
29
35
  declare const _default: Spec | null;
30
36
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAiDnD,eAAe,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAwDnD,eAAe,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,CAAC"}
@@ -13,5 +13,7 @@ export declare class CCPASettings {
13
13
  secondLayerDescription: string;
14
14
  secondLayerHideLanguageSwitch: boolean;
15
15
  btnMoreInfo: string;
16
- constructor(optOutNoticeLabel: string, btnSave: string, firstLayerTitle: string, isActive: boolean, showOnPageLoad: boolean, reshowAfterDays: number, iabAgreementExists: boolean, appFirstLayerDescription: string, firstLayerMobileDescriptionIsActive: boolean, firstLayerMobileDescription: string, secondLayerTitle: string, secondLayerDescription: string, secondLayerHideLanguageSwitch: boolean, btnMoreInfo: string);
16
+ mspaCoveredTransaction?: boolean;
17
+ mspaMode?: number;
18
+ constructor(optOutNoticeLabel: string, btnSave: string, firstLayerTitle: string, isActive: boolean, showOnPageLoad: boolean, reshowAfterDays: number, iabAgreementExists: boolean, appFirstLayerDescription: string, firstLayerMobileDescriptionIsActive: boolean, firstLayerMobileDescription: string, secondLayerTitle: string, secondLayerDescription: string, secondLayerHideLanguageSwitch: boolean, btnMoreInfo: string, mspaCoveredTransaction?: boolean, mspaMode?: number);
17
19
  }
@@ -1,5 +1,5 @@
1
1
  export class CCPASettings {
2
- constructor(optOutNoticeLabel, btnSave, firstLayerTitle, isActive, showOnPageLoad, reshowAfterDays, iabAgreementExists, appFirstLayerDescription, firstLayerMobileDescriptionIsActive, firstLayerMobileDescription, secondLayerTitle, secondLayerDescription, secondLayerHideLanguageSwitch, btnMoreInfo) {
2
+ constructor(optOutNoticeLabel, btnSave, firstLayerTitle, isActive, showOnPageLoad, reshowAfterDays, iabAgreementExists, appFirstLayerDescription, firstLayerMobileDescriptionIsActive, firstLayerMobileDescription, secondLayerTitle, secondLayerDescription, secondLayerHideLanguageSwitch, btnMoreInfo, mspaCoveredTransaction, mspaMode) {
3
3
  this.optOutNoticeLabel = optOutNoticeLabel;
4
4
  this.btnSave = btnSave;
5
5
  this.firstLayerTitle = firstLayerTitle;
@@ -14,6 +14,8 @@ export class CCPASettings {
14
14
  this.secondLayerDescription = secondLayerDescription;
15
15
  this.secondLayerHideLanguageSwitch = secondLayerHideLanguageSwitch;
16
16
  this.btnMoreInfo = btnMoreInfo;
17
+ this.mspaCoveredTransaction = mspaCoveredTransaction;
18
+ this.mspaMode = mspaMode;
17
19
  }
18
20
  }
19
21
  //# sourceMappingURL=CCPASettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CCPASettings.js","sourceRoot":"","sources":["../../src/models/CCPASettings.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAiBrB,YACI,iBAAyB,EACzB,OAAe,EACf,eAAuB,EACvB,QAAiB,EACjB,cAAuB,EACvB,eAAuB,EACvB,kBAA2B,EAC3B,wBAAgC,EAChC,mCAA4C,EAC5C,2BAAmC,EACnC,gBAAwB,EACxB,sBAA8B,EAC9B,6BAAsC,EACtC,WAAmB;QAEnB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAA;QACxD,IAAI,CAAC,mCAAmC,GAAG,mCAAmC,CAAA;QAC9E,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAA;QAC9D,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAA;QAClE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;CACJ"}
1
+ {"version":3,"file":"CCPASettings.js","sourceRoot":"","sources":["../../src/models/CCPASettings.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAmBrB,YACI,iBAAyB,EACzB,OAAe,EACf,eAAuB,EACvB,QAAiB,EACjB,cAAuB,EACvB,eAAuB,EACvB,kBAA2B,EAC3B,wBAAgC,EAChC,mCAA4C,EAC5C,2BAAmC,EACnC,gBAAwB,EACxB,sBAA8B,EAC9B,6BAAsC,EACtC,WAAmB,EACnB,sBAAgC,EAChC,QAAiB;QAEjB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAA;QACxD,IAAI,CAAC,mCAAmC,GAAG,mCAAmC,CAAA;QAC9E,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAA;QAC9D,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAA;QAClE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;CACJ"}