@vvedantb/native-ui 0.17.2 → 0.18.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 (220) hide show
  1. package/dist/AlertDialog.jsx +123 -0
  2. package/dist/AmbientBackground.jsx +73 -0
  3. package/dist/ArtifactList.jsx +59 -0
  4. package/dist/Avatar.jsx +285 -0
  5. package/dist/Badge.jsx +154 -0
  6. package/dist/BottomSheetContainer.jsx +208 -0
  7. package/dist/BulkActionBar.jsx +717 -0
  8. package/dist/Button.jsx +344 -0
  9. package/dist/CaptureButton.jsx +104 -0
  10. package/dist/Card.jsx +371 -0
  11. package/dist/Checkbox.jsx +177 -0
  12. package/dist/Chip.jsx +79 -0
  13. package/dist/ColorSwatches.jsx +159 -0
  14. package/dist/ConfirmDialog.jsx +157 -0
  15. package/dist/DateTimeField.jsx +204 -0
  16. package/dist/Dialog.jsx +614 -0
  17. package/dist/DividedList.jsx +120 -0
  18. package/dist/DropdownMenu.jsx +849 -0
  19. package/dist/EmptyState.jsx +434 -0
  20. package/dist/ExpoWebRoot.jsx +134 -0
  21. package/dist/FloatingFAB.jsx +95 -0
  22. package/dist/FloatingSurface.jsx +226 -0
  23. package/dist/FloatingTabBar.jsx +403 -0
  24. package/dist/HeaderIconButton.jsx +53 -0
  25. package/dist/IconButton.jsx +157 -0
  26. package/dist/Input.jsx +96 -0
  27. package/dist/Label.jsx +96 -0
  28. package/dist/LabeledSwitchRow.jsx +170 -0
  29. package/dist/LiquidGlass.jsx +2 -0
  30. package/dist/ListRow.jsx +281 -0
  31. package/dist/LoadingState.jsx +205 -0
  32. package/dist/PageIndicator.jsx +128 -0
  33. package/dist/PageTitle.jsx +205 -0
  34. package/dist/Pager.jsx +105 -0
  35. package/dist/PasswordInput.jsx +120 -0
  36. package/dist/PillTabs.jsx +300 -0
  37. package/dist/PinnedBotTile.jsx +212 -0
  38. package/dist/Progress.jsx +147 -0
  39. package/dist/SafeAreaContainer.jsx +38 -0
  40. package/dist/ScreenContainer.jsx +117 -0
  41. package/dist/SearchInput.jsx +150 -0
  42. package/dist/SectionLabel.jsx +128 -0
  43. package/dist/Select.jsx +223 -0
  44. package/dist/Separator.jsx +95 -0
  45. package/dist/Sheet.jsx +343 -0
  46. package/dist/SheetRow.jsx +198 -0
  47. package/dist/Skeleton.jsx +311 -0
  48. package/dist/Spinner.jsx +195 -0
  49. package/dist/StackPageHeader.jsx +160 -0
  50. package/dist/StatGrid.jsx +74 -0
  51. package/dist/StatusDot.jsx +129 -0
  52. package/dist/SurfaceRow.jsx +143 -0
  53. package/dist/SwipeableRow.jsx +50 -0
  54. package/dist/Switch.jsx +130 -0
  55. package/dist/Tabs.jsx +385 -0
  56. package/dist/Textarea.jsx +103 -0
  57. package/dist/ThemeToggle.jsx +78 -0
  58. package/dist/Toast.jsx +396 -0
  59. package/dist/ai/activity-step-detail.jsx +179 -0
  60. package/dist/ai/activity-step-label.js +816 -0
  61. package/dist/ai/activity-step-types.js +14 -0
  62. package/dist/ai/activity-step.jsx +98 -0
  63. package/dist/ai/activity-tasks-utils.js +172 -0
  64. package/dist/ai/activity-timeline.js +47 -0
  65. package/dist/ai/attachments.jsx +258 -0
  66. package/dist/ai/card-button.jsx +188 -0
  67. package/dist/ai/chain-of-thought.jsx +459 -0
  68. package/dist/ai/chat-jump-rail.jsx +57 -0
  69. package/dist/ai/chat-text.js +44 -0
  70. package/dist/ai/chat-thread.jsx +135 -0
  71. package/dist/ai/choice-question.jsx +925 -0
  72. package/dist/ai/code-block.jsx +574 -0
  73. package/dist/ai/collapsible.jsx +275 -0
  74. package/dist/ai/conversation.jsx +723 -0
  75. package/dist/ai/file-chip.jsx +198 -0
  76. package/dist/ai/icon-button.jsx +179 -0
  77. package/dist/ai/index.js +37 -0
  78. package/dist/ai/message-action-sheet.jsx +408 -0
  79. package/dist/ai/message-quote.jsx +241 -0
  80. package/dist/ai/message.jsx +739 -0
  81. package/dist/ai/prompt-input-menu.jsx +365 -0
  82. package/dist/ai/prompt-input.jsx +626 -0
  83. package/dist/ai/reasoning.jsx +446 -0
  84. package/dist/ai/reply-quote-chip.jsx +278 -0
  85. package/dist/ai/response-text.jsx +130 -0
  86. package/dist/ai/shimmer.jsx +149 -0
  87. package/dist/ai/sources.jsx +260 -0
  88. package/dist/ai/subagent-cards.jsx +645 -0
  89. package/dist/ai/suggestion.jsx +186 -0
  90. package/dist/ai/tool-approval-card.jsx +359 -0
  91. package/dist/ai/trace.jsx +728 -0
  92. package/dist/ai/unified-diff.jsx +280 -0
  93. package/dist/ai/use-streaming-disclosure.js +70 -0
  94. package/dist/auth/AuthProviders.jsx +27 -0
  95. package/dist/auth/AuthScreen.jsx +292 -0
  96. package/dist/auth/GoogleSignInButton.jsx +188 -0
  97. package/dist/auth/SecondFactorScreen.jsx +133 -0
  98. package/dist/auth/SignInScreen.jsx +482 -0
  99. package/dist/auth/authErrors.js +131 -0
  100. package/dist/auth/index.js +11 -0
  101. package/dist/auth/totp.js +378 -0
  102. package/dist/blur.js +36 -0
  103. package/dist/brand/AppIcons.jsx +118 -0
  104. package/dist/brand/AppMark.jsx +128 -0
  105. package/dist/brand/AppWordmark.jsx +138 -0
  106. package/dist/brand/GoogleMark.jsx +71 -0
  107. package/dist/brand/ProviderIcon.jsx +192 -0
  108. package/dist/brand/familyApps.js +33 -0
  109. package/dist/brand/index.js +11 -0
  110. package/dist/brand/svg.js +252 -0
  111. package/dist/brand/vProAppBenefits.js +19 -0
  112. package/dist/cn.js +5 -0
  113. package/dist/colors.js +15 -0
  114. package/dist/configureTheme.js +72 -0
  115. package/dist/controlStyles.js +520 -0
  116. package/dist/definiteSize.js +12 -0
  117. package/dist/dialogLayout.js +18 -0
  118. package/dist/entries/ai.js +4 -0
  119. package/dist/entries/ambient.js +3 -0
  120. package/dist/entries/auth.js +5 -0
  121. package/dist/entries/bottom-sheet.js +2 -0
  122. package/dist/entries/brand.js +2 -0
  123. package/dist/entries/button.js +2 -0
  124. package/dist/entries/date-time.js +3 -0
  125. package/dist/entries/expo-router.js +4 -0
  126. package/dist/entries/expo-web-root.js +3 -0
  127. package/dist/entries/floating.js +7 -0
  128. package/dist/entries/gesture-handler.js +4 -0
  129. package/dist/entries/keyboard-controller.js +4 -0
  130. package/dist/entries/layout.js +16 -0
  131. package/dist/entries/markdown.js +4 -0
  132. package/dist/entries/marketing.js +3 -0
  133. package/dist/entries/page-title.js +7 -0
  134. package/dist/entries/password-input.js +3 -0
  135. package/dist/entries/primitives.js +57 -0
  136. package/dist/entries/search-input.js +3 -0
  137. package/dist/entries/tab-bar.js +4 -0
  138. package/dist/entries/theme.js +7 -0
  139. package/dist/entries/toast.js +5 -0
  140. package/dist/entries/video.js +3 -0
  141. package/dist/entries/webview.js +4 -0
  142. package/dist/examples/AiChatGallery.jsx +509 -0
  143. package/dist/examples/ParityGallery.jsx +1307 -0
  144. package/dist/floating.js +62 -0
  145. package/dist/glassBlur.jsx +145 -0
  146. package/dist/gradient.js +17 -0
  147. package/dist/haptics.js +44 -0
  148. package/dist/highlight.js +382 -0
  149. package/dist/index.js +85 -0
  150. package/dist/initials.js +4 -0
  151. package/dist/loadingGrid.js +81 -0
  152. package/dist/markdown/Markdown.jsx +515 -0
  153. package/dist/markdown/MarkdownTable.jsx +443 -0
  154. package/dist/markdown/tableText.js +68 -0
  155. package/dist/marketing/PricingModal.jsx +608 -0
  156. package/dist/marketing/UpgradeToProCard.jsx +164 -0
  157. package/dist/marketing/pricing.js +34 -0
  158. package/dist/media/ImageGallery.jsx +580 -0
  159. package/dist/media/MediaCard.jsx +162 -0
  160. package/dist/media/imageGrid.js +54 -0
  161. package/dist/motion.js +33 -0
  162. package/dist/pagerSwipe.js +104 -0
  163. package/dist/palette.js +104 -0
  164. package/dist/primitives/button.jsx +127 -0
  165. package/dist/primitives/card.jsx +249 -0
  166. package/dist/primitives/icon.jsx +37 -0
  167. package/dist/primitives/input.jsx +56 -0
  168. package/dist/primitives/keyboard-controller.jsx +207 -0
  169. package/dist/primitives/keyboard-parts.jsx +75 -0
  170. package/dist/primitives/native-only-animated-view.jsx +68 -0
  171. package/dist/primitives/overlay.jsx +391 -0
  172. package/dist/primitives/pager-gesture.jsx +131 -0
  173. package/dist/primitives/select-host.jsx +103 -0
  174. package/dist/primitives/select.jsx +555 -0
  175. package/dist/primitives/sheet-drag.jsx +420 -0
  176. package/dist/primitives/sheet-gesture.jsx +219 -0
  177. package/dist/primitives/swipe-row-gesture.jsx +341 -0
  178. package/dist/primitives/switch.jsx +105 -0
  179. package/dist/primitives/text.jsx +145 -0
  180. package/dist/primitives/toast-drag-gesture.jsx +94 -0
  181. package/dist/primitives/use-controllable-state.js +40 -0
  182. package/dist/primitives/web-click-guard.js +69 -0
  183. package/dist/push.js +166 -0
  184. package/dist/relativeTime.js +70 -0
  185. package/dist/router/RouterStackPageHeader.jsx +53 -0
  186. package/dist/selectA11y.js +32 -0
  187. package/dist/settings/MoreFromProjectV.jsx +168 -0
  188. package/dist/settings/SettingsEmptyState.jsx +102 -0
  189. package/dist/settings/SettingsField.jsx +49 -0
  190. package/dist/settings/SettingsSection.jsx +101 -0
  191. package/dist/settings/SettingsStack.jsx +17 -0
  192. package/dist/settings/SettingsToggleRow.jsx +163 -0
  193. package/dist/settings/projectVMobileApps.js +126 -0
  194. package/dist/settings/relaxedSizeStyle.js +11 -0
  195. package/dist/sheetDrag.js +76 -0
  196. package/dist/svgA11y.js +46 -0
  197. package/dist/swipeRow.js +161 -0
  198. package/dist/tabBarRoutes.js +41 -0
  199. package/dist/tabIndicator.js +139 -0
  200. package/dist/tailwind-preset.cjs +255 -0
  201. package/dist/tailwind-preset.d.cts +55 -0
  202. package/dist/theme.jsx +62 -0
  203. package/dist/toastChrome.js +110 -0
  204. package/dist/toastDrag.js +51 -0
  205. package/dist/toastStore.js +54 -0
  206. package/dist/tokens.js +70 -0
  207. package/dist/typography.js +40 -0
  208. package/dist/useReduceMotion.js +32 -0
  209. package/dist/useReduceTransparency.js +27 -0
  210. package/dist/useScheme.js +15 -0
  211. package/dist/video/InlineVideo.jsx +115 -0
  212. package/dist/webview/HtmlView.jsx +169 -0
  213. package/dist/webview/HtmlView.web.jsx +63 -0
  214. package/dist/webview/htmlView.js +43 -0
  215. package/package.json +70 -33
  216. package/src/DropdownMenu.tsx +28 -16
  217. package/src/FloatingTabBar.tsx +78 -41
  218. package/src/ai/conversation.tsx +12 -8
  219. package/src/glassBlur.tsx +47 -22
  220. package/src/primitives/swipe-row-gesture.tsx +11 -2
@@ -0,0 +1,645 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Text, View } from "react-native";
3
+ import { IconRobot } from "@tabler/icons-react-native";
4
+ import { cn } from "../cn";
5
+ import { cardStyle, sizeStyle, textStyle, typeStyle } from "../controlStyles";
6
+ import { palette, withAlpha } from "../palette";
7
+ import { useLargerText } from "../theme";
8
+ import { tokens } from "../tokens";
9
+ import { useScheme } from "../useScheme";
10
+ import { Spinner } from "../Spinner";
11
+ import { CardButton } from "./card-button";
12
+ import { chatTextSize, formatElapsed, MONO_FONT } from "./chat-text";
13
+ import { Collapsible, CollapsibleChevron, CollapsibleContent, CollapsibleTrigger, useCollapsible } from "./collapsible";
14
+ import { ResponseText } from "./response-text";
15
+ const STATUS_LABEL = {
16
+ queued: "Queued",
17
+ running: "Running",
18
+ done: "Done",
19
+ failed: "Failed",
20
+ cancelled: "Cancelled",
21
+ timed_out: "Timed out"
22
+ };
23
+
24
+ /** Pill colours per status. Text and border share one hue, the fill is a wash of it. */
25
+ export function subagentStatusColors(status, scheme) {
26
+ const hex = status === "running" || status === "queued" ? palette.primary[scheme] : status === "done" ? palette.success[scheme] : status === "failed" || status === "timed_out" ? palette.danger[scheme] : tokens.color.muted[scheme];
27
+ return {
28
+ color: hex,
29
+ borderColor: withAlpha(hex, 0.25),
30
+ backgroundColor: withAlpha(hex, 0.12)
31
+ };
32
+ }
33
+ function StatusPill(t0) {
34
+ const $ = _c(39);
35
+ const {
36
+ status,
37
+ testID
38
+ } = t0;
39
+ const scheme = useScheme();
40
+ const largerText = useLargerText();
41
+ let T0;
42
+ let T1;
43
+ let colors;
44
+ let t1;
45
+ let t2;
46
+ let t3;
47
+ let t4;
48
+ let t5;
49
+ let t6;
50
+ let t7;
51
+ if ($[0] !== largerText || $[1] !== scheme || $[2] !== status || $[3] !== testID) {
52
+ const caption = chatTextSize("caption", largerText);
53
+ let t8;
54
+ if ($[14] !== scheme || $[15] !== status) {
55
+ t8 = subagentStatusColors(status, scheme);
56
+ $[14] = scheme;
57
+ $[15] = status;
58
+ $[16] = t8;
59
+ } else {
60
+ t8 = $[16];
61
+ }
62
+ colors = t8;
63
+ T1 = View;
64
+ t3 = testID;
65
+ t4 = true;
66
+ t5 = `Status: ${STATUS_LABEL[status]}`;
67
+ t6 = "rounded-full border px-2.5 py-0.5";
68
+ if ($[17] !== colors.backgroundColor || $[18] !== colors.borderColor) {
69
+ t7 = {
70
+ borderColor: colors.borderColor,
71
+ backgroundColor: colors.backgroundColor
72
+ };
73
+ $[17] = colors.backgroundColor;
74
+ $[18] = colors.borderColor;
75
+ $[19] = t7;
76
+ } else {
77
+ t7 = $[19];
78
+ }
79
+ T0 = Text;
80
+ t2 = cn(caption, "font-instrument-sans-semibold");
81
+ t1 = sizeStyle(caption);
82
+ $[0] = largerText;
83
+ $[1] = scheme;
84
+ $[2] = status;
85
+ $[3] = testID;
86
+ $[4] = T0;
87
+ $[5] = T1;
88
+ $[6] = colors;
89
+ $[7] = t1;
90
+ $[8] = t2;
91
+ $[9] = t3;
92
+ $[10] = t4;
93
+ $[11] = t5;
94
+ $[12] = t6;
95
+ $[13] = t7;
96
+ } else {
97
+ T0 = $[4];
98
+ T1 = $[5];
99
+ colors = $[6];
100
+ t1 = $[7];
101
+ t2 = $[8];
102
+ t3 = $[9];
103
+ t4 = $[10];
104
+ t5 = $[11];
105
+ t6 = $[12];
106
+ t7 = $[13];
107
+ }
108
+ let t8;
109
+ if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
110
+ t8 = typeStyle("semibold");
111
+ $[20] = t8;
112
+ } else {
113
+ t8 = $[20];
114
+ }
115
+ let t9;
116
+ if ($[21] !== colors.color) {
117
+ t9 = {
118
+ color: colors.color
119
+ };
120
+ $[21] = colors.color;
121
+ $[22] = t9;
122
+ } else {
123
+ t9 = $[22];
124
+ }
125
+ let t10;
126
+ if ($[23] !== t1 || $[24] !== t9) {
127
+ t10 = [t1, t8, t9];
128
+ $[23] = t1;
129
+ $[24] = t9;
130
+ $[25] = t10;
131
+ } else {
132
+ t10 = $[25];
133
+ }
134
+ const t11 = STATUS_LABEL[status];
135
+ let t12;
136
+ if ($[26] !== T0 || $[27] !== t10 || $[28] !== t11 || $[29] !== t2) {
137
+ t12 = <T0 className={t2} style={t10}>{t11}</T0>;
138
+ $[26] = T0;
139
+ $[27] = t10;
140
+ $[28] = t11;
141
+ $[29] = t2;
142
+ $[30] = t12;
143
+ } else {
144
+ t12 = $[30];
145
+ }
146
+ let t13;
147
+ if ($[31] !== T1 || $[32] !== t12 || $[33] !== t3 || $[34] !== t4 || $[35] !== t5 || $[36] !== t6 || $[37] !== t7) {
148
+ t13 = <T1 testID={t3} accessible={t4} accessibilityLabel={t5} className={t6} style={t7}>{t12}</T1>;
149
+ $[31] = T1;
150
+ $[32] = t12;
151
+ $[33] = t3;
152
+ $[34] = t4;
153
+ $[35] = t5;
154
+ $[36] = t6;
155
+ $[37] = t7;
156
+ $[38] = t13;
157
+ } else {
158
+ t13 = $[38];
159
+ }
160
+ return t13;
161
+ }
162
+ /** A subagent run: title, status pill, elapsed time, and Cancel while it runs. */
163
+ export function SubagentRunCard(t0) {
164
+ const $ = _c(76);
165
+ const {
166
+ title,
167
+ status,
168
+ elapsedSeconds,
169
+ onCancel,
170
+ statusLine,
171
+ error,
172
+ avatar,
173
+ className,
174
+ testID: t1
175
+ } = t0;
176
+ const testID = t1 === undefined ? "subagent-run-card" : t1;
177
+ const scheme = useScheme();
178
+ const largerText = useLargerText();
179
+ let T0;
180
+ let elapsed;
181
+ let small;
182
+ let t2;
183
+ let t3;
184
+ let t4;
185
+ let t5;
186
+ let t6;
187
+ let t7;
188
+ let t8;
189
+ if ($[0] !== avatar || $[1] !== className || $[2] !== elapsedSeconds || $[3] !== largerText || $[4] !== scheme || $[5] !== status || $[6] !== statusLine || $[7] !== testID || $[8] !== title) {
190
+ const body = chatTextSize("body", largerText);
191
+ small = chatTextSize("small", largerText);
192
+ let t9;
193
+ if ($[19] !== elapsedSeconds) {
194
+ t9 = elapsedSeconds == null ? null : formatElapsed(elapsedSeconds);
195
+ $[19] = elapsedSeconds;
196
+ $[20] = t9;
197
+ } else {
198
+ t9 = $[20];
199
+ }
200
+ elapsed = t9;
201
+ T0 = View;
202
+ t2 = testID;
203
+ t3 = false;
204
+ t4 = `Subagent ${title}, ${STATUS_LABEL[status]}`;
205
+ if ($[21] !== className) {
206
+ t5 = cn("w-full gap-3 p-4", className);
207
+ $[21] = className;
208
+ $[22] = t5;
209
+ } else {
210
+ t5 = $[22];
211
+ }
212
+ if ($[23] !== scheme) {
213
+ t6 = cardStyle(scheme);
214
+ $[23] = scheme;
215
+ $[24] = t6;
216
+ } else {
217
+ t6 = $[24];
218
+ }
219
+ let t10;
220
+ if ($[25] !== avatar || $[26] !== largerText || $[27] !== scheme || $[28] !== status) {
221
+ t10 = status === "queued" || status === "running" ? <Spinner size="sm" decorative={true} /> : avatar ?? <IconRobot size={largerText ? 22 : 18} color={tokens.color.muted[scheme]} />;
222
+ $[25] = avatar;
223
+ $[26] = largerText;
224
+ $[27] = scheme;
225
+ $[28] = status;
226
+ $[29] = t10;
227
+ } else {
228
+ t10 = $[29];
229
+ }
230
+ const t11 = cn(body, "min-w-0 flex-1 font-instrument-sans-semibold");
231
+ const t12 = sizeStyle(body);
232
+ let t13;
233
+ if ($[30] === Symbol.for("react.memo_cache_sentinel")) {
234
+ t13 = typeStyle("semibold");
235
+ $[30] = t13;
236
+ } else {
237
+ t13 = $[30];
238
+ }
239
+ let t14;
240
+ if ($[31] !== scheme) {
241
+ t14 = textStyle("foreground", scheme);
242
+ $[31] = scheme;
243
+ $[32] = t14;
244
+ } else {
245
+ t14 = $[32];
246
+ }
247
+ let t15;
248
+ if ($[33] !== t12 || $[34] !== t14) {
249
+ t15 = [t12, t13, t14];
250
+ $[33] = t12;
251
+ $[34] = t14;
252
+ $[35] = t15;
253
+ } else {
254
+ t15 = $[35];
255
+ }
256
+ let t16;
257
+ if ($[36] !== t11 || $[37] !== t15 || $[38] !== title) {
258
+ t16 = <Text numberOfLines={2} className={t11} style={t15}>{title}</Text>;
259
+ $[36] = t11;
260
+ $[37] = t15;
261
+ $[38] = title;
262
+ $[39] = t16;
263
+ } else {
264
+ t16 = $[39];
265
+ }
266
+ const t17 = `${testID}-status`;
267
+ let t18;
268
+ if ($[40] !== status || $[41] !== t17) {
269
+ t18 = <StatusPill status={status} testID={t17} />;
270
+ $[40] = status;
271
+ $[41] = t17;
272
+ $[42] = t18;
273
+ } else {
274
+ t18 = $[42];
275
+ }
276
+ if ($[43] !== t10 || $[44] !== t16 || $[45] !== t18) {
277
+ t7 = <View className="flex-row items-center gap-2">{t10}{t16}{t18}</View>;
278
+ $[43] = t10;
279
+ $[44] = t16;
280
+ $[45] = t18;
281
+ $[46] = t7;
282
+ } else {
283
+ t7 = $[46];
284
+ }
285
+ t8 = statusLine ? <Text testID={`${testID}-status-line`} className={small} style={[sizeStyle(small), textStyle("muted", scheme)]}>{statusLine}</Text> : null;
286
+ $[0] = avatar;
287
+ $[1] = className;
288
+ $[2] = elapsedSeconds;
289
+ $[3] = largerText;
290
+ $[4] = scheme;
291
+ $[5] = status;
292
+ $[6] = statusLine;
293
+ $[7] = testID;
294
+ $[8] = title;
295
+ $[9] = T0;
296
+ $[10] = elapsed;
297
+ $[11] = small;
298
+ $[12] = t2;
299
+ $[13] = t3;
300
+ $[14] = t4;
301
+ $[15] = t5;
302
+ $[16] = t6;
303
+ $[17] = t7;
304
+ $[18] = t8;
305
+ } else {
306
+ T0 = $[9];
307
+ elapsed = $[10];
308
+ small = $[11];
309
+ t2 = $[12];
310
+ t3 = $[13];
311
+ t4 = $[14];
312
+ t5 = $[15];
313
+ t6 = $[16];
314
+ t7 = $[17];
315
+ t8 = $[18];
316
+ }
317
+ let t9;
318
+ if ($[47] !== error || $[48] !== scheme || $[49] !== small || $[50] !== testID) {
319
+ t9 = error ? <Text testID={`${testID}-error`} className={small} style={[sizeStyle(small), {
320
+ color: palette.danger[scheme]
321
+ }]}>{error}</Text> : null;
322
+ $[47] = error;
323
+ $[48] = scheme;
324
+ $[49] = small;
325
+ $[50] = testID;
326
+ $[51] = t9;
327
+ } else {
328
+ t9 = $[51];
329
+ }
330
+ let t10;
331
+ if ($[52] !== elapsed || $[53] !== scheme || $[54] !== small || $[55] !== testID) {
332
+ t10 = elapsed ? <Text testID={`${testID}-elapsed`} accessibilityLabel={`Elapsed ${elapsed}`} className={small} style={[sizeStyle(small), textStyle("muted", scheme), {
333
+ fontVariant: ["tabular-nums"]
334
+ }]}>{elapsed}</Text> : <View />;
335
+ $[52] = elapsed;
336
+ $[53] = scheme;
337
+ $[54] = small;
338
+ $[55] = testID;
339
+ $[56] = t10;
340
+ } else {
341
+ t10 = $[56];
342
+ }
343
+ let t11;
344
+ if ($[57] !== onCancel || $[58] !== status || $[59] !== testID || $[60] !== title) {
345
+ t11 = (status === "running" || status === "queued") && onCancel ? <CardButton testID={`${testID}-cancel`} label="Cancel" accessibilityLabel={`Cancel ${title}`} variant="outline" onPress={onCancel} /> : null;
346
+ $[57] = onCancel;
347
+ $[58] = status;
348
+ $[59] = testID;
349
+ $[60] = title;
350
+ $[61] = t11;
351
+ } else {
352
+ t11 = $[61];
353
+ }
354
+ let t12;
355
+ if ($[62] !== t10 || $[63] !== t11) {
356
+ t12 = <View className="flex-row flex-wrap items-center justify-between gap-2">{t10}{t11}</View>;
357
+ $[62] = t10;
358
+ $[63] = t11;
359
+ $[64] = t12;
360
+ } else {
361
+ t12 = $[64];
362
+ }
363
+ let t13;
364
+ if ($[65] !== T0 || $[66] !== t12 || $[67] !== t2 || $[68] !== t3 || $[69] !== t4 || $[70] !== t5 || $[71] !== t6 || $[72] !== t7 || $[73] !== t8 || $[74] !== t9) {
365
+ t13 = <T0 testID={t2} accessible={t3} accessibilityLabel={t4} className={t5} style={t6}>{t7}{t8}{t9}{t12}</T0>;
366
+ $[65] = T0;
367
+ $[66] = t12;
368
+ $[67] = t2;
369
+ $[68] = t3;
370
+ $[69] = t4;
371
+ $[70] = t5;
372
+ $[71] = t6;
373
+ $[72] = t7;
374
+ $[73] = t8;
375
+ $[74] = t9;
376
+ $[75] = t13;
377
+ } else {
378
+ t13 = $[75];
379
+ }
380
+ return t13;
381
+ }
382
+ /** A subagent's result: the summary, and the detail behind a "Show details" fold. */
383
+ export function SubagentResultCard(t0) {
384
+ const $ = _c(65);
385
+ const {
386
+ title,
387
+ summary,
388
+ detail,
389
+ approvalPending: t1,
390
+ approvalPendingIn,
391
+ handoffs,
392
+ avatar,
393
+ defaultOpen: t2,
394
+ open,
395
+ onOpenChange,
396
+ className,
397
+ testID: t3
398
+ } = t0;
399
+ const approvalPending = t1 === undefined ? false : t1;
400
+ const defaultOpen = t2 === undefined ? false : t2;
401
+ const testID = t3 === undefined ? "subagent-result-card" : t3;
402
+ const scheme = useScheme();
403
+ const largerText = useLargerText();
404
+ let T0;
405
+ let small;
406
+ let t10;
407
+ let t11;
408
+ let t12;
409
+ let t4;
410
+ let t5;
411
+ let t6;
412
+ let t7;
413
+ let t8;
414
+ let t9;
415
+ if ($[0] !== approvalPending || $[1] !== approvalPendingIn || $[2] !== avatar || $[3] !== className || $[4] !== defaultOpen || $[5] !== largerText || $[6] !== onOpenChange || $[7] !== open || $[8] !== scheme || $[9] !== summary || $[10] !== testID || $[11] !== title) {
416
+ const body = chatTextSize("body", largerText);
417
+ small = chatTextSize("small", largerText);
418
+ T0 = Collapsible;
419
+ t4 = testID;
420
+ t5 = defaultOpen;
421
+ t6 = open;
422
+ t7 = onOpenChange;
423
+ if ($[23] !== className) {
424
+ t8 = cn("w-full gap-2 p-4", className);
425
+ $[23] = className;
426
+ $[24] = t8;
427
+ } else {
428
+ t8 = $[24];
429
+ }
430
+ if ($[25] !== scheme) {
431
+ t9 = cardStyle(scheme);
432
+ $[25] = scheme;
433
+ $[26] = t9;
434
+ } else {
435
+ t9 = $[26];
436
+ }
437
+ const t13 = cn(body, "min-w-0 flex-1 font-instrument-sans-semibold");
438
+ const t14 = sizeStyle(body);
439
+ let t15;
440
+ if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
441
+ t15 = typeStyle("semibold");
442
+ $[27] = t15;
443
+ } else {
444
+ t15 = $[27];
445
+ }
446
+ let t16;
447
+ if ($[28] !== scheme) {
448
+ t16 = textStyle("foreground", scheme);
449
+ $[28] = scheme;
450
+ $[29] = t16;
451
+ } else {
452
+ t16 = $[29];
453
+ }
454
+ let t17;
455
+ if ($[30] !== t14 || $[31] !== t16) {
456
+ t17 = [t14, t15, t16];
457
+ $[30] = t14;
458
+ $[31] = t16;
459
+ $[32] = t17;
460
+ } else {
461
+ t17 = $[32];
462
+ }
463
+ let t18;
464
+ if ($[33] !== t13 || $[34] !== t17 || $[35] !== title) {
465
+ t18 = <Text numberOfLines={2} className={t13} style={t17}>{title}</Text>;
466
+ $[33] = t13;
467
+ $[34] = t17;
468
+ $[35] = title;
469
+ $[36] = t18;
470
+ } else {
471
+ t18 = $[36];
472
+ }
473
+ if ($[37] !== avatar || $[38] !== t18) {
474
+ t10 = <View className="flex-row items-center gap-2">{avatar}{t18}</View>;
475
+ $[37] = avatar;
476
+ $[38] = t18;
477
+ $[39] = t10;
478
+ } else {
479
+ t10 = $[39];
480
+ }
481
+ if ($[40] !== summary) {
482
+ t11 = <ResponseText>{summary}</ResponseText>;
483
+ $[40] = summary;
484
+ $[41] = t11;
485
+ } else {
486
+ t11 = $[41];
487
+ }
488
+ t12 = approvalPending ? <Text testID={`${testID}-approval-pending`} className={small} style={[sizeStyle(small), {
489
+ color: palette.warning[scheme]
490
+ }]}>{`Approval pending in ${approvalPendingIn ? `${approvalPendingIn}'s` : "the other bot's"} chat.`}</Text> : null;
491
+ $[0] = approvalPending;
492
+ $[1] = approvalPendingIn;
493
+ $[2] = avatar;
494
+ $[3] = className;
495
+ $[4] = defaultOpen;
496
+ $[5] = largerText;
497
+ $[6] = onOpenChange;
498
+ $[7] = open;
499
+ $[8] = scheme;
500
+ $[9] = summary;
501
+ $[10] = testID;
502
+ $[11] = title;
503
+ $[12] = T0;
504
+ $[13] = small;
505
+ $[14] = t10;
506
+ $[15] = t11;
507
+ $[16] = t12;
508
+ $[17] = t4;
509
+ $[18] = t5;
510
+ $[19] = t6;
511
+ $[20] = t7;
512
+ $[21] = t8;
513
+ $[22] = t9;
514
+ } else {
515
+ T0 = $[12];
516
+ small = $[13];
517
+ t10 = $[14];
518
+ t11 = $[15];
519
+ t12 = $[16];
520
+ t4 = $[17];
521
+ t5 = $[18];
522
+ t6 = $[19];
523
+ t7 = $[20];
524
+ t8 = $[21];
525
+ t9 = $[22];
526
+ }
527
+ let t13;
528
+ if ($[42] !== handoffs || $[43] !== scheme || $[44] !== small || $[45] !== testID) {
529
+ t13 = handoffs && handoffs.length > 0 ? <View testID={`${testID}-handoffs`} className="gap-1"><Text className={small} style={[sizeStyle(small), textStyle("muted", scheme)]}>Proposed actions</Text>{handoffs.map((handoff, index) => <Text key={`${handoff.toolName}-${index}`} testID={`${testID}-handoff-${index}`} className={small} style={[sizeStyle(small), textStyle("muted", scheme), {
530
+ fontFamily: MONO_FONT
531
+ }]}>{`${handoff.toolName}${handoff.server ? ` via ${handoff.server}` : ""}: ${handoff.argsSummary}`}</Text>)}</View> : null;
532
+ $[42] = handoffs;
533
+ $[43] = scheme;
534
+ $[44] = small;
535
+ $[45] = testID;
536
+ $[46] = t13;
537
+ } else {
538
+ t13 = $[46];
539
+ }
540
+ let t14;
541
+ if ($[47] !== detail || $[48] !== small || $[49] !== testID || $[50] !== title) {
542
+ t14 = detail ? <><CollapsibleTrigger testID={`${testID}-trigger`} accessibilityLabel={`Details for ${title}`} className="min-h-11 flex-row items-center gap-1.5 self-start"><ToggleLabel small={small} /></CollapsibleTrigger><CollapsibleContent testID={`${testID}-detail`}><ResponseText>{detail}</ResponseText></CollapsibleContent></> : null;
543
+ $[47] = detail;
544
+ $[48] = small;
545
+ $[49] = testID;
546
+ $[50] = title;
547
+ $[51] = t14;
548
+ } else {
549
+ t14 = $[51];
550
+ }
551
+ let t15;
552
+ if ($[52] !== T0 || $[53] !== t10 || $[54] !== t11 || $[55] !== t12 || $[56] !== t13 || $[57] !== t14 || $[58] !== t4 || $[59] !== t5 || $[60] !== t6 || $[61] !== t7 || $[62] !== t8 || $[63] !== t9) {
553
+ t15 = <T0 testID={t4} defaultOpen={t5} open={t6} onOpenChange={t7} className={t8} style={t9}>{t10}{t11}{t12}{t13}{t14}</T0>;
554
+ $[52] = T0;
555
+ $[53] = t10;
556
+ $[54] = t11;
557
+ $[55] = t12;
558
+ $[56] = t13;
559
+ $[57] = t14;
560
+ $[58] = t4;
561
+ $[59] = t5;
562
+ $[60] = t6;
563
+ $[61] = t7;
564
+ $[62] = t8;
565
+ $[63] = t9;
566
+ $[64] = t15;
567
+ } else {
568
+ t15 = $[64];
569
+ }
570
+ return t15;
571
+ }
572
+ function ToggleLabel(t0) {
573
+ const $ = _c(19);
574
+ const {
575
+ small
576
+ } = t0;
577
+ const {
578
+ open
579
+ } = useCollapsible();
580
+ const scheme = useScheme();
581
+ let t1;
582
+ if ($[0] !== small) {
583
+ t1 = cn(small, "font-instrument-sans");
584
+ $[0] = small;
585
+ $[1] = t1;
586
+ } else {
587
+ t1 = $[1];
588
+ }
589
+ let t2;
590
+ if ($[2] !== small) {
591
+ t2 = sizeStyle(small);
592
+ $[2] = small;
593
+ $[3] = t2;
594
+ } else {
595
+ t2 = $[3];
596
+ }
597
+ let t3;
598
+ if ($[4] !== scheme) {
599
+ t3 = textStyle("muted", scheme);
600
+ $[4] = scheme;
601
+ $[5] = t3;
602
+ } else {
603
+ t3 = $[5];
604
+ }
605
+ let t4;
606
+ if ($[6] !== t2 || $[7] !== t3) {
607
+ t4 = [t2, t3];
608
+ $[6] = t2;
609
+ $[7] = t3;
610
+ $[8] = t4;
611
+ } else {
612
+ t4 = $[8];
613
+ }
614
+ const t5 = open ? "Hide details" : "Show details";
615
+ let t6;
616
+ if ($[9] !== t1 || $[10] !== t4 || $[11] !== t5) {
617
+ t6 = <Text className={t1} style={t4}>{t5}</Text>;
618
+ $[9] = t1;
619
+ $[10] = t4;
620
+ $[11] = t5;
621
+ $[12] = t6;
622
+ } else {
623
+ t6 = $[12];
624
+ }
625
+ const t7 = tokens.color.muted[scheme];
626
+ let t8;
627
+ if ($[13] !== open || $[14] !== t7) {
628
+ t8 = <CollapsibleChevron open={open} size={14} color={t7} />;
629
+ $[13] = open;
630
+ $[14] = t7;
631
+ $[15] = t8;
632
+ } else {
633
+ t8 = $[15];
634
+ }
635
+ let t9;
636
+ if ($[16] !== t6 || $[17] !== t8) {
637
+ t9 = <>{t6}{t8}</>;
638
+ $[16] = t6;
639
+ $[17] = t8;
640
+ $[18] = t9;
641
+ } else {
642
+ t9 = $[18];
643
+ }
644
+ return t9;
645
+ }