@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
package/dist/Tabs.jsx ADDED
@@ -0,0 +1,385 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Children, createContext, isValidElement, useContext } from "react";
3
+ import { Pressable, View } from "react-native";
4
+ import Animated from "react-native-reanimated";
5
+ import { cn } from "./cn";
6
+ import { MIN_TOUCH_TARGET, tabColors, tabTrackStyle, tabTriggerSize, touchSlop, typeStyle } from "./controlStyles";
7
+ import { selectionHaptic } from "./haptics";
8
+ import { useControllableState } from "./primitives/use-controllable-state";
9
+ import { useTabIndicator, useTabLabelStyle } from "./tabIndicator";
10
+ import { useLargerText } from "./theme";
11
+ import { useScheme } from "./useScheme";
12
+
13
+ /** `pills` (default): separate pills, the `PillTabs` look. `segmented`: one track with the active segment raised. `soft`: wrapping pills, the active one filled. `pills` and `segmented` are as wide as their tabs, at the start, as on the web. */
14
+
15
+ const TabsContext = createContext(null);
16
+ const TabsListContext = createContext({
17
+ variant: "pills",
18
+ size: "default"
19
+ });
20
+
21
+ /** A trigger's place in its list, for the linked indicator and label colour. */
22
+ const TabIndexContext = createContext(0);
23
+ function useTabs(part) {
24
+ const context = useContext(TabsContext);
25
+ if (!context) {
26
+ throw new Error(`${part} must be inside Tabs.`);
27
+ }
28
+ return context;
29
+ }
30
+ /** Composable tabs with the web part names (`Tabs`, `TabsList`, `TabsTrigger`, `TabsContent`). For a flat options array use `PillTabs`. */
31
+ export function Tabs(t0) {
32
+ const $ = _c(21);
33
+ let className;
34
+ let onValueChange;
35
+ let props;
36
+ let t1;
37
+ let value;
38
+ if ($[0] !== t0) {
39
+ ({
40
+ value,
41
+ defaultValue: t1,
42
+ onValueChange,
43
+ className,
44
+ ...props
45
+ } = t0);
46
+ $[0] = t0;
47
+ $[1] = className;
48
+ $[2] = onValueChange;
49
+ $[3] = props;
50
+ $[4] = t1;
51
+ $[5] = value;
52
+ } else {
53
+ className = $[1];
54
+ onValueChange = $[2];
55
+ props = $[3];
56
+ t1 = $[4];
57
+ value = $[5];
58
+ }
59
+ const defaultValue = t1 === undefined ? "" : t1;
60
+ let t2;
61
+ if ($[6] !== defaultValue || $[7] !== onValueChange || $[8] !== value) {
62
+ t2 = {
63
+ value,
64
+ defaultValue,
65
+ onChange: onValueChange
66
+ };
67
+ $[6] = defaultValue;
68
+ $[7] = onValueChange;
69
+ $[8] = value;
70
+ $[9] = t2;
71
+ } else {
72
+ t2 = $[9];
73
+ }
74
+ const [current, setValue] = useControllableState(t2);
75
+ let t3;
76
+ if ($[10] !== current || $[11] !== setValue) {
77
+ t3 = {
78
+ value: current,
79
+ setValue
80
+ };
81
+ $[10] = current;
82
+ $[11] = setValue;
83
+ $[12] = t3;
84
+ } else {
85
+ t3 = $[12];
86
+ }
87
+ let t4;
88
+ if ($[13] !== className) {
89
+ t4 = cn("gap-3", className);
90
+ $[13] = className;
91
+ $[14] = t4;
92
+ } else {
93
+ t4 = $[14];
94
+ }
95
+ let t5;
96
+ if ($[15] !== props || $[16] !== t4) {
97
+ t5 = <View className={t4} {...props} />;
98
+ $[15] = props;
99
+ $[16] = t4;
100
+ $[17] = t5;
101
+ } else {
102
+ t5 = $[17];
103
+ }
104
+ let t6;
105
+ if ($[18] !== t3 || $[19] !== t5) {
106
+ t6 = <TabsContext.Provider value={t3}>{t5}</TabsContext.Provider>;
107
+ $[18] = t3;
108
+ $[19] = t5;
109
+ $[20] = t6;
110
+ } else {
111
+ t6 = $[20];
112
+ }
113
+ return t6;
114
+ }
115
+ export function TabsList(t0) {
116
+ const $ = _c(36);
117
+ let children;
118
+ let className;
119
+ let progress;
120
+ let props;
121
+ let style;
122
+ let t1;
123
+ let t2;
124
+ if ($[0] !== t0) {
125
+ ({
126
+ variant: t1,
127
+ size: t2,
128
+ progress,
129
+ className,
130
+ style,
131
+ children,
132
+ ...props
133
+ } = t0);
134
+ $[0] = t0;
135
+ $[1] = children;
136
+ $[2] = className;
137
+ $[3] = progress;
138
+ $[4] = props;
139
+ $[5] = style;
140
+ $[6] = t1;
141
+ $[7] = t2;
142
+ } else {
143
+ children = $[1];
144
+ className = $[2];
145
+ progress = $[3];
146
+ props = $[4];
147
+ style = $[5];
148
+ t1 = $[6];
149
+ t2 = $[7];
150
+ }
151
+ const variant = t1 === undefined ? "pills" : t1;
152
+ const size = t2 === undefined ? "default" : t2;
153
+ const scheme = useScheme();
154
+ const triggers = Children.toArray(children);
155
+ const indicator = useTabIndicator(progress, triggers.length);
156
+ const t3 = TabsListContext;
157
+ let t4;
158
+ if ($[8] !== indicator || $[9] !== progress || $[10] !== size || $[11] !== variant) {
159
+ t4 = {
160
+ variant,
161
+ size,
162
+ progress,
163
+ indicator
164
+ };
165
+ $[8] = indicator;
166
+ $[9] = progress;
167
+ $[10] = size;
168
+ $[11] = variant;
169
+ $[12] = t4;
170
+ } else {
171
+ t4 = $[12];
172
+ }
173
+ const T0 = View;
174
+ const t5 = "tablist";
175
+ const t6 = variant === "segmented" ? "max-w-full gap-[3px] self-start rounded-full p-[3px]" : variant === "soft" ? "flex-wrap items-center justify-center gap-1.5" : progress ? "max-w-full gap-1.5 self-start" : "max-w-full flex-wrap gap-1.5 self-start";
176
+ let t7;
177
+ if ($[13] !== className || $[14] !== t6) {
178
+ t7 = cn("flex-row", t6, className);
179
+ $[13] = className;
180
+ $[14] = t6;
181
+ $[15] = t7;
182
+ } else {
183
+ t7 = $[15];
184
+ }
185
+ let t8;
186
+ if ($[16] !== scheme || $[17] !== style || $[18] !== variant) {
187
+ t8 = variant === "segmented" ? [tabTrackStyle(scheme), style] : style;
188
+ $[16] = scheme;
189
+ $[17] = style;
190
+ $[18] = variant;
191
+ $[19] = t8;
192
+ } else {
193
+ t8 = $[19];
194
+ }
195
+ let t9;
196
+ if ($[20] !== indicator.measured || $[21] !== indicator.style || $[22] !== scheme || $[23] !== variant) {
197
+ t9 = indicator.measured ? <Animated.View pointerEvents="none" style={[{
198
+ position: "absolute",
199
+ left: 0,
200
+ borderRadius: 9999
201
+ }, {
202
+ backgroundColor: tabColors(variant, true, scheme).backgroundColor
203
+ }, indicator.style]} /> : null;
204
+ $[20] = indicator.measured;
205
+ $[21] = indicator.style;
206
+ $[22] = scheme;
207
+ $[23] = variant;
208
+ $[24] = t9;
209
+ } else {
210
+ t9 = $[24];
211
+ }
212
+ const t10 = triggers.map(_temp);
213
+ let t11;
214
+ if ($[25] !== T0 || $[26] !== props || $[27] !== t10 || $[28] !== t7 || $[29] !== t8 || $[30] !== t9) {
215
+ t11 = <T0 accessibilityRole={t5} className={t7} style={t8} {...props}>{t9}{t10}</T0>;
216
+ $[25] = T0;
217
+ $[26] = props;
218
+ $[27] = t10;
219
+ $[28] = t7;
220
+ $[29] = t8;
221
+ $[30] = t9;
222
+ $[31] = t11;
223
+ } else {
224
+ t11 = $[31];
225
+ }
226
+ let t12;
227
+ if ($[32] !== t11 || $[33] !== t3.Provider || $[34] !== t4) {
228
+ t12 = <t3.Provider value={t4}>{t11}</t3.Provider>;
229
+ $[32] = t11;
230
+ $[33] = t3.Provider;
231
+ $[34] = t4;
232
+ $[35] = t12;
233
+ } else {
234
+ t12 = $[35];
235
+ }
236
+ return t12;
237
+ }
238
+ function _temp(trigger, index) {
239
+ return <TabIndexContext.Provider key={isValidElement(trigger) && trigger.key !== null ? trigger.key : index} value={index}>{trigger}</TabIndexContext.Provider>;
240
+ }
241
+ export function TabsTrigger(t0) {
242
+ const $ = _c(20);
243
+ const {
244
+ value,
245
+ children,
246
+ disabled,
247
+ className,
248
+ minHeight,
249
+ testID,
250
+ accessibilityLabel
251
+ } = t0;
252
+ const {
253
+ value: current,
254
+ setValue
255
+ } = useTabs("TabsTrigger");
256
+ const {
257
+ variant,
258
+ size,
259
+ progress,
260
+ indicator
261
+ } = useContext(TabsListContext);
262
+ const index = useContext(TabIndexContext);
263
+ const largerText = useLargerText();
264
+ const scheme = useScheme();
265
+ const selected = current === value;
266
+ const colors = tabColors(variant, selected, scheme);
267
+ let t1;
268
+ if ($[0] !== scheme || $[1] !== variant) {
269
+ t1 = tabColors(variant, true, scheme);
270
+ $[0] = scheme;
271
+ $[1] = variant;
272
+ $[2] = t1;
273
+ } else {
274
+ t1 = $[2];
275
+ }
276
+ const t2 = t1.color;
277
+ let t3;
278
+ if ($[3] !== scheme || $[4] !== variant) {
279
+ t3 = tabColors(variant, false, scheme);
280
+ $[3] = scheme;
281
+ $[4] = variant;
282
+ $[5] = t3;
283
+ } else {
284
+ t3 = $[5];
285
+ }
286
+ let t4;
287
+ if ($[6] !== t1.color || $[7] !== t3.color) {
288
+ t4 = {
289
+ selected: t2,
290
+ muted: t3.color
291
+ };
292
+ $[6] = t1.color;
293
+ $[7] = t3.color;
294
+ $[8] = t4;
295
+ } else {
296
+ t4 = $[8];
297
+ }
298
+ const labelStyle = useTabLabelStyle(progress, index, t4, colors.color);
299
+ const trigger = tabTriggerSize(variant, size, largerText);
300
+ const height = minHeight ?? trigger.minHeight;
301
+ const medium = variant !== "soft";
302
+ const t5 = Boolean(disabled);
303
+ let t6;
304
+ if ($[9] !== selected || $[10] !== t5) {
305
+ t6 = {
306
+ selected,
307
+ disabled: t5
308
+ };
309
+ $[9] = selected;
310
+ $[10] = t5;
311
+ $[11] = t6;
312
+ } else {
313
+ t6 = $[11];
314
+ }
315
+ let t7;
316
+ if ($[12] !== selected || $[13] !== setValue || $[14] !== value) {
317
+ t7 = () => {
318
+ if (selected) {
319
+ return;
320
+ }
321
+ selectionHaptic();
322
+ setValue(value);
323
+ };
324
+ $[12] = selected;
325
+ $[13] = setValue;
326
+ $[14] = value;
327
+ $[15] = t7;
328
+ } else {
329
+ t7 = $[15];
330
+ }
331
+ let t8;
332
+ if ($[16] !== index || $[17] !== indicator || $[18] !== progress) {
333
+ t8 = progress ? indicator?.onLayout(index) : undefined;
334
+ $[16] = index;
335
+ $[17] = indicator;
336
+ $[18] = progress;
337
+ $[19] = t8;
338
+ } else {
339
+ t8 = $[19];
340
+ }
341
+ return <Pressable testID={testID} accessibilityRole="tab" accessibilityLabel={accessibilityLabel ?? (typeof children === "string" ? children : undefined)} accessibilityState={t6} hitSlop={touchSlop(MIN_TOUCH_TARGET, height)} disabled={disabled} onPress={t7} className={cn("shrink items-center justify-center rounded-full", trigger.className, variant === "pills" && "border border-white/40 dark:border-white/10", disabled ? "opacity-50" : "active:opacity-70", className)} style={{
342
+ backgroundColor: indicator?.measured ? "transparent" : colors.backgroundColor,
343
+ minHeight: height
344
+ }} onLayout={t8}>{typeof children === "string" || typeof children === "number" ? <Animated.Text numberOfLines={1} className={cn("text-center", medium ? "font-instrument-sans-medium" : "font-instrument-sans", trigger.textClassName)} style={[{
345
+ letterSpacing: trigger.letterSpacing
346
+ }, medium ? typeStyle("medium") : null, labelStyle]}>{children}</Animated.Text> : children}</Pressable>;
347
+ }
348
+ /** Renders only while its tab is active. */
349
+ export function TabsContent(t0) {
350
+ const $ = _c(7);
351
+ let className;
352
+ let props;
353
+ let value;
354
+ if ($[0] !== t0) {
355
+ ({
356
+ value,
357
+ className,
358
+ ...props
359
+ } = t0);
360
+ $[0] = t0;
361
+ $[1] = className;
362
+ $[2] = props;
363
+ $[3] = value;
364
+ } else {
365
+ className = $[1];
366
+ props = $[2];
367
+ value = $[3];
368
+ }
369
+ const {
370
+ value: current
371
+ } = useTabs("TabsContent");
372
+ if (current !== value) {
373
+ return null;
374
+ }
375
+ let t1;
376
+ if ($[4] !== className || $[5] !== props) {
377
+ t1 = <View className={className} {...props} />;
378
+ $[4] = className;
379
+ $[5] = props;
380
+ $[6] = t1;
381
+ } else {
382
+ t1 = $[6];
383
+ }
384
+ return t1;
385
+ }
@@ -0,0 +1,103 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import * as React from "react";
3
+ import { Input as PrimitiveInput } from "./primitives/input";
4
+ import { cn } from "./cn";
5
+ import { fieldStyle, fieldTextStyle, typeStyle } from "./controlStyles";
6
+ import { palette } from "./palette";
7
+ import { useLargerText } from "./theme";
8
+ import { useScheme } from "./useScheme";
9
+ /** Multiline `Input`: same fill, border, radius and type. Grows from 4 lines. */
10
+ const Textarea = React.forwardRef((t0, ref) => {
11
+ const $ = _c(27);
12
+ let className;
13
+ let placeholderTextColor;
14
+ let props;
15
+ let style;
16
+ let t1;
17
+ if ($[0] !== t0) {
18
+ ({
19
+ className,
20
+ placeholderTextColor,
21
+ numberOfLines: t1,
22
+ style,
23
+ ...props
24
+ } = t0);
25
+ $[0] = t0;
26
+ $[1] = className;
27
+ $[2] = placeholderTextColor;
28
+ $[3] = props;
29
+ $[4] = style;
30
+ $[5] = t1;
31
+ } else {
32
+ className = $[1];
33
+ placeholderTextColor = $[2];
34
+ props = $[3];
35
+ style = $[4];
36
+ t1 = $[5];
37
+ }
38
+ const numberOfLines = t1 === undefined ? 4 : t1;
39
+ const largerText = useLargerText();
40
+ const scheme = useScheme();
41
+ const t2 = placeholderTextColor ?? palette.fieldPlaceholder[scheme];
42
+ const t3 = largerText && "min-h-32 px-4 py-3 text-xl font-instrument-sans-medium";
43
+ let t4;
44
+ if ($[6] !== className || $[7] !== t3) {
45
+ t4 = cn("min-h-20 border px-3.5 py-2.5 text-base font-instrument-sans", t3, className);
46
+ $[6] = className;
47
+ $[7] = t3;
48
+ $[8] = t4;
49
+ } else {
50
+ t4 = $[8];
51
+ }
52
+ let t5;
53
+ if ($[9] !== scheme) {
54
+ t5 = fieldStyle(scheme);
55
+ $[9] = scheme;
56
+ $[10] = t5;
57
+ } else {
58
+ t5 = $[10];
59
+ }
60
+ let t6;
61
+ if ($[11] !== scheme) {
62
+ t6 = fieldTextStyle(scheme);
63
+ $[11] = scheme;
64
+ $[12] = t6;
65
+ } else {
66
+ t6 = $[12];
67
+ }
68
+ let t7;
69
+ if ($[13] !== largerText) {
70
+ t7 = largerText ? typeStyle("medium") : null;
71
+ $[13] = largerText;
72
+ $[14] = t7;
73
+ } else {
74
+ t7 = $[14];
75
+ }
76
+ let t8;
77
+ if ($[15] !== style || $[16] !== t5 || $[17] !== t6 || $[18] !== t7) {
78
+ t8 = [t5, t6, t7, style];
79
+ $[15] = style;
80
+ $[16] = t5;
81
+ $[17] = t6;
82
+ $[18] = t7;
83
+ $[19] = t8;
84
+ } else {
85
+ t8 = $[19];
86
+ }
87
+ let t9;
88
+ if ($[20] !== numberOfLines || $[21] !== props || $[22] !== ref || $[23] !== t2 || $[24] !== t4 || $[25] !== t8) {
89
+ t9 = <PrimitiveInput ref={ref} multiline={true} numberOfLines={numberOfLines} textAlignVertical="top" placeholderTextColor={t2} className={t4} style={t8} {...props} />;
90
+ $[20] = numberOfLines;
91
+ $[21] = props;
92
+ $[22] = ref;
93
+ $[23] = t2;
94
+ $[24] = t4;
95
+ $[25] = t8;
96
+ $[26] = t9;
97
+ } else {
98
+ t9 = $[26];
99
+ }
100
+ return t9;
101
+ });
102
+ Textarea.displayName = "Textarea";
103
+ export { Textarea };
@@ -0,0 +1,78 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { IconMoon, IconSun } from "@tabler/icons-react-native";
3
+ import { useColorScheme } from "nativewind";
4
+ import { HeaderIconButton } from "./HeaderIconButton";
5
+ import { useLargerText } from "./theme";
6
+ import { tokens } from "./tokens";
7
+ import { useScheme } from "./useScheme";
8
+ /** Logged when NativeWind's `setColorScheme` throws. */
9
+ const DARK_MODE_CLASS_HINT = 'ThemeToggle could not set the colour scheme. NativeWind throws while Tailwind darkMode is "media" (the default): set darkMode: "class" in tailwind.config.js. See the @vvedantb/native-ui README, Theme.';
10
+
11
+ /**
12
+ * A `HeaderIconButton` that switches between light and dark with NativeWind's
13
+ * `setColorScheme`, the scheme `useScheme` reads. It shows and names the
14
+ * scheme it switches to: a moon and "Switch to dark mode" in light, a sun and
15
+ * "Switch to light mode" in dark. The choice lasts only as long as NativeWind
16
+ * keeps it; an app that restores it on the next launch stores
17
+ * `useColorScheme().colorScheme` itself.
18
+ *
19
+ * `setColorScheme` throws unless the app sets Tailwind `darkMode: "class"`.
20
+ * The press then logs that fix with `console.error` and leaves the scheme as
21
+ * it is, instead of throwing from the press handler.
22
+ */
23
+ export function ThemeToggle(t0) {
24
+ const $ = _c(12);
25
+ const {
26
+ testID
27
+ } = t0;
28
+ const {
29
+ setColorScheme
30
+ } = useColorScheme();
31
+ const scheme = useScheme();
32
+ const largerText = useLargerText();
33
+ const next = scheme === "dark" ? "light" : "dark";
34
+ const Icon = next === "dark" ? IconMoon : IconSun;
35
+ let t1;
36
+ if ($[0] !== next || $[1] !== setColorScheme) {
37
+ t1 = () => {
38
+ ;
39
+ try {
40
+ setColorScheme(next);
41
+ } catch (t2) {
42
+ const error = t2;
43
+ console.error(DARK_MODE_CLASS_HINT, error);
44
+ }
45
+ };
46
+ $[0] = next;
47
+ $[1] = setColorScheme;
48
+ $[2] = t1;
49
+ } else {
50
+ t1 = $[2];
51
+ }
52
+ const toggle = t1;
53
+ const t2 = `Switch to ${next} mode`;
54
+ const t3 = largerText ? 26 : 22;
55
+ const t4 = tokens.color.foreground[scheme];
56
+ let t5;
57
+ if ($[3] !== Icon || $[4] !== t3 || $[5] !== t4) {
58
+ t5 = <Icon size={t3} color={t4} />;
59
+ $[3] = Icon;
60
+ $[4] = t3;
61
+ $[5] = t4;
62
+ $[6] = t5;
63
+ } else {
64
+ t5 = $[6];
65
+ }
66
+ let t6;
67
+ if ($[7] !== t2 || $[8] !== t5 || $[9] !== testID || $[10] !== toggle) {
68
+ t6 = <HeaderIconButton label={t2} testID={testID} onPress={toggle}>{t5}</HeaderIconButton>;
69
+ $[7] = t2;
70
+ $[8] = t5;
71
+ $[9] = testID;
72
+ $[10] = toggle;
73
+ $[11] = t6;
74
+ } else {
75
+ t6 = $[11];
76
+ }
77
+ return t6;
78
+ }