@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,188 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Pressable, Text } from "react-native";
3
+ import { cn } from "../cn";
4
+ import { buttonColors, MIN_TOUCH_TARGET, sizeStyle, touchSlop, typeStyle } from "../controlStyles";
5
+ import { useLargerText } from "../theme";
6
+ import { useScheme } from "../useScheme";
7
+ import { chatTextSize } from "./chat-text";
8
+ /**
9
+ * The compact pill button of the tool and subagent cards: at least 44 points
10
+ * high, label in the `small` chat size (steps up with larger text). Internal.
11
+ */
12
+ export function CardButton(t0) {
13
+ const $ = _c(56);
14
+ const {
15
+ label,
16
+ variant,
17
+ onPress,
18
+ disabled,
19
+ accessibilityLabel,
20
+ testID
21
+ } = t0;
22
+ const scheme = useScheme();
23
+ const largerText = useLargerText();
24
+ let T0;
25
+ let T1;
26
+ let colors;
27
+ let t1;
28
+ let t10;
29
+ let t11;
30
+ let t2;
31
+ let t3;
32
+ let t4;
33
+ let t5;
34
+ let t6;
35
+ let t7;
36
+ let t8;
37
+ let t9;
38
+ if ($[0] !== accessibilityLabel || $[1] !== disabled || $[2] !== label || $[3] !== largerText || $[4] !== onPress || $[5] !== scheme || $[6] !== testID || $[7] !== variant) {
39
+ const size = chatTextSize("small", largerText);
40
+ let t12;
41
+ if ($[22] !== scheme || $[23] !== variant) {
42
+ t12 = buttonColors(variant, scheme);
43
+ $[22] = scheme;
44
+ $[23] = variant;
45
+ $[24] = t12;
46
+ } else {
47
+ t12 = $[24];
48
+ }
49
+ colors = t12;
50
+ T1 = Pressable;
51
+ t3 = testID;
52
+ t4 = "button";
53
+ t5 = accessibilityLabel ?? label;
54
+ const t13 = !!disabled;
55
+ if ($[25] !== t13) {
56
+ t6 = {
57
+ disabled: t13
58
+ };
59
+ $[25] = t13;
60
+ $[26] = t6;
61
+ } else {
62
+ t6 = $[26];
63
+ }
64
+ t7 = disabled;
65
+ t8 = onPress;
66
+ if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
67
+ t9 = touchSlop(MIN_TOUCH_TARGET);
68
+ t10 = cn("items-center justify-center rounded-full border px-4 active:opacity-70");
69
+ $[27] = t10;
70
+ $[28] = t9;
71
+ } else {
72
+ t10 = $[27];
73
+ t9 = $[28];
74
+ }
75
+ const t14 = disabled ? 0.5 : 1;
76
+ if ($[29] !== colors.backgroundColor || $[30] !== colors.borderColor || $[31] !== t14) {
77
+ t11 = {
78
+ minHeight: MIN_TOUCH_TARGET,
79
+ minWidth: MIN_TOUCH_TARGET,
80
+ backgroundColor: colors.backgroundColor,
81
+ borderColor: colors.borderColor,
82
+ opacity: t14
83
+ };
84
+ $[29] = colors.backgroundColor;
85
+ $[30] = colors.borderColor;
86
+ $[31] = t14;
87
+ $[32] = t11;
88
+ } else {
89
+ t11 = $[32];
90
+ }
91
+ T0 = Text;
92
+ t2 = cn(size, "font-instrument-sans-semibold");
93
+ t1 = sizeStyle(size);
94
+ $[0] = accessibilityLabel;
95
+ $[1] = disabled;
96
+ $[2] = label;
97
+ $[3] = largerText;
98
+ $[4] = onPress;
99
+ $[5] = scheme;
100
+ $[6] = testID;
101
+ $[7] = variant;
102
+ $[8] = T0;
103
+ $[9] = T1;
104
+ $[10] = colors;
105
+ $[11] = t1;
106
+ $[12] = t10;
107
+ $[13] = t11;
108
+ $[14] = t2;
109
+ $[15] = t3;
110
+ $[16] = t4;
111
+ $[17] = t5;
112
+ $[18] = t6;
113
+ $[19] = t7;
114
+ $[20] = t8;
115
+ $[21] = t9;
116
+ } else {
117
+ T0 = $[8];
118
+ T1 = $[9];
119
+ colors = $[10];
120
+ t1 = $[11];
121
+ t10 = $[12];
122
+ t11 = $[13];
123
+ t2 = $[14];
124
+ t3 = $[15];
125
+ t4 = $[16];
126
+ t5 = $[17];
127
+ t6 = $[18];
128
+ t7 = $[19];
129
+ t8 = $[20];
130
+ t9 = $[21];
131
+ }
132
+ let t12;
133
+ if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
134
+ t12 = typeStyle("semibold");
135
+ $[33] = t12;
136
+ } else {
137
+ t12 = $[33];
138
+ }
139
+ let t13;
140
+ if ($[34] !== colors.color) {
141
+ t13 = {
142
+ color: colors.color
143
+ };
144
+ $[34] = colors.color;
145
+ $[35] = t13;
146
+ } else {
147
+ t13 = $[35];
148
+ }
149
+ let t14;
150
+ if ($[36] !== t1 || $[37] !== t13) {
151
+ t14 = [t1, t12, t13];
152
+ $[36] = t1;
153
+ $[37] = t13;
154
+ $[38] = t14;
155
+ } else {
156
+ t14 = $[38];
157
+ }
158
+ let t15;
159
+ if ($[39] !== T0 || $[40] !== label || $[41] !== t14 || $[42] !== t2) {
160
+ t15 = <T0 className={t2} style={t14}>{label}</T0>;
161
+ $[39] = T0;
162
+ $[40] = label;
163
+ $[41] = t14;
164
+ $[42] = t2;
165
+ $[43] = t15;
166
+ } else {
167
+ t15 = $[43];
168
+ }
169
+ let t16;
170
+ if ($[44] !== T1 || $[45] !== t10 || $[46] !== t11 || $[47] !== t15 || $[48] !== t3 || $[49] !== t4 || $[50] !== t5 || $[51] !== t6 || $[52] !== t7 || $[53] !== t8 || $[54] !== t9) {
171
+ t16 = <T1 testID={t3} accessibilityRole={t4} accessibilityLabel={t5} accessibilityState={t6} disabled={t7} onPress={t8} hitSlop={t9} className={t10} style={t11}>{t15}</T1>;
172
+ $[44] = T1;
173
+ $[45] = t10;
174
+ $[46] = t11;
175
+ $[47] = t15;
176
+ $[48] = t3;
177
+ $[49] = t4;
178
+ $[50] = t5;
179
+ $[51] = t6;
180
+ $[52] = t7;
181
+ $[53] = t8;
182
+ $[54] = t9;
183
+ $[55] = t16;
184
+ } else {
185
+ t16 = $[55];
186
+ }
187
+ return t16;
188
+ }
@@ -0,0 +1,459 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Text, View } from "react-native";
3
+ import { IconBrain, IconPointFilled } from "@tabler/icons-react-native";
4
+ import { badgeColors, Badge } from "../Badge";
5
+ import { cn } from "../cn";
6
+ import { sizeStyle } from "../controlStyles";
7
+ import { useLargerText } from "../theme";
8
+ import { tokens } from "../tokens";
9
+ import { useScheme } from "../useScheme";
10
+ import { chatTextSize } from "./chat-text";
11
+ import { Collapsible, CollapsibleChevron, CollapsibleContent, CollapsibleTrigger, useCollapsible } from "./collapsible";
12
+ import { ResponseText } from "./response-text";
13
+
14
+ // The web `ChainOfThought`, simplified: a fold of steps with search-result
15
+ // chips. `ChainOfThoughtImage` and the step enter animation are not ported.
16
+
17
+ /** Holds its open state (default closed), or takes `open` and `onOpenChange`. */
18
+ export function ChainOfThought(t0) {
19
+ const $ = _c(8);
20
+ let className;
21
+ let props;
22
+ if ($[0] !== t0) {
23
+ ({
24
+ className,
25
+ ...props
26
+ } = t0);
27
+ $[0] = t0;
28
+ $[1] = className;
29
+ $[2] = props;
30
+ } else {
31
+ className = $[1];
32
+ props = $[2];
33
+ }
34
+ let t1;
35
+ if ($[3] !== className) {
36
+ t1 = cn("w-full gap-4", className);
37
+ $[3] = className;
38
+ $[4] = t1;
39
+ } else {
40
+ t1 = $[4];
41
+ }
42
+ let t2;
43
+ if ($[5] !== props || $[6] !== t1) {
44
+ t2 = <Collapsible className={t1} {...props} />;
45
+ $[5] = props;
46
+ $[6] = t1;
47
+ $[7] = t2;
48
+ } else {
49
+ t2 = $[7];
50
+ }
51
+ return t2;
52
+ }
53
+ /** Brain icon, title and chevron: toggles the steps. */
54
+ export function ChainOfThoughtHeader(t0) {
55
+ const $ = _c(24);
56
+ let className;
57
+ let props;
58
+ let t1;
59
+ let t2;
60
+ if ($[0] !== t0) {
61
+ ({
62
+ children: t1,
63
+ icon: t2,
64
+ className,
65
+ ...props
66
+ } = t0);
67
+ $[0] = t0;
68
+ $[1] = className;
69
+ $[2] = props;
70
+ $[3] = t1;
71
+ $[4] = t2;
72
+ } else {
73
+ className = $[1];
74
+ props = $[2];
75
+ t1 = $[3];
76
+ t2 = $[4];
77
+ }
78
+ const children = t1 === undefined ? "Chain of Thought" : t1;
79
+ const Icon = t2 === undefined ? IconBrain : t2;
80
+ const {
81
+ open
82
+ } = useCollapsible();
83
+ const scheme = useScheme();
84
+ const largerText = useLargerText();
85
+ const muted = tokens.color.muted[scheme];
86
+ const iconSize = largerText ? 20 : 16;
87
+ let t3;
88
+ if ($[5] !== className) {
89
+ t3 = cn("w-full flex-row items-center gap-2", className);
90
+ $[5] = className;
91
+ $[6] = t3;
92
+ } else {
93
+ t3 = $[6];
94
+ }
95
+ let t4;
96
+ if ($[7] !== Icon || $[8] !== iconSize || $[9] !== muted) {
97
+ t4 = <Icon size={iconSize} color={muted} />;
98
+ $[7] = Icon;
99
+ $[8] = iconSize;
100
+ $[9] = muted;
101
+ $[10] = t4;
102
+ } else {
103
+ t4 = $[10];
104
+ }
105
+ let t5;
106
+ if ($[11] !== children) {
107
+ t5 = <ResponseText size="small" tone="muted" selectable={false} className="flex-1">{children}</ResponseText>;
108
+ $[11] = children;
109
+ $[12] = t5;
110
+ } else {
111
+ t5 = $[12];
112
+ }
113
+ let t6;
114
+ if ($[13] !== iconSize || $[14] !== muted || $[15] !== open) {
115
+ t6 = <CollapsibleChevron open={open} size={iconSize} color={muted} />;
116
+ $[13] = iconSize;
117
+ $[14] = muted;
118
+ $[15] = open;
119
+ $[16] = t6;
120
+ } else {
121
+ t6 = $[16];
122
+ }
123
+ let t7;
124
+ if ($[17] !== children || $[18] !== props || $[19] !== t3 || $[20] !== t4 || $[21] !== t5 || $[22] !== t6) {
125
+ t7 = <CollapsibleTrigger accessibilityLabel={children} className={t3} {...props}>{t4}{t5}{t6}</CollapsibleTrigger>;
126
+ $[17] = children;
127
+ $[18] = props;
128
+ $[19] = t3;
129
+ $[20] = t4;
130
+ $[21] = t5;
131
+ $[22] = t6;
132
+ $[23] = t7;
133
+ } else {
134
+ t7 = $[23];
135
+ }
136
+ return t7;
137
+ }
138
+
139
+ /** The steps, shown while open. */
140
+ export function ChainOfThoughtContent(t0) {
141
+ const $ = _c(8);
142
+ let className;
143
+ let props;
144
+ if ($[0] !== t0) {
145
+ ({
146
+ className,
147
+ ...props
148
+ } = t0);
149
+ $[0] = t0;
150
+ $[1] = className;
151
+ $[2] = props;
152
+ } else {
153
+ className = $[1];
154
+ props = $[2];
155
+ }
156
+ let t1;
157
+ if ($[3] !== className) {
158
+ t1 = cn("gap-3", className);
159
+ $[3] = className;
160
+ $[4] = t1;
161
+ } else {
162
+ t1 = $[4];
163
+ }
164
+ let t2;
165
+ if ($[5] !== props || $[6] !== t1) {
166
+ t2 = <CollapsibleContent className={t1} {...props} />;
167
+ $[5] = props;
168
+ $[6] = t1;
169
+ $[7] = t2;
170
+ } else {
171
+ t2 = $[7];
172
+ }
173
+ return t2;
174
+ }
175
+ /** One step: icon with a rail under it to the next step, label, description and any children (such as search results). */
176
+ export function ChainOfThoughtStep(t0) {
177
+ const $ = _c(40);
178
+ let children;
179
+ let className;
180
+ let description;
181
+ let label;
182
+ let props;
183
+ let style;
184
+ let t1;
185
+ let t2;
186
+ if ($[0] !== t0) {
187
+ ({
188
+ icon: t1,
189
+ label,
190
+ description,
191
+ status: t2,
192
+ className,
193
+ style,
194
+ children,
195
+ ...props
196
+ } = t0);
197
+ $[0] = t0;
198
+ $[1] = children;
199
+ $[2] = className;
200
+ $[3] = description;
201
+ $[4] = label;
202
+ $[5] = props;
203
+ $[6] = style;
204
+ $[7] = t1;
205
+ $[8] = t2;
206
+ } else {
207
+ children = $[1];
208
+ className = $[2];
209
+ description = $[3];
210
+ label = $[4];
211
+ props = $[5];
212
+ style = $[6];
213
+ t1 = $[7];
214
+ t2 = $[8];
215
+ }
216
+ const Icon = t1 === undefined ? IconPointFilled : t1;
217
+ const status = t2 === undefined ? "complete" : t2;
218
+ const scheme = useScheme();
219
+ const largerText = useLargerText();
220
+ const tone = status === "active" ? "foreground" : "muted";
221
+ let t3;
222
+ if ($[9] !== className) {
223
+ t3 = cn("flex-row gap-2", className);
224
+ $[9] = className;
225
+ $[10] = t3;
226
+ } else {
227
+ t3 = $[10];
228
+ }
229
+ let t4;
230
+ if ($[11] !== status) {
231
+ t4 = status === "pending" ? {
232
+ opacity: 0.5
233
+ } : null;
234
+ $[11] = status;
235
+ $[12] = t4;
236
+ } else {
237
+ t4 = $[12];
238
+ }
239
+ let t5;
240
+ if ($[13] !== style || $[14] !== t4) {
241
+ t5 = [t4, style];
242
+ $[13] = style;
243
+ $[14] = t4;
244
+ $[15] = t5;
245
+ } else {
246
+ t5 = $[15];
247
+ }
248
+ const t6 = largerText ? 20 : 16;
249
+ const t7 = tokens.color[tone][scheme];
250
+ let t8;
251
+ if ($[16] !== Icon || $[17] !== t6 || $[18] !== t7) {
252
+ t8 = <Icon size={t6} color={t7} />;
253
+ $[16] = Icon;
254
+ $[17] = t6;
255
+ $[18] = t7;
256
+ $[19] = t8;
257
+ } else {
258
+ t8 = $[19];
259
+ }
260
+ const t9 = tokens.color.separator[scheme];
261
+ let t10;
262
+ if ($[20] !== t9) {
263
+ t10 = <View className="mt-2 w-px flex-1" style={{
264
+ backgroundColor: t9
265
+ }} />;
266
+ $[20] = t9;
267
+ $[21] = t10;
268
+ } else {
269
+ t10 = $[21];
270
+ }
271
+ let t11;
272
+ if ($[22] !== t10 || $[23] !== t8) {
273
+ t11 = <View className="mt-0.5 items-center">{t8}{t10}</View>;
274
+ $[22] = t10;
275
+ $[23] = t8;
276
+ $[24] = t11;
277
+ } else {
278
+ t11 = $[24];
279
+ }
280
+ let t12;
281
+ if ($[25] !== label || $[26] !== tone) {
282
+ t12 = <ResponseText size="small" tone={tone}>{label}</ResponseText>;
283
+ $[25] = label;
284
+ $[26] = tone;
285
+ $[27] = t12;
286
+ } else {
287
+ t12 = $[27];
288
+ }
289
+ let t13;
290
+ if ($[28] !== description) {
291
+ t13 = description ? <ResponseText size="caption" tone="muted">{description}</ResponseText> : null;
292
+ $[28] = description;
293
+ $[29] = t13;
294
+ } else {
295
+ t13 = $[29];
296
+ }
297
+ let t14;
298
+ if ($[30] !== children || $[31] !== t12 || $[32] !== t13) {
299
+ t14 = <View className="min-w-0 flex-1 gap-2">{t12}{t13}{children}</View>;
300
+ $[30] = children;
301
+ $[31] = t12;
302
+ $[32] = t13;
303
+ $[33] = t14;
304
+ } else {
305
+ t14 = $[33];
306
+ }
307
+ let t15;
308
+ if ($[34] !== props || $[35] !== t11 || $[36] !== t14 || $[37] !== t3 || $[38] !== t5) {
309
+ t15 = <View className={t3} style={t5} {...props}>{t11}{t14}</View>;
310
+ $[34] = props;
311
+ $[35] = t11;
312
+ $[36] = t14;
313
+ $[37] = t3;
314
+ $[38] = t5;
315
+ $[39] = t15;
316
+ } else {
317
+ t15 = $[39];
318
+ }
319
+ return t15;
320
+ }
321
+
322
+ /** A wrapping row of `ChainOfThoughtSearchResult` chips. */
323
+ export function ChainOfThoughtSearchResults(t0) {
324
+ const $ = _c(8);
325
+ let className;
326
+ let props;
327
+ if ($[0] !== t0) {
328
+ ({
329
+ className,
330
+ ...props
331
+ } = t0);
332
+ $[0] = t0;
333
+ $[1] = className;
334
+ $[2] = props;
335
+ } else {
336
+ className = $[1];
337
+ props = $[2];
338
+ }
339
+ let t1;
340
+ if ($[3] !== className) {
341
+ t1 = cn("flex-row flex-wrap items-center gap-2", className);
342
+ $[3] = className;
343
+ $[4] = t1;
344
+ } else {
345
+ t1 = $[4];
346
+ }
347
+ let t2;
348
+ if ($[5] !== props || $[6] !== t1) {
349
+ t2 = <View className={t1} {...props} />;
350
+ $[5] = props;
351
+ $[6] = t1;
352
+ $[7] = t2;
353
+ } else {
354
+ t2 = $[7];
355
+ }
356
+ return t2;
357
+ }
358
+
359
+ /** One search result: a `secondary` `Badge` with regular `text-xs` type, as the web `font-normal text-xs`. */
360
+ export function ChainOfThoughtSearchResult(t0) {
361
+ const $ = _c(29);
362
+ const {
363
+ children,
364
+ className
365
+ } = t0;
366
+ const scheme = useScheme();
367
+ const largerText = useLargerText();
368
+ let T0;
369
+ let T1;
370
+ let t1;
371
+ let t2;
372
+ let t3;
373
+ let t4;
374
+ let t5;
375
+ if ($[0] !== className || $[1] !== largerText) {
376
+ const size = chatTextSize("caption", largerText);
377
+ T1 = Badge;
378
+ t4 = "secondary";
379
+ if ($[9] !== className) {
380
+ t5 = cn("px-2 py-0.5", className);
381
+ $[9] = className;
382
+ $[10] = t5;
383
+ } else {
384
+ t5 = $[10];
385
+ }
386
+ T0 = Text;
387
+ t2 = 1;
388
+ t3 = cn(size, "font-instrument-sans");
389
+ t1 = sizeStyle(size);
390
+ $[0] = className;
391
+ $[1] = largerText;
392
+ $[2] = T0;
393
+ $[3] = T1;
394
+ $[4] = t1;
395
+ $[5] = t2;
396
+ $[6] = t3;
397
+ $[7] = t4;
398
+ $[8] = t5;
399
+ } else {
400
+ T0 = $[2];
401
+ T1 = $[3];
402
+ t1 = $[4];
403
+ t2 = $[5];
404
+ t3 = $[6];
405
+ t4 = $[7];
406
+ t5 = $[8];
407
+ }
408
+ let t6;
409
+ if ($[11] !== scheme) {
410
+ t6 = badgeColors("secondary", scheme);
411
+ $[11] = scheme;
412
+ $[12] = t6;
413
+ } else {
414
+ t6 = $[12];
415
+ }
416
+ let t7;
417
+ if ($[13] !== t6.color) {
418
+ t7 = {
419
+ color: t6.color
420
+ };
421
+ $[13] = t6.color;
422
+ $[14] = t7;
423
+ } else {
424
+ t7 = $[14];
425
+ }
426
+ let t8;
427
+ if ($[15] !== t1 || $[16] !== t7) {
428
+ t8 = [t1, t7];
429
+ $[15] = t1;
430
+ $[16] = t7;
431
+ $[17] = t8;
432
+ } else {
433
+ t8 = $[17];
434
+ }
435
+ let t9;
436
+ if ($[18] !== T0 || $[19] !== children || $[20] !== t2 || $[21] !== t3 || $[22] !== t8) {
437
+ t9 = <T0 numberOfLines={t2} className={t3} style={t8}>{children}</T0>;
438
+ $[18] = T0;
439
+ $[19] = children;
440
+ $[20] = t2;
441
+ $[21] = t3;
442
+ $[22] = t8;
443
+ $[23] = t9;
444
+ } else {
445
+ t9 = $[23];
446
+ }
447
+ let t10;
448
+ if ($[24] !== T1 || $[25] !== t4 || $[26] !== t5 || $[27] !== t9) {
449
+ t10 = <T1 variant={t4} className={t5}>{t9}</T1>;
450
+ $[24] = T1;
451
+ $[25] = t4;
452
+ $[26] = t5;
453
+ $[27] = t9;
454
+ $[28] = t10;
455
+ } else {
456
+ t10 = $[28];
457
+ }
458
+ return t10;
459
+ }
@@ -0,0 +1,57 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { ScrollView } from "react-native";
3
+ import { Chip } from "../Chip";
4
+ import { cn } from "../cn";
5
+ /**
6
+ * A rail to jump between messages (web `chat-jump-rail`): a horizontal row of
7
+ * chips, one per item. Each chip is a 48 high button named by its label. Draws
8
+ * nothing for an empty list.
9
+ */
10
+ export function ChatJumpRail(t0) {
11
+ const $ = _c(11);
12
+ const {
13
+ items,
14
+ onJump,
15
+ className,
16
+ testID
17
+ } = t0;
18
+ if (items.length === 0) {
19
+ return null;
20
+ }
21
+ let t1;
22
+ if ($[0] !== className) {
23
+ t1 = cn("grow-0", className);
24
+ $[0] = className;
25
+ $[1] = t1;
26
+ } else {
27
+ t1 = $[1];
28
+ }
29
+ let t2;
30
+ if ($[2] !== items || $[3] !== onJump) {
31
+ let t3;
32
+ if ($[5] !== onJump) {
33
+ t3 = item => <Chip key={item.id} label={item.label} selected={false} onPress={() => onJump(item.id)} testID={`jump-${item.id}`} />;
34
+ $[5] = onJump;
35
+ $[6] = t3;
36
+ } else {
37
+ t3 = $[6];
38
+ }
39
+ t2 = items.map(t3);
40
+ $[2] = items;
41
+ $[3] = onJump;
42
+ $[4] = t2;
43
+ } else {
44
+ t2 = $[4];
45
+ }
46
+ let t3;
47
+ if ($[7] !== t1 || $[8] !== t2 || $[9] !== testID) {
48
+ t3 = <ScrollView testID={testID} horizontal={true} showsHorizontalScrollIndicator={false} keyboardShouldPersistTaps="handled" accessibilityRole="toolbar" className={t1} contentContainerClassName="gap-2 px-3 py-2">{t2}</ScrollView>;
49
+ $[7] = t1;
50
+ $[8] = t2;
51
+ $[9] = testID;
52
+ $[10] = t3;
53
+ } else {
54
+ t3 = $[10];
55
+ }
56
+ return t3;
57
+ }