@digia-engage/core 1.0.0-beta.6 → 1.1.0
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.
- package/README.md +1 -1
- package/android/build.gradle +1 -2
- package/android/local.properties +1 -1
- package/android/settings.gradle +2 -1
- package/android/src/main/java/com/digia/engage/rn/DigiaAnchorViewManager.kt +66 -0
- package/android/src/main/java/com/digia/engage/rn/DigiaPackage.kt +1 -0
- package/ios/DigiaAnchorViewManager.swift +43 -0
- package/ios/DigiaEngageModule.m +12 -0
- package/ios/DigiaModule.swift +75 -9
- package/lib/commonjs/DigiaAnchorView.js +22 -0
- package/lib/commonjs/DigiaAnchorView.js.map +1 -0
- package/lib/commonjs/NativeDigiaEngage.js.map +1 -1
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/DigiaAnchorView.js +16 -0
- package/lib/module/DigiaAnchorView.js.map +1 -0
- package/lib/module/NativeDigiaEngage.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/DigiaAnchorView.d.ts +21 -0
- package/lib/typescript/DigiaAnchorView.d.ts.map +1 -0
- package/lib/typescript/NativeDigiaEngage.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/DigiaAnchorView.tsx +22 -0
- package/src/NativeDigiaEngage.ts +1 -0
- package/src/index.ts +1 -0
- package/android/.project +0 -28
package/README.md
CHANGED
package/android/build.gradle
CHANGED
|
@@ -70,8 +70,7 @@ android {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
dependencies {
|
|
73
|
-
|
|
74
|
-
implementation 'tech.digia:engage:1.0.0-beta.04'
|
|
73
|
+
implementation 'tech.digia:engage:1.1.0'
|
|
75
74
|
|
|
76
75
|
// ── React Native ─────────────────────────────────────────────────────────
|
|
77
76
|
// React Native is provided by the host app; mark as compileOnly so it is
|
package/android/local.properties
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
sdk.dir=/Users/
|
|
1
|
+
sdk.dir=/Users/adityachoubey/Library/Android/sdk
|
package/android/settings.gradle
CHANGED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
package com.digia.engage.rn
|
|
2
|
+
|
|
3
|
+
import android.graphics.Color
|
|
4
|
+
import android.graphics.Outline
|
|
5
|
+
import android.view.View
|
|
6
|
+
import android.view.ViewOutlineProvider
|
|
7
|
+
import android.widget.FrameLayout
|
|
8
|
+
import androidx.lifecycle.LifecycleOwner
|
|
9
|
+
import androidx.lifecycle.ViewModelStoreOwner
|
|
10
|
+
import androidx.lifecycle.setViewTreeLifecycleOwner
|
|
11
|
+
import androidx.lifecycle.setViewTreeViewModelStoreOwner
|
|
12
|
+
import androidx.savedstate.SavedStateRegistryOwner
|
|
13
|
+
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
|
|
14
|
+
import com.digia.engage.DigiaAnchorView
|
|
15
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
16
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
17
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
18
|
+
|
|
19
|
+
internal class DigiaAnchorViewManager : ViewGroupManager<DigiaAnchorView>() {
|
|
20
|
+
|
|
21
|
+
override fun getName(): String = VIEW_NAME
|
|
22
|
+
|
|
23
|
+
override fun createViewInstance(context: ThemedReactContext): DigiaAnchorView {
|
|
24
|
+
val activityContext = context.currentActivity ?: context
|
|
25
|
+
val view = DigiaAnchorView(activityContext)
|
|
26
|
+
|
|
27
|
+
val activity = context.currentActivity
|
|
28
|
+
if (activity is LifecycleOwner) view.setViewTreeLifecycleOwner(activity)
|
|
29
|
+
if (activity is ViewModelStoreOwner) view.setViewTreeViewModelStoreOwner(activity)
|
|
30
|
+
if (activity is SavedStateRegistryOwner) view.setViewTreeSavedStateRegistryOwner(activity)
|
|
31
|
+
|
|
32
|
+
view.layoutParams = FrameLayout.LayoutParams(
|
|
33
|
+
FrameLayout.LayoutParams.WRAP_CONTENT,
|
|
34
|
+
FrameLayout.LayoutParams.WRAP_CONTENT,
|
|
35
|
+
)
|
|
36
|
+
// Prevent the FrameLayout background from leaking white in spotlight corners.
|
|
37
|
+
view.setBackgroundColor(Color.TRANSPARENT)
|
|
38
|
+
return view
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@ReactProp(name = "anchorKey")
|
|
42
|
+
fun setAnchorKey(view: DigiaAnchorView, anchorKey: String?) {
|
|
43
|
+
view.anchorKey = anchorKey.orEmpty()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@ReactProp(name = "cornerRadius", defaultFloat = 0f)
|
|
47
|
+
fun setCornerRadius(view: DigiaAnchorView, cornerRadius: Float) {
|
|
48
|
+
val px = cornerRadius * view.resources.displayMetrics.density
|
|
49
|
+
view.spotlightCornerRadius = px
|
|
50
|
+
if (px > 0f) {
|
|
51
|
+
view.outlineProvider = object : ViewOutlineProvider() {
|
|
52
|
+
override fun getOutline(v: View, outline: Outline) {
|
|
53
|
+
outline.setRoundRect(0, 0, v.width, v.height, px)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
view.clipToOutline = true
|
|
57
|
+
} else {
|
|
58
|
+
view.clipToOutline = false
|
|
59
|
+
view.outlineProvider = ViewOutlineProvider.BOUNDS
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
companion object {
|
|
64
|
+
const val VIEW_NAME = "DigiaAnchorView"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React
|
|
2
|
+
import UIKit
|
|
3
|
+
import DigiaEngage
|
|
4
|
+
|
|
5
|
+
@objc(DigiaAnchorView)
|
|
6
|
+
final class DigiaAnchorViewManager: RCTViewManager {
|
|
7
|
+
|
|
8
|
+
override static func requiresMainQueueSetup() -> Bool { true }
|
|
9
|
+
|
|
10
|
+
override func view() -> UIView! {
|
|
11
|
+
return DigiaAnchorUIView()
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@objc func setAnchorKey(_ anchorKey: String, forView view: DigiaAnchorUIView) {
|
|
15
|
+
view.anchorKey = anchorKey
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// MARK: - DigiaAnchorUIView
|
|
20
|
+
|
|
21
|
+
final class DigiaAnchorUIView: UIView {
|
|
22
|
+
|
|
23
|
+
var anchorKey: String = "" {
|
|
24
|
+
didSet {
|
|
25
|
+
guard anchorKey != oldValue else { return }
|
|
26
|
+
if !oldValue.isEmpty {
|
|
27
|
+
AnchorRegistry.shared.unregister(key: oldValue)
|
|
28
|
+
}
|
|
29
|
+
if !anchorKey.isEmpty, window != nil {
|
|
30
|
+
AnchorRegistry.shared.register(key: anchorKey, view: self)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
override func didMoveToWindow() {
|
|
36
|
+
super.didMoveToWindow()
|
|
37
|
+
if window != nil, !anchorKey.isEmpty {
|
|
38
|
+
AnchorRegistry.shared.register(key: anchorKey, view: self)
|
|
39
|
+
} else if window == nil, !anchorKey.isEmpty {
|
|
40
|
+
AnchorRegistry.shared.unregister(key: anchorKey)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
package/ios/DigiaEngageModule.m
CHANGED
|
@@ -38,6 +38,14 @@ RCT_EXTERN_METHOD(triggerCampaign:(NSString *)id
|
|
|
38
38
|
|
|
39
39
|
RCT_EXTERN_METHOD(invalidateCampaign:(NSString *)campaignId)
|
|
40
40
|
|
|
41
|
+
RCT_EXTERN_METHOD(showAnchoredOverlay:(NSString *)id
|
|
42
|
+
content:(NSDictionary *)content
|
|
43
|
+
cepContext:(NSDictionary *)cepContext
|
|
44
|
+
anchorX:(double)anchorX
|
|
45
|
+
anchorY:(double)anchorY
|
|
46
|
+
anchorWidth:(double)anchorWidth
|
|
47
|
+
anchorHeight:(double)anchorHeight)
|
|
48
|
+
|
|
41
49
|
@end
|
|
42
50
|
|
|
43
51
|
|
|
@@ -50,3 +58,7 @@ RCT_EXTERN_METHOD(invalidateCampaign:(NSString *)campaignId)
|
|
|
50
58
|
RCT_EXPORT_VIEW_PROPERTY(placementKey, NSString)
|
|
51
59
|
RCT_EXPORT_VIEW_PROPERTY(onContentSizeChange, RCTDirectEventBlock)
|
|
52
60
|
@end
|
|
61
|
+
|
|
62
|
+
@interface RCT_EXTERN_MODULE(DigiaAnchorView, RCTViewManager)
|
|
63
|
+
RCT_EXPORT_VIEW_PROPERTY(anchorKey, NSString)
|
|
64
|
+
@end
|
package/ios/DigiaModule.swift
CHANGED
|
@@ -151,6 +151,41 @@ final class DigiaModule: RCTEventEmitter {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
155
|
+
// MARK: - showAnchoredOverlay
|
|
156
|
+
|
|
157
|
+
/// Shows SHOW_TOOLTIP or SHOW_SPOTLIGHT anchored to coordinates measured in JS.
|
|
158
|
+
/// anchorX/Y/Width/Height are screen-pixel values from measureInWindow().
|
|
159
|
+
@objc
|
|
160
|
+
func showAnchoredOverlay(
|
|
161
|
+
_ id: String,
|
|
162
|
+
content contentMap: NSDictionary,
|
|
163
|
+
cepContext cepContextMap: NSDictionary,
|
|
164
|
+
anchorX: Double,
|
|
165
|
+
anchorY: Double,
|
|
166
|
+
anchorWidth: Double,
|
|
167
|
+
anchorHeight: Double
|
|
168
|
+
) {
|
|
169
|
+
let mutable = NSMutableDictionary(dictionary: contentMap)
|
|
170
|
+
// Pack anchor coords into the args sub-dict so buildInAppPayloadContent
|
|
171
|
+
// captures them as JSONValue entries in InAppPayloadContent.args.
|
|
172
|
+
var argsDict = (mutable["args"] as? [String: Any]) ?? [:]
|
|
173
|
+
argsDict["_anchorX"] = anchorX
|
|
174
|
+
argsDict["_anchorY"] = anchorY
|
|
175
|
+
argsDict["_anchorWidth"] = anchorWidth
|
|
176
|
+
argsDict["_anchorHeight"] = anchorHeight
|
|
177
|
+
mutable["args"] = argsDict
|
|
178
|
+
|
|
179
|
+
let content = buildInAppPayloadContent(from: mutable)
|
|
180
|
+
let cepContext = (cepContextMap as? [String: String]) ?? [:]
|
|
181
|
+
let payload = InAppPayload(id: id, content: content, cepContext: cepContext)
|
|
182
|
+
|
|
183
|
+
Task { @MainActor in
|
|
184
|
+
guard let delegate = self.rnPlugin.delegate else { return }
|
|
185
|
+
delegate.onCampaignTriggered(payload)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
154
189
|
// ────────────────────────────────────────────────────────────────────────
|
|
155
190
|
// MARK: - Internal: mount the SwiftUI overlay host
|
|
156
191
|
|
|
@@ -170,22 +205,34 @@ final class DigiaModule: RCTEventEmitter {
|
|
|
170
205
|
let mountTag = 0xD19140
|
|
171
206
|
if rootVC.view.viewWithTag(mountTag) != nil { return }
|
|
172
207
|
|
|
208
|
+
// Container with passthrough hitTest — lets tooltip card taps reach SwiftUI
|
|
209
|
+
// while all other touches fall through to React Native content.
|
|
210
|
+
let container = DigiaPassthroughHostView()
|
|
211
|
+
container.tag = mountTag
|
|
212
|
+
container.translatesAutoresizingMaskIntoConstraints = false
|
|
213
|
+
container.backgroundColor = .clear
|
|
214
|
+
|
|
173
215
|
let hc = UIHostingController(rootView: DigiaHostWrapperView())
|
|
174
|
-
hc.view.tag = mountTag
|
|
175
216
|
hc.view.translatesAutoresizingMaskIntoConstraints = false
|
|
176
217
|
hc.view.backgroundColor = .clear
|
|
177
|
-
|
|
178
|
-
|
|
218
|
+
|
|
219
|
+
container.hostingView = hc.view
|
|
179
220
|
|
|
180
221
|
rootVC.addChild(hc)
|
|
181
|
-
|
|
222
|
+
container.addSubview(hc.view)
|
|
182
223
|
hc.didMove(toParent: rootVC)
|
|
183
224
|
|
|
225
|
+
rootVC.view.addSubview(container)
|
|
226
|
+
|
|
184
227
|
NSLayoutConstraint.activate([
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
228
|
+
container.leadingAnchor.constraint(equalTo: rootVC.view.leadingAnchor),
|
|
229
|
+
container.trailingAnchor.constraint(equalTo: rootVC.view.trailingAnchor),
|
|
230
|
+
container.topAnchor.constraint(equalTo: rootVC.view.topAnchor),
|
|
231
|
+
container.bottomAnchor.constraint(equalTo: rootVC.view.bottomAnchor),
|
|
232
|
+
hc.view.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
|
233
|
+
hc.view.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
|
234
|
+
hc.view.topAnchor.constraint(equalTo: container.topAnchor),
|
|
235
|
+
hc.view.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
|
189
236
|
])
|
|
190
237
|
}
|
|
191
238
|
|
|
@@ -208,6 +255,8 @@ final class DigiaModule: RCTEventEmitter {
|
|
|
208
255
|
return raw.compactMapValues { JSONValue(rawValue: $0) }
|
|
209
256
|
}()
|
|
210
257
|
|
|
258
|
+
let anchorKey = map["anchorKey"] as? String
|
|
259
|
+
|
|
211
260
|
return InAppPayloadContent(
|
|
212
261
|
type: type,
|
|
213
262
|
placementKey: pk,
|
|
@@ -216,11 +265,28 @@ final class DigiaModule: RCTEventEmitter {
|
|
|
216
265
|
viewId: viewId,
|
|
217
266
|
command: command,
|
|
218
267
|
args: args,
|
|
219
|
-
screenId: screenId
|
|
268
|
+
screenId: screenId,
|
|
269
|
+
anchorKey: anchorKey
|
|
220
270
|
)
|
|
221
271
|
}
|
|
222
272
|
}
|
|
223
273
|
|
|
274
|
+
// MARK: - DigiaPassthroughHostView
|
|
275
|
+
|
|
276
|
+
/// Container that delegates hitTest to the SwiftUI hosting view.
|
|
277
|
+
/// When SwiftUI renders nothing interactive (no overlay), hitTest returns nil
|
|
278
|
+
/// so touches fall through to React Native. When an overlay is visible,
|
|
279
|
+
/// taps on it are consumed by SwiftUI.
|
|
280
|
+
private final class DigiaPassthroughHostView: UIView {
|
|
281
|
+
weak var hostingView: UIView?
|
|
282
|
+
|
|
283
|
+
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
|
284
|
+
guard let hv = hostingView else { return nil }
|
|
285
|
+
let converted = convert(point, to: hv)
|
|
286
|
+
return hv.hitTest(converted, with: event)
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
224
290
|
// MARK: - JSONValue convenience init from Any
|
|
225
291
|
private extension JSONValue {
|
|
226
292
|
init?(rawValue: Any) {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DigiaAnchorView = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
/**
|
|
9
|
+
* DigiaAnchorView
|
|
10
|
+
*
|
|
11
|
+
* Registers a native Android DigiaAnchorView (FrameLayout) in AnchorRegistry by anchorKey.
|
|
12
|
+
* When a SHOW_TOOLTIP or SHOW_SPOTLIGHT campaign fires, the native SDK looks up this view
|
|
13
|
+
* via AnchorRegistry and uses getLocationOnScreen() for accurate pixel-perfect coordinates.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* <DigiaAnchorView anchorKey="pdp_add_to_cart" style={{ alignSelf: 'flex-start' }}>
|
|
17
|
+
* <TouchableOpacity ...>Add to Cart</TouchableOpacity>
|
|
18
|
+
* </DigiaAnchorView>
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const DigiaAnchorView = exports.DigiaAnchorView = (0, _reactNative.requireNativeComponent)('DigiaAnchorView');
|
|
22
|
+
//# sourceMappingURL=DigiaAnchorView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","DigiaAnchorView","exports","requireNativeComponent"],"sourceRoot":"../../src","sources":["DigiaAnchorView.tsx"],"mappings":";;;;;;AAaA,IAAAA,YAAA,GAAAC,OAAA;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUO,MAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,IAAAE,mCAAsB,EAAuB,iBAAiB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_resolved","getModule","TurboModuleRegistry","get","NativeModules","DigiaEngageModule","__DEV__","console","warn","nativeDigiaModule","exports","initialize","apiKey","environment","logLevel","Promise","resolve","registerBridge","setCurrentScreen","name","triggerCampaign","id","content","cepContext","invalidateCampaign","campaignId","getConstants"],"sourceRoot":"../../src","sources":["NativeDigiaEngage.ts"],"mappings":";;;;;;AAgBA,IAAAA,YAAA,GAAAC,OAAA;AAhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_resolved","getModule","TurboModuleRegistry","get","NativeModules","DigiaEngageModule","__DEV__","console","warn","nativeDigiaModule","exports","initialize","apiKey","environment","logLevel","Promise","resolve","registerBridge","setCurrentScreen","name","triggerCampaign","id","content","cepContext","invalidateCampaign","campaignId","getConstants"],"sourceRoot":"../../src","sources":["NativeDigiaEngage.ts"],"mappings":";;;;;;AAgBA,IAAAA,YAAA,GAAAC,OAAA;AAhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIC,SAAsB,GAAG,IAAI;AACjC,SAASC,SAASA,CAAA,EAAgB;EAC9B,IAAID,SAAS,KAAK,IAAI,EAAE,OAAOA,SAAS;EACxCA,SAAS,GACLE,gCAAmB,CAACC,GAAG,CAAO,mBAAmB,CAAC,IACjDC,0BAAa,CAACC,iBAAsC,IACrD,IAAI;EACR,IAAIC,OAAO,IAAI,CAACN,SAAS,EAAE;IACvBO,OAAO,CAACC,IAAI,CACR,wCAAwC,GACxC,iEACJ,CAAC;EACL;EACA,OAAOR,SAAS;AACpB;AAEO,MAAMS,iBAAuB,GAAAC,OAAA,CAAAD,iBAAA,GAAG;EACnCE,UAAU,EAAEA,CAACC,MAAM,EAAEC,WAAW,EAAEC,QAAQ,KACtCb,SAAS,CAAC,CAAC,EAAEU,UAAU,CAACC,MAAM,EAAEC,WAAW,EAAEC,QAAQ,CAAC,IAAIC,OAAO,CAACC,OAAO,CAAC,CAAC;EAC/EC,cAAc,EAAEA,CAAA,KAAMhB,SAAS,CAAC,CAAC,EAAEgB,cAAc,CAAC,CAAC;EACnDC,gBAAgB,EAAGC,IAAI,IAAKlB,SAAS,CAAC,CAAC,EAAEiB,gBAAgB,CAACC,IAAI,CAAC;EAC/DC,eAAe,EAAEA,CAACC,EAAE,EAAEC,OAAO,EAAEC,UAAU,KACrCtB,SAAS,CAAC,CAAC,EAAEmB,eAAe,CAACC,EAAE,EAAEC,OAAO,EAAEC,UAAU,CAAC;EACzDC,kBAAkB,EAAGC,UAAU,IAAKxB,SAAS,CAAC,CAAC,EAAEuB,kBAAkB,CAACC,UAAU,CAAC;EAC/EC,YAAY,EAAEA,CAAA,KAAMzB,SAAS,CAAC,CAAC,EAAEyB,YAAY,GAAG,CAAC,IAAI,CAAC;AAC1D,CAAC","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "Digia", {
|
|
|
9
9
|
return _Digia.Digia;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "DigiaAnchorView", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _DigiaAnchorView.DigiaAnchorView;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "DigiaHostView", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function () {
|
|
@@ -24,4 +30,5 @@ Object.defineProperty(exports, "DigiaSlotView", {
|
|
|
24
30
|
var _Digia = require("./Digia");
|
|
25
31
|
var _DigiaHostView = require("./DigiaHostView");
|
|
26
32
|
var _DigiaSlotView = require("./DigiaSlotView");
|
|
33
|
+
var _DigiaAnchorView = require("./DigiaAnchorView");
|
|
27
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_Digia","require","_DigiaHostView","_DigiaSlotView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_Digia","require","_DigiaHostView","_DigiaSlotView","_DigiaAnchorView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DigiaAnchorView
|
|
3
|
+
*
|
|
4
|
+
* Registers a native Android DigiaAnchorView (FrameLayout) in AnchorRegistry by anchorKey.
|
|
5
|
+
* When a SHOW_TOOLTIP or SHOW_SPOTLIGHT campaign fires, the native SDK looks up this view
|
|
6
|
+
* via AnchorRegistry and uses getLocationOnScreen() for accurate pixel-perfect coordinates.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* <DigiaAnchorView anchorKey="pdp_add_to_cart" style={{ alignSelf: 'flex-start' }}>
|
|
10
|
+
* <TouchableOpacity ...>Add to Cart</TouchableOpacity>
|
|
11
|
+
* </DigiaAnchorView>
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { requireNativeComponent } from 'react-native';
|
|
15
|
+
export const DigiaAnchorView = requireNativeComponent('DigiaAnchorView');
|
|
16
|
+
//# sourceMappingURL=DigiaAnchorView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["requireNativeComponent","DigiaAnchorView"],"sourceRoot":"../../src","sources":["DigiaAnchorView.tsx"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,sBAAsB,QAAwB,cAAc;AAQrE,OAAO,MAAMC,eAAe,GAAGD,sBAAsB,CAAuB,iBAAiB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","TurboModuleRegistry","_resolved","getModule","get","DigiaEngageModule","__DEV__","console","warn","nativeDigiaModule","initialize","apiKey","environment","logLevel","Promise","resolve","registerBridge","setCurrentScreen","name","triggerCampaign","id","content","cepContext","invalidateCampaign","campaignId","getConstants"],"sourceRoot":"../../src","sources":["NativeDigiaEngage.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,EAAEC,mBAAmB,QAAQ,cAAc;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["NativeModules","TurboModuleRegistry","_resolved","getModule","get","DigiaEngageModule","__DEV__","console","warn","nativeDigiaModule","initialize","apiKey","environment","logLevel","Promise","resolve","registerBridge","setCurrentScreen","name","triggerCampaign","id","content","cepContext","invalidateCampaign","campaignId","getConstants"],"sourceRoot":"../../src","sources":["NativeDigiaEngage.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,EAAEC,mBAAmB,QAAQ,cAAc;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIC,SAAsB,GAAG,IAAI;AACjC,SAASC,SAASA,CAAA,EAAgB;EAC9B,IAAID,SAAS,KAAK,IAAI,EAAE,OAAOA,SAAS;EACxCA,SAAS,GACLD,mBAAmB,CAACG,GAAG,CAAO,mBAAmB,CAAC,IACjDJ,aAAa,CAACK,iBAAsC,IACrD,IAAI;EACR,IAAIC,OAAO,IAAI,CAACJ,SAAS,EAAE;IACvBK,OAAO,CAACC,IAAI,CACR,wCAAwC,GACxC,iEACJ,CAAC;EACL;EACA,OAAON,SAAS;AACpB;AAEA,OAAO,MAAMO,iBAAuB,GAAG;EACnCC,UAAU,EAAEA,CAACC,MAAM,EAAEC,WAAW,EAAEC,QAAQ,KACtCV,SAAS,CAAC,CAAC,EAAEO,UAAU,CAACC,MAAM,EAAEC,WAAW,EAAEC,QAAQ,CAAC,IAAIC,OAAO,CAACC,OAAO,CAAC,CAAC;EAC/EC,cAAc,EAAEA,CAAA,KAAMb,SAAS,CAAC,CAAC,EAAEa,cAAc,CAAC,CAAC;EACnDC,gBAAgB,EAAGC,IAAI,IAAKf,SAAS,CAAC,CAAC,EAAEc,gBAAgB,CAACC,IAAI,CAAC;EAC/DC,eAAe,EAAEA,CAACC,EAAE,EAAEC,OAAO,EAAEC,UAAU,KACrCnB,SAAS,CAAC,CAAC,EAAEgB,eAAe,CAACC,EAAE,EAAEC,OAAO,EAAEC,UAAU,CAAC;EACzDC,kBAAkB,EAAGC,UAAU,IAAKrB,SAAS,CAAC,CAAC,EAAEoB,kBAAkB,CAACC,UAAU,CAAC;EAC/EC,YAAY,EAAEA,CAAA,KAAMtB,SAAS,CAAC,CAAC,EAAEsB,YAAY,GAAG,CAAC,IAAI,CAAC;AAC1D,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Digia","DigiaHostView","DigiaSlotView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,aAAa,QAAQ,iBAAiB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Digia","DigiaHostView","DigiaSlotView","DigiaAnchorView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,eAAe,QAAQ,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DigiaAnchorView
|
|
3
|
+
*
|
|
4
|
+
* Registers a native Android DigiaAnchorView (FrameLayout) in AnchorRegistry by anchorKey.
|
|
5
|
+
* When a SHOW_TOOLTIP or SHOW_SPOTLIGHT campaign fires, the native SDK looks up this view
|
|
6
|
+
* via AnchorRegistry and uses getLocationOnScreen() for accurate pixel-perfect coordinates.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* <DigiaAnchorView anchorKey="pdp_add_to_cart" style={{ alignSelf: 'flex-start' }}>
|
|
10
|
+
* <TouchableOpacity ...>Add to Cart</TouchableOpacity>
|
|
11
|
+
* </DigiaAnchorView>
|
|
12
|
+
*/
|
|
13
|
+
import { type ViewProps } from 'react-native';
|
|
14
|
+
interface DigiaAnchorViewProps extends ViewProps {
|
|
15
|
+
anchorKey: string;
|
|
16
|
+
/** Corner radius in dp — used to round the spotlight cutout to match the wrapped button. */
|
|
17
|
+
cornerRadius?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const DigiaAnchorView: import("react-native").HostComponent<DigiaAnchorViewProps>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=DigiaAnchorView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DigiaAnchorView.d.ts","sourceRoot":"","sources":["../../src/DigiaAnchorView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtE,UAAU,oBAAqB,SAAQ,SAAS;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,eAAe,4DAAkE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeDigiaEngage.d.ts","sourceRoot":"","sources":["../../src/NativeDigiaEngage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;GAOG;AACH,MAAM,WAAW,IAAK,SAAQ,WAAW;IACrC,0DAA0D;IAC1D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;OAIG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB,sDAAsD;IACtD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,eAAe,CACX,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI,CAAC;IAER,iDAAiD;IACjD,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAEhD;
|
|
1
|
+
{"version":3,"file":"NativeDigiaEngage.d.ts","sourceRoot":"","sources":["../../src/NativeDigiaEngage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;GAOG;AACH,MAAM,WAAW,IAAK,SAAQ,WAAW;IACrC,0DAA0D;IAC1D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;OAIG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB,sDAAsD;IACtD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,eAAe,CACX,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,IAAI,CAAC;IAER,iDAAiD;IACjD,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAEhD;AAyBD,eAAO,MAAM,iBAAiB,EAAE,IAS/B,CAAC"}
|
|
@@ -11,5 +11,6 @@
|
|
|
11
11
|
export { Digia } from './Digia';
|
|
12
12
|
export { DigiaHostView } from './DigiaHostView';
|
|
13
13
|
export { DigiaSlotView } from './DigiaSlotView';
|
|
14
|
+
export { DigiaAnchorView } from './DigiaAnchorView';
|
|
14
15
|
export type { DigiaConfig, DigiaDelegate, DigiaExperienceEvent, DigiaPlugin, InAppPayload } from './types';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DigiaAnchorView
|
|
3
|
+
*
|
|
4
|
+
* Registers a native Android DigiaAnchorView (FrameLayout) in AnchorRegistry by anchorKey.
|
|
5
|
+
* When a SHOW_TOOLTIP or SHOW_SPOTLIGHT campaign fires, the native SDK looks up this view
|
|
6
|
+
* via AnchorRegistry and uses getLocationOnScreen() for accurate pixel-perfect coordinates.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* <DigiaAnchorView anchorKey="pdp_add_to_cart" style={{ alignSelf: 'flex-start' }}>
|
|
10
|
+
* <TouchableOpacity ...>Add to Cart</TouchableOpacity>
|
|
11
|
+
* </DigiaAnchorView>
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { requireNativeComponent, type ViewProps } from 'react-native';
|
|
15
|
+
|
|
16
|
+
interface DigiaAnchorViewProps extends ViewProps {
|
|
17
|
+
anchorKey: string;
|
|
18
|
+
/** Corner radius in dp — used to round the spotlight cutout to match the wrapped button. */
|
|
19
|
+
cornerRadius?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const DigiaAnchorView = requireNativeComponent<DigiaAnchorViewProps>('DigiaAnchorView');
|
package/src/NativeDigiaEngage.ts
CHANGED
|
@@ -53,6 +53,7 @@ export interface Spec extends TurboModule {
|
|
|
53
53
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
|
|
56
57
|
// Try TurboModuleRegistry first (New Architecture / JSI).
|
|
57
58
|
// Fall back to NativeModules (bridge interop layer — enabled by default in
|
|
58
59
|
// RN 0.73+ New Architecture when the module is registered with
|
package/src/index.ts
CHANGED
|
@@ -12,4 +12,5 @@
|
|
|
12
12
|
export { Digia } from './Digia';
|
|
13
13
|
export { DigiaHostView } from './DigiaHostView';
|
|
14
14
|
export { DigiaSlotView } from './DigiaSlotView';
|
|
15
|
+
export { DigiaAnchorView } from './DigiaAnchorView';
|
|
15
16
|
export type { DigiaConfig, DigiaDelegate, DigiaExperienceEvent, DigiaPlugin, InAppPayload } from './types';
|
package/android/.project
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<projectDescription>
|
|
3
|
-
<name>digia-engage_core</name>
|
|
4
|
-
<comment>Project digia-engage_core created by Buildship.</comment>
|
|
5
|
-
<projects>
|
|
6
|
-
</projects>
|
|
7
|
-
<buildSpec>
|
|
8
|
-
<buildCommand>
|
|
9
|
-
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
|
|
10
|
-
<arguments>
|
|
11
|
-
</arguments>
|
|
12
|
-
</buildCommand>
|
|
13
|
-
</buildSpec>
|
|
14
|
-
<natures>
|
|
15
|
-
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
|
|
16
|
-
</natures>
|
|
17
|
-
<filteredResources>
|
|
18
|
-
<filter>
|
|
19
|
-
<id>1775559486270</id>
|
|
20
|
-
<name></name>
|
|
21
|
-
<type>30</type>
|
|
22
|
-
<matcher>
|
|
23
|
-
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
|
24
|
-
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
|
25
|
-
</matcher>
|
|
26
|
-
</filter>
|
|
27
|
-
</filteredResources>
|
|
28
|
-
</projectDescription>
|