@cxpinsight/react-native 0.19.1 → 0.20.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/CXPinsight.d.ts +8 -1
  3. package/lib/CXPinsight.d.ts.map +1 -1
  4. package/lib/CXPinsight.js +26 -1
  5. package/lib/CXPinsight.js.map +1 -1
  6. package/lib/CXPinsightProvider.d.ts.map +1 -1
  7. package/lib/CXPinsightProvider.js +7 -1
  8. package/lib/CXPinsightProvider.js.map +1 -1
  9. package/lib/core/autoTapCapture.d.ts.map +1 -1
  10. package/lib/core/autoTapCapture.js +12 -2
  11. package/lib/core/autoTapCapture.js.map +1 -1
  12. package/lib/core/captureStatus.d.ts +4 -0
  13. package/lib/core/captureStatus.d.ts.map +1 -1
  14. package/lib/core/captureStatus.js +2 -0
  15. package/lib/core/captureStatus.js.map +1 -1
  16. package/lib/core/network.d.ts +3 -1
  17. package/lib/core/network.d.ts.map +1 -1
  18. package/lib/core/network.js +9 -3
  19. package/lib/core/network.js.map +1 -1
  20. package/lib/core/triggerEngine.d.ts.map +1 -1
  21. package/lib/core/triggerEngine.js +72 -10
  22. package/lib/core/triggerEngine.js.map +1 -1
  23. package/lib/core/vitals.d.ts +44 -0
  24. package/lib/core/vitals.d.ts.map +1 -0
  25. package/lib/core/vitals.js +226 -0
  26. package/lib/core/vitals.js.map +1 -0
  27. package/lib/instrumented/Pressable.d.ts.map +1 -1
  28. package/lib/instrumented/Pressable.js +5 -0
  29. package/lib/instrumented/Pressable.js.map +1 -1
  30. package/lib/instrumented/TouchableOpacity.d.ts.map +1 -1
  31. package/lib/instrumented/TouchableOpacity.js +5 -0
  32. package/lib/instrumented/TouchableOpacity.js.map +1 -1
  33. package/lib/survey/SurveyModal.d.ts.map +1 -1
  34. package/lib/survey/SurveyModal.js +8 -0
  35. package/lib/survey/SurveyModal.js.map +1 -1
  36. package/lib/types.d.ts +6 -0
  37. package/lib/types.d.ts.map +1 -1
  38. package/lib/types.js.map +1 -1
  39. package/lib/version.d.ts +1 -1
  40. package/lib/version.js +1 -1
  41. package/package.json +2 -2
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rate = rate;
4
+ exports.startVitals = startVitals;
5
+ exports.stopVitals = stopVitals;
6
+ exports.onScreen = onScreen;
7
+ exports.onInput = onInput;
8
+ exports._state = _state;
9
+ /**
10
+ * Mobile vitals — the mobile half of the Performance tab's model
11
+ * (docs/architecture/performance-vitals-web-and-mobile.md).
12
+ *
13
+ * Web vitals are measured by Google's web-vitals library; mobile has no such library, so these are
14
+ * measured here, to the same three questions and to published thresholds:
15
+ *
16
+ * SCREEN_LOAD Loading navigation started (the tap that caused it, or the route change)
17
+ * → the first frame of the new screen. LCP's thresholds.
18
+ * INP Responsiveness an input → the next frame after its handlers ran, the WORST in a
19
+ * screen visit. The same name and thresholds as web INP.
20
+ * JS_STALL Smoothness the longest time the JS thread was blocked in a screen visit.
21
+ * Apple's hang thresholds (250 ms micro hang, 500 ms hang).
22
+ *
23
+ * APP_START and SLOW/FROZEN_FRAMES need native code (process start time, UI-thread frames) and come
24
+ * later.
25
+ *
26
+ * Each is reported as a `web_vitals` event in the web shape (metric_name, metric_value,
27
+ * metric_rating, page_type, page_load_id, navigation_type, vitals_source, attribution), so the
28
+ * dashboard reads both platforms the same way. A "page load" here is a screen visit.
29
+ *
30
+ * ── Timing ──────────────────────────────────────────────────────────────────────────────────────
31
+ * "The next frame" is the frame that SHOWS the result — three requestAnimationFrame callbacks after
32
+ * the work: the first runs at the next vsync once the JS task (handlers, React's commit) is done, the
33
+ * UI thread mounts it, and iOS presents it a frame or two after that. Measured on the iOS simulator
34
+ * against a 60 fps screen recording (2026-10-06): two callbacks ended a median 25 ms BEFORE the new
35
+ * screen was on the display; three end a median 7 ms after it (−32…+17 ms) — within a frame, which
36
+ * is what web INP measures too (up to the frame's presentation).
37
+ *
38
+ * An input's start is the touch's own native timestamp when it is on this clock — so the time the
39
+ * event waited for a busy JS thread counts, as it does on web — and the moment JS received it
40
+ * otherwise. Which one was used is recorded (`input_clock`), because only measurement can say
41
+ * which a given platform gives us.
42
+ */
43
+ const react_native_1 = require("react-native");
44
+ // Published thresholds — see the architecture doc. [good, poor]: good ≤ g, poor > p.
45
+ const THRESHOLDS = {
46
+ SCREEN_LOAD: [2500, 4000], // web.dev LCP
47
+ INP: [200, 500], // web.dev INP
48
+ JS_STALL: [249, 500], // Apple: ≥ 250 ms is a (micro) hang, > 500 ms a hang
49
+ };
50
+ function rate(name, value) {
51
+ const [good, poor] = THRESHOLDS[name];
52
+ return value <= good ? 'good' : value <= poor ? 'needs_improvement' : 'poor';
53
+ }
54
+ const now = () => (typeof performance !== 'undefined' && typeof performance.now === 'function') ? performance.now() : Date.now();
55
+ const afterNextFrame = (cb) => {
56
+ try {
57
+ requestAnimationFrame(() => requestAnimationFrame(() => requestAnimationFrame(cb)));
58
+ }
59
+ catch {
60
+ setTimeout(cb, 48);
61
+ }
62
+ };
63
+ /** A touch's start time on our clock, and which clock it came from. */
64
+ function inputStart(nativeTimestamp) {
65
+ const t = now();
66
+ const ts = typeof nativeTimestamp === 'number' ? nativeTimestamp : NaN;
67
+ // Plausibly the same clock: in the past, and not long ago. Anything else (another epoch, another
68
+ // origin) would turn the delay into nonsense, so the receipt time is used instead.
69
+ if (Number.isFinite(ts) && t - ts >= 0 && t - ts < 5000)
70
+ return { at: ts, clock: 'native' };
71
+ return { at: t, clock: 'js' };
72
+ }
73
+ const STALL_TICK_MS = 50;
74
+ // An input this recent started the navigation that followed it.
75
+ const NAV_INPUT_WINDOW_MS = 1500;
76
+ let emit = null;
77
+ let visit = null;
78
+ let lastInput = null;
79
+ let stallTimer = null;
80
+ let lastTick = 0;
81
+ let appStateSub = null;
82
+ let seq = 0;
83
+ const newId = () => 'sv_' + Date.now().toString(36) + '_' + (seq++).toString(36) + Math.random().toString(36).slice(2, 6);
84
+ // Reports made before startVitals (the opening screen's load) wait here for the SDK.
85
+ let held = [];
86
+ function report(name, value, v, attribution) {
87
+ const rounded = Math.max(0, Math.round(value));
88
+ const r = { name, value: rounded, rating: rate(name, rounded), screen: v.screen, visitId: v.id, navigationType: v.navigationType, attribution };
89
+ if (!emit) {
90
+ if (held.length < 20)
91
+ held.push(r);
92
+ return;
93
+ }
94
+ try {
95
+ emit(r);
96
+ }
97
+ catch { /* reporting must never break the app */ }
98
+ }
99
+ /** End the current visit: its worst interaction and longest stall. */
100
+ function endVisit() {
101
+ const v = visit;
102
+ visit = null;
103
+ if (!v)
104
+ return;
105
+ if (v.worstInpAttr)
106
+ report('INP', v.worstInp, v, v.worstInpAttr);
107
+ report('JS_STALL', v.maxStall, v, {
108
+ longest_stall_at_ms: Math.round(v.stallAt - v.startedAt),
109
+ visit_duration_ms: Math.round(now() - v.startedAt),
110
+ });
111
+ }
112
+ function beginVisit(screen, navigationType) {
113
+ visit = {
114
+ id: newId(), screen, navigationType, worstInp: 0, worstInpAttr: null,
115
+ maxStall: 0, stallAt: 0, startedAt: now(),
116
+ };
117
+ lastTick = now();
118
+ return visit;
119
+ }
120
+ function tick() {
121
+ const t = now();
122
+ const gap = t - lastTick - STALL_TICK_MS; // how late this tick ran = how long JS was blocked
123
+ lastTick = t;
124
+ if (visit && gap > visit.maxStall) {
125
+ visit.maxStall = gap;
126
+ visit.stallAt = t;
127
+ }
128
+ }
129
+ function onAppState(state) {
130
+ if (state === 'active') {
131
+ // Timers do not run in the background; restart the stall clock so the time away is not a stall.
132
+ lastTick = now();
133
+ if (!visit && currentScreen)
134
+ beginVisit(currentScreen, 'resume');
135
+ }
136
+ else if (state === 'background' || state === 'inactive') {
137
+ endVisit();
138
+ }
139
+ }
140
+ let currentScreen = null;
141
+ function startVitals(cb) {
142
+ emit = cb;
143
+ const waiting = held;
144
+ held = [];
145
+ waiting.forEach((r) => { try {
146
+ cb(r);
147
+ }
148
+ catch { /* noop */ } });
149
+ if (stallTimer)
150
+ return;
151
+ lastTick = now();
152
+ stallTimer = setInterval(tick, STALL_TICK_MS);
153
+ try {
154
+ appStateSub = react_native_1.AppState.addEventListener('change', onAppState);
155
+ }
156
+ catch { /* no AppState */ }
157
+ }
158
+ function stopVitals() {
159
+ endVisit();
160
+ if (stallTimer)
161
+ clearInterval(stallTimer);
162
+ stallTimer = null;
163
+ appStateSub?.remove();
164
+ appStateSub = null;
165
+ emit = null;
166
+ currentScreen = null;
167
+ lastInput = null;
168
+ held = [];
169
+ }
170
+ /**
171
+ * A screen became current: the previous visit ends, this one starts, and its load is timed.
172
+ *
173
+ * Accepted before startVitals: the provider reports the screen the app opens on as it mounts,
174
+ * which is before the SDK has initialised. Dropping it there meant the first screen — the one most
175
+ * sessions never leave — had no visit at all. Sending waits for `emit`; recording does not.
176
+ */
177
+ function onScreen(screen) {
178
+ if (!screen || screen === currentScreen)
179
+ return;
180
+ currentScreen = screen;
181
+ endVisit();
182
+ const v = beginVisit(screen, 'screen');
183
+ // Started by the input that led here, when there was one; otherwise by the route change itself.
184
+ const t = now();
185
+ const byInput = lastInput && t - lastInput.at < NAV_INPUT_WINDOW_MS ? lastInput : null;
186
+ const start = byInput ? byInput.at : t;
187
+ afterNextFrame(() => {
188
+ report('SCREEN_LOAD', now() - start, v, {
189
+ trigger: byInput ? byInput.kind : 'route_change',
190
+ target_selector: byInput?.target ?? '',
191
+ input_clock: byInput ? byInput.clock : 'js',
192
+ route_change_after_input_ms: byInput ? Math.round(t - byInput.at) : 0,
193
+ });
194
+ });
195
+ }
196
+ /**
197
+ * An input happened (a finger down, a press). `nativeTimestamp` is the event's own
198
+ * nativeEvent.timestamp when the caller has it.
199
+ */
200
+ function onInput(kind, nativeTimestamp, target) {
201
+ if (!emit)
202
+ return;
203
+ const start = inputStart(nativeTimestamp);
204
+ lastInput = { ...start, kind, target };
205
+ const handledAt = now();
206
+ const v = visit;
207
+ afterNextFrame(() => {
208
+ if (!v || v !== visit)
209
+ return; // the screen changed: that is a SCREEN_LOAD, not this visit's INP
210
+ const duration = now() - start.at;
211
+ if (duration > v.worstInp || !v.worstInpAttr) {
212
+ v.worstInp = duration;
213
+ v.worstInpAttr = {
214
+ event_type: kind,
215
+ target_selector: target ?? '',
216
+ input_delay: Math.round(Math.max(0, handledAt - start.at)),
217
+ input_clock: start.clock,
218
+ };
219
+ }
220
+ });
221
+ }
222
+ /** Test seam. */
223
+ function _state() {
224
+ return { visit, currentScreen };
225
+ }
226
+ //# sourceMappingURL=vitals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitals.js","sourceRoot":"","sources":["../../src/core/vitals.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Pressable.d.ts","sourceRoot":"","sources":["../../src/instrumented/Pressable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAEL,IAAI,EACJ,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,QAAA,MAAM,SAAS,6EAiDd,CAAC;eAIa,SAAS;AACxB,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"Pressable.d.ts","sourceRoot":"","sources":["../../src/instrumented/Pressable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAEL,IAAI,EACJ,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAItB;;GAEG;AACH,QAAA,MAAM,SAAS,6EAqDd,CAAC;eAIa,SAAS;AACxB,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -37,6 +37,7 @@ exports.Pressable = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const react_native_1 = require("react-native");
40
+ const vitals_1 = require("../core/vitals");
40
41
  const interactionObserver_1 = require("./interactionObserver");
41
42
  /**
42
43
  * Instrumented Pressable — drop-in replacement.
@@ -54,6 +55,8 @@ const Pressable = (0, react_1.forwardRef)((props, ref) => {
54
55
  interactive: true,
55
56
  interactionType: 'tap',
56
57
  });
58
+ // INP: the press, timed from its own native timestamp (core/vitals.ts).
59
+ (0, vitals_1.onInput)('press', e?.nativeEvent?.timestamp, rest.accessibilityLabel ?? rest.testID);
57
60
  onPress?.(e);
58
61
  }, [onPress, rest.testID, rest.accessibilityLabel, rest.nativeID, rest.accessibilityRole, children]);
59
62
  const handleLongPress = react_1.default.useCallback((e) => {
@@ -67,6 +70,8 @@ const Pressable = (0, react_1.forwardRef)((props, ref) => {
67
70
  interactive: true,
68
71
  interactionType: 'long_press',
69
72
  });
73
+ // INP: the press, timed from its own native timestamp (core/vitals.ts).
74
+ (0, vitals_1.onInput)('long_press', e?.nativeEvent?.timestamp, rest.accessibilityLabel ?? rest.testID);
70
75
  onLongPress?.(e);
71
76
  }, [onLongPress, rest.testID, rest.accessibilityLabel, rest.nativeID, rest.accessibilityRole, children]);
72
77
  return ((0, jsx_runtime_1.jsx)(react_native_1.Pressable, { ref: ref, ...rest, onPress: onPress ? handlePress : undefined, onLongPress: onLongPress ? handleLongPress : undefined, children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"Pressable.js","sourceRoot":"","sources":["../../src/instrumented/Pressable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Pressable.js","sourceRoot":"","sources":["../../src/instrumented/Pressable.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TouchableOpacity.d.ts","sourceRoot":"","sources":["../../src/instrumented/TouchableOpacity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,gBAAgB,IAAI,kBAAkB,EACtC,KAAK,qBAAqB,EAC3B,MAAM,cAAc,CAAC;AAGtB;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,kGAiDrB,CAAC;eAIa,gBAAgB;AAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"TouchableOpacity.d.ts","sourceRoot":"","sources":["../../src/instrumented/TouchableOpacity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,gBAAgB,IAAI,kBAAkB,EACtC,KAAK,qBAAqB,EAC3B,MAAM,cAAc,CAAC;AAItB;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,kGAqDrB,CAAC;eAIa,gBAAgB;AAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -37,6 +37,7 @@ exports.TouchableOpacity = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const react_native_1 = require("react-native");
40
+ const vitals_1 = require("../core/vitals");
40
41
  const interactionObserver_1 = require("./interactionObserver");
41
42
  /**
42
43
  * Instrumented TouchableOpacity — drop-in replacement that notifies
@@ -56,6 +57,8 @@ const TouchableOpacity = (0, react_1.forwardRef)((props, ref) => {
56
57
  interactive: true,
57
58
  interactionType: 'tap',
58
59
  });
60
+ // INP: the press, timed from its own native timestamp (core/vitals.ts).
61
+ (0, vitals_1.onInput)('press', e?.nativeEvent?.timestamp, rest.accessibilityLabel ?? rest.testID);
59
62
  onPress?.(e);
60
63
  }, [onPress, rest.testID, rest.accessibilityLabel, rest.nativeID, rest.accessibilityRole, children]);
61
64
  const handleLongPress = react_1.default.useCallback((e) => {
@@ -69,6 +72,8 @@ const TouchableOpacity = (0, react_1.forwardRef)((props, ref) => {
69
72
  interactive: true,
70
73
  interactionType: 'long_press',
71
74
  });
75
+ // INP: the press, timed from its own native timestamp (core/vitals.ts).
76
+ (0, vitals_1.onInput)('long_press', e?.nativeEvent?.timestamp, rest.accessibilityLabel ?? rest.testID);
72
77
  onLongPress?.(e);
73
78
  }, [onLongPress, rest.testID, rest.accessibilityLabel, rest.nativeID, rest.accessibilityRole, children]);
74
79
  return ((0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { ref: ref, ...rest, onPress: onPress ? handlePress : undefined, onLongPress: onLongPress ? handleLongPress : undefined, children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"TouchableOpacity.js","sourceRoot":"","sources":["../../src/instrumented/TouchableOpacity.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TouchableOpacity.js","sourceRoot":"","sources":["../../src/instrumented/TouchableOpacity.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SurveyModal.d.ts","sourceRoot":"","sources":["../../src/survey/SurveyModal.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AAoCjE,UAAU,KAAK;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IAIjB,QAAQ,EAAE,CACR,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,KAC/B,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC;;qDAEiD;IACjD,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;mEAC+D;IAC/D,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;CACxD;AAiCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CACvD,GAAG,MAAM,GAAG,IAAI,CAQhB;AAcD,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACpD;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IACnF,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CACtD,CASA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAY,EAAE,EAAE,KAAK,2CAggHxF"}
1
+ {"version":3,"file":"SurveyModal.d.ts","sourceRoot":"","sources":["../../src/survey/SurveyModal.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AAoCjE,UAAU,KAAK;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IAIjB,QAAQ,EAAE,CACR,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,KAC/B,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC;;qDAEiD;IACjD,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;mEAC+D;IAC/D,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;CACxD;AAiCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CACvD,GAAG,MAAM,GAAG,IAAI,CAQhB;AAcD,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACpD;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IACnF,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CACtD,CASA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAY,EAAE,EAAE,KAAK,2CAwgHxF"}
@@ -628,6 +628,14 @@ function SurveyModal({ survey, visible, onSubmit, onDismiss, reply = null }) {
628
628
  // the generic "Thank you" instead, which is a worse result than leaving it
629
629
  // alone: the author lost the reward panel and gained a line they never
630
630
  // wrote. Skipped here, so nothing draws and the 2.5s window never opens.
631
+ // WHERE THE SURVEY SENDS THEM ON SUBMIT. Same rule as web and link
632
+ // (submitRedirect): answers by id, then the card's own context. The address
633
+ // is the confirmation, so showsConfirmation is false and nothing draws.
634
+ const dest = (0, survey_spec_1.submitRedirect)(survey, (p) => (Object.prototype.hasOwnProperty.call(responses, p)
635
+ ? responses[p]
636
+ : (0, interpolate_1.interpolatePlain)(`{{${p}}}`, evalCtx)));
637
+ if (dest)
638
+ react_native_1.Linking.openURL(dest).catch(() => { });
631
639
  if (!(0, survey_spec_1.showsConfirmation)(survey))
632
640
  return;
633
641
  setShowThankYou(true);