@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,365 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Children, useEffect } from "react";
3
+ import { BackHandler, Pressable, ScrollView, Text, View, useWindowDimensions } from "react-native";
4
+ import { cn } from "../cn";
5
+ import { MIN_TOUCH_TARGET, sizeStyle, textStyle, touchSlop, 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
+
11
+ /**
12
+ * The web panel picker height (`computePanelPopupPlacement`): at most 340 and
13
+ * at least 160, here a share of the window, as a phone has the keyboard up.
14
+ */
15
+ export const PROMPT_INPUT_MENU = {
16
+ maxHeight: 340,
17
+ minHeight: 160,
18
+ windowShare: 0.35
19
+ };
20
+
21
+ /** Menu height for a window height: the share, kept inside the web's 160 to 340. */
22
+ export function promptInputMenuHeight(windowHeight) {
23
+ return Math.round(Math.max(PROMPT_INPUT_MENU.minHeight, Math.min(PROMPT_INPUT_MENU.maxHeight, windowHeight * PROMPT_INPUT_MENU.windowShare)));
24
+ }
25
+ /**
26
+ * The web `@` / `/` picker (`MentionPickerPopup`, `panel` layout) for touch:
27
+ * the composer's full width, docked right above the field, so it rides the
28
+ * keyboard with it. Give it to `PromptInput` as `menu`. The popover surface
29
+ * (`rounded-surface bg-popover`, the field border in place of the web shadow
30
+ * ring, as the AI parts draw no shadow) holds a `py-1` list that scrolls past
31
+ * `promptInputMenuHeight`. Taps reach a row while the keyboard
32
+ * is up, so picking never drops the keyboard.
33
+ */
34
+ export function PromptInputMenu(t0) {
35
+ const $ = _c(21);
36
+ const {
37
+ title,
38
+ children,
39
+ empty: t1,
40
+ onDismiss,
41
+ testID
42
+ } = t0;
43
+ const empty = t1 === undefined ? "No matches." : t1;
44
+ const scheme = useScheme();
45
+ let t2;
46
+ let t3;
47
+ if ($[0] !== onDismiss) {
48
+ t2 = () => {
49
+ if (!onDismiss) {
50
+ return;
51
+ }
52
+ const subscription = BackHandler.addEventListener("hardwareBackPress", () => {
53
+ onDismiss();
54
+ return true;
55
+ });
56
+ return () => subscription.remove();
57
+ };
58
+ t3 = [onDismiss];
59
+ $[0] = onDismiss;
60
+ $[1] = t2;
61
+ $[2] = t3;
62
+ } else {
63
+ t2 = $[1];
64
+ t3 = $[2];
65
+ }
66
+ useEffect(t2, t3);
67
+ const {
68
+ height
69
+ } = useWindowDimensions();
70
+ let t4;
71
+ if ($[3] !== children) {
72
+ t4 = Children.toArray(children);
73
+ $[3] = children;
74
+ $[4] = t4;
75
+ } else {
76
+ t4 = $[4];
77
+ }
78
+ const hasRows = t4.length > 0;
79
+ const t5 = palette.overlay[scheme];
80
+ const t6 = tokens.color.border[scheme];
81
+ let t7;
82
+ if ($[5] !== height) {
83
+ t7 = promptInputMenuHeight(height);
84
+ $[5] = height;
85
+ $[6] = t7;
86
+ } else {
87
+ t7 = $[6];
88
+ }
89
+ let t8;
90
+ if ($[7] !== t5 || $[8] !== t6 || $[9] !== t7) {
91
+ t8 = {
92
+ backgroundColor: t5,
93
+ borderColor: t6,
94
+ borderRadius: tokens.radius.lg,
95
+ maxHeight: t7
96
+ };
97
+ $[7] = t5;
98
+ $[8] = t6;
99
+ $[9] = t7;
100
+ $[10] = t8;
101
+ } else {
102
+ t8 = $[10];
103
+ }
104
+ let t9;
105
+ if ($[11] !== children || $[12] !== empty || $[13] !== hasRows || $[14] !== scheme || $[15] !== title) {
106
+ t9 = hasRows ? <ScrollView accessibilityRole="list" accessibilityLabel={title} keyboardShouldPersistTaps="always" contentContainerClassName="py-1">{children}</ScrollView> : <Text className="px-3 py-2.5 font-instrument-sans text-xs" style={[sizeStyle("text-xs", "relaxed"), textStyle("muted", scheme)]}>{empty}</Text>;
107
+ $[11] = children;
108
+ $[12] = empty;
109
+ $[13] = hasRows;
110
+ $[14] = scheme;
111
+ $[15] = title;
112
+ $[16] = t9;
113
+ } else {
114
+ t9 = $[16];
115
+ }
116
+ let t10;
117
+ if ($[17] !== t8 || $[18] !== t9 || $[19] !== testID) {
118
+ t10 = <View testID={testID} className="overflow-hidden border" style={t8}>{t9}</View>;
119
+ $[17] = t8;
120
+ $[18] = t9;
121
+ $[19] = testID;
122
+ $[20] = t10;
123
+ } else {
124
+ t10 = $[20];
125
+ }
126
+ return t10;
127
+ }
128
+
129
+ /** Web badge chip: `rounded-md bg-muted px-1.5 py-0.5 text-3xs font-medium` (10). */
130
+ const BADGE_TEXT = {
131
+ fontSize: 10,
132
+ lineHeight: 12
133
+ };
134
+ /** A description longer than this is cut with "…", as the web `previewOneLine`. */
135
+ const DESCRIPTION_MAX = 72;
136
+ function oneLine(text) {
137
+ const line = text.replace(/\s+/g, " ").trim();
138
+ return line.length <= DESCRIPTION_MAX ? line : `${line.slice(0, DESCRIPTION_MAX - 1)}…`;
139
+ }
140
+
141
+ /**
142
+ * One picker row, the web `MentionRow` in its option button
143
+ * (`mx-1 rounded-lg px-2 text-sm`), at least 44 high. `selected` takes the
144
+ * web `bg-primary/15` (`/25` dark) and a medium label; a press fades to 70%,
145
+ * as the composer chips, in place of the web hover fill.
146
+ */
147
+ export function PromptInputMenuItem(t0) {
148
+ const $ = _c(62);
149
+ const {
150
+ prefix,
151
+ label,
152
+ description,
153
+ leading,
154
+ trailing,
155
+ badge,
156
+ badgeIcon,
157
+ selected: t1,
158
+ onPress,
159
+ testID
160
+ } = t0;
161
+ const selected = t1 === undefined ? false : t1;
162
+ const scheme = useScheme();
163
+ const largerText = useLargerText();
164
+ let t2;
165
+ if ($[0] !== scheme) {
166
+ t2 = textStyle("muted", scheme);
167
+ $[0] = scheme;
168
+ $[1] = t2;
169
+ } else {
170
+ t2 = $[1];
171
+ }
172
+ const muted = t2;
173
+ const t3 = largerText ? "text-lg" : "text-sm";
174
+ let t4;
175
+ if ($[2] !== t3) {
176
+ t4 = sizeStyle(t3);
177
+ $[2] = t3;
178
+ $[3] = t4;
179
+ } else {
180
+ t4 = $[3];
181
+ }
182
+ const labelSize = t4;
183
+ let t5;
184
+ if ($[4] !== description) {
185
+ t5 = description ? oneLine(description) : undefined;
186
+ $[4] = description;
187
+ $[5] = t5;
188
+ } else {
189
+ t5 = $[5];
190
+ }
191
+ const detail = t5;
192
+ let t6;
193
+ if ($[6] !== badge || $[7] !== badgeIcon || $[8] !== muted || $[9] !== scheme || $[10] !== trailing) {
194
+ t6 = trailing ?? (badge ? <View className="shrink-0 flex-row items-center gap-1 px-1.5 py-0.5" style={{
195
+ backgroundColor: tokens.color.surfaceSecondary[scheme],
196
+ borderRadius: 6
197
+ }}>{badgeIcon}<Text className="font-instrument-sans-medium" style={[BADGE_TEXT, muted, typeStyle("medium")]}>{badge}</Text></View> : null);
198
+ $[6] = badge;
199
+ $[7] = badgeIcon;
200
+ $[8] = muted;
201
+ $[9] = scheme;
202
+ $[10] = trailing;
203
+ $[11] = t6;
204
+ } else {
205
+ t6 = $[11];
206
+ }
207
+ const end = t6;
208
+ let t7;
209
+ if ($[12] !== selected) {
210
+ t7 = {
211
+ selected
212
+ };
213
+ $[12] = selected;
214
+ $[13] = t7;
215
+ } else {
216
+ t7 = $[13];
217
+ }
218
+ const t8 = `${prefix ?? ""}${label}`;
219
+ let t9;
220
+ if ($[14] !== badge || $[15] !== detail || $[16] !== t8) {
221
+ t9 = [t8, detail, badge].filter(Boolean);
222
+ $[14] = badge;
223
+ $[15] = detail;
224
+ $[16] = t8;
225
+ $[17] = t9;
226
+ } else {
227
+ t9 = $[17];
228
+ }
229
+ const t10 = t9.join(", ");
230
+ let t11;
231
+ if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
232
+ t11 = touchSlop(MIN_TOUCH_TARGET);
233
+ $[18] = t11;
234
+ } else {
235
+ t11 = $[18];
236
+ }
237
+ const t12 = largerText && "py-2";
238
+ let t13;
239
+ if ($[19] !== t12) {
240
+ t13 = cn("mx-1 flex-row items-center gap-2 px-2 py-1.5 active:opacity-70", t12);
241
+ $[19] = t12;
242
+ $[20] = t13;
243
+ } else {
244
+ t13 = $[20];
245
+ }
246
+ let t14;
247
+ if ($[21] !== scheme || $[22] !== selected) {
248
+ t14 = selected ? withAlpha(palette.primary[scheme], scheme === "dark" ? 0.25 : 0.15) : "transparent";
249
+ $[21] = scheme;
250
+ $[22] = selected;
251
+ $[23] = t14;
252
+ } else {
253
+ t14 = $[23];
254
+ }
255
+ let t15;
256
+ if ($[24] !== t14) {
257
+ t15 = {
258
+ minHeight: MIN_TOUCH_TARGET,
259
+ borderRadius: 8,
260
+ backgroundColor: t14
261
+ };
262
+ $[24] = t14;
263
+ $[25] = t15;
264
+ } else {
265
+ t15 = $[25];
266
+ }
267
+ const t16 = selected ? "font-instrument-sans-medium" : "font-instrument-sans";
268
+ let t17;
269
+ if ($[26] !== t16) {
270
+ t17 = cn("min-w-0 flex-1", t16);
271
+ $[26] = t16;
272
+ $[27] = t17;
273
+ } else {
274
+ t17 = $[27];
275
+ }
276
+ let t18;
277
+ if ($[28] !== scheme) {
278
+ t18 = textStyle("foreground", scheme);
279
+ $[28] = scheme;
280
+ $[29] = t18;
281
+ } else {
282
+ t18 = $[29];
283
+ }
284
+ let t19;
285
+ if ($[30] !== selected) {
286
+ t19 = selected ? typeStyle("medium") : null;
287
+ $[30] = selected;
288
+ $[31] = t19;
289
+ } else {
290
+ t19 = $[31];
291
+ }
292
+ let t20;
293
+ if ($[32] !== labelSize || $[33] !== t18 || $[34] !== t19) {
294
+ t20 = [labelSize, t18, t19];
295
+ $[32] = labelSize;
296
+ $[33] = t18;
297
+ $[34] = t19;
298
+ $[35] = t20;
299
+ } else {
300
+ t20 = $[35];
301
+ }
302
+ let t21;
303
+ if ($[36] !== muted || $[37] !== prefix) {
304
+ t21 = prefix ? <Text style={muted}>{prefix}</Text> : null;
305
+ $[36] = muted;
306
+ $[37] = prefix;
307
+ $[38] = t21;
308
+ } else {
309
+ t21 = $[38];
310
+ }
311
+ let t22;
312
+ if ($[39] !== label || $[40] !== t17 || $[41] !== t20 || $[42] !== t21) {
313
+ t22 = <Text numberOfLines={1} className={t17} style={t20}>{t21}{label}</Text>;
314
+ $[39] = label;
315
+ $[40] = t17;
316
+ $[41] = t20;
317
+ $[42] = t21;
318
+ $[43] = t22;
319
+ } else {
320
+ t22 = $[43];
321
+ }
322
+ let t23;
323
+ if ($[44] !== end || $[45] !== t22) {
324
+ t23 = <View className="min-w-0 flex-row items-center gap-1.5">{t22}{end}</View>;
325
+ $[44] = end;
326
+ $[45] = t22;
327
+ $[46] = t23;
328
+ } else {
329
+ t23 = $[46];
330
+ }
331
+ let t24;
332
+ if ($[47] !== detail || $[48] !== muted) {
333
+ t24 = detail ? <Text numberOfLines={1} className="font-instrument-sans text-xs" style={[sizeStyle("text-xs"), muted]}>{detail}</Text> : null;
334
+ $[47] = detail;
335
+ $[48] = muted;
336
+ $[49] = t24;
337
+ } else {
338
+ t24 = $[49];
339
+ }
340
+ let t25;
341
+ if ($[50] !== t23 || $[51] !== t24) {
342
+ t25 = <View className="min-w-0 flex-1 gap-0.5">{t23}{t24}</View>;
343
+ $[50] = t23;
344
+ $[51] = t24;
345
+ $[52] = t25;
346
+ } else {
347
+ t25 = $[52];
348
+ }
349
+ let t26;
350
+ if ($[53] !== leading || $[54] !== onPress || $[55] !== t10 || $[56] !== t13 || $[57] !== t15 || $[58] !== t25 || $[59] !== t7 || $[60] !== testID) {
351
+ t26 = <Pressable testID={testID} accessibilityRole="button" accessibilityState={t7} accessibilityLabel={t10} onPress={onPress} hitSlop={t11} className={t13} style={t15}>{leading}{t25}</Pressable>;
352
+ $[53] = leading;
353
+ $[54] = onPress;
354
+ $[55] = t10;
355
+ $[56] = t13;
356
+ $[57] = t15;
357
+ $[58] = t25;
358
+ $[59] = t7;
359
+ $[60] = testID;
360
+ $[61] = t26;
361
+ } else {
362
+ t26 = $[61];
363
+ }
364
+ return t26;
365
+ }