@cxpinsight/react-native 0.2.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 (253) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/babel.js +101 -0
  4. package/instrumented/Pressable.d.ts +2 -0
  5. package/instrumented/Pressable.js +2 -0
  6. package/instrumented/ScrollView.d.ts +2 -0
  7. package/instrumented/ScrollView.js +2 -0
  8. package/instrumented/TextInput.d.ts +2 -0
  9. package/instrumented/TextInput.js +2 -0
  10. package/instrumented/TouchableOpacity.d.ts +2 -0
  11. package/instrumented/TouchableOpacity.js +2 -0
  12. package/lib/CXPinsight.d.ts +113 -0
  13. package/lib/CXPinsight.d.ts.map +1 -0
  14. package/lib/CXPinsight.js +831 -0
  15. package/lib/CXPinsight.js.map +1 -0
  16. package/lib/CXPinsightProvider.d.ts +19 -0
  17. package/lib/CXPinsightProvider.d.ts.map +1 -0
  18. package/lib/CXPinsightProvider.js +382 -0
  19. package/lib/CXPinsightProvider.js.map +1 -0
  20. package/lib/core/autoScreenTracker.d.ts +20 -0
  21. package/lib/core/autoScreenTracker.d.ts.map +1 -0
  22. package/lib/core/autoScreenTracker.js +66 -0
  23. package/lib/core/autoScreenTracker.js.map +1 -0
  24. package/lib/core/deepLinkTracker.d.ts +17 -0
  25. package/lib/core/deepLinkTracker.d.ts.map +1 -0
  26. package/lib/core/deepLinkTracker.js +81 -0
  27. package/lib/core/deepLinkTracker.js.map +1 -0
  28. package/lib/core/deviceInfo.d.ts +14 -0
  29. package/lib/core/deviceInfo.d.ts.map +1 -0
  30. package/lib/core/deviceInfo.js +166 -0
  31. package/lib/core/deviceInfo.js.map +1 -0
  32. package/lib/core/eventQueue.d.ts +23 -0
  33. package/lib/core/eventQueue.d.ts.map +1 -0
  34. package/lib/core/eventQueue.js +240 -0
  35. package/lib/core/eventQueue.js.map +1 -0
  36. package/lib/core/lifecycle.d.ts +18 -0
  37. package/lib/core/lifecycle.d.ts.map +1 -0
  38. package/lib/core/lifecycle.js +127 -0
  39. package/lib/core/lifecycle.js.map +1 -0
  40. package/lib/core/mobileRecorder.d.ts +15 -0
  41. package/lib/core/mobileRecorder.d.ts.map +1 -0
  42. package/lib/core/mobileRecorder.js +231 -0
  43. package/lib/core/mobileRecorder.js.map +1 -0
  44. package/lib/core/network.d.ts +10 -0
  45. package/lib/core/network.d.ts.map +1 -0
  46. package/lib/core/network.js +74 -0
  47. package/lib/core/network.js.map +1 -0
  48. package/lib/core/networkCapture.d.ts +22 -0
  49. package/lib/core/networkCapture.d.ts.map +1 -0
  50. package/lib/core/networkCapture.js +100 -0
  51. package/lib/core/networkCapture.js.map +1 -0
  52. package/lib/core/scrollCapture.d.ts +48 -0
  53. package/lib/core/scrollCapture.d.ts.map +1 -0
  54. package/lib/core/scrollCapture.js +221 -0
  55. package/lib/core/scrollCapture.js.map +1 -0
  56. package/lib/core/session.d.ts +15 -0
  57. package/lib/core/session.d.ts.map +1 -0
  58. package/lib/core/session.js +157 -0
  59. package/lib/core/session.js.map +1 -0
  60. package/lib/core/storage.d.ts +11 -0
  61. package/lib/core/storage.d.ts.map +1 -0
  62. package/lib/core/storage.js +59 -0
  63. package/lib/core/storage.js.map +1 -0
  64. package/lib/core/triggerEngine.d.ts +56 -0
  65. package/lib/core/triggerEngine.d.ts.map +1 -0
  66. package/lib/core/triggerEngine.js +432 -0
  67. package/lib/core/triggerEngine.js.map +1 -0
  68. package/lib/index.d.ts +7 -0
  69. package/lib/index.d.ts.map +1 -0
  70. package/lib/index.js +11 -0
  71. package/lib/index.js.map +1 -0
  72. package/lib/instrumented/Pressable.d.ts +9 -0
  73. package/lib/instrumented/Pressable.d.ts.map +1 -0
  74. package/lib/instrumented/Pressable.js +96 -0
  75. package/lib/instrumented/Pressable.js.map +1 -0
  76. package/lib/instrumented/ScrollView.d.ts +6 -0
  77. package/lib/instrumented/ScrollView.d.ts.map +1 -0
  78. package/lib/instrumented/ScrollView.js +101 -0
  79. package/lib/instrumented/ScrollView.js.map +1 -0
  80. package/lib/instrumented/TextInput.d.ts +9 -0
  81. package/lib/instrumented/TextInput.d.ts.map +1 -0
  82. package/lib/instrumented/TextInput.js +75 -0
  83. package/lib/instrumented/TextInput.js.map +1 -0
  84. package/lib/instrumented/TouchableOpacity.d.ts +11 -0
  85. package/lib/instrumented/TouchableOpacity.d.ts.map +1 -0
  86. package/lib/instrumented/TouchableOpacity.js +96 -0
  87. package/lib/instrumented/TouchableOpacity.js.map +1 -0
  88. package/lib/instrumented/index.d.ts +19 -0
  89. package/lib/instrumented/index.d.ts.map +1 -0
  90. package/lib/instrumented/index.js +28 -0
  91. package/lib/instrumented/index.js.map +1 -0
  92. package/lib/instrumented/interactionObserver.d.ts +29 -0
  93. package/lib/instrumented/interactionObserver.d.ts.map +1 -0
  94. package/lib/instrumented/interactionObserver.js +38 -0
  95. package/lib/instrumented/interactionObserver.js.map +1 -0
  96. package/lib/setup/AccessibilityScanner.d.ts +32 -0
  97. package/lib/setup/AccessibilityScanner.d.ts.map +1 -0
  98. package/lib/setup/AccessibilityScanner.js +127 -0
  99. package/lib/setup/AccessibilityScanner.js.map +1 -0
  100. package/lib/setup/ElementIdentifier.d.ts +65 -0
  101. package/lib/setup/ElementIdentifier.d.ts.map +1 -0
  102. package/lib/setup/ElementIdentifier.js +114 -0
  103. package/lib/setup/ElementIdentifier.js.map +1 -0
  104. package/lib/setup/ElementRegistry.d.ts +22 -0
  105. package/lib/setup/ElementRegistry.d.ts.map +1 -0
  106. package/lib/setup/ElementRegistry.js +47 -0
  107. package/lib/setup/ElementRegistry.js.map +1 -0
  108. package/lib/setup/SetupCodeEntry.d.ts +15 -0
  109. package/lib/setup/SetupCodeEntry.d.ts.map +1 -0
  110. package/lib/setup/SetupCodeEntry.js +198 -0
  111. package/lib/setup/SetupCodeEntry.js.map +1 -0
  112. package/lib/setup/SetupController.d.ts +29 -0
  113. package/lib/setup/SetupController.d.ts.map +1 -0
  114. package/lib/setup/SetupController.js +189 -0
  115. package/lib/setup/SetupController.js.map +1 -0
  116. package/lib/setup/SetupOverlay.d.ts +10 -0
  117. package/lib/setup/SetupOverlay.d.ts.map +1 -0
  118. package/lib/setup/SetupOverlay.js +408 -0
  119. package/lib/setup/SetupOverlay.js.map +1 -0
  120. package/lib/setup/TapInterceptor.d.ts +19 -0
  121. package/lib/setup/TapInterceptor.d.ts.map +1 -0
  122. package/lib/setup/TapInterceptor.js +98 -0
  123. package/lib/setup/TapInterceptor.js.map +1 -0
  124. package/lib/setup/TouchObserver.d.ts +25 -0
  125. package/lib/setup/TouchObserver.d.ts.map +1 -0
  126. package/lib/setup/TouchObserver.js +88 -0
  127. package/lib/setup/TouchObserver.js.map +1 -0
  128. package/lib/setup/TouchPatcher.d.ts +27 -0
  129. package/lib/setup/TouchPatcher.d.ts.map +1 -0
  130. package/lib/setup/TouchPatcher.js +182 -0
  131. package/lib/setup/TouchPatcher.js.map +1 -0
  132. package/lib/setup/index.d.ts +13 -0
  133. package/lib/setup/index.d.ts.map +1 -0
  134. package/lib/setup/index.js +45 -0
  135. package/lib/setup/index.js.map +1 -0
  136. package/lib/setup/useCXPElement.d.ts +25 -0
  137. package/lib/setup/useCXPElement.d.ts.map +1 -0
  138. package/lib/setup/useCXPElement.js +33 -0
  139. package/lib/setup/useCXPElement.js.map +1 -0
  140. package/lib/survey/SurveyModal.d.ts +10 -0
  141. package/lib/survey/SurveyModal.d.ts.map +1 -0
  142. package/lib/survey/SurveyModal.js +1650 -0
  143. package/lib/survey/SurveyModal.js.map +1 -0
  144. package/lib/survey/expressionEval.d.ts +10 -0
  145. package/lib/survey/expressionEval.d.ts.map +1 -0
  146. package/lib/survey/expressionEval.js +287 -0
  147. package/lib/survey/expressionEval.js.map +1 -0
  148. package/lib/survey/frequencyCap.d.ts +15 -0
  149. package/lib/survey/frequencyCap.d.ts.map +1 -0
  150. package/lib/survey/frequencyCap.js +116 -0
  151. package/lib/survey/frequencyCap.js.map +1 -0
  152. package/lib/survey/handsFreeVoice.d.ts +30 -0
  153. package/lib/survey/handsFreeVoice.d.ts.map +1 -0
  154. package/lib/survey/handsFreeVoice.js +312 -0
  155. package/lib/survey/handsFreeVoice.js.map +1 -0
  156. package/lib/survey/interpolate.d.ts +6 -0
  157. package/lib/survey/interpolate.d.ts.map +1 -0
  158. package/lib/survey/interpolate.js +61 -0
  159. package/lib/survey/interpolate.js.map +1 -0
  160. package/lib/survey/pagesFromV1.d.ts +6 -0
  161. package/lib/survey/pagesFromV1.d.ts.map +1 -0
  162. package/lib/survey/pagesFromV1.js +83 -0
  163. package/lib/survey/pagesFromV1.js.map +1 -0
  164. package/lib/survey/questions/CSATQuestion.d.ts +16 -0
  165. package/lib/survey/questions/CSATQuestion.d.ts.map +1 -0
  166. package/lib/survey/questions/CSATQuestion.js +37 -0
  167. package/lib/survey/questions/CSATQuestion.js.map +1 -0
  168. package/lib/survey/questions/DateQuestion.d.ts +20 -0
  169. package/lib/survey/questions/DateQuestion.d.ts.map +1 -0
  170. package/lib/survey/questions/DateQuestion.js +103 -0
  171. package/lib/survey/questions/DateQuestion.js.map +1 -0
  172. package/lib/survey/questions/ImagePickerQuestion.d.ts +33 -0
  173. package/lib/survey/questions/ImagePickerQuestion.d.ts.map +1 -0
  174. package/lib/survey/questions/ImagePickerQuestion.js +68 -0
  175. package/lib/survey/questions/ImagePickerQuestion.js.map +1 -0
  176. package/lib/survey/questions/ImageQuestion.d.ts +26 -0
  177. package/lib/survey/questions/ImageQuestion.d.ts.map +1 -0
  178. package/lib/survey/questions/ImageQuestion.js +24 -0
  179. package/lib/survey/questions/ImageQuestion.js.map +1 -0
  180. package/lib/survey/questions/MatrixCell.d.ts +45 -0
  181. package/lib/survey/questions/MatrixCell.d.ts.map +1 -0
  182. package/lib/survey/questions/MatrixCell.js +54 -0
  183. package/lib/survey/questions/MatrixCell.js.map +1 -0
  184. package/lib/survey/questions/MatrixDropdownQuestion.d.ts +29 -0
  185. package/lib/survey/questions/MatrixDropdownQuestion.d.ts.map +1 -0
  186. package/lib/survey/questions/MatrixDropdownQuestion.js +42 -0
  187. package/lib/survey/questions/MatrixDropdownQuestion.js.map +1 -0
  188. package/lib/survey/questions/MatrixDynamicQuestion.d.ts +26 -0
  189. package/lib/survey/questions/MatrixDynamicQuestion.d.ts.map +1 -0
  190. package/lib/survey/questions/MatrixDynamicQuestion.js +52 -0
  191. package/lib/survey/questions/MatrixDynamicQuestion.js.map +1 -0
  192. package/lib/survey/questions/MatrixQuestion.d.ts +38 -0
  193. package/lib/survey/questions/MatrixQuestion.d.ts.map +1 -0
  194. package/lib/survey/questions/MatrixQuestion.js +64 -0
  195. package/lib/survey/questions/MatrixQuestion.js.map +1 -0
  196. package/lib/survey/questions/MultiTextQuestion.d.ts +19 -0
  197. package/lib/survey/questions/MultiTextQuestion.d.ts.map +1 -0
  198. package/lib/survey/questions/MultiTextQuestion.js +64 -0
  199. package/lib/survey/questions/MultiTextQuestion.js.map +1 -0
  200. package/lib/survey/questions/MultipleChoiceQuestion.d.ts +25 -0
  201. package/lib/survey/questions/MultipleChoiceQuestion.d.ts.map +1 -0
  202. package/lib/survey/questions/MultipleChoiceQuestion.js +111 -0
  203. package/lib/survey/questions/MultipleChoiceQuestion.js.map +1 -0
  204. package/lib/survey/questions/NPSQuestion.d.ts +18 -0
  205. package/lib/survey/questions/NPSQuestion.d.ts.map +1 -0
  206. package/lib/survey/questions/NPSQuestion.js +62 -0
  207. package/lib/survey/questions/NPSQuestion.js.map +1 -0
  208. package/lib/survey/questions/PanelDynamicQuestion.d.ts +50 -0
  209. package/lib/survey/questions/PanelDynamicQuestion.d.ts.map +1 -0
  210. package/lib/survey/questions/PanelDynamicQuestion.js +62 -0
  211. package/lib/survey/questions/PanelDynamicQuestion.js.map +1 -0
  212. package/lib/survey/questions/RankingQuestion.d.ts +34 -0
  213. package/lib/survey/questions/RankingQuestion.d.ts.map +1 -0
  214. package/lib/survey/questions/RankingQuestion.js +85 -0
  215. package/lib/survey/questions/RankingQuestion.js.map +1 -0
  216. package/lib/survey/questions/RatingQuestion.d.ts +20 -0
  217. package/lib/survey/questions/RatingQuestion.d.ts.map +1 -0
  218. package/lib/survey/questions/RatingQuestion.js +53 -0
  219. package/lib/survey/questions/RatingQuestion.js.map +1 -0
  220. package/lib/survey/questions/TextQuestion.d.ts +17 -0
  221. package/lib/survey/questions/TextQuestion.d.ts.map +1 -0
  222. package/lib/survey/questions/TextQuestion.js +46 -0
  223. package/lib/survey/questions/TextQuestion.js.map +1 -0
  224. package/lib/survey/styleContract.d.ts +230 -0
  225. package/lib/survey/styleContract.d.ts.map +1 -0
  226. package/lib/survey/styleContract.js +365 -0
  227. package/lib/survey/styleContract.js.map +1 -0
  228. package/lib/survey/themePalette.d.ts +56 -0
  229. package/lib/survey/themePalette.d.ts.map +1 -0
  230. package/lib/survey/themePalette.js +63 -0
  231. package/lib/survey/themePalette.js.map +1 -0
  232. package/lib/survey/translationLookup.d.ts +4 -0
  233. package/lib/survey/translationLookup.d.ts.map +1 -0
  234. package/lib/survey/translationLookup.js +62 -0
  235. package/lib/survey/translationLookup.js.map +1 -0
  236. package/lib/survey/validate.d.ts +3 -0
  237. package/lib/survey/validate.d.ts.map +1 -0
  238. package/lib/survey/validate.js +159 -0
  239. package/lib/survey/validate.js.map +1 -0
  240. package/lib/survey/variablesResolver.d.ts +10 -0
  241. package/lib/survey/variablesResolver.d.ts.map +1 -0
  242. package/lib/survey/variablesResolver.js +107 -0
  243. package/lib/survey/variablesResolver.js.map +1 -0
  244. package/lib/survey/voiceParsers.d.ts +47 -0
  245. package/lib/survey/voiceParsers.d.ts.map +1 -0
  246. package/lib/survey/voiceParsers.js +310 -0
  247. package/lib/survey/voiceParsers.js.map +1 -0
  248. package/lib/types.d.ts +349 -0
  249. package/lib/types.d.ts.map +1 -0
  250. package/lib/types.js +20 -0
  251. package/lib/types.js.map +1 -0
  252. package/metro.js +55 -0
  253. package/package.json +78 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ElementIdentifier — builds stable identifiers for mobile UI elements
3
+ * and provides matching logic for the tracking engine.
4
+ *
5
+ * Priority order (most to least reliable):
6
+ * 1. testID — developer-assigned, stable across renders
7
+ * 2. accessibilityLabel — usually stable, may be localized
8
+ * 3. nativeID — less common but stable
9
+ * 4. hierarchyPath — fragile, last resort
10
+ */
11
+ export interface ElementInfo {
12
+ /** React Native testID prop */
13
+ testID?: string;
14
+ /** Accessibility label */
15
+ accessibilityLabel?: string;
16
+ /** Native view ID */
17
+ nativeID?: string;
18
+ /** Accessibility role (button, link, text, etc.) */
19
+ accessibilityRole?: string;
20
+ /** Position in the view hierarchy (e.g. "ScrollView>View[2]>Pressable") */
21
+ hierarchyPath?: string;
22
+ /** Visible text content */
23
+ text?: string;
24
+ /** Inferred element type */
25
+ elementType: 'button' | 'text_input' | 'switch' | 'link' | 'image' | 'scroll_view' | 'list_item' | 'tab' | 'other';
26
+ /** Bounding rectangle (x, y, width, height) */
27
+ bounds?: {
28
+ x: number;
29
+ y: number;
30
+ width: number;
31
+ height: number;
32
+ };
33
+ /** Whether the element is interactive (tappable) */
34
+ interactive: boolean;
35
+ }
36
+ export interface StoredElementIdentifier {
37
+ testID?: string;
38
+ accessibilityLabel?: string;
39
+ nativeID?: string;
40
+ hierarchyPath?: string;
41
+ }
42
+ /**
43
+ * Build a storable identifier from scanned element info.
44
+ * Returns the best available combination for re-finding the element.
45
+ */
46
+ export declare function buildIdentifier(element: ElementInfo): StoredElementIdentifier;
47
+ /**
48
+ * Get the best human-readable label for an element.
49
+ */
50
+ export declare function extractLabel(element: ElementInfo): string;
51
+ /**
52
+ * Get a quality score for an identifier (higher = more reliable).
53
+ * Used to warn users when an element lacks good identifiers.
54
+ */
55
+ export declare function identifierQuality(id: StoredElementIdentifier): 'excellent' | 'good' | 'fair' | 'poor';
56
+ /**
57
+ * Check if a scanned element matches a stored identifier.
58
+ * Uses the same priority order as buildIdentifier.
59
+ */
60
+ export declare function matchesIdentifier(element: ElementInfo, stored: StoredElementIdentifier): boolean;
61
+ /**
62
+ * Infer the element type from accessibility role or other signals.
63
+ */
64
+ export declare function inferElementType(accessibilityRole?: string, componentName?: string): ElementInfo['elementType'];
65
+ //# sourceMappingURL=ElementIdentifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementIdentifier.d.ts","sourceRoot":"","sources":["../../src/setup/ElementIdentifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,WAAW,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC;IACnH,+CAA+C;IAC/C,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,oDAAoD;IACpD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,uBAAuB,CAS7E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,uBAAuB,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAKrG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAchG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,iBAAiB,CAAC,EAAE,MAAM,EAC1B,aAAa,CAAC,EAAE,MAAM,GACrB,WAAW,CAAC,aAAa,CAAC,CAmB5B"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /**
3
+ * ElementIdentifier — builds stable identifiers for mobile UI elements
4
+ * and provides matching logic for the tracking engine.
5
+ *
6
+ * Priority order (most to least reliable):
7
+ * 1. testID — developer-assigned, stable across renders
8
+ * 2. accessibilityLabel — usually stable, may be localized
9
+ * 3. nativeID — less common but stable
10
+ * 4. hierarchyPath — fragile, last resort
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.buildIdentifier = buildIdentifier;
14
+ exports.extractLabel = extractLabel;
15
+ exports.identifierQuality = identifierQuality;
16
+ exports.matchesIdentifier = matchesIdentifier;
17
+ exports.inferElementType = inferElementType;
18
+ /**
19
+ * Build a storable identifier from scanned element info.
20
+ * Returns the best available combination for re-finding the element.
21
+ */
22
+ function buildIdentifier(element) {
23
+ const id = {};
24
+ if (element.testID)
25
+ id.testID = element.testID;
26
+ if (element.accessibilityLabel)
27
+ id.accessibilityLabel = element.accessibilityLabel;
28
+ if (element.nativeID)
29
+ id.nativeID = element.nativeID;
30
+ if (element.hierarchyPath)
31
+ id.hierarchyPath = element.hierarchyPath;
32
+ return id;
33
+ }
34
+ /**
35
+ * Get the best human-readable label for an element.
36
+ */
37
+ function extractLabel(element) {
38
+ if (element.text && element.text.length <= 80)
39
+ return element.text;
40
+ if (element.accessibilityLabel)
41
+ return element.accessibilityLabel;
42
+ if (element.testID)
43
+ return element.testID.replace(/[-_]/g, ' ');
44
+ if (element.nativeID)
45
+ return element.nativeID;
46
+ return 'Unknown Element';
47
+ }
48
+ /**
49
+ * Get a quality score for an identifier (higher = more reliable).
50
+ * Used to warn users when an element lacks good identifiers.
51
+ */
52
+ function identifierQuality(id) {
53
+ if (id.testID)
54
+ return 'excellent';
55
+ if (id.accessibilityLabel)
56
+ return 'good';
57
+ if (id.nativeID)
58
+ return 'fair';
59
+ return 'poor';
60
+ }
61
+ /**
62
+ * Check if a scanned element matches a stored identifier.
63
+ * Uses the same priority order as buildIdentifier.
64
+ */
65
+ function matchesIdentifier(element, stored) {
66
+ // Exact testID match (most reliable)
67
+ if (stored.testID && element.testID === stored.testID)
68
+ return true;
69
+ // Exact accessibilityLabel match
70
+ if (stored.accessibilityLabel && element.accessibilityLabel === stored.accessibilityLabel)
71
+ return true;
72
+ // Exact nativeID match
73
+ if (stored.nativeID && element.nativeID === stored.nativeID)
74
+ return true;
75
+ // Hierarchy path match (least reliable — only if nothing else matched)
76
+ if (stored.hierarchyPath && element.hierarchyPath === stored.hierarchyPath)
77
+ return true;
78
+ return false;
79
+ }
80
+ /**
81
+ * Infer the element type from accessibility role or other signals.
82
+ */
83
+ function inferElementType(accessibilityRole, componentName) {
84
+ const role = accessibilityRole?.toLowerCase();
85
+ if (role === 'button' || role === 'imagebutton')
86
+ return 'button';
87
+ if (role === 'link')
88
+ return 'link';
89
+ if (role === 'search' || role === 'text')
90
+ return 'text_input';
91
+ if (role === 'switch' || role === 'togglebutton')
92
+ return 'switch';
93
+ if (role === 'image' || role === 'imagebutton')
94
+ return 'image';
95
+ if (role === 'tab')
96
+ return 'tab';
97
+ if (role === 'scrollbar')
98
+ return 'scroll_view';
99
+ const name = componentName?.toLowerCase() ?? '';
100
+ if (name.includes('button') || name.includes('pressable') || name.includes('touchable'))
101
+ return 'button';
102
+ if (name.includes('textinput') || name.includes('input'))
103
+ return 'text_input';
104
+ if (name.includes('switch'))
105
+ return 'switch';
106
+ if (name.includes('scrollview'))
107
+ return 'scroll_view';
108
+ if (name.includes('image'))
109
+ return 'image';
110
+ if (name.includes('flatlist') || name.includes('sectionlist'))
111
+ return 'list_item';
112
+ return 'other';
113
+ }
114
+ //# sourceMappingURL=ElementIdentifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementIdentifier.js","sourceRoot":"","sources":["../../src/setup/ElementIdentifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ElementInfo } from './ElementIdentifier';
2
+ /**
3
+ * ElementRegistry — global registry where interactive elements
4
+ * self-register when they mount and unregister on unmount.
5
+ *
6
+ * This solves the fundamental problem: React's virtual tree isn't
7
+ * walkable from a parent Provider. Instead, elements opt-in via
8
+ * the useCXPElement() hook or by having testID props.
9
+ */
10
+ type RegistryListener = () => void;
11
+ /** Register an element. Returns an unregister function. */
12
+ export declare function registerElement(info: ElementInfo): () => void;
13
+ /** Get all registered elements for a screen */
14
+ export declare function getRegisteredElements(screenName?: string): ElementInfo[];
15
+ /** Get count */
16
+ export declare function getRegisteredCount(): number;
17
+ /** Subscribe to registry changes */
18
+ export declare function onRegistryChange(listener: RegistryListener): () => void;
19
+ /** Clear all registered elements */
20
+ export declare function clearRegistry(): void;
21
+ export {};
22
+ //# sourceMappingURL=ElementRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementRegistry.d.ts","sourceRoot":"","sources":["../../src/setup/ElementRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;;;;;;GAOG;AAEH,KAAK,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAMnC,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CAQ7D;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAKxE;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,oCAAoC;AACpC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAKvE;AAED,oCAAoC;AACpC,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerElement = registerElement;
4
+ exports.getRegisteredElements = getRegisteredElements;
5
+ exports.getRegisteredCount = getRegisteredCount;
6
+ exports.onRegistryChange = onRegistryChange;
7
+ exports.clearRegistry = clearRegistry;
8
+ const registry = new Map();
9
+ let listeners = [];
10
+ let nextId = 0;
11
+ /** Register an element. Returns an unregister function. */
12
+ function registerElement(info) {
13
+ const key = info.testID || info.accessibilityLabel || info.nativeID || `auto_${nextId++}`;
14
+ registry.set(key, info);
15
+ notifyListeners();
16
+ return () => {
17
+ registry.delete(key);
18
+ notifyListeners();
19
+ };
20
+ }
21
+ /** Get all registered elements for a screen */
22
+ function getRegisteredElements(screenName) {
23
+ const all = Array.from(registry.values());
24
+ // If screenName filter provided, only return elements that match
25
+ // Elements without a screen match all screens
26
+ return all;
27
+ }
28
+ /** Get count */
29
+ function getRegisteredCount() {
30
+ return registry.size;
31
+ }
32
+ /** Subscribe to registry changes */
33
+ function onRegistryChange(listener) {
34
+ listeners.push(listener);
35
+ return () => {
36
+ listeners = listeners.filter(l => l !== listener);
37
+ };
38
+ }
39
+ /** Clear all registered elements */
40
+ function clearRegistry() {
41
+ registry.clear();
42
+ notifyListeners();
43
+ }
44
+ function notifyListeners() {
45
+ listeners.forEach(l => l());
46
+ }
47
+ //# sourceMappingURL=ElementRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementRegistry.js","sourceRoot":"","sources":["../../src/setup/ElementRegistry.ts"],"names":[],"mappings":";;;;;;;AAcA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;AAChD,IAAI,SAAS,GAAuB,EAAE,CAAC;AACvC,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,2DAA2D;AAC3D,yBAAgC,IAAiB;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,MAAM,EAAE,EAAE,CAAC;IAC1F,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,eAAe,EAAE,CAAC;IAClB,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,+BAAsC,UAAmB;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,iEAAiE;IACjE,8CAA8C;IAC9C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gBAAgB;AAChB;IACE,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,oCAAoC;AACpC,0BAAiC,QAA0B;IACzD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED,oCAAoC;AACpC;IACE,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,eAAe,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,eAAe;IACtB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,15 @@
1
+ interface SetupCodeEntryProps {
2
+ visible: boolean;
3
+ siteId: string;
4
+ onClose: () => void;
5
+ onSuccess: () => void;
6
+ debug?: boolean;
7
+ }
8
+ /**
9
+ * SetupCodeEntry — 6-digit numeric code input modal.
10
+ * Shown when the user (or dev) triggers setup mode.
11
+ * The code is displayed on the CXP dashboard.
12
+ */
13
+ export declare function SetupCodeEntry({ visible, siteId, onClose, onSuccess, debug }: SetupCodeEntryProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=SetupCodeEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupCodeEntry.d.ts","sourceRoot":"","sources":["../../src/setup/SetupCodeEntry.tsx"],"names":[],"mappings":"AAeA,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,mBAAmB,2CA6IjG"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SetupCodeEntry = SetupCodeEntry;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = __importStar(require("react"));
39
+ const react_native_1 = require("react-native");
40
+ const SetupController_1 = require("./SetupController");
41
+ const { height: SCREEN_HEIGHT } = react_native_1.Dimensions.get('window');
42
+ /**
43
+ * SetupCodeEntry — 6-digit numeric code input modal.
44
+ * Shown when the user (or dev) triggers setup mode.
45
+ * The code is displayed on the CXP dashboard.
46
+ */
47
+ function SetupCodeEntry({ visible, siteId, onClose, onSuccess, debug }) {
48
+ const [digits, setDigits] = (0, react_1.useState)(['', '', '', '', '', '']);
49
+ const [error, setError] = (0, react_1.useState)('');
50
+ const [loading, setLoading] = (0, react_1.useState)(false);
51
+ const inputRefs = (0, react_1.useRef)([]);
52
+ const handleDigitChange = (0, react_1.useCallback)((index, value) => {
53
+ if (value.length > 1)
54
+ value = value.slice(-1); // Take last char if pasted
55
+ if (value && !/^\d$/.test(value))
56
+ return; // Only digits
57
+ setError('');
58
+ const newDigits = [...digits];
59
+ newDigits[index] = value;
60
+ setDigits(newDigits);
61
+ // Auto-advance to next input
62
+ if (value && index < 5) {
63
+ inputRefs.current[index + 1]?.focus();
64
+ }
65
+ // Auto-submit when all 6 digits entered
66
+ if (value && index === 5) {
67
+ const code = [...newDigits.slice(0, 5), value].join('');
68
+ if (code.length === 6) {
69
+ handleSubmit(code);
70
+ }
71
+ }
72
+ }, [digits, siteId]);
73
+ const handleKeyPress = (0, react_1.useCallback)((index, key) => {
74
+ if (key === 'Backspace' && !digits[index] && index > 0) {
75
+ const newDigits = [...digits];
76
+ newDigits[index - 1] = '';
77
+ setDigits(newDigits);
78
+ inputRefs.current[index - 1]?.focus();
79
+ }
80
+ }, [digits]);
81
+ const handleSubmit = async (code) => {
82
+ const setupCode = code || digits.join('');
83
+ if (setupCode.length !== 6) {
84
+ setError('Please enter all 6 digits');
85
+ return;
86
+ }
87
+ setLoading(true);
88
+ setError('');
89
+ const result = await (0, SetupController_1.claimSetup)(siteId, setupCode, debug);
90
+ setLoading(false);
91
+ if (result.success) {
92
+ onSuccess();
93
+ }
94
+ else {
95
+ const errMap = {
96
+ no_active_setup: 'No active setup session. Generate a new code from the dashboard.',
97
+ expired: 'Setup code has expired. Generate a new code from the dashboard.',
98
+ invalid_code: 'Invalid code. Please check and try again.',
99
+ claimed_by_other_device: 'This setup session is already claimed by another device.',
100
+ };
101
+ setError(errMap[result.error || ''] || result.error || 'Failed to claim setup');
102
+ setDigits(['', '', '', '', '', '']);
103
+ inputRefs.current[0]?.focus();
104
+ }
105
+ };
106
+ const handleClose = () => {
107
+ setDigits(['', '', '', '', '', '']);
108
+ setError('');
109
+ setLoading(false);
110
+ onClose();
111
+ };
112
+ return ((0, jsx_runtime_1.jsx)(react_native_1.Modal, { visible: visible, animationType: "fade", transparent: true, statusBarTranslucent: true, children: (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.backdrop, children: (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.card, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.header, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.logo, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.logoText, children: "CXP" }) }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.title, children: "Enter Setup Code" }), (0, jsx_runtime_1.jsxs)(react_native_1.Text, { style: styles.subtitle, children: ["Enter the 6-digit code shown", '\n', "on your CXP Insights dashboard"] })] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.codeRow, children: digits.map((digit, index) => ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_native_1.TextInput, { ref: ref => { inputRefs.current[index] = ref; }, style: [
113
+ styles.codeInput,
114
+ digit ? styles.codeInputFilled : null,
115
+ error ? styles.codeInputError : null,
116
+ ], value: digit, onChangeText: value => handleDigitChange(index, value), onKeyPress: ({ nativeEvent }) => handleKeyPress(index, nativeEvent.key), keyboardType: "number-pad", maxLength: 1, selectTextOnFocus: true, editable: !loading }), index === 2 && (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.codeSeparator, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.codeSeparatorText, children: "\u2014" }) })] }, index))) }), error ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.errorBox, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.errorText, children: error }) })) : null, (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.actions, children: [(0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { style: styles.cancelBtn, onPress: handleClose, disabled: loading, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.cancelBtnText, children: "Cancel" }) }), (0, jsx_runtime_1.jsx)(react_native_1.TouchableOpacity, { style: [styles.submitBtn, loading && { opacity: 0.6 }], onPress: () => handleSubmit(), disabled: loading || digits.some(d => !d), children: loading ? ((0, jsx_runtime_1.jsx)(react_native_1.ActivityIndicator, { size: "small", color: "#030712" })) : ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.submitBtnText, children: "Connect" })) })] })] }) }) }));
117
+ }
118
+ const styles = react_native_1.StyleSheet.create({
119
+ backdrop: {
120
+ flex: 1,
121
+ backgroundColor: 'rgba(0,0,0,0.7)',
122
+ justifyContent: 'center',
123
+ alignItems: 'center',
124
+ padding: 24,
125
+ },
126
+ card: {
127
+ width: '100%',
128
+ maxWidth: 380,
129
+ backgroundColor: '#111827',
130
+ borderRadius: 20,
131
+ padding: 28,
132
+ borderWidth: 1,
133
+ borderColor: 'rgba(255,255,255,0.1)',
134
+ },
135
+ header: { alignItems: 'center', marginBottom: 28 },
136
+ logo: {
137
+ width: 48,
138
+ height: 48,
139
+ borderRadius: 12,
140
+ backgroundColor: '#D6F551',
141
+ justifyContent: 'center',
142
+ alignItems: 'center',
143
+ marginBottom: 16,
144
+ },
145
+ logoText: { fontSize: 14, fontWeight: '900', color: '#030712', letterSpacing: 1 },
146
+ title: { fontSize: 20, fontWeight: '700', color: '#fff', marginBottom: 8 },
147
+ subtitle: { fontSize: 13, color: 'rgba(255,255,255,0.5)', textAlign: 'center', lineHeight: 18 },
148
+ // Code input
149
+ codeRow: { flexDirection: 'row', justifyContent: 'center', alignItems: 'center', gap: 8, marginBottom: 20 },
150
+ codeInput: {
151
+ width: 44,
152
+ height: 52,
153
+ borderRadius: 10,
154
+ backgroundColor: 'rgba(255,255,255,0.05)',
155
+ borderWidth: 1.5,
156
+ borderColor: 'rgba(255,255,255,0.12)',
157
+ textAlign: 'center',
158
+ fontSize: 22,
159
+ fontWeight: '700',
160
+ color: '#fff',
161
+ },
162
+ codeInputFilled: { borderColor: '#D6F551', backgroundColor: 'rgba(214,245,81,0.08)' },
163
+ codeInputError: { borderColor: '#EF4444' },
164
+ codeSeparator: { justifyContent: 'center' },
165
+ codeSeparatorText: { fontSize: 16, color: 'rgba(255,255,255,0.2)' },
166
+ // Error
167
+ errorBox: {
168
+ backgroundColor: 'rgba(239,68,68,0.1)',
169
+ borderWidth: 1,
170
+ borderColor: 'rgba(239,68,68,0.3)',
171
+ borderRadius: 10,
172
+ padding: 12,
173
+ marginBottom: 16,
174
+ },
175
+ errorText: { fontSize: 12, color: '#EF4444', textAlign: 'center', lineHeight: 16 },
176
+ // Actions
177
+ actions: { flexDirection: 'row', gap: 12 },
178
+ cancelBtn: {
179
+ flex: 1,
180
+ paddingVertical: 12,
181
+ borderRadius: 10,
182
+ backgroundColor: 'rgba(255,255,255,0.05)',
183
+ borderWidth: 1,
184
+ borderColor: 'rgba(255,255,255,0.1)',
185
+ alignItems: 'center',
186
+ },
187
+ cancelBtnText: { fontSize: 14, fontWeight: '500', color: 'rgba(255,255,255,0.6)' },
188
+ submitBtn: {
189
+ flex: 1,
190
+ paddingVertical: 12,
191
+ borderRadius: 10,
192
+ backgroundColor: '#D6F551',
193
+ alignItems: 'center',
194
+ justifyContent: 'center',
195
+ },
196
+ submitBtnText: { fontSize: 14, fontWeight: '600', color: '#030712' },
197
+ });
198
+ //# sourceMappingURL=SetupCodeEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupCodeEntry.js","sourceRoot":"","sources":["../../src/setup/SetupCodeEntry.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface SetupSessionState {
2
+ active: boolean;
3
+ siteId: string;
4
+ apiKey: string;
5
+ deviceId: string;
6
+ expiresAt: string;
7
+ enteredAt: number;
8
+ }
9
+ type SetupStateListener = (active: boolean) => void;
10
+ /** Generate or retrieve a stable device ID */
11
+ export declare function getDeviceId(): Promise<string>;
12
+ /** Subscribe to setup state changes */
13
+ export declare function onSetupStateChange(listener: SetupStateListener): () => void;
14
+ /** Get current setup state */
15
+ export declare function getSetupState(): SetupSessionState | null;
16
+ export declare function isSetupActive(): boolean;
17
+ /** Claim a mobile setup session with a 6-digit code */
18
+ export declare function claimSetup(siteId: string, setupCode: string, debug?: boolean): Promise<{
19
+ success: boolean;
20
+ error?: string;
21
+ }>;
22
+ /** End the setup session */
23
+ export declare function endSetup(): Promise<void>;
24
+ /** Restore setup state on SDK init (in case app was restarted during setup) */
25
+ export declare function restoreSetupState(debug?: boolean): Promise<void>;
26
+ /** Clear all setup state (called on SDK reset) */
27
+ export declare function clearSetupState(): Promise<void>;
28
+ export {};
29
+ //# sourceMappingURL=SetupController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupController.d.ts","sourceRoot":"","sources":["../../src/setup/SetupController.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAWpD,8CAA8C;AAC9C,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAenD;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAK3E;AAMD,8BAA8B;AAC9B,wBAAgB,aAAa,IAAI,iBAAiB,GAAG,IAAI,CAExD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,uDAAuD;AACvD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsC/C;AAED,4BAA4B;AAC5B,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAY9C;AA0CD,+EAA+E;AAC/E,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtE;AAED,kDAAkD;AAClD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD"}