@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,446 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
3
+ import { Text, View } from "react-native";
4
+ import { IconBrain } from "@tabler/icons-react-native";
5
+ import { cn } from "../cn";
6
+ import { sizeStyle, textStyle } from "../controlStyles";
7
+ import { withAlpha } from "../palette";
8
+ import { useControllableState } from "../primitives/use-controllable-state";
9
+ import { useLargerText } from "../theme";
10
+ import { tokens } from "../tokens";
11
+ import { useScheme } from "../useScheme";
12
+ import { MONO_FONT, chatTextSize, formatElapsed } from "./chat-text";
13
+ import { Collapsible, CollapsibleChevron, CollapsibleContent, CollapsibleTrigger } from "./collapsible";
14
+ import { ResponseText } from "./response-text";
15
+ import { Shimmer } from "./shimmer";
16
+ const ReasoningContext = createContext(null);
17
+ export function useReasoning() {
18
+ const context = useContext(ReasoningContext);
19
+ if (!context) {
20
+ throw new Error("Reasoning components must be used within Reasoning");
21
+ }
22
+ return context;
23
+ }
24
+ const AUTO_CLOSE_DELAY_MS = 1000;
25
+ /**
26
+ * The AI's reasoning, folded. As on the web it opens when streaming starts,
27
+ * times the stream, and closes once, a second after it stops. Unlike the web,
28
+ * a reader can close it while it streams (the web reopens it), and a toggle
29
+ * after the stream cancels the pending close, as `useStreamingDisclosure`.
30
+ */
31
+ export function Reasoning(t0) {
32
+ const $ = _c(43);
33
+ let className;
34
+ let defaultOpen;
35
+ let duration;
36
+ let onOpenChange;
37
+ let open;
38
+ let props;
39
+ let t1;
40
+ if ($[0] !== t0) {
41
+ ({
42
+ isStreaming: t1,
43
+ open,
44
+ defaultOpen,
45
+ onOpenChange,
46
+ duration,
47
+ className,
48
+ ...props
49
+ } = t0);
50
+ $[0] = t0;
51
+ $[1] = className;
52
+ $[2] = defaultOpen;
53
+ $[3] = duration;
54
+ $[4] = onOpenChange;
55
+ $[5] = open;
56
+ $[6] = props;
57
+ $[7] = t1;
58
+ } else {
59
+ className = $[1];
60
+ defaultOpen = $[2];
61
+ duration = $[3];
62
+ onOpenChange = $[4];
63
+ open = $[5];
64
+ props = $[6];
65
+ t1 = $[7];
66
+ }
67
+ const isStreaming = t1 === undefined ? false : t1;
68
+ const t2 = defaultOpen ?? isStreaming;
69
+ let t3;
70
+ if ($[8] !== onOpenChange || $[9] !== open || $[10] !== t2) {
71
+ t3 = {
72
+ value: open,
73
+ defaultValue: t2,
74
+ onChange: onOpenChange
75
+ };
76
+ $[8] = onOpenChange;
77
+ $[9] = open;
78
+ $[10] = t2;
79
+ $[11] = t3;
80
+ } else {
81
+ t3 = $[11];
82
+ }
83
+ const [isOpen, setOpen] = useControllableState(t3);
84
+ const [measured, setMeasured] = useState(undefined);
85
+ const [closeDue, setCloseDue] = useState(false);
86
+ let t4;
87
+ if ($[12] !== isStreaming) {
88
+ t4 = isStreaming ? Date.now() : null;
89
+ $[12] = isStreaming;
90
+ $[13] = t4;
91
+ } else {
92
+ t4 = $[13];
93
+ }
94
+ const startedAt = useRef(t4);
95
+ let t5;
96
+ if ($[14] !== defaultOpen || $[15] !== isOpen || $[16] !== isStreaming || $[17] !== setOpen) {
97
+ t5 = () => {
98
+ if (isStreaming) {
99
+ if (startedAt.current === null) {
100
+ startedAt.current = Date.now();
101
+ }
102
+ if (!isOpen && defaultOpen !== false) {
103
+ setOpen(true);
104
+ }
105
+ setCloseDue(false);
106
+ } else {
107
+ if (startedAt.current !== null) {
108
+ setMeasured(Math.ceil((Date.now() - startedAt.current) / 1000));
109
+ startedAt.current = null;
110
+ if (isOpen) {
111
+ setCloseDue(true);
112
+ }
113
+ }
114
+ }
115
+ };
116
+ $[14] = defaultOpen;
117
+ $[15] = isOpen;
118
+ $[16] = isStreaming;
119
+ $[17] = setOpen;
120
+ $[18] = t5;
121
+ } else {
122
+ t5 = $[18];
123
+ }
124
+ let t6;
125
+ if ($[19] !== isStreaming) {
126
+ t6 = [isStreaming];
127
+ $[19] = isStreaming;
128
+ $[20] = t6;
129
+ } else {
130
+ t6 = $[20];
131
+ }
132
+ useEffect(t5, t6);
133
+ let t7;
134
+ if ($[21] !== closeDue || $[22] !== setOpen) {
135
+ t7 = () => {
136
+ if (!closeDue) {
137
+ return;
138
+ }
139
+ const timer = setTimeout(() => {
140
+ setOpen(false);
141
+ setCloseDue(false);
142
+ }, AUTO_CLOSE_DELAY_MS);
143
+ return () => clearTimeout(timer);
144
+ };
145
+ $[21] = closeDue;
146
+ $[22] = setOpen;
147
+ $[23] = t7;
148
+ } else {
149
+ t7 = $[23];
150
+ }
151
+ let t8;
152
+ if ($[24] !== closeDue) {
153
+ t8 = [closeDue];
154
+ $[24] = closeDue;
155
+ $[25] = t8;
156
+ } else {
157
+ t8 = $[25];
158
+ }
159
+ useEffect(t7, t8);
160
+ let t9;
161
+ if ($[26] !== setOpen) {
162
+ t9 = next => {
163
+ setCloseDue(false);
164
+ setOpen(next);
165
+ };
166
+ $[26] = setOpen;
167
+ $[27] = t9;
168
+ } else {
169
+ t9 = $[27];
170
+ }
171
+ const setIsOpen = t9;
172
+ const t10 = duration ?? measured;
173
+ let t11;
174
+ if ($[28] !== isOpen || $[29] !== isStreaming || $[30] !== setIsOpen || $[31] !== t10) {
175
+ t11 = {
176
+ isStreaming,
177
+ isOpen,
178
+ setIsOpen,
179
+ duration: t10
180
+ };
181
+ $[28] = isOpen;
182
+ $[29] = isStreaming;
183
+ $[30] = setIsOpen;
184
+ $[31] = t10;
185
+ $[32] = t11;
186
+ } else {
187
+ t11 = $[32];
188
+ }
189
+ let t12;
190
+ if ($[33] !== className) {
191
+ t12 = cn("mb-4", className);
192
+ $[33] = className;
193
+ $[34] = t12;
194
+ } else {
195
+ t12 = $[34];
196
+ }
197
+ let t13;
198
+ if ($[35] !== isOpen || $[36] !== props || $[37] !== setIsOpen || $[38] !== t12) {
199
+ t13 = <Collapsible open={isOpen} onOpenChange={setIsOpen} className={t12} {...props} />;
200
+ $[35] = isOpen;
201
+ $[36] = props;
202
+ $[37] = setIsOpen;
203
+ $[38] = t12;
204
+ $[39] = t13;
205
+ } else {
206
+ t13 = $[39];
207
+ }
208
+ let t14;
209
+ if ($[40] !== t11 || $[41] !== t13) {
210
+ t14 = <ReasoningContext.Provider value={t11}>{t13}</ReasoningContext.Provider>;
211
+ $[40] = t11;
212
+ $[41] = t13;
213
+ $[42] = t14;
214
+ } else {
215
+ t14 = $[42];
216
+ }
217
+ return t14;
218
+ }
219
+
220
+ /** "Thinking…" while streaming, then "Thought for 12s" ("Thought for a few seconds" with no duration). */
221
+ export function reasoningMessage(isStreaming, duration) {
222
+ if (isStreaming) return "Thinking…";
223
+ if (duration === undefined) return "Thought for a few seconds";
224
+ return `Thought for ${formatElapsed(duration)}`;
225
+ }
226
+ /** Brain icon, the shimmering "Thinking…" or "Thought for 12s", and a chevron: the web `ReasoningTrigger`. */
227
+ export function ReasoningTrigger(t0) {
228
+ const $ = _c(23);
229
+ let children;
230
+ let className;
231
+ let props;
232
+ let t1;
233
+ if ($[0] !== t0) {
234
+ ({
235
+ children,
236
+ getThinkingMessage: t1,
237
+ className,
238
+ ...props
239
+ } = t0);
240
+ $[0] = t0;
241
+ $[1] = children;
242
+ $[2] = className;
243
+ $[3] = props;
244
+ $[4] = t1;
245
+ } else {
246
+ children = $[1];
247
+ className = $[2];
248
+ props = $[3];
249
+ t1 = $[4];
250
+ }
251
+ const getThinkingMessage = t1 === undefined ? reasoningMessage : t1;
252
+ const {
253
+ isStreaming,
254
+ isOpen,
255
+ duration
256
+ } = useReasoning();
257
+ const scheme = useScheme();
258
+ const largerText = useLargerText();
259
+ let t2;
260
+ if ($[5] !== duration || $[6] !== getThinkingMessage || $[7] !== isStreaming) {
261
+ t2 = getThinkingMessage(isStreaming, duration);
262
+ $[5] = duration;
263
+ $[6] = getThinkingMessage;
264
+ $[7] = isStreaming;
265
+ $[8] = t2;
266
+ } else {
267
+ t2 = $[8];
268
+ }
269
+ const message = t2;
270
+ const muted = tokens.color.muted[scheme];
271
+ const iconSize = largerText ? 20 : 16;
272
+ let t3;
273
+ if ($[9] !== className) {
274
+ t3 = cn("w-full flex-row items-center gap-2 py-1", className);
275
+ $[9] = className;
276
+ $[10] = t3;
277
+ } else {
278
+ t3 = $[10];
279
+ }
280
+ let t4;
281
+ if ($[11] !== children || $[12] !== iconSize || $[13] !== isOpen || $[14] !== isStreaming || $[15] !== message || $[16] !== muted) {
282
+ t4 = children ?? <><IconBrain size={iconSize} color={muted} />{isStreaming ? <Shimmer duration={1} numberOfLines={1}>{message}</Shimmer> : <ResponseText size="small" tone="muted" selectable={false} numberOfLines={1} className="shrink">{message}</ResponseText>}<CollapsibleChevron open={isOpen} size={iconSize} color={muted} /></>;
283
+ $[11] = children;
284
+ $[12] = iconSize;
285
+ $[13] = isOpen;
286
+ $[14] = isStreaming;
287
+ $[15] = message;
288
+ $[16] = muted;
289
+ $[17] = t4;
290
+ } else {
291
+ t4 = $[17];
292
+ }
293
+ let t5;
294
+ if ($[18] !== message || $[19] !== props || $[20] !== t3 || $[21] !== t4) {
295
+ t5 = <CollapsibleTrigger accessibilityLabel={message} className={t3} {...props}>{t4}</CollapsibleTrigger>;
296
+ $[18] = message;
297
+ $[19] = props;
298
+ $[20] = t3;
299
+ $[21] = t4;
300
+ $[22] = t5;
301
+ } else {
302
+ t5 = $[22];
303
+ }
304
+ return t5;
305
+ }
306
+ /**
307
+ * The reasoning text, muted and monospaced, on the web `rounded-lg
308
+ * bg-surface-secondary/40 p-3` panel. Plain text: see `ResponseText` for
309
+ * markdown.
310
+ */
311
+ export function ReasoningContent(t0) {
312
+ const $ = _c(39);
313
+ const {
314
+ children,
315
+ className
316
+ } = t0;
317
+ const scheme = useScheme();
318
+ const largerText = useLargerText();
319
+ let T0;
320
+ let T1;
321
+ let T2;
322
+ let t1;
323
+ let t2;
324
+ let t3;
325
+ let t4;
326
+ let t5;
327
+ let t6;
328
+ if ($[0] !== className || $[1] !== largerText || $[2] !== scheme) {
329
+ const size = chatTextSize("small", largerText);
330
+ T2 = CollapsibleContent;
331
+ if ($[12] !== className) {
332
+ t6 = cn("pb-1 pt-2", className);
333
+ $[12] = className;
334
+ $[13] = t6;
335
+ } else {
336
+ t6 = $[13];
337
+ }
338
+ T1 = View;
339
+ t4 = "p-3";
340
+ const t7 = tokens.color.surfaceSecondary[scheme];
341
+ let t8;
342
+ if ($[14] !== t7) {
343
+ t8 = withAlpha(t7, 0.4);
344
+ $[14] = t7;
345
+ $[15] = t8;
346
+ } else {
347
+ t8 = $[15];
348
+ }
349
+ if ($[16] !== t8) {
350
+ t5 = {
351
+ borderRadius: tokens.radius.lg,
352
+ backgroundColor: t8
353
+ };
354
+ $[16] = t8;
355
+ $[17] = t5;
356
+ } else {
357
+ t5 = $[17];
358
+ }
359
+ T0 = Text;
360
+ t2 = true;
361
+ t3 = size;
362
+ t1 = sizeStyle(size);
363
+ $[0] = className;
364
+ $[1] = largerText;
365
+ $[2] = scheme;
366
+ $[3] = T0;
367
+ $[4] = T1;
368
+ $[5] = T2;
369
+ $[6] = t1;
370
+ $[7] = t2;
371
+ $[8] = t3;
372
+ $[9] = t4;
373
+ $[10] = t5;
374
+ $[11] = t6;
375
+ } else {
376
+ T0 = $[3];
377
+ T1 = $[4];
378
+ T2 = $[5];
379
+ t1 = $[6];
380
+ t2 = $[7];
381
+ t3 = $[8];
382
+ t4 = $[9];
383
+ t5 = $[10];
384
+ t6 = $[11];
385
+ }
386
+ let t7;
387
+ if ($[18] !== scheme) {
388
+ t7 = textStyle("muted", scheme);
389
+ $[18] = scheme;
390
+ $[19] = t7;
391
+ } else {
392
+ t7 = $[19];
393
+ }
394
+ let t8;
395
+ if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
396
+ t8 = {
397
+ fontFamily: MONO_FONT
398
+ };
399
+ $[20] = t8;
400
+ } else {
401
+ t8 = $[20];
402
+ }
403
+ let t9;
404
+ if ($[21] !== t1 || $[22] !== t7) {
405
+ t9 = [t1, t7, t8];
406
+ $[21] = t1;
407
+ $[22] = t7;
408
+ $[23] = t9;
409
+ } else {
410
+ t9 = $[23];
411
+ }
412
+ let t10;
413
+ if ($[24] !== T0 || $[25] !== children || $[26] !== t2 || $[27] !== t3 || $[28] !== t9) {
414
+ t10 = <T0 selectable={t2} className={t3} style={t9}>{children}</T0>;
415
+ $[24] = T0;
416
+ $[25] = children;
417
+ $[26] = t2;
418
+ $[27] = t3;
419
+ $[28] = t9;
420
+ $[29] = t10;
421
+ } else {
422
+ t10 = $[29];
423
+ }
424
+ let t11;
425
+ if ($[30] !== T1 || $[31] !== t10 || $[32] !== t4 || $[33] !== t5) {
426
+ t11 = <T1 className={t4} style={t5}>{t10}</T1>;
427
+ $[30] = T1;
428
+ $[31] = t10;
429
+ $[32] = t4;
430
+ $[33] = t5;
431
+ $[34] = t11;
432
+ } else {
433
+ t11 = $[34];
434
+ }
435
+ let t12;
436
+ if ($[35] !== T2 || $[36] !== t11 || $[37] !== t6) {
437
+ t12 = <T2 className={t6}>{t11}</T2>;
438
+ $[35] = T2;
439
+ $[36] = t11;
440
+ $[37] = t6;
441
+ $[38] = t12;
442
+ } else {
443
+ t12 = $[38];
444
+ }
445
+ return t12;
446
+ }
@@ -0,0 +1,278 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Pressable, Text, View } from "react-native";
3
+ import { IconX } from "@tabler/icons-react-native";
4
+ import { cn } from "../cn";
5
+ import { MIN_TOUCH_TARGET, fieldStyle, sizeStyle, textStyle, touchSlop, typeStyle } 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 } from "./chat-text";
11
+ /**
12
+ * The chip above the composer while a reply is pending: a field-style
13
+ * surface with a primary accent bar, the author, up to two lines of the
14
+ * message and an X (44 point target). Pass it as `PromptInput` `replyTo`, or
15
+ * as `header`.
16
+ */
17
+ export function ReplyQuoteChip(t0) {
18
+ const $ = _c(80);
19
+ const {
20
+ author,
21
+ text,
22
+ onDismiss,
23
+ accessibilityLabel,
24
+ dismissLabel: t1,
25
+ className,
26
+ testID
27
+ } = t0;
28
+ const dismissLabel = t1 === undefined ? "Dismiss reply quote" : t1;
29
+ const scheme = useScheme();
30
+ const largerText = useLargerText();
31
+ let T0;
32
+ let T1;
33
+ let T2;
34
+ let t10;
35
+ let t11;
36
+ let t12;
37
+ let t13;
38
+ let t2;
39
+ let t3;
40
+ let t4;
41
+ let t5;
42
+ let t6;
43
+ let t7;
44
+ let t8;
45
+ let t9;
46
+ if ($[0] !== accessibilityLabel || $[1] !== author || $[2] !== className || $[3] !== largerText || $[4] !== scheme || $[5] !== testID || $[6] !== text) {
47
+ const caption = chatTextSize("caption", largerText);
48
+ const body = chatTextSize("small", largerText);
49
+ T2 = View;
50
+ t7 = testID;
51
+ t8 = true;
52
+ t9 = accessibilityLabel ?? `Replying to ${author}`;
53
+ t10 = text;
54
+ if ($[22] !== className) {
55
+ t11 = cn("w-full flex-row items-center rounded-field border pl-3", className);
56
+ $[22] = className;
57
+ $[23] = t11;
58
+ } else {
59
+ t11 = $[23];
60
+ }
61
+ let t14;
62
+ if ($[24] !== scheme) {
63
+ t14 = fieldStyle(scheme);
64
+ $[24] = scheme;
65
+ $[25] = t14;
66
+ } else {
67
+ t14 = $[25];
68
+ }
69
+ const t15 = tokens.color.surfaceSecondary[scheme];
70
+ let t16;
71
+ if ($[26] !== t15) {
72
+ t16 = {
73
+ backgroundColor: t15
74
+ };
75
+ $[26] = t15;
76
+ $[27] = t16;
77
+ } else {
78
+ t16 = $[27];
79
+ }
80
+ if ($[28] !== t14 || $[29] !== t16) {
81
+ t12 = [t14, t16];
82
+ $[28] = t14;
83
+ $[29] = t16;
84
+ $[30] = t12;
85
+ } else {
86
+ t12 = $[30];
87
+ }
88
+ const t17 = palette.primary[scheme];
89
+ if ($[31] !== t17) {
90
+ t13 = <View className="mr-2.5 self-stretch rounded-full" style={{
91
+ width: 3,
92
+ marginVertical: 8,
93
+ backgroundColor: t17
94
+ }} />;
95
+ $[31] = t17;
96
+ $[32] = t13;
97
+ } else {
98
+ t13 = $[32];
99
+ }
100
+ T1 = View;
101
+ t5 = "min-w-0 flex-1 py-2";
102
+ const t18 = cn(caption, "font-instrument-sans-semibold");
103
+ const t19 = sizeStyle(caption);
104
+ let t20;
105
+ if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
106
+ t20 = typeStyle("semibold");
107
+ $[33] = t20;
108
+ } else {
109
+ t20 = $[33];
110
+ }
111
+ let t21;
112
+ if ($[34] !== scheme) {
113
+ t21 = textStyle("muted", scheme);
114
+ $[34] = scheme;
115
+ $[35] = t21;
116
+ } else {
117
+ t21 = $[35];
118
+ }
119
+ let t22;
120
+ if ($[36] !== t19 || $[37] !== t21) {
121
+ t22 = [t19, t20, t21];
122
+ $[36] = t19;
123
+ $[37] = t21;
124
+ $[38] = t22;
125
+ } else {
126
+ t22 = $[38];
127
+ }
128
+ if ($[39] !== author || $[40] !== t18 || $[41] !== t22) {
129
+ t6 = <Text numberOfLines={1} className={t18} style={t22}>{author}</Text>;
130
+ $[39] = author;
131
+ $[40] = t18;
132
+ $[41] = t22;
133
+ $[42] = t6;
134
+ } else {
135
+ t6 = $[42];
136
+ }
137
+ T0 = Text;
138
+ t3 = 2;
139
+ t4 = cn(body, "font-instrument-sans");
140
+ t2 = sizeStyle(body);
141
+ $[0] = accessibilityLabel;
142
+ $[1] = author;
143
+ $[2] = className;
144
+ $[3] = largerText;
145
+ $[4] = scheme;
146
+ $[5] = testID;
147
+ $[6] = text;
148
+ $[7] = T0;
149
+ $[8] = T1;
150
+ $[9] = T2;
151
+ $[10] = t10;
152
+ $[11] = t11;
153
+ $[12] = t12;
154
+ $[13] = t13;
155
+ $[14] = t2;
156
+ $[15] = t3;
157
+ $[16] = t4;
158
+ $[17] = t5;
159
+ $[18] = t6;
160
+ $[19] = t7;
161
+ $[20] = t8;
162
+ $[21] = t9;
163
+ } else {
164
+ T0 = $[7];
165
+ T1 = $[8];
166
+ T2 = $[9];
167
+ t10 = $[10];
168
+ t11 = $[11];
169
+ t12 = $[12];
170
+ t13 = $[13];
171
+ t2 = $[14];
172
+ t3 = $[15];
173
+ t4 = $[16];
174
+ t5 = $[17];
175
+ t6 = $[18];
176
+ t7 = $[19];
177
+ t8 = $[20];
178
+ t9 = $[21];
179
+ }
180
+ let t14;
181
+ if ($[43] !== scheme) {
182
+ t14 = textStyle("foreground", scheme);
183
+ $[43] = scheme;
184
+ $[44] = t14;
185
+ } else {
186
+ t14 = $[44];
187
+ }
188
+ let t15;
189
+ if ($[45] !== t14 || $[46] !== t2) {
190
+ t15 = [t2, t14];
191
+ $[45] = t14;
192
+ $[46] = t2;
193
+ $[47] = t15;
194
+ } else {
195
+ t15 = $[47];
196
+ }
197
+ let t16;
198
+ if ($[48] !== T0 || $[49] !== t15 || $[50] !== t3 || $[51] !== t4 || $[52] !== text) {
199
+ t16 = <T0 numberOfLines={t3} className={t4} style={t15}>{text}</T0>;
200
+ $[48] = T0;
201
+ $[49] = t15;
202
+ $[50] = t3;
203
+ $[51] = t4;
204
+ $[52] = text;
205
+ $[53] = t16;
206
+ } else {
207
+ t16 = $[53];
208
+ }
209
+ let t17;
210
+ if ($[54] !== T1 || $[55] !== t16 || $[56] !== t5 || $[57] !== t6) {
211
+ t17 = <T1 className={t5}>{t6}{t16}</T1>;
212
+ $[54] = T1;
213
+ $[55] = t16;
214
+ $[56] = t5;
215
+ $[57] = t6;
216
+ $[58] = t17;
217
+ } else {
218
+ t17 = $[58];
219
+ }
220
+ const t18 = testID ? `${testID}-dismiss` : undefined;
221
+ let t19;
222
+ if ($[59] === Symbol.for("react.memo_cache_sentinel")) {
223
+ t19 = touchSlop(MIN_TOUCH_TARGET);
224
+ $[59] = t19;
225
+ } else {
226
+ t19 = $[59];
227
+ }
228
+ let t20;
229
+ if ($[60] === Symbol.for("react.memo_cache_sentinel")) {
230
+ t20 = {
231
+ width: MIN_TOUCH_TARGET,
232
+ height: MIN_TOUCH_TARGET
233
+ };
234
+ $[60] = t20;
235
+ } else {
236
+ t20 = $[60];
237
+ }
238
+ const t21 = largerText ? 20 : 16;
239
+ const t22 = tokens.color.muted[scheme];
240
+ let t23;
241
+ if ($[61] !== t21 || $[62] !== t22) {
242
+ t23 = <IconX size={t21} color={t22} />;
243
+ $[61] = t21;
244
+ $[62] = t22;
245
+ $[63] = t23;
246
+ } else {
247
+ t23 = $[63];
248
+ }
249
+ let t24;
250
+ if ($[64] !== dismissLabel || $[65] !== onDismiss || $[66] !== t18 || $[67] !== t23) {
251
+ t24 = <Pressable testID={t18} accessibilityRole="button" accessibilityLabel={dismissLabel} onPress={onDismiss} hitSlop={t19} className="items-center justify-center" style={t20}>{t23}</Pressable>;
252
+ $[64] = dismissLabel;
253
+ $[65] = onDismiss;
254
+ $[66] = t18;
255
+ $[67] = t23;
256
+ $[68] = t24;
257
+ } else {
258
+ t24 = $[68];
259
+ }
260
+ let t25;
261
+ if ($[69] !== T2 || $[70] !== t10 || $[71] !== t11 || $[72] !== t12 || $[73] !== t13 || $[74] !== t17 || $[75] !== t24 || $[76] !== t7 || $[77] !== t8 || $[78] !== t9) {
262
+ t25 = <T2 testID={t7} accessible={t8} accessibilityLabel={t9} accessibilityHint={t10} className={t11} style={t12}>{t13}{t17}{t24}</T2>;
263
+ $[69] = T2;
264
+ $[70] = t10;
265
+ $[71] = t11;
266
+ $[72] = t12;
267
+ $[73] = t13;
268
+ $[74] = t17;
269
+ $[75] = t24;
270
+ $[76] = t7;
271
+ $[77] = t8;
272
+ $[78] = t9;
273
+ $[79] = t25;
274
+ } else {
275
+ t25 = $[79];
276
+ }
277
+ return t25;
278
+ }