@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,728 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { createContext, useContext } from "react";
3
+ import { Pressable, Text, View } from "react-native";
4
+ import { cn } from "../cn";
5
+ import { sizeStyle } from "../controlStyles";
6
+ import { palette } from "../palette";
7
+ import { useLargerText } from "../theme";
8
+ import { tokens } from "../tokens";
9
+ import { useScheme } from "../useScheme";
10
+ import { chatTextSize, formatElapsed } from "./chat-text";
11
+ import { Collapsible, CollapsibleChevron, CollapsibleContent, CollapsibleTrigger, useCollapsible } from "./collapsible";
12
+ import { ResponseText } from "./response-text";
13
+ import { Shimmer } from "./shimmer";
14
+
15
+ // One agent step as one line: icon, title, optional faded description and an
16
+ // optional fold. Reasoning, tool calls, grouped calls and to-dos can all
17
+ // render through these parts, as on the web (`trace.tsx`). The web icon
18
+ // crossfade (`iconKey`) is not ported: the icon swaps at once.
19
+
20
+ /** Text and icon colour of a line: muted, or the danger colour for an error (web `text-destructive`). */
21
+ export function traceLineColor(status, scheme) {
22
+ return status === "error" ? palette.danger[scheme] : tokens.color.muted[scheme];
23
+ }
24
+
25
+ // Native text and icons do not inherit a colour, so the line hands its own down.
26
+ const TraceLineColorContext = createContext(undefined);
27
+ function useTraceColor() {
28
+ const scheme = useScheme();
29
+ return useContext(TraceLineColorContext) ?? tokens.color.muted[scheme];
30
+ }
31
+
32
+ /**
33
+ * A column of trace lines (web `flex w-full flex-col gap-2`). Each line is 28
34
+ * high (its `py-1` around the 20 text) with no gap, so the rows keep the web
35
+ * 28 pitch and each is its whole tap area, without slop over its neighbours.
36
+ */
37
+ export function AgentTrace(t0) {
38
+ const $ = _c(8);
39
+ let className;
40
+ let props;
41
+ if ($[0] !== t0) {
42
+ ({
43
+ className,
44
+ ...props
45
+ } = t0);
46
+ $[0] = t0;
47
+ $[1] = className;
48
+ $[2] = props;
49
+ } else {
50
+ className = $[1];
51
+ props = $[2];
52
+ }
53
+ let t1;
54
+ if ($[3] !== className) {
55
+ t1 = cn("w-full min-w-0", className);
56
+ $[3] = className;
57
+ $[4] = t1;
58
+ } else {
59
+ t1 = $[4];
60
+ }
61
+ let t2;
62
+ if ($[5] !== props || $[6] !== t1) {
63
+ t2 = <View className={t1} {...props} />;
64
+ $[5] = props;
65
+ $[6] = t1;
66
+ $[7] = t2;
67
+ } else {
68
+ t2 = $[7];
69
+ }
70
+ return t2;
71
+ }
72
+ /** One line, 28 high (`py-1`): a row of icon, title and description. `pending` fades it to 60%, `error` turns it the danger colour. */
73
+ export function AgentTraceLine(t0) {
74
+ const $ = _c(22);
75
+ let className;
76
+ let props;
77
+ let status;
78
+ let style;
79
+ if ($[0] !== t0) {
80
+ ({
81
+ status,
82
+ className,
83
+ style,
84
+ ...props
85
+ } = t0);
86
+ $[0] = t0;
87
+ $[1] = className;
88
+ $[2] = props;
89
+ $[3] = status;
90
+ $[4] = style;
91
+ } else {
92
+ className = $[1];
93
+ props = $[2];
94
+ status = $[3];
95
+ style = $[4];
96
+ }
97
+ const scheme = useScheme();
98
+ let t1;
99
+ if ($[5] !== scheme || $[6] !== status) {
100
+ t1 = traceLineColor(status, scheme);
101
+ $[5] = scheme;
102
+ $[6] = status;
103
+ $[7] = t1;
104
+ } else {
105
+ t1 = $[7];
106
+ }
107
+ let t2;
108
+ if ($[8] !== className) {
109
+ t2 = cn("min-w-0 max-w-full shrink flex-row items-center gap-2 py-1", className);
110
+ $[8] = className;
111
+ $[9] = t2;
112
+ } else {
113
+ t2 = $[9];
114
+ }
115
+ let t3;
116
+ if ($[10] !== status) {
117
+ t3 = status === "pending" ? {
118
+ opacity: 0.6
119
+ } : null;
120
+ $[10] = status;
121
+ $[11] = t3;
122
+ } else {
123
+ t3 = $[11];
124
+ }
125
+ let t4;
126
+ if ($[12] !== style || $[13] !== t3) {
127
+ t4 = [t3, style];
128
+ $[12] = style;
129
+ $[13] = t3;
130
+ $[14] = t4;
131
+ } else {
132
+ t4 = $[14];
133
+ }
134
+ let t5;
135
+ if ($[15] !== props || $[16] !== t2 || $[17] !== t4) {
136
+ t5 = <View className={t2} style={t4} {...props} />;
137
+ $[15] = props;
138
+ $[16] = t2;
139
+ $[17] = t4;
140
+ $[18] = t5;
141
+ } else {
142
+ t5 = $[18];
143
+ }
144
+ let t6;
145
+ if ($[19] !== t1 || $[20] !== t5) {
146
+ t6 = <TraceLineColorContext.Provider value={t1}>{t5}</TraceLineColorContext.Provider>;
147
+ $[19] = t1;
148
+ $[20] = t5;
149
+ $[21] = t6;
150
+ } else {
151
+ t6 = $[21];
152
+ }
153
+ return t6;
154
+ }
155
+ /** The 16 icon box at the start of a line. Hidden from assistive tech, as the web `aria-hidden`. */
156
+ export function AgentTraceIcon(t0) {
157
+ const $ = _c(13);
158
+ const {
159
+ icon: Icon,
160
+ children,
161
+ className
162
+ } = t0;
163
+ const color = useTraceColor();
164
+ const largerText = useLargerText();
165
+ const size = largerText ? 20 : 16;
166
+ let t1;
167
+ if ($[0] !== className) {
168
+ t1 = cn("shrink-0 items-center justify-center", className);
169
+ $[0] = className;
170
+ $[1] = t1;
171
+ } else {
172
+ t1 = $[1];
173
+ }
174
+ let t2;
175
+ if ($[2] !== size) {
176
+ t2 = {
177
+ width: size,
178
+ height: size
179
+ };
180
+ $[2] = size;
181
+ $[3] = t2;
182
+ } else {
183
+ t2 = $[3];
184
+ }
185
+ let t3;
186
+ if ($[4] !== Icon || $[5] !== children || $[6] !== color || $[7] !== size) {
187
+ t3 = Icon ? <Icon size={size} color={color} /> : children;
188
+ $[4] = Icon;
189
+ $[5] = children;
190
+ $[6] = color;
191
+ $[7] = size;
192
+ $[8] = t3;
193
+ } else {
194
+ t3 = $[8];
195
+ }
196
+ let t4;
197
+ if ($[9] !== t1 || $[10] !== t2 || $[11] !== t3) {
198
+ t4 = <View accessibilityElementsHidden={true} importantForAccessibility="no-hide-descendants" className={t1} style={t2}>{t3}</View>;
199
+ $[9] = t1;
200
+ $[10] = t2;
201
+ $[11] = t3;
202
+ $[12] = t4;
203
+ } else {
204
+ t4 = $[12];
205
+ }
206
+ return t4;
207
+ }
208
+ /** The step title, on one line, cut off at the end. */
209
+ export function AgentTraceTitle(t0) {
210
+ const $ = _c(20);
211
+ const {
212
+ children,
213
+ shimmer: t1,
214
+ className
215
+ } = t0;
216
+ const shimmer = t1 === undefined ? false : t1;
217
+ const color = useTraceColor();
218
+ const largerText = useLargerText();
219
+ if (shimmer) {
220
+ let t2;
221
+ if ($[0] !== children || $[1] !== className) {
222
+ t2 = <Shimmer duration={2.5} numberOfLines={1} className={className}>{children}</Shimmer>;
223
+ $[0] = children;
224
+ $[1] = className;
225
+ $[2] = t2;
226
+ } else {
227
+ t2 = $[2];
228
+ }
229
+ return t2;
230
+ }
231
+ let T0;
232
+ let t2;
233
+ let t3;
234
+ let t4;
235
+ if ($[3] !== className || $[4] !== largerText) {
236
+ const size = chatTextSize("small", largerText);
237
+ T0 = Text;
238
+ t3 = 1;
239
+ t4 = cn(size, "min-w-0 shrink font-instrument-sans", className);
240
+ t2 = sizeStyle(size);
241
+ $[3] = className;
242
+ $[4] = largerText;
243
+ $[5] = T0;
244
+ $[6] = t2;
245
+ $[7] = t3;
246
+ $[8] = t4;
247
+ } else {
248
+ T0 = $[5];
249
+ t2 = $[6];
250
+ t3 = $[7];
251
+ t4 = $[8];
252
+ }
253
+ let t5;
254
+ if ($[9] !== color) {
255
+ t5 = {
256
+ color
257
+ };
258
+ $[9] = color;
259
+ $[10] = t5;
260
+ } else {
261
+ t5 = $[10];
262
+ }
263
+ let t6;
264
+ if ($[11] !== t2 || $[12] !== t5) {
265
+ t6 = [t2, t5];
266
+ $[11] = t2;
267
+ $[12] = t5;
268
+ $[13] = t6;
269
+ } else {
270
+ t6 = $[13];
271
+ }
272
+ let t7;
273
+ if ($[14] !== T0 || $[15] !== children || $[16] !== t3 || $[17] !== t4 || $[18] !== t6) {
274
+ t7 = <T0 numberOfLines={t3} className={t4} style={t6}>{children}</T0>;
275
+ $[14] = T0;
276
+ $[15] = children;
277
+ $[16] = t3;
278
+ $[17] = t4;
279
+ $[18] = t6;
280
+ $[19] = t7;
281
+ } else {
282
+ t7 = $[19];
283
+ }
284
+ return t7;
285
+ }
286
+
287
+ /** Faded detail after the title, such as "3 files" or "12s", in tabular figures (web `opacity-70 tabular-nums`). */
288
+ export function AgentTraceDescription(t0) {
289
+ const $ = _c(18);
290
+ const {
291
+ children,
292
+ className
293
+ } = t0;
294
+ const color = useTraceColor();
295
+ const largerText = useLargerText();
296
+ let T0;
297
+ let t1;
298
+ let t2;
299
+ let t3;
300
+ if ($[0] !== className || $[1] !== largerText) {
301
+ const size = chatTextSize("small", largerText);
302
+ T0 = Text;
303
+ t2 = 1;
304
+ t3 = cn(size, "shrink-0 font-instrument-sans", className);
305
+ t1 = sizeStyle(size);
306
+ $[0] = className;
307
+ $[1] = largerText;
308
+ $[2] = T0;
309
+ $[3] = t1;
310
+ $[4] = t2;
311
+ $[5] = t3;
312
+ } else {
313
+ T0 = $[2];
314
+ t1 = $[3];
315
+ t2 = $[4];
316
+ t3 = $[5];
317
+ }
318
+ let t4;
319
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
320
+ t4 = ["tabular-nums"];
321
+ $[6] = t4;
322
+ } else {
323
+ t4 = $[6];
324
+ }
325
+ let t5;
326
+ if ($[7] !== color) {
327
+ t5 = {
328
+ color,
329
+ opacity: 0.7,
330
+ fontVariant: t4
331
+ };
332
+ $[7] = color;
333
+ $[8] = t5;
334
+ } else {
335
+ t5 = $[8];
336
+ }
337
+ let t6;
338
+ if ($[9] !== t1 || $[10] !== t5) {
339
+ t6 = [t1, t5];
340
+ $[9] = t1;
341
+ $[10] = t5;
342
+ $[11] = t6;
343
+ } else {
344
+ t6 = $[11];
345
+ }
346
+ let t7;
347
+ if ($[12] !== T0 || $[13] !== children || $[14] !== t2 || $[15] !== t3 || $[16] !== t6) {
348
+ t7 = <T0 numberOfLines={t2} className={t3} style={t6}>{children}</T0>;
349
+ $[12] = T0;
350
+ $[13] = children;
351
+ $[14] = t2;
352
+ $[15] = t3;
353
+ $[16] = t6;
354
+ $[17] = t7;
355
+ } else {
356
+ t7 = $[17];
357
+ }
358
+ return t7;
359
+ }
360
+
361
+ /** A line with a fold (web `flex w-full min-w-0 flex-col`). Spread `useStreamingDisclosure(isStreaming)` on it to follow a stream. */
362
+ export function AgentTraceCollapsible(t0) {
363
+ const $ = _c(8);
364
+ let className;
365
+ let props;
366
+ if ($[0] !== t0) {
367
+ ({
368
+ className,
369
+ ...props
370
+ } = t0);
371
+ $[0] = t0;
372
+ $[1] = className;
373
+ $[2] = props;
374
+ } else {
375
+ className = $[1];
376
+ props = $[2];
377
+ }
378
+ let t1;
379
+ if ($[3] !== className) {
380
+ t1 = cn("w-full min-w-0", className);
381
+ $[3] = className;
382
+ $[4] = t1;
383
+ } else {
384
+ t1 = $[4];
385
+ }
386
+ let t2;
387
+ if ($[5] !== props || $[6] !== t1) {
388
+ t2 = <Collapsible className={t1} {...props} />;
389
+ $[5] = props;
390
+ $[6] = t1;
391
+ $[7] = t2;
392
+ } else {
393
+ t2 = $[7];
394
+ }
395
+ return t2;
396
+ }
397
+ /** No slop: the 28 high line is the whole target, as trace lines stack with no gap. */
398
+ const LINE_SLOP = {
399
+ top: 0,
400
+ bottom: 0,
401
+ left: 0,
402
+ right: 0
403
+ };
404
+
405
+ /** The chevron's slop: 4 back toward the line, 14 on past it (a 34 wide target), none above or below. */
406
+ const CHEVRON_SLOP = {
407
+ top: 0,
408
+ bottom: 0,
409
+ left: 4,
410
+ right: 14
411
+ };
412
+
413
+ /**
414
+ * The line as a toggle, with a chevron after it that turns down when open.
415
+ * The trigger stretches to the line's 28 height and takes no slop above or
416
+ * below, so a tap under one line never opens the next.
417
+ */
418
+ export function AgentTraceCollapsibleTrigger(t0) {
419
+ const $ = _c(32);
420
+ let children;
421
+ let className;
422
+ let props;
423
+ let trailing;
424
+ if ($[0] !== t0) {
425
+ ({
426
+ children,
427
+ trailing,
428
+ className,
429
+ ...props
430
+ } = t0);
431
+ $[0] = t0;
432
+ $[1] = children;
433
+ $[2] = className;
434
+ $[3] = props;
435
+ $[4] = trailing;
436
+ } else {
437
+ children = $[1];
438
+ className = $[2];
439
+ props = $[3];
440
+ trailing = $[4];
441
+ }
442
+ const {
443
+ open,
444
+ setOpen
445
+ } = useCollapsible();
446
+ const scheme = useScheme();
447
+ const largerText = useLargerText();
448
+ const iconSize = largerText ? 20 : 16;
449
+ const t1 = tokens.color.muted[scheme];
450
+ let t2;
451
+ if ($[5] !== iconSize || $[6] !== open || $[7] !== t1) {
452
+ t2 = <CollapsibleChevron open={open} variant="right" size={iconSize} color={t1} />;
453
+ $[5] = iconSize;
454
+ $[6] = open;
455
+ $[7] = t1;
456
+ $[8] = t2;
457
+ } else {
458
+ t2 = $[8];
459
+ }
460
+ const chevron = t2;
461
+ if (trailing === undefined) {
462
+ let t3;
463
+ if ($[9] !== className) {
464
+ t3 = cn("max-w-full flex-row items-center gap-1 self-start", className);
465
+ $[9] = className;
466
+ $[10] = t3;
467
+ } else {
468
+ t3 = $[10];
469
+ }
470
+ let t4;
471
+ if ($[11] !== chevron || $[12] !== children || $[13] !== props || $[14] !== t3) {
472
+ t4 = <CollapsibleTrigger hitSlop={LINE_SLOP} className={t3} {...props}>{children}{chevron}</CollapsibleTrigger>;
473
+ $[11] = chevron;
474
+ $[12] = children;
475
+ $[13] = props;
476
+ $[14] = t3;
477
+ $[15] = t4;
478
+ } else {
479
+ t4 = $[15];
480
+ }
481
+ return t4;
482
+ }
483
+ let t3;
484
+ if ($[16] !== className) {
485
+ t3 = cn("max-w-full flex-row items-center gap-2 self-start", className);
486
+ $[16] = className;
487
+ $[17] = t3;
488
+ } else {
489
+ t3 = $[17];
490
+ }
491
+ let t4;
492
+ if ($[18] !== children || $[19] !== props) {
493
+ t4 = <CollapsibleTrigger hitSlop={LINE_SLOP} className="min-w-0 shrink flex-row items-center self-stretch" {...props}>{children}</CollapsibleTrigger>;
494
+ $[18] = children;
495
+ $[19] = props;
496
+ $[20] = t4;
497
+ } else {
498
+ t4 = $[20];
499
+ }
500
+ let t5;
501
+ if ($[21] !== open || $[22] !== setOpen) {
502
+ t5 = () => setOpen(!open);
503
+ $[21] = open;
504
+ $[22] = setOpen;
505
+ $[23] = t5;
506
+ } else {
507
+ t5 = $[23];
508
+ }
509
+ let t6;
510
+ if ($[24] !== chevron || $[25] !== t5) {
511
+ t6 = <Pressable accessible={false} importantForAccessibility="no-hide-descendants" hitSlop={CHEVRON_SLOP} onPress={t5} className="self-stretch justify-center">{chevron}</Pressable>;
512
+ $[24] = chevron;
513
+ $[25] = t5;
514
+ $[26] = t6;
515
+ } else {
516
+ t6 = $[26];
517
+ }
518
+ let t7;
519
+ if ($[27] !== t3 || $[28] !== t4 || $[29] !== t6 || $[30] !== trailing) {
520
+ t7 = <View className={t3}>{t4}{trailing}{t6}</View>;
521
+ $[27] = t3;
522
+ $[28] = t4;
523
+ $[29] = t6;
524
+ $[30] = trailing;
525
+ $[31] = t7;
526
+ } else {
527
+ t7 = $[31];
528
+ }
529
+ return t7;
530
+ }
531
+
532
+ /**
533
+ * The folded body, indented behind a rail that starts under the centre of the
534
+ * line icon (web `ml-[calc(--spacing(2)-1px)] border-l pl-4`). A string child
535
+ * is drawn as muted `ResponseText`.
536
+ */
537
+ export function AgentTraceCollapsibleContent(t0) {
538
+ const $ = _c(20);
539
+ let children;
540
+ let className;
541
+ let props;
542
+ let style;
543
+ if ($[0] !== t0) {
544
+ ({
545
+ children,
546
+ className,
547
+ style,
548
+ ...props
549
+ } = t0);
550
+ $[0] = t0;
551
+ $[1] = children;
552
+ $[2] = className;
553
+ $[3] = props;
554
+ $[4] = style;
555
+ } else {
556
+ children = $[1];
557
+ className = $[2];
558
+ props = $[3];
559
+ style = $[4];
560
+ }
561
+ const scheme = useScheme();
562
+ const largerText = useLargerText();
563
+ const iconSize = largerText ? 20 : 16;
564
+ let t1;
565
+ if ($[5] !== className) {
566
+ t1 = cn("mb-2 mt-1 min-w-0 pl-4 pr-1", className);
567
+ $[5] = className;
568
+ $[6] = t1;
569
+ } else {
570
+ t1 = $[6];
571
+ }
572
+ const t2 = iconSize / 2 - 1;
573
+ const t3 = tokens.color.border[scheme];
574
+ let t4;
575
+ if ($[7] !== t2 || $[8] !== t3) {
576
+ t4 = {
577
+ marginLeft: t2,
578
+ borderLeftWidth: 1,
579
+ borderLeftColor: t3
580
+ };
581
+ $[7] = t2;
582
+ $[8] = t3;
583
+ $[9] = t4;
584
+ } else {
585
+ t4 = $[9];
586
+ }
587
+ let t5;
588
+ if ($[10] !== style || $[11] !== t4) {
589
+ t5 = [t4, style];
590
+ $[10] = style;
591
+ $[11] = t4;
592
+ $[12] = t5;
593
+ } else {
594
+ t5 = $[12];
595
+ }
596
+ let t6;
597
+ if ($[13] !== children) {
598
+ t6 = typeof children === "string" ? <ResponseText size="small" tone="muted">{children}</ResponseText> : children;
599
+ $[13] = children;
600
+ $[14] = t6;
601
+ } else {
602
+ t6 = $[14];
603
+ }
604
+ let t7;
605
+ if ($[15] !== props || $[16] !== t1 || $[17] !== t5 || $[18] !== t6) {
606
+ t7 = <CollapsibleContent><View className={t1} style={t5} {...props}>{t6}</View></CollapsibleContent>;
607
+ $[15] = props;
608
+ $[16] = t1;
609
+ $[17] = t5;
610
+ $[18] = t6;
611
+ $[19] = t7;
612
+ } else {
613
+ t7 = $[19];
614
+ }
615
+ return t7;
616
+ }
617
+ /**
618
+ * A settled turn folded behind one line, as the web `ActivityTasks` in its
619
+ * folded (Codex-style) mode: "Worked for …" over a hairline
620
+ * 6 below the text (web `border-b border-border pb-1.5`: the line's own 4 and
621
+ * 2 more), closed by default, and the steps in an
622
+ * `AgentTrace` 8 below when open.
623
+ */
624
+ export function AgentTraceFold(t0) {
625
+ const $ = _c(27);
626
+ let children;
627
+ let className;
628
+ let duration;
629
+ let props;
630
+ let seconds;
631
+ let t1;
632
+ if ($[0] !== t0) {
633
+ ({
634
+ seconds,
635
+ duration,
636
+ children,
637
+ defaultOpen: t1,
638
+ className,
639
+ ...props
640
+ } = t0);
641
+ $[0] = t0;
642
+ $[1] = children;
643
+ $[2] = className;
644
+ $[3] = duration;
645
+ $[4] = props;
646
+ $[5] = seconds;
647
+ $[6] = t1;
648
+ } else {
649
+ children = $[1];
650
+ className = $[2];
651
+ duration = $[3];
652
+ props = $[4];
653
+ seconds = $[5];
654
+ t1 = $[6];
655
+ }
656
+ const defaultOpen = t1 === undefined ? false : t1;
657
+ const scheme = useScheme();
658
+ let t2;
659
+ if ($[7] !== duration || $[8] !== seconds) {
660
+ t2 = duration ?? formatElapsed(seconds ?? 0);
661
+ $[7] = duration;
662
+ $[8] = seconds;
663
+ $[9] = t2;
664
+ } else {
665
+ t2 = $[9];
666
+ }
667
+ const elapsed = t2;
668
+ let t3;
669
+ if ($[10] !== className) {
670
+ t3 = cn("w-full min-w-0", className);
671
+ $[10] = className;
672
+ $[11] = t3;
673
+ } else {
674
+ t3 = $[11];
675
+ }
676
+ const t4 = tokens.color.border[scheme];
677
+ let t5;
678
+ if ($[12] !== t4) {
679
+ t5 = {
680
+ borderBottomWidth: 1,
681
+ borderBottomColor: t4,
682
+ paddingBottom: 2
683
+ };
684
+ $[12] = t4;
685
+ $[13] = t5;
686
+ } else {
687
+ t5 = $[13];
688
+ }
689
+ const t6 = `Worked for ${elapsed}`;
690
+ let t7;
691
+ if ($[14] !== t6) {
692
+ t7 = <AgentTraceCollapsibleTrigger><AgentTraceLine><AgentTraceTitle>{t6}</AgentTraceTitle></AgentTraceLine></AgentTraceCollapsibleTrigger>;
693
+ $[14] = t6;
694
+ $[15] = t7;
695
+ } else {
696
+ t7 = $[15];
697
+ }
698
+ let t8;
699
+ if ($[16] !== t5 || $[17] !== t7) {
700
+ t8 = <View style={t5}>{t7}</View>;
701
+ $[16] = t5;
702
+ $[17] = t7;
703
+ $[18] = t8;
704
+ } else {
705
+ t8 = $[18];
706
+ }
707
+ let t9;
708
+ if ($[19] !== children) {
709
+ t9 = <CollapsibleContent><AgentTrace className="mt-1">{children}</AgentTrace></CollapsibleContent>;
710
+ $[19] = children;
711
+ $[20] = t9;
712
+ } else {
713
+ t9 = $[20];
714
+ }
715
+ let t10;
716
+ if ($[21] !== defaultOpen || $[22] !== props || $[23] !== t3 || $[24] !== t8 || $[25] !== t9) {
717
+ t10 = <Collapsible className={t3} defaultOpen={defaultOpen} {...props}>{t8}{t9}</Collapsible>;
718
+ $[21] = defaultOpen;
719
+ $[22] = props;
720
+ $[23] = t3;
721
+ $[24] = t8;
722
+ $[25] = t9;
723
+ $[26] = t10;
724
+ } else {
725
+ t10 = $[26];
726
+ }
727
+ return t10;
728
+ }