@streamplace/components 0.7.26 → 0.7.29

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 (61) hide show
  1. package/dist/components/chat/chat-box.js +2 -2
  2. package/dist/components/chat/chat.js +1 -1
  3. package/dist/components/mobile-player/ui/autoplay-button.js +1 -0
  4. package/dist/components/mobile-player/ui/viewer-context-menu.js +1 -1
  5. package/dist/components/mobile-player/ui/viewer-loading-overlay.js +2 -2
  6. package/dist/components/mobile-player/use-webrtc.js +37 -1
  7. package/dist/components/mobile-player/video.native.js +10 -1
  8. package/dist/components/ui/button.js +107 -155
  9. package/dist/components/ui/dialog.js +83 -116
  10. package/dist/components/ui/dropdown.js +41 -18
  11. package/dist/components/ui/input.js +53 -128
  12. package/dist/components/ui/primitives/button.js +0 -2
  13. package/dist/components/ui/primitives/modal.js +2 -2
  14. package/dist/components/ui/primitives/text.js +48 -8
  15. package/dist/components/ui/text.js +37 -66
  16. package/dist/components/ui/toast.js +78 -40
  17. package/dist/components/ui/view.js +28 -41
  18. package/dist/crypto-polyfill.js +0 -0
  19. package/dist/crypto-polyfill.native.js +24 -0
  20. package/dist/index.js +1 -0
  21. package/dist/lib/theme/index.js +1 -2
  22. package/dist/lib/theme/theme.js +106 -54
  23. package/dist/lib/theme/tokens.js +94 -1
  24. package/dist/livestream-store/chat.js +0 -2
  25. package/dist/livestream-store/stream-key.js +1 -1
  26. package/dist/player-store/player-provider.js +10 -2
  27. package/dist/player-store/single-player-provider.js +1 -1
  28. package/dist/streamplace-store/stream.js +1 -1
  29. package/dist/ui/index.js +2 -3
  30. package/node-compile-cache/v22.15.0-x64-efe9a9df-0/37be0eec +0 -0
  31. package/package.json +3 -2
  32. package/src/components/chat/chat-box.tsx +6 -3
  33. package/src/components/chat/chat.tsx +1 -0
  34. package/src/components/mobile-player/ui/autoplay-button.tsx +1 -0
  35. package/src/components/mobile-player/ui/viewer-context-menu.tsx +2 -2
  36. package/src/components/mobile-player/ui/viewer-loading-overlay.tsx +2 -2
  37. package/src/components/mobile-player/use-webrtc.tsx +41 -1
  38. package/src/components/mobile-player/video.native.tsx +19 -4
  39. package/src/components/ui/button.tsx +110 -172
  40. package/src/components/ui/dialog.tsx +96 -138
  41. package/src/components/ui/dropdown.tsx +60 -22
  42. package/src/components/ui/input.tsx +57 -144
  43. package/src/components/ui/primitives/button.tsx +0 -2
  44. package/src/components/ui/primitives/modal.tsx +0 -2
  45. package/src/components/ui/primitives/text.tsx +51 -8
  46. package/src/components/ui/text.tsx +42 -67
  47. package/src/components/ui/toast.tsx +108 -90
  48. package/src/components/ui/view.tsx +27 -41
  49. package/src/crypto-polyfill.native.tsx +24 -0
  50. package/src/crypto-polyfill.tsx +0 -0
  51. package/src/index.tsx +2 -0
  52. package/src/lib/theme/index.ts +0 -2
  53. package/src/lib/theme/theme.tsx +179 -72
  54. package/src/lib/theme/tokens.ts +97 -0
  55. package/src/livestream-store/chat.tsx +0 -3
  56. package/src/livestream-store/stream-key.tsx +1 -1
  57. package/src/player-store/player-provider.tsx +13 -1
  58. package/src/player-store/single-player-provider.tsx +1 -1
  59. package/src/streamplace-store/stream.tsx +1 -1
  60. package/src/ui/index.ts +0 -2
  61. package/tsconfig.tsbuildinfo +1 -1
@@ -1,8 +1,9 @@
1
1
  import { cva, type VariantProps } from "class-variance-authority";
2
2
  import { X } from "lucide-react-native";
3
3
  import React, { forwardRef } from "react";
4
- import { Platform, StyleSheet, Text } from "react-native";
4
+ import { Platform, Text } from "react-native";
5
5
  import { useTheme } from "../../lib/theme/theme";
6
+ import * as zero from "../../ui";
6
7
  import { createThemedIcon } from "./icons";
7
8
  import { ModalPrimitive, ModalPrimitiveProps } from "./primitives/modal";
8
9
 
@@ -67,10 +68,70 @@ export const Dialog = forwardRef<any, DialogProps>(
67
68
  },
68
69
  ref,
69
70
  ) => {
70
- const { theme } = useTheme();
71
-
72
- // Create dynamic styles based on theme
73
- const styles = React.useMemo(() => createStyles(theme), [theme]);
71
+ const { zero: zt, theme } = useTheme();
72
+
73
+ // Content styles using theme.zero
74
+ const contentStyles = React.useMemo(() => {
75
+ const baseStyle = [
76
+ zt.bg.card,
77
+ zero.r.lg,
78
+ zero.shadows.lg,
79
+ { maxHeight: "90%", maxWidth: "90%" },
80
+ ];
81
+
82
+ const variantStyle = (() => {
83
+ switch (variant) {
84
+ case "sheet":
85
+ return [
86
+ { borderRadius: zero.borderRadius.xl },
87
+ {
88
+ borderBottomLeftRadius: 0,
89
+ borderBottomRightRadius: 0,
90
+ marginTop: "auto",
91
+ marginBottom: 0,
92
+ maxHeight: "80%",
93
+ width: "100%",
94
+ maxWidth: "100%",
95
+ },
96
+ ];
97
+ case "fullscreen":
98
+ return [
99
+ {
100
+ width: "100%",
101
+ height: "100%",
102
+ maxWidth: "100%",
103
+ maxHeight: "100%",
104
+ borderRadius: 0,
105
+ margin: 0,
106
+ },
107
+ ];
108
+ default:
109
+ return [];
110
+ }
111
+ })();
112
+
113
+ const sizeStyle = (() => {
114
+ switch (size) {
115
+ case "sm":
116
+ return { minWidth: 300, minHeight: 200 };
117
+ case "lg":
118
+ return { minWidth: 500, minHeight: 400 };
119
+ case "xl":
120
+ return { minWidth: 600, minHeight: 500 };
121
+ case "full":
122
+ return {
123
+ width: "95%",
124
+ height: "95%",
125
+ maxWidth: "95%",
126
+ maxHeight: "95%",
127
+ };
128
+ default:
129
+ return { minWidth: 400, minHeight: 300 };
130
+ }
131
+ })();
132
+
133
+ return [baseStyle, variantStyle, sizeStyle].flat();
134
+ }, [variant, size, zero]);
74
135
 
75
136
  const handleClose = React.useCallback(() => {
76
137
  if (onClose) {
@@ -112,27 +173,38 @@ export const Dialog = forwardRef<any, DialogProps>(
112
173
  <ModalPrimitive.Overlay
113
174
  dismissible={dismissible}
114
175
  onDismiss={handleClose}
115
- style={styles.overlay}
176
+ style={zt.bg.overlay}
116
177
  >
117
178
  <ModalPrimitive.Content
118
179
  position={position || "left"}
119
180
  size={size || "md"}
120
- style={[
121
- styles.content,
122
- styles[`${variant}Content` as keyof typeof styles],
123
- styles[`${size}Content` as keyof typeof styles],
124
- ]}
181
+ style={contentStyles}
125
182
  >
126
183
  {(title || showCloseButton) && (
127
184
  <ModalPrimitive.Header
128
185
  withBorder={variant !== "sheet"}
129
- style={styles.header}
186
+ style={[
187
+ zero.p[4],
188
+ {
189
+ flexDirection: "row",
190
+ alignItems: "center",
191
+ justifyContent: "space-between",
192
+ },
193
+ ]}
130
194
  >
131
195
  <DialogTitle>{title}</DialogTitle>
132
196
  {showCloseButton && (
133
197
  <ModalPrimitive.Close
134
198
  onClose={handleClose}
135
- style={styles.closeButton}
199
+ style={[
200
+ zero.p[2],
201
+ {
202
+ width: 44,
203
+ height: 44,
204
+ alignItems: "center",
205
+ justifyContent: "center",
206
+ },
207
+ ]}
136
208
  >
137
209
  <DialogCloseIcon />
138
210
  </ModalPrimitive.Close>
@@ -142,7 +214,7 @@ export const Dialog = forwardRef<any, DialogProps>(
142
214
 
143
215
  <ModalPrimitive.Body
144
216
  scrollable={variant !== "fullscreen"}
145
- style={styles.body}
217
+ style={[zero.p[6], { paddingTop: 0, flex: 1 }]}
146
218
  >
147
219
  {description && (
148
220
  <DialogDescription>{description}</DialogDescription>
@@ -166,13 +238,16 @@ export interface DialogTitleProps {
166
238
 
167
239
  export const DialogTitle = forwardRef<any, DialogTitleProps>(
168
240
  ({ children, style, ...props }, ref) => {
169
- const { theme } = useTheme();
170
- const styles = React.useMemo(() => createStyles(theme), [theme]);
241
+ const { zero: zt } = useTheme();
171
242
 
172
243
  if (!children) return null;
173
244
 
174
245
  return (
175
- <Text ref={ref} style={[styles.title, style]} {...props}>
246
+ <Text
247
+ ref={ref}
248
+ style={[zt.text.xl, { fontWeight: "600", flex: 1 }, style]}
249
+ {...props}
250
+ >
176
251
  {children}
177
252
  </Text>
178
253
  );
@@ -189,13 +264,12 @@ export interface DialogDescriptionProps {
189
264
 
190
265
  export const DialogDescription = forwardRef<any, DialogDescriptionProps>(
191
266
  ({ children, style, ...props }, ref) => {
192
- const { theme } = useTheme();
193
- const styles = React.useMemo(() => createStyles(theme), [theme]);
267
+ const { zero: zt } = useTheme();
194
268
 
195
269
  if (!children) return null;
196
270
 
197
271
  return (
198
- <Text ref={ref} style={[styles.description, style]} {...props}>
272
+ <Text ref={ref} style={[zt.text.muted, zero.mb[4], style]} {...props}>
199
273
  {children}
200
274
  </Text>
201
275
  );
@@ -230,8 +304,7 @@ export const DialogFooter = forwardRef<any, DialogFooterProps>(
230
304
  },
231
305
  ref,
232
306
  ) => {
233
- const { theme } = useTheme();
234
- const styles = React.useMemo(() => createStyles(theme), [theme]);
307
+ const { zero: zt } = useTheme();
235
308
 
236
309
  if (!children) return null;
237
310
 
@@ -241,7 +314,7 @@ export const DialogFooter = forwardRef<any, DialogFooterProps>(
241
314
  withBorder={withBorder}
242
315
  direction={direction}
243
316
  justify={justify}
244
- style={[styles.footer, style]}
317
+ style={[zero.p[6], { gap: 8 }, style]}
245
318
  {...props}
246
319
  >
247
320
  {children}
@@ -257,120 +330,5 @@ const DialogCloseIcon = () => {
257
330
  return <ThemedX size="md" variant="default" />;
258
331
  };
259
332
 
260
- // Create theme-aware styles
261
- function createStyles(theme: any) {
262
- return StyleSheet.create({
263
- overlay: {
264
- backgroundColor: "rgba(0, 0, 0, 0.5)",
265
- },
266
-
267
- content: {
268
- backgroundColor: theme.colors.card,
269
- borderRadius: theme.borderRadius.lg,
270
- ...theme.shadows.lg,
271
- maxHeight: "90%",
272
- maxWidth: "90%",
273
- },
274
-
275
- // Variant styles
276
- defaultContent: {
277
- // Default styles already applied in content
278
- },
279
-
280
- sheetContent: {
281
- borderTopLeftRadius: theme.borderRadius.xl,
282
- borderTopRightRadius: theme.borderRadius.xl,
283
- borderBottomLeftRadius: 0,
284
- borderBottomRightRadius: 0,
285
- marginTop: "auto",
286
- marginBottom: 0,
287
- maxHeight: "80%",
288
- width: "100%",
289
- maxWidth: "100%",
290
- },
291
-
292
- fullscreenContent: {
293
- width: "100%",
294
- height: "100%",
295
- maxWidth: "100%",
296
- maxHeight: "100%",
297
- borderRadius: 0,
298
- margin: 0,
299
- },
300
-
301
- // Size styles
302
- smContent: {
303
- minWidth: 300,
304
- minHeight: 200,
305
- },
306
-
307
- mdContent: {
308
- minWidth: 400,
309
- minHeight: 300,
310
- },
311
-
312
- lgContent: {
313
- minWidth: 500,
314
- minHeight: 400,
315
- },
316
-
317
- xlContent: {
318
- minWidth: 600,
319
- minHeight: 500,
320
- },
321
-
322
- fullContent: {
323
- width: "95%",
324
- height: "95%",
325
- maxWidth: "95%",
326
- maxHeight: "95%",
327
- },
328
-
329
- header: {
330
- paddingHorizontal: theme.spacing[6],
331
- paddingVertical: theme.spacing[4],
332
- flexDirection: "row",
333
- alignItems: "center",
334
- justifyContent: "space-between",
335
- },
336
-
337
- body: {
338
- paddingHorizontal: theme.spacing[6],
339
- paddingBottom: theme.spacing[6],
340
- flex: 1,
341
- },
342
-
343
- footer: {
344
- paddingHorizontal: theme.spacing[6],
345
- paddingVertical: theme.spacing[4],
346
- gap: theme.spacing[2],
347
- },
348
-
349
- title: {
350
- fontSize: 20,
351
- fontWeight: "600",
352
- color: theme.colors.text,
353
- flex: 1,
354
- lineHeight: 24,
355
- },
356
-
357
- description: {
358
- fontSize: 16,
359
- color: theme.colors.textMuted,
360
- lineHeight: 22,
361
- marginBottom: theme.spacing[4],
362
- },
363
-
364
- closeButton: {
365
- width: theme.touchTargets.minimum,
366
- height: theme.touchTargets.minimum,
367
- alignItems: "center",
368
- justifyContent: "center",
369
- borderRadius: theme.borderRadius.sm,
370
- marginLeft: theme.spacing[2],
371
- },
372
- });
373
- }
374
-
375
333
  // Export dialog variants for external use
376
334
  export { dialogVariants };
@@ -19,9 +19,7 @@ import {
19
19
  } from "react-native";
20
20
  import {
21
21
  a,
22
- bg,
23
22
  borderRadius,
24
- colors,
25
23
  fontSize,
26
24
  gap,
27
25
  layout,
@@ -35,8 +33,8 @@ import {
35
33
  px,
36
34
  py,
37
35
  right,
38
- textColors,
39
36
  } from "../../lib/theme/atoms";
37
+ import { useTheme } from "../../ui";
40
38
  import {
41
39
  objectFromObjects,
42
40
  TextContext as TextClassContext,
@@ -60,6 +58,7 @@ export const DropdownMenuBottomSheet = forwardRef<
60
58
  ) {
61
59
  // Use the primitives' context to know if open
62
60
  const { open, onOpenChange } = DropdownMenuPrimitive.useRootContext();
61
+ const { zero: zt } = useTheme();
63
62
  const snapPoints = useMemo(() => ["25%", "50%", "80%"], []);
64
63
  const sheetRef = useRef<BottomSheet>(null);
65
64
 
@@ -81,11 +80,11 @@ export const DropdownMenuBottomSheet = forwardRef<
81
80
  )}
82
81
  onClose={() => onOpenChange?.(false)}
83
82
  style={[overlayStyle]}
84
- backgroundStyle={[bg.black, a.radius.all.md, a.shadows.md, p[1]]}
83
+ backgroundStyle={[zt.bg.popover, a.radius.all.md, a.shadows.md, p[1]]}
85
84
  handleIndicatorStyle={[
86
85
  a.sizes.width[12],
87
86
  a.sizes.height[1],
88
- bg.gray[500],
87
+ zt.bg.mutedForeground,
89
88
  ]}
90
89
  >
91
90
  <BottomSheetView style={[px[2]]}>
@@ -108,6 +107,7 @@ export const DropdownMenuSubTrigger = forwardRef<
108
107
  }
109
108
  >(({ inset, children, ...props }, ref) => {
110
109
  const { open } = DropdownMenuPrimitive.useSubContext();
110
+ const { icons } = useTheme();
111
111
  const Icon =
112
112
  Platform.OS === "web" ? ChevronRight : open ? ChevronUp : ChevronDown;
113
113
  return (
@@ -130,7 +130,7 @@ export const DropdownMenuSubTrigger = forwardRef<
130
130
  >
131
131
  {children}
132
132
  <View style={[a.layout.position.absolute, a.position.right[1]]}>
133
- <Icon size={18} color={colors.gray[200]} />
133
+ <Icon size={18} color={icons.color.muted} />
134
134
  </View>
135
135
  </View>
136
136
  </DropdownMenuPrimitive.SubTrigger>
@@ -142,6 +142,7 @@ export const DropdownMenuSubContent = forwardRef<
142
142
  any,
143
143
  DropdownMenuPrimitive.SubContentProps
144
144
  >((props, ref) => {
145
+ const { zero: zt } = useTheme();
145
146
  return (
146
147
  <DropdownMenuPrimitive.SubContent
147
148
  ref={ref}
@@ -151,9 +152,9 @@ export const DropdownMenuSubContent = forwardRef<
151
152
  a.overflow.hidden,
152
153
  a.radius.all.md,
153
154
  a.borders.width.thin,
154
- a.borders.color.gray[600],
155
+ zt.border.default,
155
156
  mt[1],
156
- bg.black,
157
+ zt.bg.popover,
157
158
  p[1],
158
159
  a.shadows.md,
159
160
  ]}
@@ -169,6 +170,7 @@ export const DropdownMenuContent = forwardRef<
169
170
  portalHost?: string;
170
171
  }
171
172
  >(({ overlayStyle, portalHost, ...props }, ref) => {
173
+ const { zero: zt } = useTheme();
172
174
  return (
173
175
  <DropdownMenuPrimitive.Portal hostName={portalHost}>
174
176
  <DropdownMenuPrimitive.Overlay
@@ -187,8 +189,8 @@ export const DropdownMenuContent = forwardRef<
187
189
  a.overflow.hidden,
188
190
  a.radius.all.md,
189
191
  a.borders.width.thin,
190
- a.borders.color.gray[800],
191
- bg.gray[950],
192
+ zt.border.default,
193
+ zt.bg.popover,
192
194
  p[2],
193
195
  a.shadows.md,
194
196
  ] as any
@@ -206,6 +208,7 @@ export const DropdownMenuContentWithoutPortal = forwardRef<
206
208
  overlayStyle?: any;
207
209
  }
208
210
  >(({ overlayStyle, ...props }, ref) => {
211
+ const { theme } = useTheme();
209
212
  return (
210
213
  <DropdownMenuPrimitive.Overlay
211
214
  style={[
@@ -223,8 +226,8 @@ export const DropdownMenuContentWithoutPortal = forwardRef<
223
226
  a.overflow.hidden,
224
227
  a.radius.all.md,
225
228
  a.borders.width.thin,
226
- a.borders.color.gray[800],
227
- bg.gray[950],
229
+ { borderColor: theme.colors.border },
230
+ { backgroundColor: theme.colors.popover },
228
231
  p[2],
229
232
  a.shadows.md,
230
233
  ] as any
@@ -263,10 +266,14 @@ export const DropdownMenuItem = forwardRef<
263
266
  any,
264
267
  DropdownMenuPrimitive.ItemProps & { inset?: boolean; disabled?: boolean }
265
268
  >(({ inset, disabled, style, children, ...props }, ref) => {
269
+ const { theme } = useTheme();
266
270
  return (
267
271
  <Pressable {...props}>
268
272
  <TextClassContext.Provider
269
- value={objectFromObjects([a.textColors.gray[900], a.fontSize.base])}
273
+ value={objectFromObjects([
274
+ { color: theme.colors.popoverForeground },
275
+ a.fontSize.base,
276
+ ])}
270
277
  >
271
278
  <View
272
279
  style={[
@@ -294,6 +301,7 @@ export const DropdownMenuCheckboxItem = forwardRef<
294
301
  children?: React.ReactNode;
295
302
  }
296
303
  >(({ children, checked, ...props }, ref) => {
304
+ const { theme } = useTheme();
297
305
  return (
298
306
  <DropdownMenuPrimitive.CheckboxItem
299
307
  ref={ref}
@@ -315,9 +323,17 @@ export const DropdownMenuCheckboxItem = forwardRef<
315
323
  {children}
316
324
  <View style={[pl[1], layout.position.absolute, right[1]]}>
317
325
  {checked ? (
318
- <CheckCircle size={14} strokeWidth={3} color="white" />
326
+ <CheckCircle
327
+ size={14}
328
+ strokeWidth={3}
329
+ color={theme.colors.foreground}
330
+ />
319
331
  ) : (
320
- <Circle size={14} strokeWidth={3} color={a.colors.gray[400]} />
332
+ <Circle
333
+ size={14}
334
+ strokeWidth={3}
335
+ color={theme.colors.mutedForeground}
336
+ />
321
337
  )}
322
338
  </View>
323
339
  </View>
@@ -332,6 +348,7 @@ export const DropdownMenuRadioItem = forwardRef<
332
348
  children?: React.ReactNode;
333
349
  }
334
350
  >(({ children, ...props }, ref) => {
351
+ const { theme } = useTheme();
335
352
  return (
336
353
  <DropdownMenuPrimitive.RadioItem
337
354
  ref={ref}
@@ -350,7 +367,7 @@ export const DropdownMenuRadioItem = forwardRef<
350
367
  >
351
368
  <View style={[pl[1], layout.position.absolute, right[1]]}>
352
369
  <DropdownMenuPrimitive.ItemIndicator>
353
- <Check size={14} strokeWidth={3} color="white" />
370
+ <Check size={14} strokeWidth={3} color={theme.colors.foreground} />
354
371
  </DropdownMenuPrimitive.ItemIndicator>
355
372
  </View>
356
373
  {children}
@@ -363,13 +380,14 @@ export const DropdownMenuLabel = forwardRef<
363
380
  any,
364
381
  DropdownMenuPrimitive.LabelProps & { inset?: boolean }
365
382
  >(({ inset, ...props }, ref) => {
383
+ const { theme } = useTheme();
366
384
  return (
367
385
  <Text
368
386
  ref={ref}
369
387
  style={[
370
388
  px[2],
371
389
  py[2],
372
- a.textColors.gray[200],
390
+ { color: theme.colors.textMuted },
373
391
  a.fontSize.base,
374
392
  inset && gap[2],
375
393
  ]}
@@ -382,15 +400,23 @@ export const DropdownMenuSeparator = forwardRef<
382
400
  any,
383
401
  DropdownMenuPrimitive.SeparatorProps
384
402
  >((props, ref) => {
385
- return <View ref={ref} style={[{ height: 0.5 }, bg.gray[800]]} {...props} />;
403
+ const { theme } = useTheme();
404
+ return (
405
+ <View
406
+ ref={ref}
407
+ style={[{ height: 0.5 }, { backgroundColor: theme.colors.border }]}
408
+ {...props}
409
+ />
410
+ );
386
411
  });
387
412
 
388
413
  export function DropdownMenuShortcut(props: any) {
414
+ const { theme } = useTheme();
389
415
  return (
390
416
  <Text
391
417
  style={[
392
418
  ml.auto,
393
- a.textColors.gray[500],
419
+ { color: theme.colors.textMuted },
394
420
  a.fontSize.sm,
395
421
  a.letterSpacing.widest,
396
422
  ]}
@@ -403,15 +429,18 @@ export const DropdownMenuGroup = forwardRef<
403
429
  any,
404
430
  { inset?: boolean; title?: string; children: ReactNode }
405
431
  >((props, ref) => {
432
+ const { theme } = useTheme();
406
433
  const { inset, title, children, ...rest } = props;
407
434
  return (
408
435
  <View style={[pt[2], inset && gap[2]]} ref={ref} {...rest}>
409
436
  {title && (
410
- <Text style={[textColors.gray[400], pb[1], pl[2]]}>{title}</Text>
437
+ <Text style={[{ color: theme.colors.textMuted }, pb[1], pl[2]]}>
438
+ {title}
439
+ </Text>
411
440
  )}
412
441
  <View
413
442
  style={[
414
- bg.gray[900],
443
+ { backgroundColor: theme.colors.muted },
415
444
  Platform.OS === "web" ? [px[2], py[1]] : p[2],
416
445
  gap.all[1],
417
446
  { borderRadius: borderRadius.lg },
@@ -425,8 +454,17 @@ export const DropdownMenuGroup = forwardRef<
425
454
 
426
455
  export const DropdownMenuInfo = forwardRef<any, any>(
427
456
  ({ description, ...props }, ref) => {
457
+ const { theme } = useTheme();
428
458
  return (
429
- <Text style={[textColors.gray[400], pt[1], pl[2], pb[2], fontSize.sm]}>
459
+ <Text
460
+ style={[
461
+ { color: theme.colors.textMuted },
462
+ pt[1],
463
+ pl[2],
464
+ pb[2],
465
+ fontSize.sm,
466
+ ]}
467
+ >
430
468
  {description}
431
469
  </Text>
432
470
  );