@usergist/feedback-react-native 0.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.
Files changed (242) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +231 -0
  4. package/UserGistFeedback.podspec +31 -0
  5. package/UserGistFeedbackExtension.podspec +23 -0
  6. package/android/build.gradle +92 -0
  7. package/android/consumer-rules.pro +5 -0
  8. package/android/src/main/AndroidManifest.xml +31 -0
  9. package/android/src/main/java/studio/usergist/feedback/UserGistFirebaseMessagingService.kt +153 -0
  10. package/android/src/main/java/studio/usergist/feedback/UserGistPushModule.kt +344 -0
  11. package/android/src/main/java/studio/usergist/feedback/UserGistPushPackage.kt +18 -0
  12. package/dist/NativeUserGistPush.d.ts +35 -0
  13. package/dist/NativeUserGistPush.d.ts.map +1 -0
  14. package/dist/NativeUserGistPush.js +13 -0
  15. package/dist/NativeUserGistPush.js.map +1 -0
  16. package/dist/Provider.d.ts +7 -0
  17. package/dist/Provider.d.ts.map +1 -0
  18. package/dist/Provider.js +300 -0
  19. package/dist/Provider.js.map +1 -0
  20. package/dist/Push.d.ts +103 -0
  21. package/dist/Push.d.ts.map +1 -0
  22. package/dist/Push.js +225 -0
  23. package/dist/Push.js.map +1 -0
  24. package/dist/UserGist.d.ts +210 -0
  25. package/dist/UserGist.d.ts.map +1 -0
  26. package/dist/UserGist.js +1246 -0
  27. package/dist/UserGist.js.map +1 -0
  28. package/dist/index.d.ts +11 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +4 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/internal/consent.d.ts +17 -0
  33. package/dist/internal/consent.d.ts.map +1 -0
  34. package/dist/internal/consent.js +98 -0
  35. package/dist/internal/consent.js.map +1 -0
  36. package/dist/internal/context.d.ts +12 -0
  37. package/dist/internal/context.d.ts.map +1 -0
  38. package/dist/internal/context.js +70 -0
  39. package/dist/internal/context.js.map +1 -0
  40. package/dist/internal/debug.d.ts +14 -0
  41. package/dist/internal/debug.d.ts.map +1 -0
  42. package/dist/internal/debug.js +73 -0
  43. package/dist/internal/debug.js.map +1 -0
  44. package/dist/internal/engine.d.ts +93 -0
  45. package/dist/internal/engine.d.ts.map +1 -0
  46. package/dist/internal/engine.js +904 -0
  47. package/dist/internal/engine.js.map +1 -0
  48. package/dist/internal/events.d.ts +49 -0
  49. package/dist/internal/events.d.ts.map +1 -0
  50. package/dist/internal/events.js +71 -0
  51. package/dist/internal/events.js.map +1 -0
  52. package/dist/internal/frequency-cap.d.ts +15 -0
  53. package/dist/internal/frequency-cap.d.ts.map +1 -0
  54. package/dist/internal/frequency-cap.js +84 -0
  55. package/dist/internal/frequency-cap.js.map +1 -0
  56. package/dist/internal/identity.d.ts +14 -0
  57. package/dist/internal/identity.d.ts.map +1 -0
  58. package/dist/internal/identity.js +113 -0
  59. package/dist/internal/identity.js.map +1 -0
  60. package/dist/internal/inapp-matcher.d.ts +13 -0
  61. package/dist/internal/inapp-matcher.d.ts.map +1 -0
  62. package/dist/internal/inapp-matcher.js +65 -0
  63. package/dist/internal/inapp-matcher.js.map +1 -0
  64. package/dist/internal/inapp-rules-cache.d.ts +16 -0
  65. package/dist/internal/inapp-rules-cache.d.ts.map +1 -0
  66. package/dist/internal/inapp-rules-cache.js +88 -0
  67. package/dist/internal/inapp-rules-cache.js.map +1 -0
  68. package/dist/internal/instruction-dedupe.d.ts +16 -0
  69. package/dist/internal/instruction-dedupe.d.ts.map +1 -0
  70. package/dist/internal/instruction-dedupe.js +52 -0
  71. package/dist/internal/instruction-dedupe.js.map +1 -0
  72. package/dist/internal/lifecycle.d.ts +12 -0
  73. package/dist/internal/lifecycle.d.ts.map +1 -0
  74. package/dist/internal/lifecycle.js +97 -0
  75. package/dist/internal/lifecycle.js.map +1 -0
  76. package/dist/internal/modal-coordinator.d.ts +4 -0
  77. package/dist/internal/modal-coordinator.d.ts.map +1 -0
  78. package/dist/internal/modal-coordinator.js +43 -0
  79. package/dist/internal/modal-coordinator.js.map +1 -0
  80. package/dist/internal/modal-queue.d.ts +9 -0
  81. package/dist/internal/modal-queue.d.ts.map +1 -0
  82. package/dist/internal/modal-queue.js +32 -0
  83. package/dist/internal/modal-queue.js.map +1 -0
  84. package/dist/internal/mutation-queue.d.ts +23 -0
  85. package/dist/internal/mutation-queue.d.ts.map +1 -0
  86. package/dist/internal/mutation-queue.js +66 -0
  87. package/dist/internal/mutation-queue.js.map +1 -0
  88. package/dist/internal/prompt-answers.d.ts +6 -0
  89. package/dist/internal/prompt-answers.d.ts.map +1 -0
  90. package/dist/internal/prompt-answers.js +10 -0
  91. package/dist/internal/prompt-answers.js.map +1 -0
  92. package/dist/internal/prompt-flow.d.ts +8 -0
  93. package/dist/internal/prompt-flow.d.ts.map +1 -0
  94. package/dist/internal/prompt-flow.js +26 -0
  95. package/dist/internal/prompt-flow.js.map +1 -0
  96. package/dist/internal/queue.d.ts +17 -0
  97. package/dist/internal/queue.d.ts.map +1 -0
  98. package/dist/internal/queue.js +172 -0
  99. package/dist/internal/queue.js.map +1 -0
  100. package/dist/internal/requests.d.ts +22 -0
  101. package/dist/internal/requests.d.ts.map +1 -0
  102. package/dist/internal/requests.js +146 -0
  103. package/dist/internal/requests.js.map +1 -0
  104. package/dist/internal/rules-cache.d.ts +16 -0
  105. package/dist/internal/rules-cache.d.ts.map +1 -0
  106. package/dist/internal/rules-cache.js +86 -0
  107. package/dist/internal/rules-cache.js.map +1 -0
  108. package/dist/internal/storage.d.ts +36 -0
  109. package/dist/internal/storage.d.ts.map +1 -0
  110. package/dist/internal/storage.js +213 -0
  111. package/dist/internal/storage.js.map +1 -0
  112. package/dist/internal/survey-completion.d.ts +10 -0
  113. package/dist/internal/survey-completion.d.ts.map +1 -0
  114. package/dist/internal/survey-completion.js +11 -0
  115. package/dist/internal/survey-completion.js.map +1 -0
  116. package/dist/internal/survey-matcher.d.ts +21 -0
  117. package/dist/internal/survey-matcher.d.ts.map +1 -0
  118. package/dist/internal/survey-matcher.js +139 -0
  119. package/dist/internal/survey-matcher.js.map +1 -0
  120. package/dist/internal/survey-rules-cache.d.ts +17 -0
  121. package/dist/internal/survey-rules-cache.d.ts.map +1 -0
  122. package/dist/internal/survey-rules-cache.js +91 -0
  123. package/dist/internal/survey-rules-cache.js.map +1 -0
  124. package/dist/internal/survey-store.d.ts +19 -0
  125. package/dist/internal/survey-store.d.ts.map +1 -0
  126. package/dist/internal/survey-store.js +59 -0
  127. package/dist/internal/survey-store.js.map +1 -0
  128. package/dist/internal/transport.d.ts +210 -0
  129. package/dist/internal/transport.d.ts.map +1 -0
  130. package/dist/internal/transport.js +498 -0
  131. package/dist/internal/transport.js.map +1 -0
  132. package/dist/internal/trigger-matcher.d.ts +21 -0
  133. package/dist/internal/trigger-matcher.d.ts.map +1 -0
  134. package/dist/internal/trigger-matcher.js +114 -0
  135. package/dist/internal/trigger-matcher.js.map +1 -0
  136. package/dist/internal/types.d.ts +89 -0
  137. package/dist/internal/types.d.ts.map +1 -0
  138. package/dist/internal/types.js +2 -0
  139. package/dist/internal/types.js.map +1 -0
  140. package/dist/internal/user-state.d.ts +11 -0
  141. package/dist/internal/user-state.d.ts.map +1 -0
  142. package/dist/internal/user-state.js +118 -0
  143. package/dist/internal/user-state.js.map +1 -0
  144. package/dist/native/events.d.ts +27 -0
  145. package/dist/native/events.d.ts.map +1 -0
  146. package/dist/native/events.js +12 -0
  147. package/dist/native/events.js.map +1 -0
  148. package/dist/native/push-bridge.d.ts +20 -0
  149. package/dist/native/push-bridge.d.ts.map +1 -0
  150. package/dist/native/push-bridge.js +92 -0
  151. package/dist/native/push-bridge.js.map +1 -0
  152. package/dist/preview/PromptShell.d.ts +9 -0
  153. package/dist/preview/PromptShell.d.ts.map +1 -0
  154. package/dist/preview/PromptShell.js +128 -0
  155. package/dist/preview/PromptShell.js.map +1 -0
  156. package/dist/preview/SurveyShell.d.ts +15 -0
  157. package/dist/preview/SurveyShell.d.ts.map +1 -0
  158. package/dist/preview/SurveyShell.js +197 -0
  159. package/dist/preview/SurveyShell.js.map +1 -0
  160. package/dist/preview/index.d.ts +4 -0
  161. package/dist/preview/index.d.ts.map +1 -0
  162. package/dist/preview/index.js +16 -0
  163. package/dist/preview/index.js.map +1 -0
  164. package/dist/ui/InAppMessageView.d.ts +12 -0
  165. package/dist/ui/InAppMessageView.d.ts.map +1 -0
  166. package/dist/ui/InAppMessageView.js +260 -0
  167. package/dist/ui/InAppMessageView.js.map +1 -0
  168. package/dist/ui/PromptSheet.d.ts +12 -0
  169. package/dist/ui/PromptSheet.d.ts.map +1 -0
  170. package/dist/ui/PromptSheet.js +285 -0
  171. package/dist/ui/PromptSheet.js.map +1 -0
  172. package/dist/ui/QuestionImageHeader.d.ts +12 -0
  173. package/dist/ui/QuestionImageHeader.d.ts.map +1 -0
  174. package/dist/ui/QuestionImageHeader.js +22 -0
  175. package/dist/ui/QuestionImageHeader.js.map +1 -0
  176. package/dist/ui/SurveyView.d.ts +25 -0
  177. package/dist/ui/SurveyView.d.ts.map +1 -0
  178. package/dist/ui/SurveyView.js +478 -0
  179. package/dist/ui/SurveyView.js.map +1 -0
  180. package/dist/ui/animations.d.ts +4 -0
  181. package/dist/ui/animations.d.ts.map +1 -0
  182. package/dist/ui/animations.js +24 -0
  183. package/dist/ui/animations.js.map +1 -0
  184. package/dist/ui/questions/MultipleChoiceQuestion.d.ts +12 -0
  185. package/dist/ui/questions/MultipleChoiceQuestion.d.ts.map +1 -0
  186. package/dist/ui/questions/MultipleChoiceQuestion.js +41 -0
  187. package/dist/ui/questions/MultipleChoiceQuestion.js.map +1 -0
  188. package/dist/ui/questions/NpsQuestion.d.ts +14 -0
  189. package/dist/ui/questions/NpsQuestion.d.ts.map +1 -0
  190. package/dist/ui/questions/NpsQuestion.js +73 -0
  191. package/dist/ui/questions/NpsQuestion.js.map +1 -0
  192. package/dist/ui/questions/RatingQuestion.d.ts +21 -0
  193. package/dist/ui/questions/RatingQuestion.d.ts.map +1 -0
  194. package/dist/ui/questions/RatingQuestion.js +91 -0
  195. package/dist/ui/questions/RatingQuestion.js.map +1 -0
  196. package/dist/ui/questions/ShortTextQuestion.d.ts +12 -0
  197. package/dist/ui/questions/ShortTextQuestion.d.ts.map +1 -0
  198. package/dist/ui/questions/ShortTextQuestion.js +25 -0
  199. package/dist/ui/questions/ShortTextQuestion.js.map +1 -0
  200. package/dist/ui/requests/BoardView.d.ts +9 -0
  201. package/dist/ui/requests/BoardView.d.ts.map +1 -0
  202. package/dist/ui/requests/BoardView.js +270 -0
  203. package/dist/ui/requests/BoardView.js.map +1 -0
  204. package/dist/ui/requests/CommentsSection.d.ts +7 -0
  205. package/dist/ui/requests/CommentsSection.d.ts.map +1 -0
  206. package/dist/ui/requests/CommentsSection.js +254 -0
  207. package/dist/ui/requests/CommentsSection.js.map +1 -0
  208. package/dist/ui/requests/DetailView.d.ts +8 -0
  209. package/dist/ui/requests/DetailView.d.ts.map +1 -0
  210. package/dist/ui/requests/DetailView.js +206 -0
  211. package/dist/ui/requests/DetailView.js.map +1 -0
  212. package/dist/ui/requests/RequestsHost.d.ts +12 -0
  213. package/dist/ui/requests/RequestsHost.d.ts.map +1 -0
  214. package/dist/ui/requests/RequestsHost.js +58 -0
  215. package/dist/ui/requests/RequestsHost.js.map +1 -0
  216. package/dist/ui/requests/StatusPill.d.ts +6 -0
  217. package/dist/ui/requests/StatusPill.d.ts.map +1 -0
  218. package/dist/ui/requests/StatusPill.js +25 -0
  219. package/dist/ui/requests/StatusPill.js.map +1 -0
  220. package/dist/ui/requests/SubmitView.d.ts +8 -0
  221. package/dist/ui/requests/SubmitView.d.ts.map +1 -0
  222. package/dist/ui/requests/SubmitView.js +94 -0
  223. package/dist/ui/requests/SubmitView.js.map +1 -0
  224. package/dist/ui/requests/shared.d.ts +21 -0
  225. package/dist/ui/requests/shared.d.ts.map +1 -0
  226. package/dist/ui/requests/shared.js +74 -0
  227. package/dist/ui/requests/shared.js.map +1 -0
  228. package/dist/ui/survey-questions.d.ts +20 -0
  229. package/dist/ui/survey-questions.d.ts.map +1 -0
  230. package/dist/ui/survey-questions.js +211 -0
  231. package/dist/ui/survey-questions.js.map +1 -0
  232. package/dist/ui/theme.d.ts +15 -0
  233. package/dist/ui/theme.d.ts.map +1 -0
  234. package/dist/ui/theme.js +31 -0
  235. package/dist/ui/theme.js.map +1 -0
  236. package/ios/Extension/UserGistNotificationService.swift +292 -0
  237. package/ios/UserGistPush.h +16 -0
  238. package/ios/UserGistPush.mm +158 -0
  239. package/ios/UserGistPushImpl.swift +399 -0
  240. package/ios/UserGistPushSwizzle.m +168 -0
  241. package/package.json +89 -0
  242. package/react-native.config.js +16 -0
@@ -0,0 +1,300 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // <UserGistProvider> — mounts host views that listen for internal showPrompt /
3
+ // showSurvey events and render the appropriate modal.
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { Linking } from 'react-native';
6
+ import { UserGist } from './UserGist.js';
7
+ import { PromptSheet } from './ui/PromptSheet.js';
8
+ import { SurveyView } from './ui/SurveyView.js';
9
+ import { InAppMessageView } from './ui/InAppMessageView.js';
10
+ import { RequestsHost } from './ui/requests/RequestsHost.js';
11
+ import { createModalQueue } from './internal/modal-queue.js';
12
+ import { INAPP_AUTO_DISMISSED_EVENT_NAME, INAPP_CTA_CLICKED_EVENT_NAME, INAPP_DISMISSED_EVENT_NAME, INAPP_SHOWN_EVENT_NAME, } from '@usergist/sdk-core/mobile';
13
+ function safeInAppHandlers() {
14
+ try {
15
+ return UserGist.__internal_inAppHandlers();
16
+ }
17
+ catch {
18
+ return {};
19
+ }
20
+ }
21
+ function safeSurveyHandlers() {
22
+ try {
23
+ return UserGist.__internal_surveyHandlers();
24
+ }
25
+ catch {
26
+ return {};
27
+ }
28
+ }
29
+ function safeTrack(event, props) {
30
+ try {
31
+ UserGist.track(event, props);
32
+ }
33
+ catch {
34
+ // best-effort — never throw out of a UI side-effect
35
+ }
36
+ }
37
+ export function UserGistProvider({ children }) {
38
+ const [payload, setPayload] = useState(null);
39
+ const currentRef = useRef(null);
40
+ const [surveyState, setSurveyState] = useState(null);
41
+ const [inAppMessage, setInAppMessage] = useState(null);
42
+ const modalQueueRef = useRef(createModalQueue());
43
+ const promptReleaseRef = useRef(null);
44
+ const surveyReleaseRef = useRef(null);
45
+ const inAppReleaseRef = useRef(null);
46
+ function enqueueModal(task) {
47
+ modalQueueRef.current.enqueue(task);
48
+ }
49
+ function releasePrompt() {
50
+ const release = promptReleaseRef.current;
51
+ promptReleaseRef.current = null;
52
+ release?.();
53
+ }
54
+ function releaseSurvey() {
55
+ const release = surveyReleaseRef.current;
56
+ surveyReleaseRef.current = null;
57
+ release?.();
58
+ }
59
+ function releaseInApp() {
60
+ const release = inAppReleaseRef.current;
61
+ inAppReleaseRef.current = null;
62
+ release?.();
63
+ }
64
+ useEffect(() => {
65
+ let unsubShow = null;
66
+ let unsubDismiss = null;
67
+ let unsubShowSurvey = null;
68
+ let unsubInvite = null;
69
+ let unsubShowInApp = null;
70
+ let unsubResetSurfaces = null;
71
+ let retryTimer = null;
72
+ function attach() {
73
+ try {
74
+ const bus = UserGist.__internal_events();
75
+ unsubShow = bus.on('showPrompt', (p) => {
76
+ enqueueModal((release) => {
77
+ promptReleaseRef.current = release;
78
+ currentRef.current = p;
79
+ setPayload(p);
80
+ safeTrack('$feedback_prompt_shown', { prompt_id: p.prompt.id });
81
+ bus.emit('promptShown', p);
82
+ });
83
+ });
84
+ unsubDismiss = bus.on('dismissPrompt', () => {
85
+ currentRef.current = null;
86
+ setPayload(null);
87
+ releasePrompt();
88
+ });
89
+ unsubShowSurvey = bus.on('showSurvey', (payload) => {
90
+ enqueueModal((release) => {
91
+ surveyReleaseRef.current = release;
92
+ void openSurvey(payload.surveyId, payload.source, payload.language).then((shown) => {
93
+ if (!shown)
94
+ releaseSurvey();
95
+ });
96
+ });
97
+ });
98
+ unsubShowInApp = bus.on('showInAppMessage', (p) => {
99
+ enqueueModal((release) => {
100
+ inAppReleaseRef.current = release;
101
+ setInAppMessage(p.message);
102
+ // Track impression so analytics + cross-pillar caps see it —
103
+ // the analytics endpoint pivots on properties.message_id.
104
+ safeTrack(INAPP_SHOWN_EVENT_NAME, { message_id: p.messageId });
105
+ safeInAppHandlers().onShow?.(p.messageId);
106
+ });
107
+ });
108
+ unsubResetSurfaces = bus.on('resetSurfaces', () => {
109
+ modalQueueRef.current.clearPending();
110
+ currentRef.current = null;
111
+ setPayload(null);
112
+ setSurveyState(null);
113
+ setInAppMessage(null);
114
+ releasePrompt();
115
+ releaseSurvey();
116
+ releaseInApp();
117
+ });
118
+ unsubInvite = bus.on('surveyInvite', (invite) => {
119
+ // If host registered onInvite, defer rendering to them. Otherwise
120
+ // auto-open — convenient for dev, sensible default for simple apps.
121
+ const handlers = (() => {
122
+ try {
123
+ return UserGist.__internal_surveyHandlers();
124
+ }
125
+ catch {
126
+ return {};
127
+ }
128
+ })();
129
+ if (handlers.onInvite) {
130
+ handlers.onInvite({
131
+ surveyId: invite.surveyId,
132
+ name: invite.name,
133
+ source: invite.source,
134
+ });
135
+ return;
136
+ }
137
+ enqueueModal((release) => {
138
+ surveyReleaseRef.current = release;
139
+ void openSurvey(invite.surveyId, invite.source).then((shown) => {
140
+ if (!shown)
141
+ releaseSurvey();
142
+ });
143
+ });
144
+ });
145
+ }
146
+ catch {
147
+ retryTimer = setTimeout(attach, 250);
148
+ }
149
+ }
150
+ attach();
151
+ return () => {
152
+ if (retryTimer)
153
+ clearTimeout(retryTimer);
154
+ if (unsubShow)
155
+ unsubShow();
156
+ if (unsubDismiss)
157
+ unsubDismiss();
158
+ if (unsubShowSurvey)
159
+ unsubShowSurvey();
160
+ if (unsubInvite)
161
+ unsubInvite();
162
+ if (unsubShowInApp)
163
+ unsubShowInApp();
164
+ if (unsubResetSurfaces)
165
+ unsubResetSurfaces();
166
+ modalQueueRef.current.clearPending();
167
+ };
168
+ }, []);
169
+ const openSurvey = useCallback(async (surveyId, source, language) => {
170
+ try {
171
+ // Local-fire fast-path: when the survey-matcher just fired,
172
+ // the full survey content is already in the SDK's cache. Use
173
+ // it instead of round-tripping to the server. Falls back to
174
+ // a fetch for offer-ledger / on-demand opens that arrive
175
+ // through the polling path.
176
+ const cached = language ? null : UserGist.__internal_armedSurveyById(surveyId);
177
+ const survey = cached ?? (await UserGist.__internal_fetchSurvey(surveyId, language));
178
+ if (!survey)
179
+ return false;
180
+ const attempt = await UserGist.__internal_createAttempt(surveyId, source, language);
181
+ if (!attempt)
182
+ return false;
183
+ setSurveyState({
184
+ survey,
185
+ attemptId: attempt.attemptId,
186
+ source,
187
+ initialQuestionId: attempt.currentQuestionId ?? attempt.startQuestionId,
188
+ initialSnapshot: attempt.snapshot ?? {},
189
+ });
190
+ return true;
191
+ }
192
+ catch {
193
+ return false;
194
+ }
195
+ }, []);
196
+ async function handleSubmit(r) {
197
+ const p = currentRef.current;
198
+ if (p) {
199
+ await UserGist.__internal_submitResponse(r, p.triggerEventName);
200
+ currentRef.current = null;
201
+ setPayload(null);
202
+ releasePrompt();
203
+ }
204
+ }
205
+ async function handleDismiss(r) {
206
+ const p = currentRef.current;
207
+ if (p) {
208
+ await UserGist.__internal_submitResponse(r, p.triggerEventName);
209
+ currentRef.current = null;
210
+ setPayload(null);
211
+ releasePrompt();
212
+ }
213
+ }
214
+ function handleInAppDismiss(reason) {
215
+ const m = inAppMessage;
216
+ setInAppMessage(null);
217
+ releaseInApp();
218
+ if (!m)
219
+ return;
220
+ safeTrack(reason === 'auto'
221
+ ? INAPP_AUTO_DISMISSED_EVENT_NAME
222
+ : INAPP_DISMISSED_EVENT_NAME, { message_id: m.messageId, dismiss_reason: reason });
223
+ safeInAppHandlers().onDismiss?.(m.messageId, reason);
224
+ }
225
+ function handleInAppCta(cta, index) {
226
+ const m = inAppMessage;
227
+ if (!m)
228
+ return;
229
+ safeTrack(INAPP_CTA_CLICKED_EVENT_NAME, {
230
+ message_id: m.messageId,
231
+ cta_index: index,
232
+ cta_action: cta.action,
233
+ cta_label: cta.label,
234
+ });
235
+ try {
236
+ safeInAppHandlers().onCtaClick?.({
237
+ messageId: m.messageId,
238
+ action: cta.action,
239
+ target: cta.target,
240
+ actionJson: cta.actionJson,
241
+ label: cta.label,
242
+ index,
243
+ });
244
+ }
245
+ catch {
246
+ // Host callbacks cannot interrupt SDK action dispatch or cleanup.
247
+ }
248
+ if (cta.action === 'custom_event' && cta.target) {
249
+ safeTrack(cta.target, {
250
+ message_id: m.messageId,
251
+ cta_index: index,
252
+ cta_label: cta.label,
253
+ });
254
+ }
255
+ else if ((cta.action === 'open_url' || cta.action === 'deep_link') && cta.target) {
256
+ void Linking.openURL(cta.target).catch(() => undefined);
257
+ }
258
+ else if (cta.action === 'json' && cta.actionJson) {
259
+ try {
260
+ safeInAppHandlers().onJsonAction?.(cta.actionJson, {
261
+ source: 'in_app',
262
+ messageId: m.messageId,
263
+ label: cta.label,
264
+ index,
265
+ });
266
+ }
267
+ catch {
268
+ // Host action executors are isolated from the SDK UI lifecycle.
269
+ }
270
+ }
271
+ // CTA tap implicitly closes the message.
272
+ setInAppMessage(null);
273
+ releaseInApp();
274
+ }
275
+ const themeOverride = (() => {
276
+ try {
277
+ return UserGist.__internal_theme();
278
+ }
279
+ catch {
280
+ return null;
281
+ }
282
+ })();
283
+ const handleSurveyShow = useCallback((surveyId) => {
284
+ UserGist.__internal_reportSurveyShown(surveyId);
285
+ safeSurveyHandlers().onShow?.(surveyId);
286
+ }, []);
287
+ const handleSurveyComplete = useCallback((surveyId, attemptId) => {
288
+ safeSurveyHandlers().onComplete?.(surveyId, attemptId);
289
+ }, []);
290
+ const handleSurveyAbandon = useCallback((surveyId, attemptId) => {
291
+ safeSurveyHandlers().onAbandon?.(surveyId, attemptId);
292
+ setSurveyState(null);
293
+ releaseSurvey();
294
+ }, []);
295
+ return (_jsxs(_Fragment, { children: [children, _jsx(PromptSheet, { payload: payload, themeOverride: themeOverride ?? undefined, onSubmit: handleSubmit, onDismiss: handleDismiss }), _jsx(SurveyView, { survey: surveyState?.survey ?? null, attemptId: surveyState?.attemptId ?? null, initialSnapshot: surveyState?.initialSnapshot ?? {}, initialQuestionId: surveyState?.initialQuestionId ?? null, source: surveyState?.source ?? 'on_demand', themeOverride: themeOverride, onSaveProgress: (attemptId, qid, snap) => UserGist.__internal_saveProgress(attemptId, qid, snap), onCompleteAttempt: (attemptId, answers) => UserGist.__internal_completeAttempt(attemptId, answers), onAbandonAttempt: (attemptId) => UserGist.__internal_abandonAttempt(attemptId), onDismissRequest: () => {
296
+ setSurveyState(null);
297
+ releaseSurvey();
298
+ }, onShow: handleSurveyShow, onComplete: handleSurveyComplete, onAbandon: handleSurveyAbandon }), _jsx(InAppMessageView, { message: inAppMessage, themeOverride: themeOverride, onCtaPress: handleInAppCta, onDismiss: handleInAppDismiss }), _jsx(RequestsHost, {})] }));
299
+ }
300
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../src/Provider.tsx"],"names":[],"mappings":"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"}
package/dist/Push.d.ts ADDED
@@ -0,0 +1,103 @@
1
+ /**
2
+ * UserGist Push — React Native public surface.
3
+ *
4
+ * `UserGist.enablePush()` installs the bundled APNs / FCM integration. Host
5
+ * apps that already own those delegates can disable proxying and forward
6
+ * tokens and message payloads through this surface instead.
7
+ *
8
+ * Includes the "under the hood" primitives:
9
+ * • Silent reachability ping detection + ack
10
+ * • Real delivered / displayed / dismissed beacons
11
+ * • Channel registry fetch (Android NotificationChannel registration)
12
+ * • App-open beacon for adaptive ping policy
13
+ * • Token rebind on identify
14
+ */
15
+ import { type JsonAction, type PushActionButton, type PushChannelDef } from '@usergist/sdk-core/mobile';
16
+ export type PushPermissionStatus = 'not_determined' | 'denied' | 'granted' | 'provisional' | 'ephemeral';
17
+ export interface UserGistPushMessage {
18
+ readonly campaignId?: string;
19
+ readonly variantId?: string;
20
+ readonly deliveryId?: string;
21
+ readonly language?: string;
22
+ readonly deepLink?: string;
23
+ readonly title?: string;
24
+ readonly body?: string;
25
+ readonly imageUrl?: string;
26
+ readonly androidChannelId?: string;
27
+ readonly actionButtons: ReadonlyArray<PushActionButton>;
28
+ }
29
+ export interface PushHandlers {
30
+ readonly onReceive?: (message: UserGistPushMessage, raw: Record<string, unknown>) => void;
31
+ readonly onOpen?: (message: UserGistPushMessage) => void;
32
+ readonly onAction?: (message: UserGistPushMessage, actionButton: string) => void;
33
+ /** Executes host-defined structured actions after the button tap is tracked. */
34
+ readonly onJsonAction?: (action: JsonAction, context: {
35
+ readonly source: 'push';
36
+ readonly message: UserGistPushMessage;
37
+ readonly actionButton: string;
38
+ }) => void;
39
+ readonly onDismiss?: (message: UserGistPushMessage) => void;
40
+ readonly onSilent?: (pingId: string) => void;
41
+ }
42
+ export declare function jsonActionForButton(buttons: ReadonlyArray<PushActionButton>, actionIdentifier: string): JsonAction | undefined;
43
+ export declare function parseIosPayload(userInfo: Record<string, unknown>): UserGistPushMessage | null;
44
+ export declare function parseFcmData(data: Record<string, string>, notification?: {
45
+ title?: string;
46
+ body?: string;
47
+ }): UserGistPushMessage | null;
48
+ interface PushHandlerArgs {
49
+ readonly userInfo?: Record<string, unknown>;
50
+ readonly data?: Record<string, string>;
51
+ readonly notification?: {
52
+ title?: string;
53
+ body?: string;
54
+ };
55
+ }
56
+ export declare const Push: {
57
+ setHandlers(h: PushHandlers): void;
58
+ registerDeviceToken(token: string, platform: "ios" | "android", opts?: {
59
+ environment?: "production" | "sandbox";
60
+ }): Promise<void>;
61
+ invalidateDeviceToken(token: string): Promise<void>;
62
+ /**
63
+ * Forwarded by the host app's `applicationDidBecomeActive` /
64
+ * `onResume`. Powers the adaptive reachability policy — recently-active
65
+ * users skip silent-ping cycles entirely.
66
+ */
67
+ appDidBecomeActive(): Promise<void>;
68
+ /**
69
+ * Pull the per-app channel registry and let the host (or Android SDK
70
+ * native module) create/update notification channels at app launch.
71
+ * Required on Android 8+: notifications without a registered channel
72
+ * are silently dropped.
73
+ */
74
+ fetchChannels(): Promise<ReadonlyArray<PushChannelDef>>;
75
+ setChannelSubscription(channelId: string, subscribed: boolean): Promise<void>;
76
+ /**
77
+ * Recognize and ack a silent reachability push. Called by the host's
78
+ * notification handler before any UI work. Returns true if the
79
+ * payload was a silent ping (the host should NOT show anything).
80
+ */
81
+ handleSilentIfPresent(args: {
82
+ userInfo?: Record<string, unknown>;
83
+ data?: Record<string, string>;
84
+ }): Promise<boolean>;
85
+ /**
86
+ * Beacon: device received the push (NSE / Android FCM data handler).
87
+ * Distinct from $push_received (which is emitted when the SDK first
88
+ * sees the payload in user-facing code paths).
89
+ */
90
+ beaconDelivered(deliveryId: string): Promise<void>;
91
+ /** Beacon: SDK rendered a local notification (Android data-only path). */
92
+ beaconDisplayed(deliveryId: string): Promise<void>;
93
+ /** Beacon: user dismissed the notification without opening. */
94
+ beaconDismissed(deliveryId: string): Promise<void>;
95
+ handleReceived(args: PushHandlerArgs): void;
96
+ handleDisplayed(args: PushHandlerArgs): void;
97
+ handleDismissed(args: PushHandlerArgs): void;
98
+ handleOpened(args: PushHandlerArgs & {
99
+ actionIdentifier?: string;
100
+ }): void;
101
+ };
102
+ export {};
103
+ //# sourceMappingURL=Push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Push.d.ts","sourceRoot":"","sources":["../src/Push.ts"],"names":[],"mappings":"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"}
package/dist/Push.js ADDED
@@ -0,0 +1,225 @@
1
+ /**
2
+ * UserGist Push — React Native public surface.
3
+ *
4
+ * `UserGist.enablePush()` installs the bundled APNs / FCM integration. Host
5
+ * apps that already own those delegates can disable proxying and forward
6
+ * tokens and message payloads through this surface instead.
7
+ *
8
+ * Includes the "under the hood" primitives:
9
+ * • Silent reachability ping detection + ack
10
+ * • Real delivered / displayed / dismissed beacons
11
+ * • Channel registry fetch (Android NotificationChannel registration)
12
+ * • App-open beacon for adaptive ping policy
13
+ * • Token rebind on identify
14
+ */
15
+ import { isSilentPushPayload, } from '@usergist/sdk-core/mobile';
16
+ import { UserGist } from './UserGist.js';
17
+ let handlers = {};
18
+ function parseActionButtons(value) {
19
+ let candidate = value;
20
+ if (typeof candidate === 'string') {
21
+ try {
22
+ candidate = JSON.parse(candidate);
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ }
28
+ if (!Array.isArray(candidate))
29
+ return [];
30
+ return candidate.filter((button) => {
31
+ if (typeof button !== 'object' || button === null)
32
+ return false;
33
+ const record = button;
34
+ return typeof record.label === 'string' && typeof record.action === 'string';
35
+ });
36
+ }
37
+ export function jsonActionForButton(buttons, actionIdentifier) {
38
+ const indexed = /^usergist_action_(\d+)$/.exec(actionIdentifier);
39
+ const byIndex = indexed ? buttons[Number(indexed[1])] : undefined;
40
+ const button = byIndex ?? buttons.find((candidate) => candidate.label === actionIdentifier);
41
+ return button?.action === 'json' ? button.actionJson : undefined;
42
+ }
43
+ export function parseIosPayload(userInfo) {
44
+ const usergist = userInfo?.['usergist'];
45
+ if (!usergist)
46
+ return null;
47
+ const aps = userInfo?.['aps'];
48
+ const alert = aps?.['alert'];
49
+ const extra = usergist['extra'];
50
+ return {
51
+ campaignId: usergist['campaignId'],
52
+ variantId: usergist['variantId'],
53
+ deliveryId: usergist['deliveryId'],
54
+ language: usergist['language'],
55
+ deepLink: usergist['deepLink'],
56
+ title: alert?.['title'],
57
+ body: alert?.['body'],
58
+ imageUrl: extra?.['imageUrl'],
59
+ actionButtons: parseActionButtons(usergist['actionButtons']),
60
+ };
61
+ }
62
+ export function parseFcmData(data, notification) {
63
+ if (!data.usergist_campaign_id)
64
+ return null;
65
+ return {
66
+ campaignId: data.usergist_campaign_id,
67
+ variantId: data.usergist_variant_id,
68
+ deliveryId: data.usergist_delivery_id,
69
+ language: data.usergist_language,
70
+ deepLink: data.usergist_deep_link,
71
+ title: notification?.title ?? data.usergist_title,
72
+ body: notification?.body ?? data.usergist_body,
73
+ imageUrl: data.usergist_image_url,
74
+ androidChannelId: data.usergist_channel_id,
75
+ actionButtons: parseActionButtons(data.usergist_actions),
76
+ };
77
+ }
78
+ function emitEvent(name, msg, extra) {
79
+ const props = {
80
+ campaign_id: msg.campaignId ?? null,
81
+ variant_id: msg.variantId ?? null,
82
+ delivery_id: msg.deliveryId ?? null,
83
+ language: msg.language ?? null,
84
+ ...(extra ?? {}),
85
+ };
86
+ UserGist.track(name, props);
87
+ // Also surface to host-app subscribers (e.g. Amplitude / Mixpanel /
88
+ // Segment) via the public `onPushEvent` API. Analytics-tool agnostic
89
+ // — the host plumbs to whichever stack they use.
90
+ UserGist._notifyPushEvent(name, props);
91
+ }
92
+ function parsePushArgs(args) {
93
+ if (args.userInfo !== undefined)
94
+ return parseIosPayload(args.userInfo);
95
+ if (args.data)
96
+ return parseFcmData(args.data, args.notification);
97
+ return null;
98
+ }
99
+ export const Push = {
100
+ setHandlers(h) {
101
+ handlers = h;
102
+ },
103
+ async registerDeviceToken(token, platform, opts) {
104
+ if (!token)
105
+ return;
106
+ await UserGist.registerPushToken(token, platform, opts);
107
+ },
108
+ async invalidateDeviceToken(token) {
109
+ await UserGist.invalidatePushToken(token);
110
+ },
111
+ /**
112
+ * Forwarded by the host app's `applicationDidBecomeActive` /
113
+ * `onResume`. Powers the adaptive reachability policy — recently-active
114
+ * users skip silent-ping cycles entirely.
115
+ */
116
+ async appDidBecomeActive() {
117
+ await UserGist.pushAppOpen();
118
+ },
119
+ /**
120
+ * Pull the per-app channel registry and let the host (or Android SDK
121
+ * native module) create/update notification channels at app launch.
122
+ * Required on Android 8+: notifications without a registered channel
123
+ * are silently dropped.
124
+ */
125
+ async fetchChannels() {
126
+ return UserGist.pushFetchChannels();
127
+ },
128
+ async setChannelSubscription(channelId, subscribed) {
129
+ await UserGist.pushSetChannelSubscription(channelId, subscribed);
130
+ },
131
+ /**
132
+ * Recognize and ack a silent reachability push. Called by the host's
133
+ * notification handler before any UI work. Returns true if the
134
+ * payload was a silent ping (the host should NOT show anything).
135
+ */
136
+ async handleSilentIfPresent(args) {
137
+ const raw = (args.userInfo ?? args.data ?? {});
138
+ if (!isSilentPushPayload(raw))
139
+ return false;
140
+ const pingId = String(raw.usergist_ping_id ?? '');
141
+ if (!pingId)
142
+ return true;
143
+ handlers.onSilent?.(pingId);
144
+ await UserGist.pushAckSilent(pingId);
145
+ return true;
146
+ },
147
+ /**
148
+ * Beacon: device received the push (NSE / Android FCM data handler).
149
+ * Distinct from $push_received (which is emitted when the SDK first
150
+ * sees the payload in user-facing code paths).
151
+ */
152
+ async beaconDelivered(deliveryId) {
153
+ if (!deliveryId)
154
+ return;
155
+ await UserGist.pushBeacon('delivered', deliveryId);
156
+ },
157
+ /** Beacon: SDK rendered a local notification (Android data-only path). */
158
+ async beaconDisplayed(deliveryId) {
159
+ if (!deliveryId)
160
+ return;
161
+ await UserGist.pushBeacon('displayed', deliveryId);
162
+ },
163
+ /** Beacon: user dismissed the notification without opening. */
164
+ async beaconDismissed(deliveryId) {
165
+ if (!deliveryId)
166
+ return;
167
+ await UserGist.pushBeacon('dismissed', deliveryId);
168
+ },
169
+ handleReceived(args) {
170
+ const msg = parsePushArgs(args);
171
+ if (!msg)
172
+ return;
173
+ emitEvent('$push_received', msg);
174
+ handlers.onReceive?.(msg, (args.userInfo ?? args.data ?? {}));
175
+ },
176
+ handleDisplayed(args) {
177
+ const msg = parsePushArgs(args);
178
+ if (!msg)
179
+ return;
180
+ emitEvent('$push_displayed', msg);
181
+ if (msg.deliveryId)
182
+ void UserGist.pushBeacon('displayed', msg.deliveryId);
183
+ },
184
+ handleDismissed(args) {
185
+ const msg = parsePushArgs(args);
186
+ if (!msg)
187
+ return;
188
+ emitEvent('$push_dismissed', msg);
189
+ if (msg.deliveryId)
190
+ void UserGist.pushBeacon('dismissed', msg.deliveryId);
191
+ handlers.onDismiss?.(msg);
192
+ },
193
+ handleOpened(args) {
194
+ const msg = parsePushArgs(args);
195
+ if (!msg)
196
+ return;
197
+ if (args.actionIdentifier) {
198
+ emitEvent('$push_action_clicked', msg, { action_button: args.actionIdentifier });
199
+ try {
200
+ handlers.onAction?.(msg, args.actionIdentifier);
201
+ }
202
+ catch {
203
+ // A host observer cannot prevent the configured action from running.
204
+ }
205
+ const actionJson = jsonActionForButton(msg.actionButtons, args.actionIdentifier);
206
+ if (actionJson) {
207
+ try {
208
+ handlers.onJsonAction?.(actionJson, {
209
+ source: 'push',
210
+ message: msg,
211
+ actionButton: args.actionIdentifier,
212
+ });
213
+ }
214
+ catch {
215
+ // Host action executors must not throw across the SDK boundary.
216
+ }
217
+ }
218
+ }
219
+ else {
220
+ emitEvent('$push_opened', msg);
221
+ handlers.onOpen?.(msg);
222
+ }
223
+ },
224
+ };
225
+ //# sourceMappingURL=Push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Push.js","sourceRoot":"","sources":["../src/Push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,mBAAmB,GAIpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAoCxC,IAAI,QAAQ,GAAiB,EAAE,CAAA;AAE/B,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAY,CAAA;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAA8B,EAAE;QAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QAC/D,MAAM,MAAM,GAAG,MAAiC,CAAA;QAChD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAwC,EACxC,gBAAwB;IAExB,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjE,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAA;IAC3F,OAAO,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiC;IAC/D,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,UAAU,CAAwC,CAAA;IAC9E,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAwC,CAAA;IACpE,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,CAAwC,CAAA;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAwC,CAAA;IACtE,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAuB;QACxD,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAuB;QACtD,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAuB;QACxD,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAuB;QACpD,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAuB;QACpD,KAAK,EAAE,KAAK,EAAE,CAAC,OAAO,CAAuB;QAC7C,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAuB;QAC3C,QAAQ,EAAE,KAAK,EAAE,CAAC,UAAU,CAAuB;QACnD,aAAa,EAAE,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;KAC7D,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAA4B,EAC5B,YAAgD;IAEhD,IAAI,CAAC,IAAI,CAAC,oBAAoB;QAAE,OAAO,IAAI,CAAA;IAC3C,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,oBAAoB;QACrC,SAAS,EAAE,IAAI,CAAC,mBAAmB;QACnC,UAAU,EAAE,IAAI,CAAC,oBAAoB;QACrC,QAAQ,EAAE,IAAI,CAAC,iBAAiB;QAChC,QAAQ,EAAE,IAAI,CAAC,kBAAkB;QACjC,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,cAAc;QACjD,IAAI,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,aAAa;QAC9C,QAAQ,EAAE,IAAI,CAAC,kBAAkB;QACjC,gBAAgB,EAAE,IAAI,CAAC,mBAAmB;QAC1C,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC;KACzD,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAChB,IAK0B,EAC1B,GAAwB,EACxB,KAA+B;IAE/B,MAAM,KAAK,GAAG;QACZ,WAAW,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QACnC,UAAU,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;QACjC,WAAW,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;QAC9B,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;KACjB,CAAA;IACD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC3B,oEAAoE;IACpE,qEAAqE;IACrE,iDAAiD;IACjD,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACxC,CAAC;AAQD,SAAS,aAAa,CAAC,IAAqB;IAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtE,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;IAChE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,WAAW,CAAC,CAAe;QACzB,QAAQ,GAAG,CAAC,CAAA;IACd,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,KAAa,EACb,QAA2B,EAC3B,IAAiD;QAEjD,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,MAAM,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAAa;QACvC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,SAAiB,EAAE,UAAmB;QACjE,MAAM,QAAQ,CAAC,0BAA0B,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAClE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAG3B;QACC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAA;QACzE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAA;QAC3B,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;IAED,cAAc,CAAC,IAAqB;QAClC,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;QAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC,CAAA;IAC1F,CAAC;IAED,eAAe,CAAC,IAAqB;QACnC,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;QACjC,IAAI,GAAG,CAAC,UAAU;YAAE,KAAK,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;IAC3E,CAAC;IAED,eAAe,CAAC,IAAqB;QACnC,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;QACjC,IAAI,GAAG,CAAC,UAAU;YAAE,KAAK,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;QACzE,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,YAAY,CAAC,IAAqD;QAChE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,SAAS,CAAC,sBAAsB,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;YAChF,IAAI,CAAC;gBACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;YACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAChF,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE;wBAClC,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,GAAG;wBACZ,YAAY,EAAE,IAAI,CAAC,gBAAgB;qBACpC,CAAC,CAAA;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;YAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;CACF,CAAA"}