@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/Card.jsx ADDED
@@ -0,0 +1,371 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Pressable, Text, View } from "react-native";
3
+ import { Card as PrimitiveCard, CardContent as PrimitiveCardContent, CardHeader as PrimitiveCardHeader, CardTitle as PrimitiveCardTitle } from "./primitives/card";
4
+ import { cn } from "./cn";
5
+ import { cardStyle, sizeStyle, textStyle, typeStyle } from "./controlStyles";
6
+ import { useAccentColor, useLargerText } from "./theme";
7
+ import { useScheme } from "./useScheme";
8
+ export function Card(t0) {
9
+ const $ = _c(30);
10
+ const {
11
+ children,
12
+ title,
13
+ description,
14
+ action,
15
+ leftIcon: Icon,
16
+ className,
17
+ onPress,
18
+ accessibilityLabel,
19
+ testID
20
+ } = t0;
21
+ const largerText = useLargerText();
22
+ const accentColor = useAccentColor();
23
+ const scheme = useScheme();
24
+ const hasHeader = Boolean(title || action);
25
+ const titleSize = largerText ? "text-2xl" : "text-base";
26
+ const t1 = onPress ? undefined : testID;
27
+ let t2;
28
+ if ($[0] !== className) {
29
+ t2 = cn("gap-4 overflow-hidden border-0 py-4", className);
30
+ $[0] = className;
31
+ $[1] = t2;
32
+ } else {
33
+ t2 = $[1];
34
+ }
35
+ let t3;
36
+ if ($[2] !== scheme) {
37
+ t3 = cardStyle(scheme);
38
+ $[2] = scheme;
39
+ $[3] = t3;
40
+ } else {
41
+ t3 = $[3];
42
+ }
43
+ let t4;
44
+ if ($[4] !== Icon || $[5] !== accentColor || $[6] !== action || $[7] !== description || $[8] !== hasHeader || $[9] !== largerText || $[10] !== scheme || $[11] !== title || $[12] !== titleSize) {
45
+ t4 = hasHeader && <PrimitiveCardHeader className="px-4 py-0"><View className="flex-row items-center justify-between"><View className="flex-row items-center gap-2">{Icon && <Icon size={largerText ? 28 : 24} color={accentColor} />}{title ? <PrimitiveCardTitle className={cn("font-instrument-sans-semibold leading-tight", titleSize)} style={[textStyle("foreground", scheme), sizeStyle(titleSize, "tight"), typeStyle("semibold")]}>{title}</PrimitiveCardTitle> : null}</View>{action}</View>{description ? <CardDescription>{description}</CardDescription> : null}</PrimitiveCardHeader>;
46
+ $[4] = Icon;
47
+ $[5] = accentColor;
48
+ $[6] = action;
49
+ $[7] = description;
50
+ $[8] = hasHeader;
51
+ $[9] = largerText;
52
+ $[10] = scheme;
53
+ $[11] = title;
54
+ $[12] = titleSize;
55
+ $[13] = t4;
56
+ } else {
57
+ t4 = $[13];
58
+ }
59
+ const t5 = hasHeader && "pt-0";
60
+ let t6;
61
+ if ($[14] !== t5) {
62
+ t6 = cn(t5, "px-4");
63
+ $[14] = t5;
64
+ $[15] = t6;
65
+ } else {
66
+ t6 = $[15];
67
+ }
68
+ let t7;
69
+ if ($[16] !== children || $[17] !== t6) {
70
+ t7 = <PrimitiveCardContent className={t6}>{children}</PrimitiveCardContent>;
71
+ $[16] = children;
72
+ $[17] = t6;
73
+ $[18] = t7;
74
+ } else {
75
+ t7 = $[18];
76
+ }
77
+ let t8;
78
+ if ($[19] !== t1 || $[20] !== t2 || $[21] !== t3 || $[22] !== t4 || $[23] !== t7) {
79
+ t8 = <PrimitiveCard testID={t1} className={t2} style={t3}>{t4}{t7}</PrimitiveCard>;
80
+ $[19] = t1;
81
+ $[20] = t2;
82
+ $[21] = t3;
83
+ $[22] = t4;
84
+ $[23] = t7;
85
+ $[24] = t8;
86
+ } else {
87
+ t8 = $[24];
88
+ }
89
+ const card = t8;
90
+ if (!onPress) {
91
+ return card;
92
+ }
93
+ const t9 = accessibilityLabel ?? title;
94
+ let t10;
95
+ if ($[25] !== card || $[26] !== onPress || $[27] !== t9 || $[28] !== testID) {
96
+ t10 = <Pressable testID={testID} accessibilityRole="button" accessibilityLabel={t9} onPress={onPress} className="active:opacity-70">{card}</Pressable>;
97
+ $[25] = card;
98
+ $[26] = onPress;
99
+ $[27] = t9;
100
+ $[28] = testID;
101
+ $[29] = t10;
102
+ } else {
103
+ t10 = $[29];
104
+ }
105
+ return t10;
106
+ }
107
+
108
+ // Parts for composing a card body with the web part names. They sit inside
109
+ // `Card`'s padded content, so they add no side padding of their own. Text
110
+ // colours are styles that follow the colour scheme; recolour with `style`.
111
+
112
+ export function CardHeader(t0) {
113
+ const $ = _c(8);
114
+ let className;
115
+ let props;
116
+ if ($[0] !== t0) {
117
+ ({
118
+ className,
119
+ ...props
120
+ } = t0);
121
+ $[0] = t0;
122
+ $[1] = className;
123
+ $[2] = props;
124
+ } else {
125
+ className = $[1];
126
+ props = $[2];
127
+ }
128
+ let t1;
129
+ if ($[3] !== className) {
130
+ t1 = cn("gap-1 pb-3", className);
131
+ $[3] = className;
132
+ $[4] = t1;
133
+ } else {
134
+ t1 = $[4];
135
+ }
136
+ let t2;
137
+ if ($[5] !== props || $[6] !== t1) {
138
+ t2 = <View className={t1} {...props} />;
139
+ $[5] = props;
140
+ $[6] = t1;
141
+ $[7] = t2;
142
+ } else {
143
+ t2 = $[7];
144
+ }
145
+ return t2;
146
+ }
147
+
148
+ /**
149
+ * Web `font-semibold leading-none` at the inherited 16. The line height is
150
+ * `leading-tight` (20), not 16: below the face's ascent and descent, iOS and
151
+ * Android can clip the glyphs.
152
+ */
153
+ export function CardTitle(t0) {
154
+ const $ = _c(20);
155
+ let className;
156
+ let props;
157
+ let style;
158
+ if ($[0] !== t0) {
159
+ ({
160
+ className,
161
+ style,
162
+ ...props
163
+ } = t0);
164
+ $[0] = t0;
165
+ $[1] = className;
166
+ $[2] = props;
167
+ $[3] = style;
168
+ } else {
169
+ className = $[1];
170
+ props = $[2];
171
+ style = $[3];
172
+ }
173
+ const largerText = useLargerText();
174
+ const scheme = useScheme();
175
+ const size = largerText ? "text-2xl" : "text-base";
176
+ let t1;
177
+ if ($[4] !== className || $[5] !== size) {
178
+ t1 = cn("font-instrument-sans-semibold leading-tight", size, className);
179
+ $[4] = className;
180
+ $[5] = size;
181
+ $[6] = t1;
182
+ } else {
183
+ t1 = $[6];
184
+ }
185
+ let t2;
186
+ if ($[7] !== scheme) {
187
+ t2 = textStyle("foreground", scheme);
188
+ $[7] = scheme;
189
+ $[8] = t2;
190
+ } else {
191
+ t2 = $[8];
192
+ }
193
+ let t3;
194
+ if ($[9] !== size) {
195
+ t3 = sizeStyle(size, "tight");
196
+ $[9] = size;
197
+ $[10] = t3;
198
+ } else {
199
+ t3 = $[10];
200
+ }
201
+ let t4;
202
+ if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
203
+ t4 = typeStyle("semibold");
204
+ $[11] = t4;
205
+ } else {
206
+ t4 = $[11];
207
+ }
208
+ let t5;
209
+ if ($[12] !== style || $[13] !== t2 || $[14] !== t3) {
210
+ t5 = [t2, t3, t4, style];
211
+ $[12] = style;
212
+ $[13] = t2;
213
+ $[14] = t3;
214
+ $[15] = t5;
215
+ } else {
216
+ t5 = $[15];
217
+ }
218
+ let t6;
219
+ if ($[16] !== props || $[17] !== t1 || $[18] !== t5) {
220
+ t6 = <Text accessibilityRole="header" className={t1} style={t5} {...props} />;
221
+ $[16] = props;
222
+ $[17] = t1;
223
+ $[18] = t5;
224
+ $[19] = t6;
225
+ } else {
226
+ t6 = $[19];
227
+ }
228
+ return t6;
229
+ }
230
+
231
+ /** Web `text-sm` (14 / 20) in the muted colour. */
232
+ export function CardDescription(t0) {
233
+ const $ = _c(19);
234
+ let className;
235
+ let props;
236
+ let style;
237
+ if ($[0] !== t0) {
238
+ ({
239
+ className,
240
+ style,
241
+ ...props
242
+ } = t0);
243
+ $[0] = t0;
244
+ $[1] = className;
245
+ $[2] = props;
246
+ $[3] = style;
247
+ } else {
248
+ className = $[1];
249
+ props = $[2];
250
+ style = $[3];
251
+ }
252
+ const largerText = useLargerText();
253
+ const scheme = useScheme();
254
+ const size = largerText ? "text-lg" : "text-sm";
255
+ let t1;
256
+ if ($[4] !== className || $[5] !== size) {
257
+ t1 = cn("font-instrument-sans", size, className);
258
+ $[4] = className;
259
+ $[5] = size;
260
+ $[6] = t1;
261
+ } else {
262
+ t1 = $[6];
263
+ }
264
+ let t2;
265
+ if ($[7] !== scheme) {
266
+ t2 = textStyle("muted", scheme);
267
+ $[7] = scheme;
268
+ $[8] = t2;
269
+ } else {
270
+ t2 = $[8];
271
+ }
272
+ let t3;
273
+ if ($[9] !== size) {
274
+ t3 = sizeStyle(size);
275
+ $[9] = size;
276
+ $[10] = t3;
277
+ } else {
278
+ t3 = $[10];
279
+ }
280
+ let t4;
281
+ if ($[11] !== style || $[12] !== t2 || $[13] !== t3) {
282
+ t4 = [t2, t3, style];
283
+ $[11] = style;
284
+ $[12] = t2;
285
+ $[13] = t3;
286
+ $[14] = t4;
287
+ } else {
288
+ t4 = $[14];
289
+ }
290
+ let t5;
291
+ if ($[15] !== props || $[16] !== t1 || $[17] !== t4) {
292
+ t5 = <Text className={t1} style={t4} {...props} />;
293
+ $[15] = props;
294
+ $[16] = t1;
295
+ $[17] = t4;
296
+ $[18] = t5;
297
+ } else {
298
+ t5 = $[18];
299
+ }
300
+ return t5;
301
+ }
302
+ export function CardContent(t0) {
303
+ const $ = _c(8);
304
+ let className;
305
+ let props;
306
+ if ($[0] !== t0) {
307
+ ({
308
+ className,
309
+ ...props
310
+ } = t0);
311
+ $[0] = t0;
312
+ $[1] = className;
313
+ $[2] = props;
314
+ } else {
315
+ className = $[1];
316
+ props = $[2];
317
+ }
318
+ let t1;
319
+ if ($[3] !== className) {
320
+ t1 = cn("gap-3", className);
321
+ $[3] = className;
322
+ $[4] = t1;
323
+ } else {
324
+ t1 = $[4];
325
+ }
326
+ let t2;
327
+ if ($[5] !== props || $[6] !== t1) {
328
+ t2 = <View className={t1} {...props} />;
329
+ $[5] = props;
330
+ $[6] = t1;
331
+ $[7] = t2;
332
+ } else {
333
+ t2 = $[7];
334
+ }
335
+ return t2;
336
+ }
337
+ export function CardFooter(t0) {
338
+ const $ = _c(8);
339
+ let className;
340
+ let props;
341
+ if ($[0] !== t0) {
342
+ ({
343
+ className,
344
+ ...props
345
+ } = t0);
346
+ $[0] = t0;
347
+ $[1] = className;
348
+ $[2] = props;
349
+ } else {
350
+ className = $[1];
351
+ props = $[2];
352
+ }
353
+ let t1;
354
+ if ($[3] !== className) {
355
+ t1 = cn("flex-row items-center justify-end gap-2 pt-4", className);
356
+ $[3] = className;
357
+ $[4] = t1;
358
+ } else {
359
+ t1 = $[4];
360
+ }
361
+ let t2;
362
+ if ($[5] !== props || $[6] !== t1) {
363
+ t2 = <View className={t1} {...props} />;
364
+ $[5] = props;
365
+ $[6] = t1;
366
+ $[7] = t2;
367
+ } else {
368
+ t2 = $[7];
369
+ }
370
+ return t2;
371
+ }
@@ -0,0 +1,177 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Pressable } from "react-native";
3
+ import { IconCheck, IconMinus } from "@tabler/icons-react-native";
4
+ import { cn } from "./cn";
5
+ import { checkboxColors, touchSlop } from "./controlStyles";
6
+ import { selectionHaptic } from "./haptics";
7
+ import { useLargerText } from "./theme";
8
+ import { useScheme } from "./useScheme";
9
+ /**
10
+ * Controlled checkbox with a Pressable and a Tabler check, as the web
11
+ * `Checkbox` (`checked` / `onCheckedChange`). Colours from `checkboxColors`:
12
+ * the palette primary when checked, as on the web (not the theme accent).
13
+ * 16 square with a 14 check, as on the web (24 and 18 with larger text), plus
14
+ * a hit slop (`touchSlop`) that makes the target 44.
15
+ */
16
+ export function Checkbox(t0) {
17
+ const $ = _c(47);
18
+ let checked;
19
+ let className;
20
+ let disabled;
21
+ let icon;
22
+ let onCheckedChange;
23
+ let props;
24
+ let style;
25
+ if ($[0] !== t0) {
26
+ ({
27
+ checked,
28
+ onCheckedChange,
29
+ icon,
30
+ disabled,
31
+ className,
32
+ style,
33
+ ...props
34
+ } = t0);
35
+ $[0] = t0;
36
+ $[1] = checked;
37
+ $[2] = className;
38
+ $[3] = disabled;
39
+ $[4] = icon;
40
+ $[5] = onCheckedChange;
41
+ $[6] = props;
42
+ $[7] = style;
43
+ } else {
44
+ checked = $[1];
45
+ className = $[2];
46
+ disabled = $[3];
47
+ icon = $[4];
48
+ onCheckedChange = $[5];
49
+ props = $[6];
50
+ style = $[7];
51
+ }
52
+ const scheme = useScheme();
53
+ const largerText = useLargerText();
54
+ const on = checked !== false;
55
+ let t1;
56
+ if ($[8] !== on || $[9] !== scheme) {
57
+ t1 = checkboxColors(on, scheme);
58
+ $[8] = on;
59
+ $[9] = scheme;
60
+ $[10] = t1;
61
+ } else {
62
+ t1 = $[10];
63
+ }
64
+ let color;
65
+ let fill;
66
+ if ($[11] !== t1) {
67
+ ({
68
+ color,
69
+ ...fill
70
+ } = t1);
71
+ $[11] = t1;
72
+ $[12] = color;
73
+ $[13] = fill;
74
+ } else {
75
+ color = $[12];
76
+ fill = $[13];
77
+ }
78
+ const t2 = largerText ? 6 : 4;
79
+ let t3;
80
+ if ($[14] !== fill || $[15] !== t2) {
81
+ t3 = {
82
+ borderRadius: t2,
83
+ ...fill
84
+ };
85
+ $[14] = fill;
86
+ $[15] = t2;
87
+ $[16] = t3;
88
+ } else {
89
+ t3 = $[16];
90
+ }
91
+ const boxStyle = t3;
92
+ const box = largerText ? 24 : 16;
93
+ const iconSize = largerText ? 18 : 14;
94
+ const t4 = checked === "indeterminate" ? "mixed" : checked;
95
+ const t5 = Boolean(disabled);
96
+ let t6;
97
+ if ($[17] !== t4 || $[18] !== t5) {
98
+ t6 = {
99
+ checked: t4,
100
+ disabled: t5
101
+ };
102
+ $[17] = t4;
103
+ $[18] = t5;
104
+ $[19] = t6;
105
+ } else {
106
+ t6 = $[19];
107
+ }
108
+ let t7;
109
+ if ($[20] !== box) {
110
+ t7 = touchSlop(box);
111
+ $[20] = box;
112
+ $[21] = t7;
113
+ } else {
114
+ t7 = $[21];
115
+ }
116
+ let t8;
117
+ if ($[22] !== checked || $[23] !== onCheckedChange) {
118
+ t8 = () => {
119
+ selectionHaptic();
120
+ onCheckedChange?.(checked !== true);
121
+ };
122
+ $[22] = checked;
123
+ $[23] = onCheckedChange;
124
+ $[24] = t8;
125
+ } else {
126
+ t8 = $[24];
127
+ }
128
+ const t9 = largerText ? "h-6 w-6" : "h-4 w-4";
129
+ const t10 = disabled && "opacity-50";
130
+ let t11;
131
+ if ($[25] !== className || $[26] !== t10 || $[27] !== t9) {
132
+ t11 = cn("items-center justify-center border active:opacity-70", t9, t10, className);
133
+ $[25] = className;
134
+ $[26] = t10;
135
+ $[27] = t9;
136
+ $[28] = t11;
137
+ } else {
138
+ t11 = $[28];
139
+ }
140
+ let t12;
141
+ if ($[29] !== boxStyle || $[30] !== style) {
142
+ t12 = typeof style === "function" ? state => [boxStyle, style(state)] : [boxStyle, style];
143
+ $[29] = boxStyle;
144
+ $[30] = style;
145
+ $[31] = t12;
146
+ } else {
147
+ t12 = $[31];
148
+ }
149
+ let t13;
150
+ if ($[32] !== checked || $[33] !== color || $[34] !== icon || $[35] !== iconSize || $[36] !== on) {
151
+ t13 = on ? icon ?? (checked === "indeterminate" ? <IconMinus size={iconSize} color={color} strokeWidth={2} /> : <IconCheck size={iconSize} color={color} strokeWidth={2} />) : null;
152
+ $[32] = checked;
153
+ $[33] = color;
154
+ $[34] = icon;
155
+ $[35] = iconSize;
156
+ $[36] = on;
157
+ $[37] = t13;
158
+ } else {
159
+ t13 = $[37];
160
+ }
161
+ let t14;
162
+ if ($[38] !== disabled || $[39] !== props || $[40] !== t11 || $[41] !== t12 || $[42] !== t13 || $[43] !== t6 || $[44] !== t7 || $[45] !== t8) {
163
+ t14 = <Pressable accessibilityRole="checkbox" accessibilityState={t6} hitSlop={t7} disabled={disabled} onPress={t8} className={t11} style={t12} {...props}>{t13}</Pressable>;
164
+ $[38] = disabled;
165
+ $[39] = props;
166
+ $[40] = t11;
167
+ $[41] = t12;
168
+ $[42] = t13;
169
+ $[43] = t6;
170
+ $[44] = t7;
171
+ $[45] = t8;
172
+ $[46] = t14;
173
+ } else {
174
+ t14 = $[46];
175
+ }
176
+ return t14;
177
+ }
package/dist/Chip.jsx ADDED
@@ -0,0 +1,79 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { Pressable, Text } from "react-native";
3
+ import { textStyle, typeStyle } from "./controlStyles";
4
+ import { useLargerText } from "./theme";
5
+ import { useScheme } from "./useScheme";
6
+ export function Chip(t0) {
7
+ const $ = _c(19);
8
+ const {
9
+ label,
10
+ selected,
11
+ onPress,
12
+ testID,
13
+ round: t1
14
+ } = t0;
15
+ const round = t1 === undefined ? false : t1;
16
+ const largerText = useLargerText();
17
+ const scheme = useScheme();
18
+ const size = round ? largerText ? "h-14 w-14" : "h-12 w-12" : largerText ? "min-h-14 px-5 py-3" : "min-h-12 px-4 py-2";
19
+ let t2;
20
+ if ($[0] !== selected) {
21
+ t2 = {
22
+ selected
23
+ };
24
+ $[0] = selected;
25
+ $[1] = t2;
26
+ } else {
27
+ t2 = $[1];
28
+ }
29
+ const t3 = `items-center justify-center rounded-full border border-white/40 active:opacity-70 dark:border-white/10 ${size} ${selected ? "bg-pink-100 dark:bg-pink-900/40" : "bg-secondary"}`;
30
+ const t4 = `font-instrument-sans-semibold ${largerText ? "text-xl" : "text-lg"} ${selected ? "text-pink-700 dark:text-pink-300" : ""}`;
31
+ let t5;
32
+ if ($[2] !== scheme || $[3] !== selected) {
33
+ t5 = selected ? null : textStyle("muted", scheme);
34
+ $[2] = scheme;
35
+ $[3] = selected;
36
+ $[4] = t5;
37
+ } else {
38
+ t5 = $[4];
39
+ }
40
+ let t6;
41
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
42
+ t6 = typeStyle("semibold");
43
+ $[5] = t6;
44
+ } else {
45
+ t6 = $[5];
46
+ }
47
+ let t7;
48
+ if ($[6] !== t5) {
49
+ t7 = [t5, t6];
50
+ $[6] = t5;
51
+ $[7] = t7;
52
+ } else {
53
+ t7 = $[7];
54
+ }
55
+ let t8;
56
+ if ($[8] !== label || $[9] !== t4 || $[10] !== t7) {
57
+ t8 = <Text className={t4} style={t7}>{label}</Text>;
58
+ $[8] = label;
59
+ $[9] = t4;
60
+ $[10] = t7;
61
+ $[11] = t8;
62
+ } else {
63
+ t8 = $[11];
64
+ }
65
+ let t9;
66
+ if ($[12] !== label || $[13] !== onPress || $[14] !== t2 || $[15] !== t3 || $[16] !== t8 || $[17] !== testID) {
67
+ t9 = <Pressable testID={testID} accessibilityRole="button" accessibilityLabel={label} accessibilityState={t2} onPress={onPress} className={t3}>{t8}</Pressable>;
68
+ $[12] = label;
69
+ $[13] = onPress;
70
+ $[14] = t2;
71
+ $[15] = t3;
72
+ $[16] = t8;
73
+ $[17] = testID;
74
+ $[18] = t9;
75
+ } else {
76
+ t9 = $[18];
77
+ }
78
+ return t9;
79
+ }