@mobileai/react-native 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/README.md +121 -0
  2. package/lib/module/components/AIAgent.js +248 -53
  3. package/lib/module/components/AIAgent.js.map +1 -1
  4. package/lib/module/components/AIZone.js +140 -0
  5. package/lib/module/components/AIZone.js.map +1 -0
  6. package/lib/module/components/AgentErrorBoundary.js +9 -0
  7. package/lib/module/components/AgentErrorBoundary.js.map +1 -1
  8. package/lib/module/components/HighlightOverlay.js +138 -0
  9. package/lib/module/components/HighlightOverlay.js.map +1 -0
  10. package/lib/module/components/ProactiveHint.js +138 -0
  11. package/lib/module/components/ProactiveHint.js.map +1 -0
  12. package/lib/module/components/cards/InfoCard.js +65 -0
  13. package/lib/module/components/cards/InfoCard.js.map +1 -0
  14. package/lib/module/components/cards/ReviewSummary.js +74 -0
  15. package/lib/module/components/cards/ReviewSummary.js.map +1 -0
  16. package/lib/module/core/AgentRuntime.js +16 -3
  17. package/lib/module/core/AgentRuntime.js.map +1 -1
  18. package/lib/module/core/FiberTreeWalker.js +62 -85
  19. package/lib/module/core/FiberTreeWalker.js.map +1 -1
  20. package/lib/module/core/IdleDetector.js +51 -0
  21. package/lib/module/core/IdleDetector.js.map +1 -0
  22. package/lib/module/core/ZoneRegistry.js +47 -0
  23. package/lib/module/core/ZoneRegistry.js.map +1 -0
  24. package/lib/module/core/systemPrompt.js +2 -0
  25. package/lib/module/core/systemPrompt.js.map +1 -1
  26. package/lib/module/index.js +21 -0
  27. package/lib/module/index.js.map +1 -1
  28. package/lib/module/services/AudioOutputService.js +10 -0
  29. package/lib/module/services/AudioOutputService.js.map +1 -1
  30. package/lib/module/services/flags/FlagService.js +117 -0
  31. package/lib/module/services/flags/FlagService.js.map +1 -0
  32. package/lib/module/services/telemetry/MobileAI.js +66 -0
  33. package/lib/module/services/telemetry/MobileAI.js.map +1 -0
  34. package/lib/module/services/telemetry/PiiScrubber.js +17 -0
  35. package/lib/module/services/telemetry/PiiScrubber.js.map +1 -0
  36. package/lib/module/services/telemetry/TelemetryService.js +260 -0
  37. package/lib/module/services/telemetry/TelemetryService.js.map +1 -0
  38. package/lib/module/services/telemetry/TouchAutoCapture.js +159 -0
  39. package/lib/module/services/telemetry/TouchAutoCapture.js.map +1 -0
  40. package/lib/module/services/telemetry/device.js +19 -0
  41. package/lib/module/services/telemetry/device.js.map +1 -0
  42. package/lib/module/services/telemetry/index.js +9 -0
  43. package/lib/module/services/telemetry/index.js.map +1 -0
  44. package/lib/module/services/telemetry/types.js +2 -0
  45. package/lib/module/services/telemetry/types.js.map +1 -0
  46. package/lib/module/support/CSATSurvey.js +273 -0
  47. package/lib/module/support/CSATSurvey.js.map +1 -0
  48. package/lib/module/support/EscalationSocket.js +92 -0
  49. package/lib/module/support/EscalationSocket.js.map +1 -0
  50. package/lib/module/support/SupportGreeting.js +142 -0
  51. package/lib/module/support/SupportGreeting.js.map +1 -0
  52. package/lib/module/support/escalateTool.js +120 -0
  53. package/lib/module/support/escalateTool.js.map +1 -0
  54. package/lib/module/support/index.js +18 -0
  55. package/lib/module/support/index.js.map +1 -0
  56. package/lib/module/support/supportPrompt.js +47 -0
  57. package/lib/module/support/supportPrompt.js.map +1 -0
  58. package/lib/module/support/types.js +2 -0
  59. package/lib/module/support/types.js.map +1 -0
  60. package/lib/module/tools/guideTool.js +61 -0
  61. package/lib/module/tools/guideTool.js.map +1 -0
  62. package/lib/module/tools/index.js +3 -0
  63. package/lib/module/tools/index.js.map +1 -1
  64. package/lib/module/tools/restoreTool.js +31 -0
  65. package/lib/module/tools/restoreTool.js.map +1 -0
  66. package/lib/module/tools/simplifyTool.js +31 -0
  67. package/lib/module/tools/simplifyTool.js.map +1 -0
  68. package/lib/module/types/jsx.d.js +4 -0
  69. package/lib/module/types/jsx.d.js.map +1 -0
  70. package/lib/typescript/src/components/AIAgent.d.ts +21 -2
  71. package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
  72. package/lib/typescript/src/components/AIZone.d.ts +16 -0
  73. package/lib/typescript/src/components/AIZone.d.ts.map +1 -0
  74. package/lib/typescript/src/components/AgentErrorBoundary.d.ts +1 -0
  75. package/lib/typescript/src/components/AgentErrorBoundary.d.ts.map +1 -1
  76. package/lib/typescript/src/components/HighlightOverlay.d.ts +10 -0
  77. package/lib/typescript/src/components/HighlightOverlay.d.ts.map +1 -0
  78. package/lib/typescript/src/components/ProactiveHint.d.ts +10 -0
  79. package/lib/typescript/src/components/ProactiveHint.d.ts.map +1 -0
  80. package/lib/typescript/src/components/cards/InfoCard.d.ts +19 -0
  81. package/lib/typescript/src/components/cards/InfoCard.d.ts.map +1 -0
  82. package/lib/typescript/src/components/cards/ReviewSummary.d.ts +19 -0
  83. package/lib/typescript/src/components/cards/ReviewSummary.d.ts.map +1 -0
  84. package/lib/typescript/src/core/AgentRuntime.d.ts +1 -0
  85. package/lib/typescript/src/core/AgentRuntime.d.ts.map +1 -1
  86. package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +1 -1
  87. package/lib/typescript/src/core/IdleDetector.d.ts +27 -0
  88. package/lib/typescript/src/core/IdleDetector.d.ts.map +1 -0
  89. package/lib/typescript/src/core/ZoneRegistry.d.ts +13 -0
  90. package/lib/typescript/src/core/ZoneRegistry.d.ts.map +1 -0
  91. package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
  92. package/lib/typescript/src/core/types.d.ts +54 -0
  93. package/lib/typescript/src/core/types.d.ts.map +1 -1
  94. package/lib/typescript/src/index.d.ts +5 -0
  95. package/lib/typescript/src/index.d.ts.map +1 -1
  96. package/lib/typescript/src/services/AudioOutputService.d.ts.map +1 -1
  97. package/lib/typescript/src/services/flags/FlagService.d.ts +25 -0
  98. package/lib/typescript/src/services/flags/FlagService.d.ts.map +1 -0
  99. package/lib/typescript/src/services/telemetry/MobileAI.d.ts +38 -0
  100. package/lib/typescript/src/services/telemetry/MobileAI.d.ts.map +1 -0
  101. package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts +6 -0
  102. package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts.map +1 -0
  103. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +49 -0
  104. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -0
  105. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts +28 -0
  106. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts.map +1 -0
  107. package/lib/typescript/src/services/telemetry/device.d.ts +7 -0
  108. package/lib/typescript/src/services/telemetry/device.d.ts.map +1 -0
  109. package/lib/typescript/src/services/telemetry/index.d.ts +7 -0
  110. package/lib/typescript/src/services/telemetry/index.d.ts.map +1 -0
  111. package/lib/typescript/src/services/telemetry/types.d.ts +50 -0
  112. package/lib/typescript/src/services/telemetry/types.d.ts.map +1 -0
  113. package/lib/typescript/src/support/CSATSurvey.d.ts +20 -0
  114. package/lib/typescript/src/support/CSATSurvey.d.ts.map +1 -0
  115. package/lib/typescript/src/support/EscalationSocket.d.ts +38 -0
  116. package/lib/typescript/src/support/EscalationSocket.d.ts.map +1 -0
  117. package/lib/typescript/src/support/SupportGreeting.d.ts +19 -0
  118. package/lib/typescript/src/support/SupportGreeting.d.ts.map +1 -0
  119. package/lib/typescript/src/support/escalateTool.d.ts +25 -0
  120. package/lib/typescript/src/support/escalateTool.d.ts.map +1 -0
  121. package/lib/typescript/src/support/index.d.ts +11 -0
  122. package/lib/typescript/src/support/index.d.ts.map +1 -0
  123. package/lib/typescript/src/support/supportPrompt.d.ts +12 -0
  124. package/lib/typescript/src/support/supportPrompt.d.ts.map +1 -0
  125. package/lib/typescript/src/support/types.d.ts +114 -0
  126. package/lib/typescript/src/support/types.d.ts.map +1 -0
  127. package/lib/typescript/src/tools/guideTool.d.ts +4 -0
  128. package/lib/typescript/src/tools/guideTool.d.ts.map +1 -0
  129. package/lib/typescript/src/tools/index.d.ts +3 -0
  130. package/lib/typescript/src/tools/index.d.ts.map +1 -1
  131. package/lib/typescript/src/tools/restoreTool.d.ts +3 -0
  132. package/lib/typescript/src/tools/restoreTool.d.ts.map +1 -0
  133. package/lib/typescript/src/tools/simplifyTool.d.ts +3 -0
  134. package/lib/typescript/src/tools/simplifyTool.d.ts.map +1 -0
  135. package/lib/typescript/src/tools/types.d.ts +2 -0
  136. package/lib/typescript/src/tools/types.d.ts.map +1 -1
  137. package/package.json +5 -1
  138. package/src/components/AIAgent.tsx +253 -15
  139. package/src/components/AIZone.tsx +147 -0
  140. package/src/components/AgentErrorBoundary.tsx +10 -0
  141. package/src/components/HighlightOverlay.tsx +136 -0
  142. package/src/components/ProactiveHint.tsx +145 -0
  143. package/src/components/cards/InfoCard.tsx +58 -0
  144. package/src/components/cards/ReviewSummary.tsx +76 -0
  145. package/src/core/AgentRuntime.ts +18 -0
  146. package/src/core/FiberTreeWalker.ts +71 -93
  147. package/src/core/IdleDetector.ts +72 -0
  148. package/src/core/ZoneRegistry.ts +44 -0
  149. package/src/core/systemPrompt.ts +2 -0
  150. package/src/core/types.ts +60 -0
  151. package/src/index.ts +31 -0
  152. package/src/services/AudioOutputService.ts +13 -0
  153. package/src/services/flags/FlagService.ts +137 -0
  154. package/src/services/telemetry/MobileAI.ts +66 -0
  155. package/src/services/telemetry/PiiScrubber.ts +17 -0
  156. package/src/services/telemetry/TelemetryService.ts +291 -0
  157. package/src/services/telemetry/TouchAutoCapture.ts +165 -0
  158. package/src/services/telemetry/device.ts +16 -0
  159. package/src/services/telemetry/index.ts +13 -0
  160. package/src/services/telemetry/types.ts +75 -0
  161. package/src/support/CSATSurvey.tsx +304 -0
  162. package/src/support/EscalationSocket.ts +113 -0
  163. package/src/support/SupportGreeting.tsx +161 -0
  164. package/src/support/escalateTool.ts +134 -0
  165. package/src/support/index.ts +27 -0
  166. package/src/support/supportPrompt.ts +55 -0
  167. package/src/support/types.ts +141 -0
  168. package/src/tools/guideTool.ts +67 -0
  169. package/src/tools/index.ts +3 -0
  170. package/src/tools/restoreTool.ts +33 -0
  171. package/src/tools/simplifyTool.ts +33 -0
  172. package/src/tools/types.ts +2 -0
  173. package/src/types/jsx.d.ts +20 -0
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ import React, { useRef, useEffect, useContext, useState } from 'react';
4
+ import { View, StyleSheet, Pressable, Text } from 'react-native';
5
+ import { ZoneRegistryContext } from "../core/ZoneRegistry.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ // React context to broadcast simplified state down strictly to children
8
+ export const AIZoneStateContext = /*#__PURE__*/React.createContext({
9
+ simplified: false
10
+ });
11
+
12
+ /**
13
+ * Declarative boundary that grants the AI permission to modify its subtree.
14
+ * Has zero visual impact by default.
15
+ */
16
+ export function AIZone({
17
+ id,
18
+ allowHighlight,
19
+ allowInjectHint,
20
+ allowSimplify,
21
+ allowInjectCard,
22
+ templates,
23
+ children,
24
+ style
25
+ }) {
26
+ const zoneRef = useRef(null);
27
+ const registry = useContext(ZoneRegistryContext);
28
+
29
+ // State managed by AI tools
30
+ const [simplified, setSimplified] = useState(false);
31
+ const [injectedCard, setInjectedCard] = useState(null);
32
+ useEffect(() => {
33
+ // Register zone permissions on mount
34
+ registry.register({
35
+ id,
36
+ allowHighlight,
37
+ allowInjectHint,
38
+ allowSimplify,
39
+ allowInjectCard,
40
+ templates
41
+ }, zoneRef);
42
+
43
+ // Unregister on unmount
44
+ return () => registry.unregister(id);
45
+ }, [id, allowHighlight, allowInjectHint, allowSimplify, allowInjectCard, templates, registry]);
46
+
47
+ // If the zone exposes an API to manipulate itself locally (outside of AI),
48
+ // we would attach it to the ref or a secondary context. For now, the tools
49
+ // will dispatch events or we can expose a global setter.
50
+ // Actually, the easiest way for the AI tools to mutate this state is
51
+ // an EventEmitter or assigning a controller object to the registry.
52
+
53
+ useEffect(() => {
54
+ // Attach controller to the registry so tools can act on this specific mount instance
55
+ const zone = registry.get(id);
56
+ if (zone) {
57
+ zone._controller = {
58
+ simplify: () => setSimplified(true),
59
+ restore: () => {
60
+ setSimplified(false);
61
+ setInjectedCard(null);
62
+ },
63
+ injectCard: card => setInjectedCard(card)
64
+ };
65
+ }
66
+ }, [id, registry]);
67
+ return /*#__PURE__*/_jsx(View, {
68
+ ref: zoneRef,
69
+ style: style,
70
+ collapsable: false,
71
+ children: /*#__PURE__*/_jsxs(AIZoneStateContext.Provider, {
72
+ value: {
73
+ simplified
74
+ },
75
+ children: [children, injectedCard && /*#__PURE__*/_jsxs(View, {
76
+ style: styles.cardWrapper,
77
+ children: [injectedCard, /*#__PURE__*/_jsx(Pressable, {
78
+ style: styles.closeCardBtn,
79
+ onPress: () => setInjectedCard(null),
80
+ accessibilityLabel: "Dismiss AI Card",
81
+ children: /*#__PURE__*/_jsx(Text, {
82
+ style: styles.closeCardText,
83
+ children: "\xD7"
84
+ })
85
+ })]
86
+ }), simplified && /*#__PURE__*/_jsx(Pressable, {
87
+ style: styles.showAllBtn,
88
+ onPress: () => setSimplified(false),
89
+ accessibilityLabel: "Show all options",
90
+ children: /*#__PURE__*/_jsx(Text, {
91
+ style: styles.showAllText,
92
+ children: "Show all options"
93
+ })
94
+ })]
95
+ })
96
+ });
97
+ }
98
+ const styles = StyleSheet.create({
99
+ cardWrapper: {
100
+ marginVertical: 12,
101
+ position: 'relative',
102
+ backgroundColor: '#fff',
103
+ borderRadius: 8,
104
+ shadowColor: '#000',
105
+ shadowOpacity: 0.1,
106
+ shadowRadius: 10,
107
+ elevation: 3
108
+ },
109
+ closeCardBtn: {
110
+ position: 'absolute',
111
+ top: -8,
112
+ right: -8,
113
+ backgroundColor: '#444',
114
+ width: 24,
115
+ height: 24,
116
+ borderRadius: 12,
117
+ alignItems: 'center',
118
+ justifyContent: 'center',
119
+ zIndex: 10
120
+ },
121
+ closeCardText: {
122
+ color: '#fff',
123
+ fontSize: 14,
124
+ fontWeight: 'bold'
125
+ },
126
+ showAllBtn: {
127
+ marginTop: 8,
128
+ paddingVertical: 10,
129
+ alignItems: 'center',
130
+ justifyContent: 'center',
131
+ backgroundColor: '#f0f0f0',
132
+ borderRadius: 8
133
+ },
134
+ showAllText: {
135
+ color: '#0066cc',
136
+ fontSize: 14,
137
+ fontWeight: '500'
138
+ }
139
+ });
140
+ //# sourceMappingURL=AIZone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useRef","useEffect","useContext","useState","View","StyleSheet","Pressable","Text","ZoneRegistryContext","jsx","_jsx","jsxs","_jsxs","AIZoneStateContext","createContext","simplified","AIZone","id","allowHighlight","allowInjectHint","allowSimplify","allowInjectCard","templates","children","style","zoneRef","registry","setSimplified","injectedCard","setInjectedCard","register","unregister","zone","get","_controller","simplify","restore","injectCard","card","ref","collapsable","Provider","value","styles","cardWrapper","closeCardBtn","onPress","accessibilityLabel","closeCardText","showAllBtn","showAllText","create","marginVertical","position","backgroundColor","borderRadius","shadowColor","shadowOpacity","shadowRadius","elevation","top","right","width","height","alignItems","justifyContent","zIndex","color","fontSize","fontWeight","marginTop","paddingVertical"],"sourceRoot":"../../../src","sources":["components/AIZone.tsx"],"mappings":"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","ignoreList":[]}
@@ -30,6 +30,15 @@ export class AgentErrorBoundary extends React.Component {
30
30
  const componentStack = errorInfo?.componentStack || '';
31
31
  logger.warn('AgentErrorBoundary', `🛡️ Caught rendering error: ${error.message}\n${componentStack}`);
32
32
  this.props.onError?.(error, componentStack);
33
+
34
+ // Track the render error silently in analytics
35
+ if (this.props.telemetryRef?.current?.track) {
36
+ this.props.telemetryRef.current.track('render_error', {
37
+ message: error.message,
38
+ component: componentStack?.split('\n')[1]?.trim() ?? 'unknown',
39
+ screen: this.props.telemetryRef.current.screen
40
+ });
41
+ }
33
42
  }
34
43
  componentDidUpdate(_prevProps, prevState) {
35
44
  // Auto-recover: reset error state after brief delay to remount children
@@ -1 +1 @@
1
- {"version":3,"names":["React","logger","AgentErrorBoundary","Component","state","hasError","resetTimer","getDerivedStateFromError","_error","componentDidCatch","error","errorInfo","componentStack","warn","message","props","onError","componentDidUpdate","_prevProps","prevState","setTimeout","setState","componentWillUnmount","clearTimeout","render","children"],"sourceRoot":"../../../src","sources":["components/AgentErrorBoundary.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,oBAAiB;AAYxC,OAAO,MAAMC,kBAAkB,SAASF,KAAK,CAACG,SAAS,CAAe;EACpEC,KAAK,GAAU;IAAEC,QAAQ,EAAE;EAAM,CAAC;EAC1BC,UAAU,GAAyC,IAAI;EAE/D,OAAOC,wBAAwBA,CAACC,MAAa,EAAS;IACpD,OAAO;MAAEH,QAAQ,EAAE;IAAK,CAAC;EAC3B;EAEAI,iBAAiBA,CAACC,KAAY,EAAEC,SAA0B,EAAQ;IAChE,MAAMC,cAAc,GAAGD,SAAS,EAAEC,cAAc,IAAI,EAAE;IACtDX,MAAM,CAACY,IAAI,CACT,oBAAoB,EACpB,+BAA+BH,KAAK,CAACI,OAAO,KAAKF,cAAc,EACjE,CAAC;IACD,IAAI,CAACG,KAAK,CAACC,OAAO,GAAGN,KAAK,EAAEE,cAAc,CAAC;EAC7C;EAEAK,kBAAkBA,CAACC,UAAiB,EAAEC,SAAgB,EAAQ;IAC5D;IACA,IAAI,IAAI,CAACf,KAAK,CAACC,QAAQ,IAAI,CAACc,SAAS,CAACd,QAAQ,EAAE;MAC9C,IAAI,CAACC,UAAU,GAAGc,UAAU,CAAC,MAAM;QACjC,IAAI,CAACC,QAAQ,CAAC;UAAEhB,QAAQ,EAAE;QAAM,CAAC,CAAC;MACpC,CAAC,EAAE,EAAE,CAAC;IACR;EACF;EAEAiB,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,IAAI,CAAChB,UAAU,EAAE;MACnBiB,YAAY,CAAC,IAAI,CAACjB,UAAU,CAAC;IAC/B;EACF;EAEAkB,MAAMA,CAAA,EAAoB;IACxB,IAAI,IAAI,CAACpB,KAAK,CAACC,QAAQ,EAAE;MACvB;MACA;MACA,OAAO,IAAI;IACb;IACA,OAAO,IAAI,CAACU,KAAK,CAACU,QAAQ;EAC5B;AACF","ignoreList":[]}
1
+ {"version":3,"names":["React","logger","AgentErrorBoundary","Component","state","hasError","resetTimer","getDerivedStateFromError","_error","componentDidCatch","error","errorInfo","componentStack","warn","message","props","onError","telemetryRef","current","track","component","split","trim","screen","componentDidUpdate","_prevProps","prevState","setTimeout","setState","componentWillUnmount","clearTimeout","render","children"],"sourceRoot":"../../../src","sources":["components/AgentErrorBoundary.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,oBAAiB;AAaxC,OAAO,MAAMC,kBAAkB,SAASF,KAAK,CAACG,SAAS,CAAe;EACpEC,KAAK,GAAU;IAAEC,QAAQ,EAAE;EAAM,CAAC;EAC1BC,UAAU,GAAyC,IAAI;EAE/D,OAAOC,wBAAwBA,CAACC,MAAa,EAAS;IACpD,OAAO;MAAEH,QAAQ,EAAE;IAAK,CAAC;EAC3B;EAEAI,iBAAiBA,CAACC,KAAY,EAAEC,SAA0B,EAAQ;IAChE,MAAMC,cAAc,GAAGD,SAAS,EAAEC,cAAc,IAAI,EAAE;IACtDX,MAAM,CAACY,IAAI,CACT,oBAAoB,EACpB,+BAA+BH,KAAK,CAACI,OAAO,KAAKF,cAAc,EACjE,CAAC;IACD,IAAI,CAACG,KAAK,CAACC,OAAO,GAAGN,KAAK,EAAEE,cAAc,CAAC;;IAE3C;IACA,IAAI,IAAI,CAACG,KAAK,CAACE,YAAY,EAAEC,OAAO,EAAEC,KAAK,EAAE;MAC3C,IAAI,CAACJ,KAAK,CAACE,YAAY,CAACC,OAAO,CAACC,KAAK,CAAC,cAAc,EAAE;QACpDL,OAAO,EAAEJ,KAAK,CAACI,OAAO;QACtBM,SAAS,EAAER,cAAc,EAAES,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAEC,IAAI,CAAC,CAAC,IAAI,SAAS;QAC9DC,MAAM,EAAE,IAAI,CAACR,KAAK,CAACE,YAAY,CAACC,OAAO,CAACK;MAC1C,CAAC,CAAC;IACJ;EACF;EAEAC,kBAAkBA,CAACC,UAAiB,EAAEC,SAAgB,EAAQ;IAC5D;IACA,IAAI,IAAI,CAACtB,KAAK,CAACC,QAAQ,IAAI,CAACqB,SAAS,CAACrB,QAAQ,EAAE;MAC9C,IAAI,CAACC,UAAU,GAAGqB,UAAU,CAAC,MAAM;QACjC,IAAI,CAACC,QAAQ,CAAC;UAAEvB,QAAQ,EAAE;QAAM,CAAC,CAAC;MACpC,CAAC,EAAE,EAAE,CAAC;IACR;EACF;EAEAwB,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,IAAI,CAACvB,UAAU,EAAE;MACnBwB,YAAY,CAAC,IAAI,CAACxB,UAAU,CAAC;IAC/B;EACF;EAEAyB,MAAMA,CAAA,EAAoB;IACxB,IAAI,IAAI,CAAC3B,KAAK,CAACC,QAAQ,EAAE;MACvB;MACA;MACA,OAAO,IAAI;IACb;IACA,OAAO,IAAI,CAACU,KAAK,CAACiB,QAAQ;EAC5B;AACF","ignoreList":[]}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useState, useRef } from 'react';
4
+ import { View, Text, StyleSheet, Animated, Pressable, DeviceEventEmitter } from 'react-native';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ export function HighlightOverlay() {
7
+ const [highlight, setHighlight] = useState(null);
8
+ const pulseAnim = useRef(new Animated.Value(1)).current;
9
+ const timerRef = useRef(null);
10
+ useEffect(() => {
11
+ const sub = DeviceEventEmitter.addListener('MOBILE_AI_HIGHLIGHT', data => {
12
+ if (timerRef.current) clearTimeout(timerRef.current);
13
+ setHighlight(data);
14
+ if (data) {
15
+ // Start pulsing ring
16
+ pulseAnim.setValue(1);
17
+ Animated.loop(Animated.sequence([Animated.timing(pulseAnim, {
18
+ toValue: 1.2,
19
+ duration: 800,
20
+ useNativeDriver: true
21
+ }), Animated.timing(pulseAnim, {
22
+ toValue: 1,
23
+ duration: 800,
24
+ useNativeDriver: true
25
+ })])).start();
26
+
27
+ // Auto-dismiss
28
+ const ms = data.autoRemoveAfterMs || 5000;
29
+ timerRef.current = setTimeout(() => {
30
+ setHighlight(null);
31
+ }, ms);
32
+ }
33
+ });
34
+ return () => sub.remove();
35
+ }, [pulseAnim]);
36
+ if (!highlight) return null;
37
+ const {
38
+ pageX,
39
+ pageY,
40
+ width,
41
+ height,
42
+ message
43
+ } = highlight;
44
+
45
+ // Calculate tooltip position (prefer top, fallback to bottom if too close to top edge)
46
+ const isTooHigh = pageY < 60;
47
+ const tooltipTop = isTooHigh ? pageY + height + 12 : pageY - 45;
48
+ return /*#__PURE__*/_jsxs(View, {
49
+ style: StyleSheet.absoluteFill,
50
+ pointerEvents: "box-none",
51
+ children: [/*#__PURE__*/_jsx(Pressable, {
52
+ style: StyleSheet.absoluteFill,
53
+ onPress: () => setHighlight(null)
54
+ }), /*#__PURE__*/_jsx(Animated.View, {
55
+ style: [styles.ring, {
56
+ left: pageX - 4,
57
+ top: pageY - 4,
58
+ width: width + 8,
59
+ height: height + 8,
60
+ transform: [{
61
+ scale: pulseAnim
62
+ }]
63
+ }],
64
+ pointerEvents: "none"
65
+ }), /*#__PURE__*/_jsxs(View, {
66
+ style: [styles.tooltip, {
67
+ top: tooltipTop
68
+ }],
69
+ pointerEvents: "none",
70
+ children: [/*#__PURE__*/_jsx(Text, {
71
+ style: styles.message,
72
+ children: message
73
+ }), /*#__PURE__*/_jsx(View, {
74
+ style: isTooHigh ? styles.arrowUp : styles.arrowDown
75
+ })]
76
+ })]
77
+ });
78
+ }
79
+ const styles = StyleSheet.create({
80
+ ring: {
81
+ position: 'absolute',
82
+ borderWidth: 3,
83
+ borderColor: '#007AFF',
84
+ // iOS blue
85
+ borderRadius: 8,
86
+ backgroundColor: 'rgba(0, 122, 255, 0.15)' // Very subtle fill
87
+ },
88
+ tooltip: {
89
+ position: 'absolute',
90
+ alignSelf: 'center',
91
+ backgroundColor: '#007AFF',
92
+ paddingHorizontal: 12,
93
+ paddingVertical: 8,
94
+ borderRadius: 8,
95
+ maxWidth: '80%',
96
+ shadowColor: '#000',
97
+ shadowOpacity: 0.2,
98
+ shadowOffset: {
99
+ width: 0,
100
+ height: 2
101
+ },
102
+ shadowRadius: 4,
103
+ elevation: 4
104
+ },
105
+ message: {
106
+ color: '#fff',
107
+ fontSize: 14,
108
+ fontWeight: 'bold',
109
+ textAlign: 'center'
110
+ },
111
+ arrowDown: {
112
+ position: 'absolute',
113
+ bottom: -6,
114
+ alignSelf: 'center',
115
+ width: 0,
116
+ height: 0,
117
+ borderLeftWidth: 6,
118
+ borderRightWidth: 6,
119
+ borderTopWidth: 6,
120
+ borderLeftColor: 'transparent',
121
+ borderRightColor: 'transparent',
122
+ borderTopColor: '#007AFF'
123
+ },
124
+ arrowUp: {
125
+ position: 'absolute',
126
+ top: -6,
127
+ alignSelf: 'center',
128
+ width: 0,
129
+ height: 0,
130
+ borderLeftWidth: 6,
131
+ borderRightWidth: 6,
132
+ borderBottomWidth: 6,
133
+ borderLeftColor: 'transparent',
134
+ borderRightColor: 'transparent',
135
+ borderBottomColor: '#007AFF'
136
+ }
137
+ });
138
+ //# sourceMappingURL=HighlightOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","useRef","View","Text","StyleSheet","Animated","Pressable","DeviceEventEmitter","jsx","_jsx","jsxs","_jsxs","HighlightOverlay","highlight","setHighlight","pulseAnim","Value","current","timerRef","sub","addListener","data","clearTimeout","setValue","loop","sequence","timing","toValue","duration","useNativeDriver","start","ms","autoRemoveAfterMs","setTimeout","remove","pageX","pageY","width","height","message","isTooHigh","tooltipTop","style","absoluteFill","pointerEvents","children","onPress","styles","ring","left","top","transform","scale","tooltip","arrowUp","arrowDown","create","position","borderWidth","borderColor","borderRadius","backgroundColor","alignSelf","paddingHorizontal","paddingVertical","maxWidth","shadowColor","shadowOpacity","shadowOffset","shadowRadius","elevation","color","fontSize","fontWeight","textAlign","bottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderLeftColor","borderRightColor","borderTopColor","borderBottomWidth","borderBottomColor"],"sourceRoot":"../../../src","sources":["components/HighlightOverlay.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect, useRef } from 'react';
4
+ import { View, Animated, StyleSheet, Text, Pressable } from 'react-native';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ export function ProactiveHint({
7
+ stage,
8
+ badgeText = "Need help?",
9
+ onDismiss,
10
+ children
11
+ }) {
12
+ const pulseAnim = useRef(new Animated.Value(1)).current;
13
+ const opacityAnim = useRef(new Animated.Value(0)).current;
14
+ const badgeScale = useRef(new Animated.Value(0)).current;
15
+ useEffect(() => {
16
+ // Pulse animation logic
17
+ if (stage === 'pulse') {
18
+ Animated.loop(Animated.sequence([Animated.parallel([Animated.timing(pulseAnim, {
19
+ toValue: 1.3,
20
+ duration: 1500,
21
+ useNativeDriver: true
22
+ }), Animated.timing(opacityAnim, {
23
+ toValue: 0,
24
+ duration: 1500,
25
+ useNativeDriver: true
26
+ })]), Animated.timing(pulseAnim, {
27
+ toValue: 1,
28
+ duration: 0,
29
+ useNativeDriver: true
30
+ }), Animated.timing(opacityAnim, {
31
+ toValue: 0.8,
32
+ duration: 0,
33
+ useNativeDriver: true
34
+ })])).start();
35
+ } else {
36
+ pulseAnim.stopAnimation();
37
+ opacityAnim.stopAnimation();
38
+ pulseAnim.setValue(1);
39
+ opacityAnim.setValue(0);
40
+ }
41
+
42
+ // Badge animation logic
43
+ if (stage === 'badge') {
44
+ Animated.spring(badgeScale, {
45
+ toValue: 1,
46
+ friction: 5,
47
+ tension: 100,
48
+ useNativeDriver: true
49
+ }).start();
50
+ } else {
51
+ badgeScale.setValue(0);
52
+ }
53
+ }, [stage, pulseAnim, opacityAnim, badgeScale]);
54
+ return /*#__PURE__*/_jsxs(View, {
55
+ style: styles.container,
56
+ children: [stage === 'badge' && /*#__PURE__*/_jsxs(Animated.View, {
57
+ style: [styles.badgeContainer, {
58
+ transform: [{
59
+ scale: badgeScale
60
+ }]
61
+ }],
62
+ children: [/*#__PURE__*/_jsx(Text, {
63
+ style: styles.badgeText,
64
+ children: badgeText
65
+ }), /*#__PURE__*/_jsx(Pressable, {
66
+ hitSlop: 10,
67
+ style: styles.closeButton,
68
+ onPress: onDismiss,
69
+ children: /*#__PURE__*/_jsx(Text, {
70
+ style: styles.closeText,
71
+ children: "\xD7"
72
+ })
73
+ })]
74
+ }), stage === 'pulse' && /*#__PURE__*/_jsx(Animated.View, {
75
+ style: [styles.pulseRing, {
76
+ transform: [{
77
+ scale: pulseAnim
78
+ }],
79
+ opacity: opacityAnim
80
+ }]
81
+ }), children]
82
+ });
83
+ }
84
+ const styles = StyleSheet.create({
85
+ container: {
86
+ alignItems: 'center',
87
+ justifyContent: 'center'
88
+ },
89
+ pulseRing: {
90
+ position: 'absolute',
91
+ width: 60,
92
+ height: 60,
93
+ borderRadius: 30,
94
+ backgroundColor: '#7B68EE'
95
+ },
96
+ badgeContainer: {
97
+ position: 'absolute',
98
+ bottom: 70,
99
+ // Float above the FAB
100
+ right: 0,
101
+ flexDirection: 'row',
102
+ alignItems: 'center',
103
+ backgroundColor: '#ffffff',
104
+ paddingHorizontal: 12,
105
+ paddingVertical: 8,
106
+ borderRadius: 20,
107
+ shadowColor: '#000',
108
+ shadowOffset: {
109
+ width: 0,
110
+ height: 2
111
+ },
112
+ shadowOpacity: 0.15,
113
+ shadowRadius: 4,
114
+ elevation: 4,
115
+ minWidth: 120
116
+ },
117
+ badgeText: {
118
+ color: '#333333',
119
+ fontSize: 14,
120
+ fontWeight: '500',
121
+ marginRight: 8
122
+ },
123
+ closeButton: {
124
+ justifyContent: 'center',
125
+ alignItems: 'center',
126
+ width: 20,
127
+ height: 20,
128
+ borderRadius: 10,
129
+ backgroundColor: '#f0f0f0'
130
+ },
131
+ closeText: {
132
+ fontSize: 14,
133
+ color: '#666',
134
+ fontWeight: 'bold',
135
+ marginTop: -2
136
+ }
137
+ });
138
+ //# sourceMappingURL=ProactiveHint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","useRef","View","Animated","StyleSheet","Text","Pressable","jsx","_jsx","jsxs","_jsxs","ProactiveHint","stage","badgeText","onDismiss","children","pulseAnim","Value","current","opacityAnim","badgeScale","loop","sequence","parallel","timing","toValue","duration","useNativeDriver","start","stopAnimation","setValue","spring","friction","tension","style","styles","container","badgeContainer","transform","scale","hitSlop","closeButton","onPress","closeText","pulseRing","opacity","create","alignItems","justifyContent","position","width","height","borderRadius","backgroundColor","bottom","right","flexDirection","paddingHorizontal","paddingVertical","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","minWidth","color","fontSize","fontWeight","marginRight","marginTop"],"sourceRoot":"../../../src","sources":["components/ProactiveHint.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ import { View, Text, StyleSheet } from 'react-native';
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ /**
6
+ * Built-in card template for AI injection.
7
+ *
8
+ * IMPORTANT: displayName must be set explicitly here.
9
+ * In production/minified builds, the function name is mangled (e.g. `a`, `b`),
10
+ * so `injectCardTool` cannot identify templates by inferred name alone.
11
+ * Always look up templates by `T.displayName`, never by `T.name`.
12
+ */
13
+ export function InfoCard({
14
+ title = 'Info',
15
+ body = '',
16
+ icon = 'ℹ️'
17
+ }) {
18
+ return /*#__PURE__*/_jsxs(View, {
19
+ style: styles.container,
20
+ children: [/*#__PURE__*/_jsx(Text, {
21
+ style: styles.icon,
22
+ children: icon
23
+ }), /*#__PURE__*/_jsxs(View, {
24
+ style: styles.content,
25
+ children: [/*#__PURE__*/_jsx(Text, {
26
+ style: styles.title,
27
+ children: title
28
+ }), body ? /*#__PURE__*/_jsx(Text, {
29
+ style: styles.body,
30
+ children: body
31
+ }) : null]
32
+ })]
33
+ });
34
+ }
35
+
36
+ // Must be explicit — minification mangles function.name in production builds.
37
+ InfoCard.displayName = 'InfoCard';
38
+ const styles = StyleSheet.create({
39
+ container: {
40
+ flexDirection: 'row',
41
+ alignItems: 'flex-start',
42
+ backgroundColor: '#f0f7ff',
43
+ borderRadius: 10,
44
+ padding: 12,
45
+ gap: 10
46
+ },
47
+ icon: {
48
+ fontSize: 22
49
+ },
50
+ content: {
51
+ flex: 1
52
+ },
53
+ title: {
54
+ fontWeight: '600',
55
+ fontSize: 14,
56
+ color: '#1a1a2e',
57
+ marginBottom: 2
58
+ },
59
+ body: {
60
+ fontSize: 13,
61
+ color: '#444',
62
+ lineHeight: 18
63
+ }
64
+ });
65
+ //# sourceMappingURL=InfoCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["View","Text","StyleSheet","jsx","_jsx","jsxs","_jsxs","InfoCard","title","body","icon","style","styles","container","children","content","displayName","create","flexDirection","alignItems","backgroundColor","borderRadius","padding","gap","fontSize","flex","fontWeight","color","marginBottom","lineHeight"],"sourceRoot":"../../../../src","sources":["components/cards/InfoCard.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAQtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAC;EAAEC,KAAK,GAAG,MAAM;EAAEC,IAAI,GAAG,EAAE;EAAEC,IAAI,GAAG;AAAoB,CAAC,EAAE;EAClF,oBACEJ,KAAA,CAACN,IAAI;IAACW,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC5BV,IAAA,CAACH,IAAI;MAACU,KAAK,EAAEC,MAAM,CAACF,IAAK;MAAAI,QAAA,EAAEJ;IAAI,CAAO,CAAC,eACvCJ,KAAA,CAACN,IAAI;MAACW,KAAK,EAAEC,MAAM,CAACG,OAAQ;MAAAD,QAAA,gBAC1BV,IAAA,CAACH,IAAI;QAACU,KAAK,EAAEC,MAAM,CAACJ,KAAM;QAAAM,QAAA,EAAEN;MAAK,CAAO,CAAC,EACxCC,IAAI,gBAAGL,IAAA,CAACH,IAAI;QAACU,KAAK,EAAEC,MAAM,CAACH,IAAK;QAAAK,QAAA,EAAEL;MAAI,CAAO,CAAC,GAAG,IAAI;IAAA,CAClD,CAAC;EAAA,CACH,CAAC;AAEX;;AAEA;AACAF,QAAQ,CAACS,WAAW,GAAG,UAAU;AAEjC,MAAMJ,MAAM,GAAGV,UAAU,CAACe,MAAM,CAAC;EAC/BJ,SAAS,EAAE;IACTK,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,YAAY;IACxBC,eAAe,EAAE,SAAS;IAC1BC,YAAY,EAAE,EAAE;IAChBC,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE;EACP,CAAC;EACDb,IAAI,EAAE;IACJc,QAAQ,EAAE;EACZ,CAAC;EACDT,OAAO,EAAE;IACPU,IAAI,EAAE;EACR,CAAC;EACDjB,KAAK,EAAE;IACLkB,UAAU,EAAE,KAAK;IACjBF,QAAQ,EAAE,EAAE;IACZG,KAAK,EAAE,SAAS;IAChBC,YAAY,EAAE;EAChB,CAAC;EACDnB,IAAI,EAAE;IACJe,QAAQ,EAAE,EAAE;IACZG,KAAK,EAAE,MAAM;IACbE,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ import { View, Text, StyleSheet } from 'react-native';
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ /**
6
+ * Built-in card template that shows a product/service review summary.
7
+ * Injected by the AI agent to surface social proof at decision points.
8
+ *
9
+ * IMPORTANT: displayName is set explicitly to survive minification.
10
+ * The injectCardTool resolves templates by `T.displayName`, not `T.name`.
11
+ */
12
+ export function ReviewSummary({
13
+ rating = 0,
14
+ reviewCount = 0,
15
+ headline = 'Customer Reviews',
16
+ sentiment = 'neutral'
17
+ }) {
18
+ const stars = Math.round(Math.min(5, Math.max(0, rating)));
19
+ const filled = '★'.repeat(stars);
20
+ const empty = '☆'.repeat(5 - stars);
21
+ const sentimentColor = {
22
+ positive: '#16a34a',
23
+ neutral: '#6b7280',
24
+ negative: '#dc2626'
25
+ };
26
+ return /*#__PURE__*/_jsxs(View, {
27
+ style: styles.container,
28
+ children: [/*#__PURE__*/_jsx(Text, {
29
+ style: styles.headline,
30
+ children: headline
31
+ }), /*#__PURE__*/_jsxs(View, {
32
+ style: styles.row,
33
+ children: [/*#__PURE__*/_jsxs(Text, {
34
+ style: [styles.stars, {
35
+ color: sentimentColor[sentiment]
36
+ }],
37
+ children: [filled, empty]
38
+ }), /*#__PURE__*/_jsxs(Text, {
39
+ style: styles.meta,
40
+ children: [rating.toFixed(1), " \xB7 ", reviewCount.toLocaleString(), " reviews"]
41
+ })]
42
+ })]
43
+ });
44
+ }
45
+
46
+ // Explicit — function.name is mangled in minified production builds.
47
+ ReviewSummary.displayName = 'ReviewSummary';
48
+ const styles = StyleSheet.create({
49
+ container: {
50
+ backgroundColor: '#fffbeb',
51
+ borderRadius: 10,
52
+ padding: 12
53
+ },
54
+ headline: {
55
+ fontWeight: '600',
56
+ fontSize: 13,
57
+ color: '#1a1a2e',
58
+ marginBottom: 6
59
+ },
60
+ row: {
61
+ flexDirection: 'row',
62
+ alignItems: 'center',
63
+ gap: 8
64
+ },
65
+ stars: {
66
+ fontSize: 18,
67
+ letterSpacing: 1
68
+ },
69
+ meta: {
70
+ fontSize: 12,
71
+ color: '#6b7280'
72
+ }
73
+ });
74
+ //# sourceMappingURL=ReviewSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["View","Text","StyleSheet","jsx","_jsx","jsxs","_jsxs","ReviewSummary","rating","reviewCount","headline","sentiment","stars","Math","round","min","max","filled","repeat","empty","sentimentColor","positive","neutral","negative","style","styles","container","children","row","color","meta","toFixed","toLocaleString","displayName","create","backgroundColor","borderRadius","padding","fontWeight","fontSize","marginBottom","flexDirection","alignItems","gap","letterSpacing"],"sourceRoot":"../../../../src","sources":["components/cards/ReviewSummary.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAStD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAC;EAC5BC,MAAM,GAAG,CAAC;EACVC,WAAW,GAAG,CAAC;EACfC,QAAQ,GAAG,kBAAkB;EAC7BC,SAAS,GAAG;AACM,CAAC,EAAE;EACrB,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEF,IAAI,CAACG,GAAG,CAAC,CAAC,EAAER,MAAM,CAAC,CAAC,CAAC;EAC1D,MAAMS,MAAM,GAAG,GAAG,CAACC,MAAM,CAACN,KAAK,CAAC;EAChC,MAAMO,KAAK,GAAG,GAAG,CAACD,MAAM,CAAC,CAAC,GAAGN,KAAK,CAAC;EAEnC,MAAMQ,cAAwE,GAAG;IAC/EC,QAAQ,EAAE,SAAS;IACnBC,OAAO,EAAE,SAAS;IAClBC,QAAQ,EAAE;EACZ,CAAC;EAED,oBACEjB,KAAA,CAACN,IAAI;IAACwB,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC5BvB,IAAA,CAACH,IAAI;MAACuB,KAAK,EAAEC,MAAM,CAACf,QAAS;MAAAiB,QAAA,EAAEjB;IAAQ,CAAO,CAAC,eAC/CJ,KAAA,CAACN,IAAI;MAACwB,KAAK,EAAEC,MAAM,CAACG,GAAI;MAAAD,QAAA,gBACtBrB,KAAA,CAACL,IAAI;QAACuB,KAAK,EAAE,CAACC,MAAM,CAACb,KAAK,EAAE;UAAEiB,KAAK,EAAET,cAAc,CAACT,SAAS;QAAE,CAAC,CAAE;QAAAgB,QAAA,GAC/DV,MAAM,EAAEE,KAAK;MAAA,CACV,CAAC,eACPb,KAAA,CAACL,IAAI;QAACuB,KAAK,EAAEC,MAAM,CAACK,IAAK;QAAAH,QAAA,GACtBnB,MAAM,CAACuB,OAAO,CAAC,CAAC,CAAC,EAAC,QAAG,EAACtB,WAAW,CAACuB,cAAc,CAAC,CAAC,EAAC,UACtD;MAAA,CAAM,CAAC;IAAA,CACH,CAAC;EAAA,CACH,CAAC;AAEX;;AAEA;AACAzB,aAAa,CAAC0B,WAAW,GAAG,eAAe;AAE3C,MAAMR,MAAM,GAAGvB,UAAU,CAACgC,MAAM,CAAC;EAC/BR,SAAS,EAAE;IACTS,eAAe,EAAE,SAAS;IAC1BC,YAAY,EAAE,EAAE;IAChBC,OAAO,EAAE;EACX,CAAC;EACD3B,QAAQ,EAAE;IACR4B,UAAU,EAAE,KAAK;IACjBC,QAAQ,EAAE,EAAE;IACZV,KAAK,EAAE,SAAS;IAChBW,YAAY,EAAE;EAChB,CAAC;EACDZ,GAAG,EAAE;IACHa,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,GAAG,EAAE;EACP,CAAC;EACD/B,KAAK,EAAE;IACL2B,QAAQ,EAAE,EAAE;IACZK,aAAa,EAAE;EACjB,CAAC;EACDd,IAAI,EAAE;IACJS,QAAQ,EAAE,EAAE;IACZV,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}