@retray-dev/ui-kit 5.2.0 → 5.4.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.
- package/COMPONENTS.md +242 -17
- package/EXAMPLES.md +666 -0
- package/README.md +3 -3
- package/dist/index.d.mts +112 -11
- package/dist/index.d.ts +112 -11
- package/dist/index.js +579 -358
- package/dist/index.mjs +516 -298
- package/package.json +3 -2
- package/src/components/Accordion/Accordion.tsx +25 -2
- package/src/components/Avatar/Avatar.tsx +21 -7
- package/src/components/Button/Button.tsx +16 -7
- package/src/components/ButtonGroup/ButtonGroup.tsx +60 -0
- package/src/components/ButtonGroup/index.ts +1 -0
- package/src/components/Chip/Chip.tsx +8 -1
- package/src/components/CurrencyDisplay/CurrencyDisplay.tsx +25 -3
- package/src/components/DetailRow/DetailRow.tsx +140 -0
- package/src/components/DetailRow/index.ts +1 -0
- package/src/components/LabelValue/LabelValue.tsx +25 -4
- package/src/components/MonthPicker/MonthPicker.tsx +18 -6
- package/src/components/Sheet/Sheet.tsx +19 -3
- package/src/components/Textarea/Textarea.tsx +66 -29
- package/src/index.ts +5 -0
- package/src/tokens.ts +1 -1
- package/src/utils/typography.ts +24 -0
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Platform, StyleSheet, useColorScheme, Animated, TouchableOpacity, ActivityIndicator, Text, View, TextInput, Image, Easing, Modal, ScrollView, Pressable } from 'react-native';
|
|
3
|
-
import { verticalScale, scale,
|
|
1
|
+
import React26, { createContext, useMemo, useContext, useRef, useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { Platform, StyleSheet, useColorScheme, Animated, TouchableOpacity, ActivityIndicator, Text, View, TextInput, Image, Easing, Modal, ScrollView, KeyboardAvoidingView, Pressable } from 'react-native';
|
|
3
|
+
import { verticalScale, scale, moderateVerticalScale, moderateScale } from 'react-native-size-matters';
|
|
4
4
|
import AntDesign from '@expo/vector-icons/AntDesign';
|
|
5
5
|
import Entypo from '@expo/vector-icons/Entypo';
|
|
6
6
|
import Feather from '@expo/vector-icons/Feather';
|
|
@@ -150,7 +150,7 @@ function ThemeProvider({ children, theme, colorScheme = "system" }) {
|
|
|
150
150
|
const merged = override ? { ...base, ...override } : base;
|
|
151
151
|
return deriveColors(merged, resolvedScheme);
|
|
152
152
|
}, [resolvedScheme, theme]);
|
|
153
|
-
return /* @__PURE__ */
|
|
153
|
+
return /* @__PURE__ */ React26.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
|
|
154
154
|
}
|
|
155
155
|
function useTheme() {
|
|
156
156
|
const context = useContext(ThemeContext);
|
|
@@ -222,10 +222,10 @@ function Icon({ name, size, color, family }) {
|
|
|
222
222
|
}
|
|
223
223
|
if (!resolved) return null;
|
|
224
224
|
const Component = resolved.component;
|
|
225
|
-
return
|
|
225
|
+
return React26.createElement(Component, { name, size, color });
|
|
226
226
|
}
|
|
227
227
|
function renderIcon(name, size, color) {
|
|
228
|
-
return
|
|
228
|
+
return React26.createElement(Icon, { name, size, color });
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
// src/tokens.ts
|
|
@@ -393,7 +393,7 @@ var TYPOGRAPHY = {
|
|
|
393
393
|
fontFamily: "Poppins-Medium",
|
|
394
394
|
fontSize: 16,
|
|
395
395
|
fontWeight: "500",
|
|
396
|
-
lineHeight:
|
|
396
|
+
lineHeight: 22,
|
|
397
397
|
letterSpacing: 0
|
|
398
398
|
},
|
|
399
399
|
"button-sm": {
|
|
@@ -415,7 +415,7 @@ var containerSizeStyles = {
|
|
|
415
415
|
var labelSizeStyles = {
|
|
416
416
|
sm: { ...TYPOGRAPHY["button-sm"], fontSize: ms(TYPOGRAPHY["button-sm"].fontSize) },
|
|
417
417
|
md: { ...TYPOGRAPHY["button-lg"], fontSize: ms(TYPOGRAPHY["button-lg"].fontSize) },
|
|
418
|
-
lg: { ...TYPOGRAPHY["button-lg"], fontSize: ms(TYPOGRAPHY["button-lg"].fontSize + 1) }
|
|
418
|
+
lg: { ...TYPOGRAPHY["button-lg"], fontSize: ms(TYPOGRAPHY["button-lg"].fontSize + 1), lineHeight: mvs(24) }
|
|
419
419
|
};
|
|
420
420
|
var iconSizeMap = { sm: 16, md: 18, lg: 20 };
|
|
421
421
|
function Button({
|
|
@@ -459,9 +459,13 @@ function Button({
|
|
|
459
459
|
text: { color: colors.foreground },
|
|
460
460
|
destructive: { color: colors.destructiveForeground }
|
|
461
461
|
}[variant];
|
|
462
|
-
const
|
|
462
|
+
const textColor = iconColor ?? labelVariantStyle.color;
|
|
463
|
+
const effectiveIcon = iconName ? renderIcon(iconName, iconSizeMap[size], textColor) : typeof icon === "function" ? icon({ label, size, variant, color: textColor }) : icon;
|
|
463
464
|
const spinnerColor = variant === "destructive" ? colors.destructiveForeground : variant === "primary" ? colors.primaryForeground : colors.foreground;
|
|
464
|
-
|
|
465
|
+
const styleArray = Array.isArray(style) ? style : style ? [style] : [];
|
|
466
|
+
const flatStyle = StyleSheet.flatten(styleArray);
|
|
467
|
+
const { flex, ...restStyle } = flatStyle || {};
|
|
468
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: [fullWidth && styles.fullWidth, flex !== void 0 && { flex }, { transform: [{ scale: scale2 }] }] }, /* @__PURE__ */ React26.createElement(
|
|
465
469
|
TouchableOpacity,
|
|
466
470
|
{
|
|
467
471
|
style: [
|
|
@@ -470,7 +474,7 @@ function Button({
|
|
|
470
474
|
containerSizeStyles[size],
|
|
471
475
|
fullWidth && styles.fullWidth,
|
|
472
476
|
isDisabled && styles.disabled,
|
|
473
|
-
|
|
477
|
+
restStyle
|
|
474
478
|
],
|
|
475
479
|
disabled: isDisabled,
|
|
476
480
|
activeOpacity: 1,
|
|
@@ -480,14 +484,15 @@ function Button({
|
|
|
480
484
|
onPressOut: handlePressOut,
|
|
481
485
|
...props
|
|
482
486
|
},
|
|
483
|
-
loading ? /* @__PURE__ */
|
|
487
|
+
loading ? /* @__PURE__ */ React26.createElement(ActivityIndicator, { size: "small", color: spinnerColor }) : /* @__PURE__ */ React26.createElement(React26.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React26.createElement(React26.Fragment, null, effectiveIcon), /* @__PURE__ */ React26.createElement(
|
|
484
488
|
Text,
|
|
485
489
|
{
|
|
486
490
|
style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0],
|
|
487
|
-
allowFontScaling: true
|
|
491
|
+
allowFontScaling: true,
|
|
492
|
+
numberOfLines: 1
|
|
488
493
|
},
|
|
489
494
|
label
|
|
490
|
-
), effectiveIcon && iconPosition === "right" && /* @__PURE__ */
|
|
495
|
+
), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React26.createElement(React26.Fragment, null, effectiveIcon))
|
|
491
496
|
));
|
|
492
497
|
}
|
|
493
498
|
var styles = StyleSheet.create({
|
|
@@ -505,12 +510,46 @@ var styles = StyleSheet.create({
|
|
|
505
510
|
opacity: 0.45
|
|
506
511
|
},
|
|
507
512
|
label: {
|
|
508
|
-
fontFamily: "Poppins-Medium"
|
|
513
|
+
fontFamily: "Poppins-Medium",
|
|
514
|
+
flexShrink: 1
|
|
509
515
|
},
|
|
510
516
|
labelWithIcon: {
|
|
511
517
|
marginHorizontal: s(6)
|
|
512
518
|
}
|
|
513
519
|
});
|
|
520
|
+
function ButtonGroup({ children, gap = 12, vertical = false, style }) {
|
|
521
|
+
return /* @__PURE__ */ React26.createElement(
|
|
522
|
+
View,
|
|
523
|
+
{
|
|
524
|
+
style: [
|
|
525
|
+
styles2.container,
|
|
526
|
+
vertical ? styles2.vertical : styles2.horizontal,
|
|
527
|
+
{ gap: s(gap) },
|
|
528
|
+
style
|
|
529
|
+
]
|
|
530
|
+
},
|
|
531
|
+
React26.Children.map(
|
|
532
|
+
children,
|
|
533
|
+
(child) => React26.isValidElement(child) ? React26.cloneElement(child, {
|
|
534
|
+
style: [
|
|
535
|
+
child.props.style,
|
|
536
|
+
{ flex: 1 }
|
|
537
|
+
]
|
|
538
|
+
}) : child
|
|
539
|
+
)
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
var styles2 = StyleSheet.create({
|
|
543
|
+
container: {
|
|
544
|
+
width: "100%"
|
|
545
|
+
},
|
|
546
|
+
horizontal: {
|
|
547
|
+
flexDirection: "row"
|
|
548
|
+
},
|
|
549
|
+
vertical: {
|
|
550
|
+
flexDirection: "column"
|
|
551
|
+
}
|
|
552
|
+
});
|
|
514
553
|
var nativeDriver2 = Platform.OS !== "web";
|
|
515
554
|
var sizeMap = {
|
|
516
555
|
sm: { container: s(32), icon: 16 },
|
|
@@ -564,14 +603,14 @@ function IconButton({
|
|
|
564
603
|
const showBadge = badge !== void 0 && badge !== false && badge !== 0;
|
|
565
604
|
const badgeCount = typeof badge === "number" ? Math.min(badge, 99) : null;
|
|
566
605
|
const showCount = typeof badge === "number" && badge > 0;
|
|
567
|
-
return /* @__PURE__ */
|
|
606
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: [styles3.wrapper, { transform: [{ scale: scale2 }] }] }, /* @__PURE__ */ React26.createElement(
|
|
568
607
|
TouchableOpacity,
|
|
569
608
|
{
|
|
570
609
|
style: [
|
|
571
|
-
|
|
610
|
+
styles3.base,
|
|
572
611
|
containerVariantStyle,
|
|
573
612
|
{ width: containerSize, height: containerSize },
|
|
574
|
-
isDisabled &&
|
|
613
|
+
isDisabled && styles3.disabled,
|
|
575
614
|
style
|
|
576
615
|
],
|
|
577
616
|
disabled: isDisabled,
|
|
@@ -582,14 +621,14 @@ function IconButton({
|
|
|
582
621
|
onPressOut: handlePressOut,
|
|
583
622
|
...props
|
|
584
623
|
},
|
|
585
|
-
loading ? /* @__PURE__ */
|
|
586
|
-
), showBadge && /* @__PURE__ */
|
|
587
|
-
|
|
624
|
+
loading ? /* @__PURE__ */ React26.createElement(ActivityIndicator, { size: "small", color: spinnerColor }) : resolvedIcon
|
|
625
|
+
), showBadge && /* @__PURE__ */ React26.createElement(View, { style: [
|
|
626
|
+
styles3.badge,
|
|
588
627
|
{ backgroundColor: colors.primary },
|
|
589
|
-
showCount ?
|
|
590
|
-
] }, showCount && /* @__PURE__ */
|
|
628
|
+
showCount ? styles3.badgeCount : styles3.badgeDot
|
|
629
|
+
] }, showCount && /* @__PURE__ */ React26.createElement(Text, { style: [styles3.badgeText, { color: colors.primaryForeground }] }, badgeCount)));
|
|
591
630
|
}
|
|
592
|
-
var
|
|
631
|
+
var styles3 = StyleSheet.create({
|
|
593
632
|
wrapper: {
|
|
594
633
|
alignSelf: "flex-start"
|
|
595
634
|
},
|
|
@@ -666,7 +705,7 @@ function Text3({ variant = "body-md", color, style, children, ...props }) {
|
|
|
666
705
|
const { colors } = useTheme();
|
|
667
706
|
const colorKey = defaultColorVariant[variant] ?? "foreground";
|
|
668
707
|
const resolvedColor = color ?? colors[colorKey];
|
|
669
|
-
return /* @__PURE__ */
|
|
708
|
+
return /* @__PURE__ */ React26.createElement(
|
|
670
709
|
Text,
|
|
671
710
|
{
|
|
672
711
|
style: [variantStyles[variant], { color: resolvedColor }, style],
|
|
@@ -684,12 +723,12 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, p
|
|
|
684
723
|
const isPassword = type === "password";
|
|
685
724
|
const effectiveSecure = isPassword ? !showPassword : secureTextEntry;
|
|
686
725
|
const effectivePrefix = prefixIcon ? renderIcon(prefixIcon, 20, prefixIconColor ?? colors.foregroundMuted) : prefix;
|
|
687
|
-
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */
|
|
688
|
-
return /* @__PURE__ */
|
|
726
|
+
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */ React26.createElement(TouchableOpacity, { onPress: () => setShowPassword(!showPassword), style: styles4.passwordToggle, activeOpacity: 0.6 }, /* @__PURE__ */ React26.createElement(AntDesign$1, { name: showPassword ? "eye" : "eye-invisible", size: 20, color: colors.foregroundMuted })) : suffixIcon ? renderIcon(suffixIcon, 20, suffixIconColor ?? colors.foregroundMuted) : suffix;
|
|
727
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles4.container, containerStyle] }, label ? /* @__PURE__ */ React26.createElement(Text, { style: [styles4.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React26.createElement(
|
|
689
728
|
View,
|
|
690
729
|
{
|
|
691
730
|
style: [
|
|
692
|
-
|
|
731
|
+
styles4.inputWrapper,
|
|
693
732
|
{
|
|
694
733
|
borderColor: error ? colors.destructive : focused ? colors.primary : colors.border,
|
|
695
734
|
backgroundColor: colors.background
|
|
@@ -697,12 +736,12 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, p
|
|
|
697
736
|
inputWrapperStyle
|
|
698
737
|
]
|
|
699
738
|
},
|
|
700
|
-
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */
|
|
701
|
-
/* @__PURE__ */
|
|
739
|
+
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */ React26.createElement(Text, { style: [styles4.prefixText, { color: colors.foregroundMuted }, prefixStyle], allowFontScaling: true }, effectivePrefix) : /* @__PURE__ */ React26.createElement(View, { style: styles4.prefixContainer }, effectivePrefix) : null,
|
|
740
|
+
/* @__PURE__ */ React26.createElement(
|
|
702
741
|
TextInput,
|
|
703
742
|
{
|
|
704
743
|
style: [
|
|
705
|
-
|
|
744
|
+
styles4.input,
|
|
706
745
|
{
|
|
707
746
|
color: colors.foreground
|
|
708
747
|
},
|
|
@@ -723,10 +762,10 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, p
|
|
|
723
762
|
...props
|
|
724
763
|
}
|
|
725
764
|
),
|
|
726
|
-
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */
|
|
727
|
-
), error ? /* @__PURE__ */
|
|
765
|
+
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */ React26.createElement(Text, { style: [styles4.suffixText, { color: colors.foregroundMuted }, suffixStyle], allowFontScaling: true }, effectiveSuffix) : /* @__PURE__ */ React26.createElement(View, { style: styles4.suffixContainer }, effectiveSuffix) : null
|
|
766
|
+
), error ? /* @__PURE__ */ React26.createElement(Text, { style: [styles4.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React26.createElement(Text, { style: [styles4.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null);
|
|
728
767
|
}
|
|
729
|
-
var
|
|
768
|
+
var styles4 = StyleSheet.create({
|
|
730
769
|
container: {
|
|
731
770
|
gap: vs(8)
|
|
732
771
|
},
|
|
@@ -817,9 +856,9 @@ function Badge({ label, children, variant = "default", size = "md", icon, iconNa
|
|
|
817
856
|
}[variant];
|
|
818
857
|
const effectiveIcon = iconName ? renderIcon(iconName, sizeIconSize[size], iconColor ?? textColor) : icon;
|
|
819
858
|
const content = children ?? label;
|
|
820
|
-
return /* @__PURE__ */
|
|
859
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles5.container, containerStyle, sizePadding[size], { gap: sizeIconGap[size] }, style] }, effectiveIcon, typeof content === "string" ? /* @__PURE__ */ React26.createElement(Text, { style: [styles5.label, { color: textColor }, sizeFontSize[size]], allowFontScaling: true }, content) : content);
|
|
821
860
|
}
|
|
822
|
-
var
|
|
861
|
+
var styles5 = StyleSheet.create({
|
|
823
862
|
container: {
|
|
824
863
|
borderRadius: 9999,
|
|
825
864
|
alignSelf: "flex-start",
|
|
@@ -880,9 +919,9 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
880
919
|
elevation: 0
|
|
881
920
|
}
|
|
882
921
|
}[variant];
|
|
883
|
-
const cardContent = /* @__PURE__ */
|
|
922
|
+
const cardContent = /* @__PURE__ */ React26.createElement(View, { style: [styles6.card, variantStyle, style] }, children);
|
|
884
923
|
if (onPress) {
|
|
885
|
-
return /* @__PURE__ */
|
|
924
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React26.createElement(
|
|
886
925
|
TouchableOpacity,
|
|
887
926
|
{
|
|
888
927
|
onPress: handlePress,
|
|
@@ -897,23 +936,23 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
897
936
|
return cardContent;
|
|
898
937
|
}
|
|
899
938
|
function CardHeader({ children, style }) {
|
|
900
|
-
return /* @__PURE__ */
|
|
939
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles6.header, style] }, children);
|
|
901
940
|
}
|
|
902
941
|
function CardTitle({ children, style }) {
|
|
903
942
|
const { colors } = useTheme();
|
|
904
|
-
return /* @__PURE__ */
|
|
943
|
+
return /* @__PURE__ */ React26.createElement(Text, { style: [styles6.title, { color: colors.foreground }, style], allowFontScaling: true }, children);
|
|
905
944
|
}
|
|
906
945
|
function CardDescription({ children, style }) {
|
|
907
946
|
const { colors } = useTheme();
|
|
908
|
-
return /* @__PURE__ */
|
|
947
|
+
return /* @__PURE__ */ React26.createElement(Text, { style: [styles6.description, { color: colors.foregroundMuted }, style], allowFontScaling: true }, children);
|
|
909
948
|
}
|
|
910
949
|
function CardContent({ children, style }) {
|
|
911
|
-
return /* @__PURE__ */
|
|
950
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles6.content, style] }, children);
|
|
912
951
|
}
|
|
913
952
|
function CardFooter({ children, style }) {
|
|
914
|
-
return /* @__PURE__ */
|
|
953
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles6.footer, style] }, children);
|
|
915
954
|
}
|
|
916
|
-
var
|
|
955
|
+
var styles6 = StyleSheet.create({
|
|
917
956
|
card: {
|
|
918
957
|
borderRadius: 14,
|
|
919
958
|
// RADIUS.md — Airbnb property card spec
|
|
@@ -948,18 +987,18 @@ var styles5 = StyleSheet.create({
|
|
|
948
987
|
});
|
|
949
988
|
function Separator({ orientation = "horizontal", style }) {
|
|
950
989
|
const { colors } = useTheme();
|
|
951
|
-
return /* @__PURE__ */
|
|
990
|
+
return /* @__PURE__ */ React26.createElement(
|
|
952
991
|
View,
|
|
953
992
|
{
|
|
954
993
|
style: [
|
|
955
|
-
orientation === "horizontal" ?
|
|
994
|
+
orientation === "horizontal" ? styles7.horizontal : styles7.vertical,
|
|
956
995
|
{ backgroundColor: colors.border },
|
|
957
996
|
style
|
|
958
997
|
]
|
|
959
998
|
}
|
|
960
999
|
);
|
|
961
1000
|
}
|
|
962
|
-
var
|
|
1001
|
+
var styles7 = StyleSheet.create({
|
|
963
1002
|
horizontal: {
|
|
964
1003
|
height: 1,
|
|
965
1004
|
width: "100%"
|
|
@@ -982,18 +1021,18 @@ var labelFontSize = {
|
|
|
982
1021
|
function Spinner({ size = "md", color, label, ...props }) {
|
|
983
1022
|
const { colors } = useTheme();
|
|
984
1023
|
if (label) {
|
|
985
|
-
return /* @__PURE__ */
|
|
1024
|
+
return /* @__PURE__ */ React26.createElement(View, { style: styles8.wrapper }, /* @__PURE__ */ React26.createElement(ActivityIndicator, { size: sizeMap2[size], color: color ?? colors.primary, ...props }), /* @__PURE__ */ React26.createElement(
|
|
986
1025
|
Text,
|
|
987
1026
|
{
|
|
988
|
-
style: [
|
|
1027
|
+
style: [styles8.label, { color: colors.foregroundMuted, fontSize: labelFontSize[size] }],
|
|
989
1028
|
allowFontScaling: true
|
|
990
1029
|
},
|
|
991
1030
|
label
|
|
992
1031
|
));
|
|
993
1032
|
}
|
|
994
|
-
return /* @__PURE__ */
|
|
1033
|
+
return /* @__PURE__ */ React26.createElement(ActivityIndicator, { size: sizeMap2[size], color: color ?? colors.primary, ...props });
|
|
995
1034
|
}
|
|
996
|
-
var
|
|
1035
|
+
var styles8 = StyleSheet.create({
|
|
997
1036
|
wrapper: {
|
|
998
1037
|
alignItems: "center",
|
|
999
1038
|
gap: vs(6)
|
|
@@ -1029,17 +1068,17 @@ function Skeleton({
|
|
|
1029
1068
|
const resolvedWidth = preset === "circle" ? s(diameter) : preset === "text" ? "60%" : width;
|
|
1030
1069
|
const resolvedHeight = preset === "circle" ? s(diameter) : preset === "text" ? 14 : height;
|
|
1031
1070
|
const resolvedRadius = preset === "circle" ? 9999 : preset === "text" ? 4 : borderRadius;
|
|
1032
|
-
return /* @__PURE__ */
|
|
1071
|
+
return /* @__PURE__ */ React26.createElement(
|
|
1033
1072
|
View,
|
|
1034
1073
|
{
|
|
1035
1074
|
style: [
|
|
1036
|
-
|
|
1075
|
+
styles9.base,
|
|
1037
1076
|
{ width: resolvedWidth, height: resolvedHeight, borderRadius: resolvedRadius, backgroundColor: colors.surface },
|
|
1038
1077
|
style
|
|
1039
1078
|
],
|
|
1040
1079
|
onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width)
|
|
1041
1080
|
},
|
|
1042
|
-
/* @__PURE__ */
|
|
1081
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: [StyleSheet.absoluteFill, { transform: [{ translateX }] }] }, /* @__PURE__ */ React26.createElement(
|
|
1043
1082
|
LinearGradient,
|
|
1044
1083
|
{
|
|
1045
1084
|
colors: ["transparent", shimmerHighlight, "transparent"],
|
|
@@ -1050,7 +1089,7 @@ function Skeleton({
|
|
|
1050
1089
|
))
|
|
1051
1090
|
);
|
|
1052
1091
|
}
|
|
1053
|
-
var
|
|
1092
|
+
var styles9 = StyleSheet.create({
|
|
1054
1093
|
base: {
|
|
1055
1094
|
overflow: "hidden"
|
|
1056
1095
|
}
|
|
@@ -1073,12 +1112,22 @@ var statusSizeMap = {
|
|
|
1073
1112
|
lg: 13,
|
|
1074
1113
|
xl: 16
|
|
1075
1114
|
};
|
|
1076
|
-
function
|
|
1115
|
+
function getInitials(fallback, fallbackText) {
|
|
1116
|
+
if (fallback) return fallback.slice(0, 2).toUpperCase();
|
|
1117
|
+
if (fallbackText) {
|
|
1118
|
+
const words = fallbackText.trim().split(/\s+/);
|
|
1119
|
+
if (words.length === 1) return words[0].slice(0, 2).toUpperCase();
|
|
1120
|
+
return (words[0][0] + words[words.length - 1][0]).toUpperCase();
|
|
1121
|
+
}
|
|
1122
|
+
return "?";
|
|
1123
|
+
}
|
|
1124
|
+
function Avatar({ src, fallback, fallbackText, size = "md", status, style }) {
|
|
1077
1125
|
const { colors } = useTheme();
|
|
1078
1126
|
const [imageError, setImageError] = useState(false);
|
|
1079
|
-
const dimension = sizeMap3[size];
|
|
1127
|
+
const dimension = typeof size === "number" ? size : sizeMap3[size];
|
|
1128
|
+
const fontSize = typeof size === "number" ? size * 0.38 : fontSizeMap[size];
|
|
1080
1129
|
const showFallback = !src || imageError;
|
|
1081
|
-
const statusSize = statusSizeMap[size];
|
|
1130
|
+
const statusSize = typeof size === "number" ? size * 0.25 : statusSizeMap[size];
|
|
1082
1131
|
const statusColor = {
|
|
1083
1132
|
online: "#22c55e",
|
|
1084
1133
|
offline: "transparent",
|
|
@@ -1092,25 +1141,25 @@ function Avatar({ src, fallback, size = "md", status, style }) {
|
|
|
1092
1141
|
backgroundColor: colors.surface,
|
|
1093
1142
|
overflow: "hidden"
|
|
1094
1143
|
};
|
|
1095
|
-
return /* @__PURE__ */
|
|
1144
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles10.wrapper, style] }, /* @__PURE__ */ React26.createElement(View, { style: [styles10.base, containerStyle] }, !showFallback ? /* @__PURE__ */ React26.createElement(
|
|
1096
1145
|
Image,
|
|
1097
1146
|
{
|
|
1098
1147
|
source: { uri: src },
|
|
1099
1148
|
style: { width: dimension, height: dimension },
|
|
1100
1149
|
onError: () => setImageError(true)
|
|
1101
1150
|
}
|
|
1102
|
-
) : /* @__PURE__ */
|
|
1151
|
+
) : /* @__PURE__ */ React26.createElement(
|
|
1103
1152
|
Text,
|
|
1104
1153
|
{
|
|
1105
|
-
style: [
|
|
1154
|
+
style: [styles10.fallback, { color: colors.foregroundMuted, fontSize }],
|
|
1106
1155
|
allowFontScaling: true
|
|
1107
1156
|
},
|
|
1108
|
-
fallback
|
|
1109
|
-
)), status && /* @__PURE__ */
|
|
1157
|
+
getInitials(fallback, fallbackText)
|
|
1158
|
+
)), status && /* @__PURE__ */ React26.createElement(
|
|
1110
1159
|
View,
|
|
1111
1160
|
{
|
|
1112
1161
|
style: [
|
|
1113
|
-
|
|
1162
|
+
styles10.statusDot,
|
|
1114
1163
|
{
|
|
1115
1164
|
width: statusSize,
|
|
1116
1165
|
height: statusSize,
|
|
@@ -1123,7 +1172,7 @@ function Avatar({ src, fallback, size = "md", status, style }) {
|
|
|
1123
1172
|
}
|
|
1124
1173
|
));
|
|
1125
1174
|
}
|
|
1126
|
-
var
|
|
1175
|
+
var styles10 = StyleSheet.create({
|
|
1127
1176
|
wrapper: {
|
|
1128
1177
|
alignSelf: "flex-start",
|
|
1129
1178
|
position: "relative"
|
|
@@ -1148,11 +1197,11 @@ function AlertBanner({ title, description, variant = "default", icon, iconName,
|
|
|
1148
1197
|
const accentColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : variant === "warning" ? colors.warning : colors.primary;
|
|
1149
1198
|
const titleColor = variant === "default" ? colors.foreground : accentColor;
|
|
1150
1199
|
const descColor = variant === "default" ? colors.foregroundMuted : accentColor;
|
|
1151
|
-
const defaultIcon = variant === "success" ? /* @__PURE__ */
|
|
1200
|
+
const defaultIcon = variant === "success" ? /* @__PURE__ */ React26.createElement(FontAwesome5$1, { name: "check-circle", size: 16, color: accentColor }) : variant === "destructive" ? /* @__PURE__ */ React26.createElement(MaterialIcons$1, { name: "error-outline", size: 17, color: accentColor }) : variant === "warning" ? /* @__PURE__ */ React26.createElement(MaterialIcons$1, { name: "warning-amber", size: 17, color: accentColor }) : /* @__PURE__ */ React26.createElement(Entypo$1, { name: "info-with-circle", size: 16, color: accentColor });
|
|
1152
1201
|
const effectiveIcon = iconName ? renderIcon(iconName, 16, iconColor ?? accentColor) : icon ?? defaultIcon;
|
|
1153
|
-
return /* @__PURE__ */
|
|
1202
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles11.container, { backgroundColor: bgColor, borderColor }, style] }, /* @__PURE__ */ React26.createElement(View, { style: styles11.iconSlot }, effectiveIcon), /* @__PURE__ */ React26.createElement(View, { style: styles11.content }, /* @__PURE__ */ React26.createElement(Text, { style: [styles11.title, { color: titleColor }], allowFontScaling: true }, title), description ? /* @__PURE__ */ React26.createElement(Text, { style: [styles11.description, { color: descColor }], allowFontScaling: true }, description) : null));
|
|
1154
1203
|
}
|
|
1155
|
-
var
|
|
1204
|
+
var styles11 = StyleSheet.create({
|
|
1156
1205
|
container: {
|
|
1157
1206
|
flexDirection: "row",
|
|
1158
1207
|
alignItems: "flex-start",
|
|
@@ -1196,21 +1245,21 @@ function Progress({ value = 0, max = 100, variant = "default", style }) {
|
|
|
1196
1245
|
}).start();
|
|
1197
1246
|
}, [percent, trackWidth]);
|
|
1198
1247
|
const indicatorColor = variant === "success" ? colors.success : variant === "warning" ? colors.warning : variant === "destructive" ? colors.destructive : colors.primary;
|
|
1199
|
-
return /* @__PURE__ */
|
|
1248
|
+
return /* @__PURE__ */ React26.createElement(
|
|
1200
1249
|
View,
|
|
1201
1250
|
{
|
|
1202
|
-
style: [
|
|
1251
|
+
style: [styles12.track, { backgroundColor: colors.surface }, style],
|
|
1203
1252
|
onLayout: (e) => setTrackWidth(e.nativeEvent.layout.width)
|
|
1204
1253
|
},
|
|
1205
|
-
/* @__PURE__ */
|
|
1254
|
+
/* @__PURE__ */ React26.createElement(
|
|
1206
1255
|
Animated.View,
|
|
1207
1256
|
{
|
|
1208
|
-
style: [
|
|
1257
|
+
style: [styles12.indicator, { width: animatedWidth, backgroundColor: indicatorColor }]
|
|
1209
1258
|
}
|
|
1210
1259
|
)
|
|
1211
1260
|
);
|
|
1212
1261
|
}
|
|
1213
|
-
var
|
|
1262
|
+
var styles12 = StyleSheet.create({
|
|
1214
1263
|
track: {
|
|
1215
1264
|
height: vs(8),
|
|
1216
1265
|
borderRadius: 9999,
|
|
@@ -1226,39 +1275,39 @@ function EmptyState({ icon, iconName, iconColor, title, description, action, siz
|
|
|
1226
1275
|
const { colors } = useTheme();
|
|
1227
1276
|
const isCompact = size === "compact";
|
|
1228
1277
|
const effectiveIcon = iconName ? renderIcon(iconName, isCompact ? 32 : 48, iconColor ?? colors.foregroundMuted) : icon;
|
|
1229
|
-
return /* @__PURE__ */
|
|
1278
|
+
return /* @__PURE__ */ React26.createElement(
|
|
1230
1279
|
View,
|
|
1231
1280
|
{
|
|
1232
1281
|
style: [
|
|
1233
|
-
|
|
1234
|
-
isCompact &&
|
|
1282
|
+
styles13.container,
|
|
1283
|
+
isCompact && styles13.containerCompact,
|
|
1235
1284
|
{ borderColor: colors.border },
|
|
1236
1285
|
style
|
|
1237
1286
|
]
|
|
1238
1287
|
},
|
|
1239
|
-
effectiveIcon ? /* @__PURE__ */
|
|
1288
|
+
effectiveIcon ? /* @__PURE__ */ React26.createElement(
|
|
1240
1289
|
View,
|
|
1241
1290
|
{
|
|
1242
1291
|
style: [
|
|
1243
|
-
|
|
1244
|
-
isCompact &&
|
|
1292
|
+
styles13.iconWrapper,
|
|
1293
|
+
isCompact && styles13.iconWrapperCompact,
|
|
1245
1294
|
{ backgroundColor: colors.surface }
|
|
1246
1295
|
]
|
|
1247
1296
|
},
|
|
1248
1297
|
effectiveIcon
|
|
1249
1298
|
) : null,
|
|
1250
|
-
/* @__PURE__ */
|
|
1299
|
+
/* @__PURE__ */ React26.createElement(View, { style: styles13.textWrapper }, /* @__PURE__ */ React26.createElement(
|
|
1251
1300
|
Text,
|
|
1252
1301
|
{
|
|
1253
|
-
style: [
|
|
1302
|
+
style: [styles13.title, isCompact && styles13.titleCompact, { color: colors.foreground }],
|
|
1254
1303
|
allowFontScaling: true
|
|
1255
1304
|
},
|
|
1256
1305
|
title
|
|
1257
|
-
), description && !isCompact ? /* @__PURE__ */
|
|
1258
|
-
action && !isCompact ? /* @__PURE__ */
|
|
1306
|
+
), description && !isCompact ? /* @__PURE__ */ React26.createElement(Text, { style: [styles13.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null),
|
|
1307
|
+
action && !isCompact ? /* @__PURE__ */ React26.createElement(View, { style: styles13.action }, action) : null
|
|
1259
1308
|
);
|
|
1260
1309
|
}
|
|
1261
|
-
var
|
|
1310
|
+
var styles13 = StyleSheet.create({
|
|
1262
1311
|
container: {
|
|
1263
1312
|
alignItems: "center",
|
|
1264
1313
|
justifyContent: "center",
|
|
@@ -1313,6 +1362,9 @@ function Textarea({
|
|
|
1313
1362
|
error,
|
|
1314
1363
|
hint,
|
|
1315
1364
|
rows = 4,
|
|
1365
|
+
prefixIcon,
|
|
1366
|
+
prefixIconNode,
|
|
1367
|
+
prefixIconColor,
|
|
1316
1368
|
containerStyle,
|
|
1317
1369
|
style,
|
|
1318
1370
|
onFocus,
|
|
@@ -1321,57 +1373,83 @@ function Textarea({
|
|
|
1321
1373
|
}) {
|
|
1322
1374
|
const { colors } = useTheme();
|
|
1323
1375
|
const [focused, setFocused] = useState(false);
|
|
1324
|
-
|
|
1325
|
-
|
|
1376
|
+
const resolvedPrefixIcon = prefixIcon ? renderIcon(prefixIcon, ms(16), prefixIconColor ?? colors.foregroundMuted) : prefixIconNode;
|
|
1377
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles14.container, containerStyle] }, label ? /* @__PURE__ */ React26.createElement(Text, { style: [styles14.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React26.createElement(
|
|
1378
|
+
View,
|
|
1326
1379
|
{
|
|
1327
|
-
multiline: true,
|
|
1328
|
-
numberOfLines: rows,
|
|
1329
|
-
textAlignVertical: "top",
|
|
1330
1380
|
style: [
|
|
1331
|
-
|
|
1381
|
+
styles14.inputWrapper,
|
|
1332
1382
|
{
|
|
1333
1383
|
borderColor: error ? colors.destructive : focused ? colors.ring ?? colors.primary : colors.border,
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1384
|
+
backgroundColor: colors.background
|
|
1385
|
+
}
|
|
1386
|
+
]
|
|
1387
|
+
},
|
|
1388
|
+
resolvedPrefixIcon ? /* @__PURE__ */ React26.createElement(View, { style: styles14.prefixIcon }, resolvedPrefixIcon) : null,
|
|
1389
|
+
/* @__PURE__ */ React26.createElement(
|
|
1390
|
+
TextInput,
|
|
1391
|
+
{
|
|
1392
|
+
multiline: true,
|
|
1393
|
+
numberOfLines: rows,
|
|
1394
|
+
textAlignVertical: "top",
|
|
1395
|
+
style: [
|
|
1396
|
+
styles14.input,
|
|
1397
|
+
{
|
|
1398
|
+
color: colors.foreground,
|
|
1399
|
+
minHeight: rows * vs(30)
|
|
1400
|
+
},
|
|
1401
|
+
webInputResetStyle2,
|
|
1402
|
+
style
|
|
1403
|
+
],
|
|
1404
|
+
onFocus: (e) => {
|
|
1405
|
+
setFocused(true);
|
|
1406
|
+
onFocus?.(e);
|
|
1337
1407
|
},
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
},
|
|
1349
|
-
placeholderTextColor: colors.foregroundMuted,
|
|
1350
|
-
allowFontScaling: true,
|
|
1351
|
-
...props
|
|
1352
|
-
}
|
|
1353
|
-
), error ? /* @__PURE__ */ React25.createElement(Text, { style: [styles13.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React25.createElement(Text, { style: [styles13.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null);
|
|
1408
|
+
onBlur: (e) => {
|
|
1409
|
+
setFocused(false);
|
|
1410
|
+
onBlur?.(e);
|
|
1411
|
+
},
|
|
1412
|
+
placeholderTextColor: colors.foregroundMuted,
|
|
1413
|
+
allowFontScaling: true,
|
|
1414
|
+
...props
|
|
1415
|
+
}
|
|
1416
|
+
)
|
|
1417
|
+
), error ? /* @__PURE__ */ React26.createElement(Text, { style: [styles14.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React26.createElement(Text, { style: [styles14.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null);
|
|
1354
1418
|
}
|
|
1355
|
-
var
|
|
1419
|
+
var styles14 = StyleSheet.create({
|
|
1356
1420
|
container: {
|
|
1357
|
-
gap: vs(
|
|
1421
|
+
gap: vs(4)
|
|
1358
1422
|
},
|
|
1359
1423
|
label: {
|
|
1360
1424
|
fontFamily: "Poppins-Medium",
|
|
1361
|
-
fontSize: ms(13)
|
|
1425
|
+
fontSize: ms(13),
|
|
1426
|
+
lineHeight: vs(18),
|
|
1427
|
+
marginBottom: vs(2)
|
|
1362
1428
|
},
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
borderRadius: ms(8),
|
|
1429
|
+
inputWrapper: {
|
|
1430
|
+
borderWidth: 1,
|
|
1431
|
+
borderRadius: 8,
|
|
1367
1432
|
paddingHorizontal: s(14),
|
|
1368
1433
|
paddingVertical: vs(11),
|
|
1369
|
-
|
|
1370
|
-
|
|
1434
|
+
gap: s(8)
|
|
1435
|
+
},
|
|
1436
|
+
prefixIcon: {
|
|
1437
|
+
alignItems: "flex-start",
|
|
1438
|
+
justifyContent: "flex-start",
|
|
1439
|
+
paddingTop: vs(2)
|
|
1440
|
+
},
|
|
1441
|
+
input: {
|
|
1442
|
+
fontFamily: "Poppins-Regular",
|
|
1443
|
+
fontSize: ms(14),
|
|
1444
|
+
lineHeight: vs(22),
|
|
1445
|
+
padding: 0,
|
|
1446
|
+
margin: 0
|
|
1371
1447
|
},
|
|
1372
1448
|
helperText: {
|
|
1373
1449
|
fontFamily: "Poppins-Regular",
|
|
1374
|
-
fontSize: ms(
|
|
1450
|
+
fontSize: ms(12),
|
|
1451
|
+
lineHeight: vs(16),
|
|
1452
|
+
marginTop: vs(4)
|
|
1375
1453
|
}
|
|
1376
1454
|
});
|
|
1377
1455
|
var nativeDriver4 = Platform.OS !== "web";
|
|
@@ -1415,10 +1493,10 @@ function Checkbox({
|
|
|
1415
1493
|
const handlePressOut = () => {
|
|
1416
1494
|
Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver4, speed: 40, bounciness: 0 }).start();
|
|
1417
1495
|
};
|
|
1418
|
-
return /* @__PURE__ */
|
|
1496
|
+
return /* @__PURE__ */ React26.createElement(
|
|
1419
1497
|
TouchableOpacity,
|
|
1420
1498
|
{
|
|
1421
|
-
style: [
|
|
1499
|
+
style: [styles15.row, style],
|
|
1422
1500
|
onPress: () => {
|
|
1423
1501
|
selectionAsync();
|
|
1424
1502
|
onCheckedChange?.(!checked);
|
|
@@ -1429,11 +1507,11 @@ function Checkbox({
|
|
|
1429
1507
|
activeOpacity: 1,
|
|
1430
1508
|
touchSoundDisabled: true
|
|
1431
1509
|
},
|
|
1432
|
-
/* @__PURE__ */
|
|
1510
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React26.createElement(
|
|
1433
1511
|
Animated.View,
|
|
1434
1512
|
{
|
|
1435
1513
|
style: [
|
|
1436
|
-
|
|
1514
|
+
styles15.box,
|
|
1437
1515
|
{
|
|
1438
1516
|
borderColor,
|
|
1439
1517
|
backgroundColor,
|
|
@@ -1441,19 +1519,19 @@ function Checkbox({
|
|
|
1441
1519
|
}
|
|
1442
1520
|
]
|
|
1443
1521
|
},
|
|
1444
|
-
/* @__PURE__ */
|
|
1522
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: { opacity: checkOpacity } }, /* @__PURE__ */ React26.createElement(View, { style: [styles15.checkmark, { borderColor: colors.primaryForeground }] }))
|
|
1445
1523
|
)),
|
|
1446
|
-
label ? /* @__PURE__ */
|
|
1524
|
+
label ? /* @__PURE__ */ React26.createElement(
|
|
1447
1525
|
Text,
|
|
1448
1526
|
{
|
|
1449
|
-
style: [
|
|
1527
|
+
style: [styles15.label, { color: disabled ? colors.foregroundMuted : colors.foreground }],
|
|
1450
1528
|
allowFontScaling: true
|
|
1451
1529
|
},
|
|
1452
1530
|
label
|
|
1453
1531
|
) : null
|
|
1454
1532
|
);
|
|
1455
1533
|
}
|
|
1456
|
-
var
|
|
1534
|
+
var styles15 = StyleSheet.create({
|
|
1457
1535
|
row: {
|
|
1458
1536
|
flexDirection: "row",
|
|
1459
1537
|
alignItems: "center",
|
|
@@ -1521,7 +1599,7 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
1521
1599
|
inputRange: [0, 1],
|
|
1522
1600
|
outputRange: [colors.surface, colors.primary]
|
|
1523
1601
|
});
|
|
1524
|
-
return /* @__PURE__ */
|
|
1602
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [{ opacity: disabled ? 0.45 : 1 }, style] }, /* @__PURE__ */ React26.createElement(
|
|
1525
1603
|
TouchableOpacity,
|
|
1526
1604
|
{
|
|
1527
1605
|
onPress: () => {
|
|
@@ -1531,22 +1609,22 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
1531
1609
|
disabled,
|
|
1532
1610
|
activeOpacity: 0.8,
|
|
1533
1611
|
touchSoundDisabled: true,
|
|
1534
|
-
style:
|
|
1612
|
+
style: styles16.wrapper
|
|
1535
1613
|
},
|
|
1536
|
-
/* @__PURE__ */
|
|
1614
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: [styles16.track, { backgroundColor: trackColor }] }, /* @__PURE__ */ React26.createElement(
|
|
1537
1615
|
Animated.View,
|
|
1538
1616
|
{
|
|
1539
1617
|
style: [
|
|
1540
|
-
|
|
1618
|
+
styles16.thumb,
|
|
1541
1619
|
{ backgroundColor: colors.primaryForeground, transform: [{ translateX }] }
|
|
1542
1620
|
]
|
|
1543
1621
|
},
|
|
1544
|
-
/* @__PURE__ */
|
|
1545
|
-
/* @__PURE__ */
|
|
1622
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: [styles16.iconWrapper, { opacity: checkOpacity }] }, /* @__PURE__ */ React26.createElement(Feather$1, { name: "check", size: ICON_SIZE, color: colors.primary })),
|
|
1623
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: [styles16.iconWrapper, { opacity: crossOpacity }] }, /* @__PURE__ */ React26.createElement(Feather$1, { name: "x", size: ICON_SIZE, color: colors.foregroundMuted }))
|
|
1546
1624
|
))
|
|
1547
1625
|
));
|
|
1548
1626
|
}
|
|
1549
|
-
var
|
|
1627
|
+
var styles16 = StyleSheet.create({
|
|
1550
1628
|
wrapper: {},
|
|
1551
1629
|
track: {
|
|
1552
1630
|
width: TRACK_WIDTH,
|
|
@@ -1635,17 +1713,17 @@ function Toggle({
|
|
|
1635
1713
|
return prop;
|
|
1636
1714
|
};
|
|
1637
1715
|
if (pressed) {
|
|
1638
|
-
if (activeIconName) return /* @__PURE__ */
|
|
1716
|
+
if (activeIconName) return /* @__PURE__ */ React26.createElement(React26.Fragment, null, renderIcon(activeIconName, iconSize, activeIconColor ?? colors.primary));
|
|
1639
1717
|
const active = renderProp(activeIcon);
|
|
1640
|
-
if (active) return /* @__PURE__ */
|
|
1641
|
-
return /* @__PURE__ */
|
|
1718
|
+
if (active) return /* @__PURE__ */ React26.createElement(React26.Fragment, null, active);
|
|
1719
|
+
return /* @__PURE__ */ React26.createElement(FontAwesome5$1, { name: "check-circle", size: iconSize, color: colors.primary });
|
|
1642
1720
|
}
|
|
1643
|
-
if (iconName) return /* @__PURE__ */
|
|
1721
|
+
if (iconName) return /* @__PURE__ */ React26.createElement(React26.Fragment, null, renderIcon(iconName, iconSize, iconColor ?? colors.foregroundMuted));
|
|
1644
1722
|
const custom = renderProp(icon);
|
|
1645
|
-
if (custom) return /* @__PURE__ */
|
|
1646
|
-
return /* @__PURE__ */
|
|
1723
|
+
if (custom) return /* @__PURE__ */ React26.createElement(React26.Fragment, null, custom);
|
|
1724
|
+
return /* @__PURE__ */ React26.createElement(FontAwesome5$1, { name: "circle", size: iconSize, color: colors.foregroundMuted });
|
|
1647
1725
|
};
|
|
1648
|
-
return /* @__PURE__ */
|
|
1726
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles17.disabled, style] }, /* @__PURE__ */ React26.createElement(
|
|
1649
1727
|
TouchableOpacity,
|
|
1650
1728
|
{
|
|
1651
1729
|
onPress: () => {
|
|
@@ -1659,20 +1737,20 @@ function Toggle({
|
|
|
1659
1737
|
touchSoundDisabled: true,
|
|
1660
1738
|
...props
|
|
1661
1739
|
},
|
|
1662
|
-
/* @__PURE__ */
|
|
1740
|
+
/* @__PURE__ */ React26.createElement(
|
|
1663
1741
|
Animated.View,
|
|
1664
1742
|
{
|
|
1665
1743
|
style: [
|
|
1666
|
-
|
|
1744
|
+
styles17.base,
|
|
1667
1745
|
sizeStyles[size],
|
|
1668
1746
|
{ borderColor, backgroundColor, borderWidth: 2 }
|
|
1669
1747
|
]
|
|
1670
1748
|
},
|
|
1671
|
-
/* @__PURE__ */
|
|
1749
|
+
/* @__PURE__ */ React26.createElement(View, { style: styles17.inner }, /* @__PURE__ */ React26.createElement(LeftIcon, null), label ? /* @__PURE__ */ React26.createElement(Animated.Text, { style: [styles17.label, { color: textColor }], allowFontScaling: true }, label) : null)
|
|
1672
1750
|
)
|
|
1673
1751
|
));
|
|
1674
1752
|
}
|
|
1675
|
-
var
|
|
1753
|
+
var styles17 = StyleSheet.create({
|
|
1676
1754
|
base: {
|
|
1677
1755
|
borderRadius: ms(8)
|
|
1678
1756
|
},
|
|
@@ -1705,10 +1783,10 @@ function RadioItem({
|
|
|
1705
1783
|
const handlePressOut = () => {
|
|
1706
1784
|
Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver7, speed: 40, bounciness: 4 }).start();
|
|
1707
1785
|
};
|
|
1708
|
-
return /* @__PURE__ */
|
|
1786
|
+
return /* @__PURE__ */ React26.createElement(
|
|
1709
1787
|
TouchableOpacity,
|
|
1710
1788
|
{
|
|
1711
|
-
style:
|
|
1789
|
+
style: styles18.row,
|
|
1712
1790
|
onPress: () => {
|
|
1713
1791
|
if (!option.disabled) {
|
|
1714
1792
|
selectionAsync();
|
|
@@ -1721,11 +1799,11 @@ function RadioItem({
|
|
|
1721
1799
|
touchSoundDisabled: true,
|
|
1722
1800
|
disabled: option.disabled
|
|
1723
1801
|
},
|
|
1724
|
-
/* @__PURE__ */
|
|
1802
|
+
/* @__PURE__ */ React26.createElement(
|
|
1725
1803
|
Animated.View,
|
|
1726
1804
|
{
|
|
1727
1805
|
style: [
|
|
1728
|
-
|
|
1806
|
+
styles18.radio,
|
|
1729
1807
|
{
|
|
1730
1808
|
borderColor: selected ? colors.primary : colors.border,
|
|
1731
1809
|
opacity: option.disabled ? 0.45 : 1,
|
|
@@ -1733,13 +1811,13 @@ function RadioItem({
|
|
|
1733
1811
|
}
|
|
1734
1812
|
]
|
|
1735
1813
|
},
|
|
1736
|
-
selected ? /* @__PURE__ */
|
|
1814
|
+
selected ? /* @__PURE__ */ React26.createElement(View, { style: [styles18.dot, { backgroundColor: colors.primary }] }) : null
|
|
1737
1815
|
),
|
|
1738
|
-
/* @__PURE__ */
|
|
1816
|
+
/* @__PURE__ */ React26.createElement(
|
|
1739
1817
|
Text,
|
|
1740
1818
|
{
|
|
1741
1819
|
style: [
|
|
1742
|
-
|
|
1820
|
+
styles18.label,
|
|
1743
1821
|
{ color: option.disabled ? colors.foregroundMuted : colors.foreground }
|
|
1744
1822
|
],
|
|
1745
1823
|
allowFontScaling: true
|
|
@@ -1755,7 +1833,7 @@ function RadioGroup({
|
|
|
1755
1833
|
orientation = "vertical",
|
|
1756
1834
|
style
|
|
1757
1835
|
}) {
|
|
1758
|
-
return /* @__PURE__ */
|
|
1836
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles18.container, orientation === "horizontal" && styles18.horizontal, style] }, options.map((option) => /* @__PURE__ */ React26.createElement(
|
|
1759
1837
|
RadioItem,
|
|
1760
1838
|
{
|
|
1761
1839
|
key: option.value,
|
|
@@ -1765,7 +1843,7 @@ function RadioGroup({
|
|
|
1765
1843
|
}
|
|
1766
1844
|
)));
|
|
1767
1845
|
}
|
|
1768
|
-
var
|
|
1846
|
+
var styles18 = StyleSheet.create({
|
|
1769
1847
|
container: {
|
|
1770
1848
|
gap: vs(12)
|
|
1771
1849
|
},
|
|
@@ -1814,12 +1892,12 @@ function TabTrigger({
|
|
|
1814
1892
|
Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver8, speed: 40, bounciness: 4 }).start();
|
|
1815
1893
|
};
|
|
1816
1894
|
const isUnderline = variant === "underline";
|
|
1817
|
-
return /* @__PURE__ */
|
|
1895
|
+
return /* @__PURE__ */ React26.createElement(
|
|
1818
1896
|
TouchableOpacity,
|
|
1819
1897
|
{
|
|
1820
1898
|
style: [
|
|
1821
|
-
|
|
1822
|
-
isUnderline &&
|
|
1899
|
+
styles19.trigger,
|
|
1900
|
+
isUnderline && styles19.triggerUnderline,
|
|
1823
1901
|
isUnderline && isActive && { borderBottomColor: colors.primary }
|
|
1824
1902
|
],
|
|
1825
1903
|
onPress,
|
|
@@ -1829,13 +1907,13 @@ function TabTrigger({
|
|
|
1829
1907
|
activeOpacity: 1,
|
|
1830
1908
|
touchSoundDisabled: true
|
|
1831
1909
|
},
|
|
1832
|
-
/* @__PURE__ */
|
|
1910
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React26.createElement(View, { style: styles19.triggerInner }, tab.icon ? typeof tab.icon === "function" ? tab.icon(isActive) : tab.icon : null, /* @__PURE__ */ React26.createElement(
|
|
1833
1911
|
Text,
|
|
1834
1912
|
{
|
|
1835
1913
|
style: [
|
|
1836
|
-
|
|
1914
|
+
styles19.triggerLabel,
|
|
1837
1915
|
{ color: isActive ? colors.foreground : colors.foregroundMuted },
|
|
1838
|
-
isActive && (isUnderline ?
|
|
1916
|
+
isActive && (isUnderline ? styles19.activeTriggerLabelUnderline : styles19.activeTriggerLabel)
|
|
1839
1917
|
],
|
|
1840
1918
|
allowFontScaling: true
|
|
1841
1919
|
},
|
|
@@ -1872,13 +1950,13 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
1872
1950
|
if (!value) setInternal(v);
|
|
1873
1951
|
onValueChange?.(v);
|
|
1874
1952
|
};
|
|
1875
|
-
return /* @__PURE__ */
|
|
1876
|
-
variant === "pill" ? [
|
|
1877
|
-
] }, variant === "pill" && /* @__PURE__ */
|
|
1953
|
+
return /* @__PURE__ */ React26.createElement(View, { style }, /* @__PURE__ */ React26.createElement(View, { style: [
|
|
1954
|
+
variant === "pill" ? [styles19.list, { backgroundColor: colors.surface }] : styles19.listUnderline
|
|
1955
|
+
] }, variant === "pill" && /* @__PURE__ */ React26.createElement(
|
|
1878
1956
|
Animated.View,
|
|
1879
1957
|
{
|
|
1880
1958
|
style: [
|
|
1881
|
-
|
|
1959
|
+
styles19.pill,
|
|
1882
1960
|
{
|
|
1883
1961
|
backgroundColor: colors.background,
|
|
1884
1962
|
position: "absolute",
|
|
@@ -1895,7 +1973,7 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
1895
1973
|
}
|
|
1896
1974
|
]
|
|
1897
1975
|
}
|
|
1898
|
-
), tabs.map((tab) => /* @__PURE__ */
|
|
1976
|
+
), tabs.map((tab) => /* @__PURE__ */ React26.createElement(
|
|
1899
1977
|
TabTrigger,
|
|
1900
1978
|
{
|
|
1901
1979
|
key: tab.value,
|
|
@@ -1916,9 +1994,9 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
1916
1994
|
}
|
|
1917
1995
|
function TabsContent({ value, activeValue, children, style }) {
|
|
1918
1996
|
if (value !== activeValue) return null;
|
|
1919
|
-
return /* @__PURE__ */
|
|
1997
|
+
return /* @__PURE__ */ React26.createElement(View, { style }, children);
|
|
1920
1998
|
}
|
|
1921
|
-
var
|
|
1999
|
+
var styles19 = StyleSheet.create({
|
|
1922
2000
|
list: {
|
|
1923
2001
|
flexDirection: "row",
|
|
1924
2002
|
borderRadius: 12,
|
|
@@ -1971,9 +2049,10 @@ function AccordionItemComponent({
|
|
|
1971
2049
|
onToggle
|
|
1972
2050
|
}) {
|
|
1973
2051
|
const { colors } = useTheme();
|
|
2052
|
+
const resolvedIcon = item.iconName ? renderIcon(item.iconName, ms(16), item.iconColor ?? colors.foregroundMuted) : item.icon;
|
|
1974
2053
|
const isExpanded = useSharedValue(isOpen);
|
|
1975
2054
|
const height = useSharedValue(0);
|
|
1976
|
-
|
|
2055
|
+
React26.useEffect(() => {
|
|
1977
2056
|
isExpanded.value = isOpen;
|
|
1978
2057
|
}, [isOpen]);
|
|
1979
2058
|
const derivedHeight = useDerivedValue(
|
|
@@ -1995,21 +2074,21 @@ function AccordionItemComponent({
|
|
|
1995
2074
|
const rotationStyle = useAnimatedStyle(() => ({
|
|
1996
2075
|
transform: [{ rotate: `${derivedRotation.value * 180}deg` }]
|
|
1997
2076
|
}));
|
|
1998
|
-
return /* @__PURE__ */
|
|
2077
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles20.item, { backgroundColor: colors.card, borderColor: colors.border }] }, /* @__PURE__ */ React26.createElement(
|
|
1999
2078
|
Pressable,
|
|
2000
2079
|
{
|
|
2001
|
-
style: ({ pressed }) => [
|
|
2080
|
+
style: ({ pressed }) => [styles20.trigger, { opacity: pressed ? 0.6 : 1 }],
|
|
2002
2081
|
onPress: () => {
|
|
2003
2082
|
selectionAsync();
|
|
2004
2083
|
onToggle();
|
|
2005
2084
|
}
|
|
2006
2085
|
},
|
|
2007
|
-
/* @__PURE__ */
|
|
2008
|
-
/* @__PURE__ */
|
|
2009
|
-
), /* @__PURE__ */
|
|
2086
|
+
/* @__PURE__ */ React26.createElement(View, { style: styles20.triggerContent }, resolvedIcon ? /* @__PURE__ */ React26.createElement(View, { style: styles20.icon }, resolvedIcon) : null, /* @__PURE__ */ React26.createElement(Text, { style: [styles20.triggerText, { color: colors.foreground }], allowFontScaling: true }, item.trigger)),
|
|
2087
|
+
/* @__PURE__ */ React26.createElement(Animated11.View, { style: [styles20.chevron, rotationStyle] }, /* @__PURE__ */ React26.createElement(Entypo$1, { name: "chevron-down", size: 18, color: colors.foregroundMuted }))
|
|
2088
|
+
), /* @__PURE__ */ React26.createElement(Animated11.View, { style: bodyStyle }, /* @__PURE__ */ React26.createElement(
|
|
2010
2089
|
View,
|
|
2011
2090
|
{
|
|
2012
|
-
style:
|
|
2091
|
+
style: styles20.content,
|
|
2013
2092
|
onLayout: (e) => {
|
|
2014
2093
|
height.value = e.nativeEvent.layout.height;
|
|
2015
2094
|
}
|
|
@@ -2031,7 +2110,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
2031
2110
|
);
|
|
2032
2111
|
}
|
|
2033
2112
|
};
|
|
2034
|
-
return /* @__PURE__ */
|
|
2113
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles20.list, style] }, items.map((item) => /* @__PURE__ */ React26.createElement(
|
|
2035
2114
|
AccordionItemComponent,
|
|
2036
2115
|
{
|
|
2037
2116
|
key: item.value,
|
|
@@ -2041,7 +2120,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
2041
2120
|
}
|
|
2042
2121
|
)));
|
|
2043
2122
|
}
|
|
2044
|
-
var
|
|
2123
|
+
var styles20 = StyleSheet.create({
|
|
2045
2124
|
list: {
|
|
2046
2125
|
gap: s(6)
|
|
2047
2126
|
},
|
|
@@ -2057,10 +2136,19 @@ var styles19 = StyleSheet.create({
|
|
|
2057
2136
|
paddingHorizontal: s(14),
|
|
2058
2137
|
paddingVertical: vs(12)
|
|
2059
2138
|
},
|
|
2139
|
+
triggerContent: {
|
|
2140
|
+
flexDirection: "row",
|
|
2141
|
+
alignItems: "center",
|
|
2142
|
+
gap: s(8),
|
|
2143
|
+
flex: 1
|
|
2144
|
+
},
|
|
2145
|
+
icon: {
|
|
2146
|
+
alignItems: "center",
|
|
2147
|
+
justifyContent: "center"
|
|
2148
|
+
},
|
|
2060
2149
|
triggerText: {
|
|
2061
2150
|
fontFamily: "Poppins-Medium",
|
|
2062
|
-
fontSize: ms(14)
|
|
2063
|
-
flex: 1
|
|
2151
|
+
fontSize: ms(14)
|
|
2064
2152
|
},
|
|
2065
2153
|
chevron: {
|
|
2066
2154
|
marginLeft: s(8)
|
|
@@ -2097,7 +2185,7 @@ function Slider({
|
|
|
2097
2185
|
}
|
|
2098
2186
|
onValueChange?.(v);
|
|
2099
2187
|
};
|
|
2100
|
-
return /* @__PURE__ */
|
|
2188
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles21.wrapper, style], accessibilityLabel }, label || showValue ? /* @__PURE__ */ React26.createElement(View, { style: styles21.header }, label ? /* @__PURE__ */ React26.createElement(Text, { style: [styles21.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, showValue ? /* @__PURE__ */ React26.createElement(Text, { style: [styles21.valueText, { color: colors.foregroundMuted }], allowFontScaling: true }, formatValue2(value)) : null) : null, /* @__PURE__ */ React26.createElement(View, { style: disabled ? styles21.disabled : void 0 }, /* @__PURE__ */ React26.createElement(
|
|
2101
2189
|
RNSlider,
|
|
2102
2190
|
{
|
|
2103
2191
|
value,
|
|
@@ -2110,12 +2198,12 @@ function Slider({
|
|
|
2110
2198
|
minimumTrackTintColor: colors.primary,
|
|
2111
2199
|
maximumTrackTintColor: colors.surface,
|
|
2112
2200
|
thumbTintColor: colors.primary,
|
|
2113
|
-
style:
|
|
2201
|
+
style: styles21.slider,
|
|
2114
2202
|
accessibilityLabel
|
|
2115
2203
|
}
|
|
2116
2204
|
)));
|
|
2117
2205
|
}
|
|
2118
|
-
var
|
|
2206
|
+
var styles21 = StyleSheet.create({
|
|
2119
2207
|
wrapper: {
|
|
2120
2208
|
gap: vs(8)
|
|
2121
2209
|
},
|
|
@@ -2148,7 +2236,9 @@ function Sheet({
|
|
|
2148
2236
|
children,
|
|
2149
2237
|
style,
|
|
2150
2238
|
scrollable,
|
|
2151
|
-
maxHeight
|
|
2239
|
+
maxHeight,
|
|
2240
|
+
keyboardBehavior,
|
|
2241
|
+
keyboardOffset = 0
|
|
2152
2242
|
}) {
|
|
2153
2243
|
const { colors } = useTheme();
|
|
2154
2244
|
const ref = useRef(null);
|
|
@@ -2160,7 +2250,7 @@ function Sheet({
|
|
|
2160
2250
|
ref.current?.dismiss();
|
|
2161
2251
|
}
|
|
2162
2252
|
}, [open]);
|
|
2163
|
-
const renderBackdrop = (props) => /* @__PURE__ */
|
|
2253
|
+
const renderBackdrop = (props) => /* @__PURE__ */ React26.createElement(
|
|
2164
2254
|
BottomSheetBackdrop,
|
|
2165
2255
|
{
|
|
2166
2256
|
...props,
|
|
@@ -2169,23 +2259,28 @@ function Sheet({
|
|
|
2169
2259
|
pressBehavior: "close"
|
|
2170
2260
|
}
|
|
2171
2261
|
);
|
|
2172
|
-
const headerNode = title || description ? /* @__PURE__ */
|
|
2262
|
+
const headerNode = title || description ? /* @__PURE__ */ React26.createElement(View, { style: styles22.header }, title ? /* @__PURE__ */ React26.createElement(Text, { style: [styles22.title, { color: colors.foreground }], allowFontScaling: true }, title) : null, description ? /* @__PURE__ */ React26.createElement(Text, { style: [styles22.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null) : null;
|
|
2173
2263
|
const useScroll = scrollable || !!maxHeight;
|
|
2174
|
-
|
|
2264
|
+
const wrapKeyboard = (node) => {
|
|
2265
|
+
if (!keyboardBehavior || keyboardBehavior === "none") return node;
|
|
2266
|
+
const behavior = keyboardBehavior ?? Platform.select({ ios: "padding", android: "height" });
|
|
2267
|
+
return /* @__PURE__ */ React26.createElement(KeyboardAvoidingView, { behavior, keyboardVerticalOffset: keyboardOffset }, node);
|
|
2268
|
+
};
|
|
2269
|
+
return /* @__PURE__ */ React26.createElement(
|
|
2175
2270
|
BottomSheetModal,
|
|
2176
2271
|
{
|
|
2177
2272
|
ref,
|
|
2178
2273
|
enableDynamicSizing: true,
|
|
2179
2274
|
onDismiss: onClose,
|
|
2180
2275
|
backdropComponent: renderBackdrop,
|
|
2181
|
-
backgroundStyle: [
|
|
2182
|
-
handleIndicatorStyle: [
|
|
2276
|
+
backgroundStyle: [styles22.background, { backgroundColor: colors.card }],
|
|
2277
|
+
handleIndicatorStyle: [styles22.handle, { backgroundColor: colors.border }],
|
|
2183
2278
|
enablePanDownToClose: true
|
|
2184
2279
|
},
|
|
2185
|
-
/* @__PURE__ */
|
|
2280
|
+
/* @__PURE__ */ React26.createElement(BottomSheetView, { style: maxHeight ? { maxHeight } : void 0 }, wrapKeyboard(useScroll ? /* @__PURE__ */ React26.createElement(BottomSheetScrollView, { contentContainerStyle: [styles22.content, style] }, headerNode, children) : /* @__PURE__ */ React26.createElement(BottomSheetView, { style: [styles22.content, style] }, headerNode, children)))
|
|
2186
2281
|
);
|
|
2187
2282
|
}
|
|
2188
|
-
var
|
|
2283
|
+
var styles22 = StyleSheet.create({
|
|
2189
2284
|
background: {
|
|
2190
2285
|
borderTopLeftRadius: ms(16),
|
|
2191
2286
|
borderTopRightRadius: ms(16)
|
|
@@ -2260,11 +2355,11 @@ function Select({
|
|
|
2260
2355
|
}
|
|
2261
2356
|
setPickerVisible(false);
|
|
2262
2357
|
};
|
|
2263
|
-
return /* @__PURE__ */
|
|
2358
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles23.container, style] }, label ? /* @__PURE__ */ React26.createElement(Text, { style: [styles23.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, !isWeb2 ? /* @__PURE__ */ React26.createElement(Animated.View, { style: { transform: [{ scale: scale2 }], opacity: disabled ? 0.45 : 1 } }, /* @__PURE__ */ React26.createElement(
|
|
2264
2359
|
TouchableOpacity,
|
|
2265
2360
|
{
|
|
2266
2361
|
style: [
|
|
2267
|
-
|
|
2362
|
+
styles23.trigger,
|
|
2268
2363
|
{
|
|
2269
2364
|
borderColor: error ? colors.destructive : colors.border,
|
|
2270
2365
|
backgroundColor: colors.background
|
|
@@ -2276,11 +2371,11 @@ function Select({
|
|
|
2276
2371
|
activeOpacity: 1,
|
|
2277
2372
|
touchSoundDisabled: true
|
|
2278
2373
|
},
|
|
2279
|
-
/* @__PURE__ */
|
|
2374
|
+
/* @__PURE__ */ React26.createElement(
|
|
2280
2375
|
Text,
|
|
2281
2376
|
{
|
|
2282
2377
|
style: [
|
|
2283
|
-
|
|
2378
|
+
styles23.triggerText,
|
|
2284
2379
|
{ color: selected ? colors.foreground : colors.foregroundMuted }
|
|
2285
2380
|
],
|
|
2286
2381
|
numberOfLines: 1,
|
|
@@ -2288,8 +2383,8 @@ function Select({
|
|
|
2288
2383
|
},
|
|
2289
2384
|
selected?.label ?? placeholder
|
|
2290
2385
|
),
|
|
2291
|
-
/* @__PURE__ */
|
|
2292
|
-
)) : null, isIOS ? /* @__PURE__ */
|
|
2386
|
+
/* @__PURE__ */ React26.createElement(Entypo$1, { name: "chevron-with-circle-down", size: 20, color: colors.foregroundMuted })
|
|
2387
|
+
)) : null, isIOS ? /* @__PURE__ */ React26.createElement(
|
|
2293
2388
|
Modal,
|
|
2294
2389
|
{
|
|
2295
2390
|
visible: pickerVisible,
|
|
@@ -2297,16 +2392,16 @@ function Select({
|
|
|
2297
2392
|
animationType: "slide",
|
|
2298
2393
|
onRequestClose: handleDismiss
|
|
2299
2394
|
},
|
|
2300
|
-
/* @__PURE__ */
|
|
2301
|
-
/* @__PURE__ */
|
|
2395
|
+
/* @__PURE__ */ React26.createElement(TouchableOpacity, { style: styles23.iosBackdrop, activeOpacity: 1, onPress: handleDismiss }),
|
|
2396
|
+
/* @__PURE__ */ React26.createElement(View, { style: [styles23.iosSheet, { backgroundColor: colors.card }] }, /* @__PURE__ */ React26.createElement(View, { style: [styles23.iosToolbar, { borderBottomColor: colors.border }] }, label ? /* @__PURE__ */ React26.createElement(Text, { style: [styles23.iosToolbarTitle, { color: colors.foreground }], allowFontScaling: true }, label) : /* @__PURE__ */ React26.createElement(View, null), /* @__PURE__ */ React26.createElement(TouchableOpacity, { onPress: handleConfirm, style: styles23.iosDoneBtn, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } }, /* @__PURE__ */ React26.createElement(Text, { style: [styles23.iosDoneBtnText, { color: colors.primary }], allowFontScaling: true }, "Done"))), /* @__PURE__ */ React26.createElement(
|
|
2302
2397
|
Picker,
|
|
2303
2398
|
{
|
|
2304
2399
|
selectedValue: pendingValue ?? "",
|
|
2305
2400
|
onValueChange: (val) => setPendingValue(val),
|
|
2306
2401
|
itemStyle: { color: colors.foreground }
|
|
2307
2402
|
},
|
|
2308
|
-
!value ? /* @__PURE__ */
|
|
2309
|
-
options.map((o) => /* @__PURE__ */
|
|
2403
|
+
!value ? /* @__PURE__ */ React26.createElement(Picker.Item, { label: placeholder, value: "", color: colors.foregroundMuted, enabled: false }) : null,
|
|
2404
|
+
options.map((o) => /* @__PURE__ */ React26.createElement(
|
|
2310
2405
|
Picker.Item,
|
|
2311
2406
|
{
|
|
2312
2407
|
key: o.value,
|
|
@@ -2317,7 +2412,7 @@ function Select({
|
|
|
2317
2412
|
}
|
|
2318
2413
|
))
|
|
2319
2414
|
))
|
|
2320
|
-
) : null, isAndroid ? /* @__PURE__ */
|
|
2415
|
+
) : null, isAndroid ? /* @__PURE__ */ React26.createElement(
|
|
2321
2416
|
Picker,
|
|
2322
2417
|
{
|
|
2323
2418
|
ref: pickerRef,
|
|
@@ -2331,10 +2426,10 @@ function Select({
|
|
|
2331
2426
|
mode: "dialog",
|
|
2332
2427
|
enabled: !disabled,
|
|
2333
2428
|
prompt: label,
|
|
2334
|
-
style:
|
|
2429
|
+
style: styles23.androidHiddenPicker
|
|
2335
2430
|
},
|
|
2336
|
-
!value ? /* @__PURE__ */
|
|
2337
|
-
options.map((o) => /* @__PURE__ */
|
|
2431
|
+
!value ? /* @__PURE__ */ React26.createElement(Picker.Item, { label: placeholder, value: "", enabled: false }) : null,
|
|
2432
|
+
options.map((o) => /* @__PURE__ */ React26.createElement(
|
|
2338
2433
|
Picker.Item,
|
|
2339
2434
|
{
|
|
2340
2435
|
key: o.value,
|
|
@@ -2343,7 +2438,7 @@ function Select({
|
|
|
2343
2438
|
enabled: !o.disabled
|
|
2344
2439
|
}
|
|
2345
2440
|
))
|
|
2346
|
-
) : null, isWeb2 ? /* @__PURE__ */
|
|
2441
|
+
) : null, isWeb2 ? /* @__PURE__ */ React26.createElement(
|
|
2347
2442
|
Picker,
|
|
2348
2443
|
{
|
|
2349
2444
|
selectedValue: value ?? "",
|
|
@@ -2354,7 +2449,7 @@ function Select({
|
|
|
2354
2449
|
},
|
|
2355
2450
|
enabled: !disabled,
|
|
2356
2451
|
style: [
|
|
2357
|
-
|
|
2452
|
+
styles23.webPicker,
|
|
2358
2453
|
{
|
|
2359
2454
|
borderColor: error ? colors.destructive : colors.border,
|
|
2360
2455
|
color: selected ? colors.foreground : colors.foregroundMuted,
|
|
@@ -2363,8 +2458,8 @@ function Select({
|
|
|
2363
2458
|
}
|
|
2364
2459
|
]
|
|
2365
2460
|
},
|
|
2366
|
-
/* @__PURE__ */
|
|
2367
|
-
options.map((o) => /* @__PURE__ */
|
|
2461
|
+
/* @__PURE__ */ React26.createElement(Picker.Item, { label: placeholder, value: "", enabled: false }),
|
|
2462
|
+
options.map((o) => /* @__PURE__ */ React26.createElement(
|
|
2368
2463
|
Picker.Item,
|
|
2369
2464
|
{
|
|
2370
2465
|
key: o.value,
|
|
@@ -2373,9 +2468,9 @@ function Select({
|
|
|
2373
2468
|
enabled: !o.disabled
|
|
2374
2469
|
}
|
|
2375
2470
|
))
|
|
2376
|
-
) : null, error ? /* @__PURE__ */
|
|
2471
|
+
) : null, error ? /* @__PURE__ */ React26.createElement(Text, { style: [styles23.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null);
|
|
2377
2472
|
}
|
|
2378
|
-
var
|
|
2473
|
+
var styles23 = StyleSheet.create({
|
|
2379
2474
|
container: {
|
|
2380
2475
|
gap: vs(8)
|
|
2381
2476
|
},
|
|
@@ -2511,20 +2606,20 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
2511
2606
|
}[variant];
|
|
2512
2607
|
const titleColor = variant === "default" ? colors.foreground : accentColor;
|
|
2513
2608
|
const descColor = variant === "default" ? colors.foregroundMuted : accentColor;
|
|
2514
|
-
const defaultIcon = variant === "success" ? /* @__PURE__ */
|
|
2609
|
+
const defaultIcon = variant === "success" ? /* @__PURE__ */ React26.createElement(FontAwesome5$1, { name: "check-circle", size: 16, color: accentColor }) : variant === "destructive" ? /* @__PURE__ */ React26.createElement(AntDesign$1, { name: "exclamation-circle", size: 16, color: accentColor }) : variant === "warning" ? /* @__PURE__ */ React26.createElement(MaterialIcons$1, { name: "warning-amber", size: 17, color: accentColor }) : /* @__PURE__ */ React26.createElement(Entypo$1, { name: "info-with-circle", size: 16, color: accentColor });
|
|
2515
2610
|
const leftIcon = item.iconName ? renderIcon(item.iconName, 16, item.iconColor ?? accentColor) : item.icon ?? defaultIcon;
|
|
2516
|
-
return /* @__PURE__ */
|
|
2611
|
+
return /* @__PURE__ */ React26.createElement(GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React26.createElement(Animated11.View, { style: [styles24.toast, { backgroundColor: bgColor, borderColor }, animatedStyle] }, /* @__PURE__ */ React26.createElement(View, { style: styles24.leftIconContainer }, leftIcon), /* @__PURE__ */ React26.createElement(View, { style: styles24.toastContent }, item.title ? /* @__PURE__ */ React26.createElement(Text, { style: [styles24.toastTitle, { color: titleColor }], allowFontScaling: true }, item.title) : null, item.description ? /* @__PURE__ */ React26.createElement(Text, { style: [styles24.toastDescription, { color: descColor }], allowFontScaling: true }, item.description) : null), item.action && /* @__PURE__ */ React26.createElement(
|
|
2517
2612
|
TouchableOpacity,
|
|
2518
2613
|
{
|
|
2519
2614
|
onPress: () => {
|
|
2520
2615
|
item.action.onPress();
|
|
2521
2616
|
onDismiss();
|
|
2522
2617
|
},
|
|
2523
|
-
style:
|
|
2618
|
+
style: styles24.actionButton,
|
|
2524
2619
|
touchSoundDisabled: true
|
|
2525
2620
|
},
|
|
2526
|
-
/* @__PURE__ */
|
|
2527
|
-
), /* @__PURE__ */
|
|
2621
|
+
/* @__PURE__ */ React26.createElement(Text, { style: [styles24.actionLabel, { color: accentColor }], allowFontScaling: true }, item.action.label)
|
|
2622
|
+
), /* @__PURE__ */ React26.createElement(TouchableOpacity, { onPress: onDismiss, style: styles24.dismissButton, touchSoundDisabled: true }, /* @__PURE__ */ React26.createElement(AntDesign$1, { name: "close-circle", size: 16, color: descColor }))));
|
|
2528
2623
|
}
|
|
2529
2624
|
function ToastProvider({ children }) {
|
|
2530
2625
|
const [toasts, setToasts] = useState([]);
|
|
@@ -2545,9 +2640,9 @@ function ToastProvider({ children }) {
|
|
|
2545
2640
|
const dismiss = useCallback((id) => {
|
|
2546
2641
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
2547
2642
|
}, []);
|
|
2548
|
-
return /* @__PURE__ */
|
|
2643
|
+
return /* @__PURE__ */ React26.createElement(ToastContext.Provider, { value: { toast, dismiss } }, children, /* @__PURE__ */ React26.createElement(View, { style: [styles24.container, Platform.OS === "web" && styles24.containerWeb, { top: insets.top + 8 }], pointerEvents: "box-none" }, toasts.map((item) => /* @__PURE__ */ React26.createElement(ToastNotification, { key: item.id, item, onDismiss: () => dismiss(item.id) }))));
|
|
2549
2644
|
}
|
|
2550
|
-
var
|
|
2645
|
+
var styles24 = StyleSheet.create({
|
|
2551
2646
|
container: {
|
|
2552
2647
|
position: "absolute",
|
|
2553
2648
|
left: s(16),
|
|
@@ -2644,7 +2739,7 @@ function CurrencyInput({
|
|
|
2644
2739
|
const inputStyle = size === "large" ? { fontFamily: "Poppins-Regular", fontSize: ms(36) } : { fontFamily: "Poppins-Regular" };
|
|
2645
2740
|
const dollarIcon = renderIcon("dollar-sign", size === "large" ? 24 : 16, colors.foregroundMuted);
|
|
2646
2741
|
const displayValue = value && prefix && value.startsWith(prefix) ? value.slice(prefix.length) : value;
|
|
2647
|
-
return /* @__PURE__ */
|
|
2742
|
+
return /* @__PURE__ */ React26.createElement(
|
|
2648
2743
|
Input,
|
|
2649
2744
|
{
|
|
2650
2745
|
value: displayValue,
|
|
@@ -2662,6 +2757,12 @@ function CurrencyInput({
|
|
|
2662
2757
|
}
|
|
2663
2758
|
);
|
|
2664
2759
|
}
|
|
2760
|
+
var variantFontSize = {
|
|
2761
|
+
hero: ms(48),
|
|
2762
|
+
large: ms(32),
|
|
2763
|
+
medium: ms(18),
|
|
2764
|
+
small: ms(14)
|
|
2765
|
+
};
|
|
2665
2766
|
function formatValue(value, prefix, showDecimals) {
|
|
2666
2767
|
const num = typeof value === "string" ? parseFloat(value.replace(/[^0-9.-]/g, "")) : value;
|
|
2667
2768
|
if (isNaN(num)) return `${prefix}0`;
|
|
@@ -2674,16 +2775,27 @@ function formatValue(value, prefix, showDecimals) {
|
|
|
2674
2775
|
}
|
|
2675
2776
|
return `${sign}${prefix}${intPart}`;
|
|
2676
2777
|
}
|
|
2677
|
-
function CurrencyDisplay({ value, prefix = "$", showDecimals = false, textColor, style }) {
|
|
2778
|
+
function CurrencyDisplay({ value, prefix = "$", showDecimals = false, textColor, variant, autoScale, maxFontSize, style }) {
|
|
2678
2779
|
const { colors } = useTheme();
|
|
2679
2780
|
const formatted = formatValue(value, prefix, showDecimals);
|
|
2680
|
-
|
|
2781
|
+
const baseFontSize = variant ? variantFontSize[variant] : ms(56);
|
|
2782
|
+
const fontSize = maxFontSize ?? baseFontSize;
|
|
2783
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles25.container, style] }, /* @__PURE__ */ React26.createElement(
|
|
2784
|
+
Text,
|
|
2785
|
+
{
|
|
2786
|
+
style: [styles25.amount, { color: textColor ?? colors.foreground, fontSize }],
|
|
2787
|
+
allowFontScaling: true,
|
|
2788
|
+
numberOfLines: autoScale ? 1 : void 0,
|
|
2789
|
+
adjustsFontSizeToFit: autoScale,
|
|
2790
|
+
minimumFontScale: autoScale ? 0.5 : void 0
|
|
2791
|
+
},
|
|
2792
|
+
formatted
|
|
2793
|
+
));
|
|
2681
2794
|
}
|
|
2682
|
-
var
|
|
2795
|
+
var styles25 = StyleSheet.create({
|
|
2683
2796
|
container: {},
|
|
2684
2797
|
amount: {
|
|
2685
2798
|
fontFamily: "Poppins-Bold",
|
|
2686
|
-
fontSize: ms(56),
|
|
2687
2799
|
letterSpacing: -2
|
|
2688
2800
|
}
|
|
2689
2801
|
});
|
|
@@ -2746,10 +2858,10 @@ function ListItem({
|
|
|
2746
2858
|
shadowRadius: 6,
|
|
2747
2859
|
elevation: 2
|
|
2748
2860
|
} : {};
|
|
2749
|
-
return /* @__PURE__ */
|
|
2861
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles26.disabled] }, /* @__PURE__ */ React26.createElement(
|
|
2750
2862
|
TouchableOpacity,
|
|
2751
2863
|
{
|
|
2752
|
-
style: [
|
|
2864
|
+
style: [styles26.container, cardStyle, style],
|
|
2753
2865
|
onPress: onPress ? handlePress : void 0,
|
|
2754
2866
|
onPressIn: handlePressIn,
|
|
2755
2867
|
onPressOut: handlePressOut,
|
|
@@ -2757,51 +2869,51 @@ function ListItem({
|
|
|
2757
2869
|
activeOpacity: 1,
|
|
2758
2870
|
touchSoundDisabled: true
|
|
2759
2871
|
},
|
|
2760
|
-
effectiveLeft ? /* @__PURE__ */
|
|
2761
|
-
/* @__PURE__ */
|
|
2872
|
+
effectiveLeft ? /* @__PURE__ */ React26.createElement(View, { style: styles26.leftContainer }, effectiveLeft) : null,
|
|
2873
|
+
/* @__PURE__ */ React26.createElement(View, { style: styles26.content }, /* @__PURE__ */ React26.createElement(
|
|
2762
2874
|
Text,
|
|
2763
2875
|
{
|
|
2764
|
-
style: [
|
|
2876
|
+
style: [styles26.title, { color: colors.foreground }, titleStyle],
|
|
2765
2877
|
numberOfLines: 2,
|
|
2766
2878
|
allowFontScaling: true
|
|
2767
2879
|
},
|
|
2768
2880
|
title
|
|
2769
|
-
), subtitle ? /* @__PURE__ */
|
|
2881
|
+
), subtitle ? /* @__PURE__ */ React26.createElement(
|
|
2770
2882
|
Text,
|
|
2771
2883
|
{
|
|
2772
|
-
style: [
|
|
2884
|
+
style: [styles26.subtitle, { color: colors.foregroundMuted }, subtitleStyle],
|
|
2773
2885
|
numberOfLines: 2,
|
|
2774
2886
|
allowFontScaling: true
|
|
2775
2887
|
},
|
|
2776
2888
|
subtitle
|
|
2777
|
-
) : null, caption ? /* @__PURE__ */
|
|
2889
|
+
) : null, caption ? /* @__PURE__ */ React26.createElement(
|
|
2778
2890
|
Text,
|
|
2779
2891
|
{
|
|
2780
|
-
style: [
|
|
2892
|
+
style: [styles26.caption, { color: colors.foregroundMuted }, captionStyle],
|
|
2781
2893
|
numberOfLines: 1,
|
|
2782
2894
|
allowFontScaling: true
|
|
2783
2895
|
},
|
|
2784
2896
|
caption
|
|
2785
2897
|
) : null),
|
|
2786
|
-
effectiveRight !== void 0 ? /* @__PURE__ */
|
|
2898
|
+
effectiveRight !== void 0 ? /* @__PURE__ */ React26.createElement(View, { style: styles26.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React26.createElement(
|
|
2787
2899
|
Text,
|
|
2788
2900
|
{
|
|
2789
|
-
style: [
|
|
2901
|
+
style: [styles26.rightText, { color: colors.foregroundMuted }],
|
|
2790
2902
|
allowFontScaling: true
|
|
2791
2903
|
},
|
|
2792
2904
|
effectiveRight
|
|
2793
|
-
) : effectiveRight) : showChevron ? /* @__PURE__ */
|
|
2794
|
-
), showSeparator ? /* @__PURE__ */
|
|
2905
|
+
) : effectiveRight) : showChevron ? /* @__PURE__ */ React26.createElement(Entypo$1, { name: "chevron-with-circle-right", size: 20, color: colors.foregroundMuted }) : null
|
|
2906
|
+
), showSeparator ? /* @__PURE__ */ React26.createElement(
|
|
2795
2907
|
View,
|
|
2796
2908
|
{
|
|
2797
2909
|
style: [
|
|
2798
|
-
|
|
2910
|
+
styles26.separator,
|
|
2799
2911
|
{ backgroundColor: colors.border, marginLeft: effectiveLeft ? s(16) + s(44) + s(12) : s(16) }
|
|
2800
2912
|
]
|
|
2801
2913
|
}
|
|
2802
2914
|
) : null);
|
|
2803
2915
|
}
|
|
2804
|
-
var
|
|
2916
|
+
var styles26 = StyleSheet.create({
|
|
2805
2917
|
container: {
|
|
2806
2918
|
flexDirection: "row",
|
|
2807
2919
|
alignItems: "center",
|
|
@@ -2903,7 +3015,7 @@ function Chip({ label, selected = false, onPress, icon, iconName, style }) {
|
|
|
2903
3015
|
outputRange: [colors.border, colors.primary]
|
|
2904
3016
|
});
|
|
2905
3017
|
const resolvedIcon = iconName ? renderIcon(iconName, ms(13), selected ? colors.primaryForeground : colors.foreground) : icon;
|
|
2906
|
-
return /* @__PURE__ */
|
|
3018
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: [styles27.wrapper, { transform: [{ scale: scale2 }] }, style] }, /* @__PURE__ */ React26.createElement(
|
|
2907
3019
|
TouchableOpacity,
|
|
2908
3020
|
{
|
|
2909
3021
|
onPress: handlePress,
|
|
@@ -2912,7 +3024,7 @@ function Chip({ label, selected = false, onPress, icon, iconName, style }) {
|
|
|
2912
3024
|
activeOpacity: 1,
|
|
2913
3025
|
touchSoundDisabled: true
|
|
2914
3026
|
},
|
|
2915
|
-
/* @__PURE__ */
|
|
3027
|
+
/* @__PURE__ */ React26.createElement(Animated.View, { style: [styles27.chip, { backgroundColor, borderColor }] }, resolvedIcon ? /* @__PURE__ */ React26.createElement(View, { style: styles27.chipIcon }, resolvedIcon) : null, /* @__PURE__ */ React26.createElement(Animated.Text, { style: [styles27.label, { color: textColor }], allowFontScaling: true }, label))
|
|
2916
3028
|
));
|
|
2917
3029
|
}
|
|
2918
3030
|
function ChipGroup({ options, value, onValueChange, multiSelect = false, style }) {
|
|
@@ -2937,17 +3049,19 @@ function ChipGroup({ options, value, onValueChange, multiSelect = false, style }
|
|
|
2937
3049
|
}
|
|
2938
3050
|
return optionValue === value;
|
|
2939
3051
|
};
|
|
2940
|
-
return /* @__PURE__ */
|
|
3052
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles27.group, style] }, options.map((opt) => /* @__PURE__ */ React26.createElement(
|
|
2941
3053
|
Chip,
|
|
2942
3054
|
{
|
|
2943
3055
|
key: opt.value,
|
|
2944
3056
|
label: opt.label,
|
|
2945
3057
|
selected: isSelected(opt.value),
|
|
2946
|
-
onPress: () => handlePress(opt.value)
|
|
3058
|
+
onPress: opt.disabled ? void 0 : () => handlePress(opt.value),
|
|
3059
|
+
iconName: opt.iconName,
|
|
3060
|
+
style: opt.disabled ? { opacity: 0.4 } : void 0
|
|
2947
3061
|
}
|
|
2948
3062
|
)));
|
|
2949
3063
|
}
|
|
2950
|
-
var
|
|
3064
|
+
var styles27 = StyleSheet.create({
|
|
2951
3065
|
wrapper: {},
|
|
2952
3066
|
chip: {
|
|
2953
3067
|
borderRadius: 999,
|
|
@@ -2994,7 +3108,7 @@ function ConfirmDialog({
|
|
|
2994
3108
|
ref.current?.dismiss();
|
|
2995
3109
|
}
|
|
2996
3110
|
}, [visible]);
|
|
2997
|
-
const renderBackdrop = (props) => /* @__PURE__ */
|
|
3111
|
+
const renderBackdrop = (props) => /* @__PURE__ */ React26.createElement(
|
|
2998
3112
|
BottomSheetBackdrop,
|
|
2999
3113
|
{
|
|
3000
3114
|
...props,
|
|
@@ -3003,25 +3117,25 @@ function ConfirmDialog({
|
|
|
3003
3117
|
pressBehavior: "close"
|
|
3004
3118
|
}
|
|
3005
3119
|
);
|
|
3006
|
-
return /* @__PURE__ */
|
|
3120
|
+
return /* @__PURE__ */ React26.createElement(
|
|
3007
3121
|
BottomSheetModal,
|
|
3008
3122
|
{
|
|
3009
3123
|
ref,
|
|
3010
3124
|
enableDynamicSizing: true,
|
|
3011
3125
|
onDismiss: onCancel,
|
|
3012
3126
|
backdropComponent: renderBackdrop,
|
|
3013
|
-
backgroundStyle: [
|
|
3014
|
-
handleIndicatorStyle: [
|
|
3127
|
+
backgroundStyle: [styles28.background, { backgroundColor: colors.card }],
|
|
3128
|
+
handleIndicatorStyle: [styles28.handle, { backgroundColor: colors.border }],
|
|
3015
3129
|
enablePanDownToClose: true
|
|
3016
3130
|
},
|
|
3017
|
-
/* @__PURE__ */
|
|
3131
|
+
/* @__PURE__ */ React26.createElement(BottomSheetView, { style: styles28.content }, /* @__PURE__ */ React26.createElement(Text, { style: [styles28.title, { color: colors.foreground }], allowFontScaling: true }, title), description ? /* @__PURE__ */ React26.createElement(Text, { style: [styles28.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null, /* @__PURE__ */ React26.createElement(View, { style: styles28.actions }, /* @__PURE__ */ React26.createElement(
|
|
3018
3132
|
Button,
|
|
3019
3133
|
{
|
|
3020
3134
|
label: confirmLabel,
|
|
3021
3135
|
variant: confirmVariant,
|
|
3022
3136
|
fullWidth: true,
|
|
3023
3137
|
onPress: onConfirm,
|
|
3024
|
-
icon: /* @__PURE__ */
|
|
3138
|
+
icon: /* @__PURE__ */ React26.createElement(
|
|
3025
3139
|
Feather$1,
|
|
3026
3140
|
{
|
|
3027
3141
|
name: confirmVariant === "destructive" ? "trash-2" : "check",
|
|
@@ -3030,19 +3144,19 @@ function ConfirmDialog({
|
|
|
3030
3144
|
}
|
|
3031
3145
|
)
|
|
3032
3146
|
}
|
|
3033
|
-
), /* @__PURE__ */
|
|
3147
|
+
), /* @__PURE__ */ React26.createElement(
|
|
3034
3148
|
Button,
|
|
3035
3149
|
{
|
|
3036
3150
|
label: cancelLabel,
|
|
3037
3151
|
variant: "secondary",
|
|
3038
3152
|
fullWidth: true,
|
|
3039
3153
|
onPress: onCancel,
|
|
3040
|
-
icon: /* @__PURE__ */
|
|
3154
|
+
icon: /* @__PURE__ */ React26.createElement(Feather$1, { name: "x", size: 15, color: colors.foreground })
|
|
3041
3155
|
}
|
|
3042
3156
|
)))
|
|
3043
3157
|
);
|
|
3044
3158
|
}
|
|
3045
|
-
var
|
|
3159
|
+
var styles28 = StyleSheet.create({
|
|
3046
3160
|
background: {
|
|
3047
3161
|
borderTopLeftRadius: ms(16),
|
|
3048
3162
|
borderTopRightRadius: ms(16)
|
|
@@ -3072,17 +3186,27 @@ var styles27 = StyleSheet.create({
|
|
|
3072
3186
|
marginTop: vs(8)
|
|
3073
3187
|
}
|
|
3074
3188
|
});
|
|
3075
|
-
function LabelValue({ label, value, style }) {
|
|
3189
|
+
function LabelValue({ label, value, iconName, iconColor, style }) {
|
|
3076
3190
|
const { colors } = useTheme();
|
|
3077
|
-
|
|
3191
|
+
const resolvedIcon = iconName ? renderIcon(iconName, ms(14), iconColor ?? colors.foregroundMuted) : null;
|
|
3192
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles29.container, style] }, /* @__PURE__ */ React26.createElement(View, { style: styles29.labelSide }, resolvedIcon ? /* @__PURE__ */ React26.createElement(View, { style: styles29.icon }, resolvedIcon) : null, /* @__PURE__ */ React26.createElement(Text, { style: [styles29.label, { color: colors.foregroundMuted }], allowFontScaling: true }, label)), typeof value === "string" ? /* @__PURE__ */ React26.createElement(Text, { style: [styles29.value, { color: colors.foreground }], allowFontScaling: true }, value) : value);
|
|
3078
3193
|
}
|
|
3079
|
-
var
|
|
3194
|
+
var styles29 = StyleSheet.create({
|
|
3080
3195
|
container: {
|
|
3081
3196
|
flexDirection: "row",
|
|
3082
3197
|
justifyContent: "space-between",
|
|
3083
3198
|
alignItems: "center",
|
|
3084
3199
|
gap: s(12)
|
|
3085
3200
|
},
|
|
3201
|
+
labelSide: {
|
|
3202
|
+
flexDirection: "row",
|
|
3203
|
+
alignItems: "center",
|
|
3204
|
+
gap: s(4)
|
|
3205
|
+
},
|
|
3206
|
+
icon: {
|
|
3207
|
+
alignItems: "center",
|
|
3208
|
+
justifyContent: "center"
|
|
3209
|
+
},
|
|
3086
3210
|
label: {
|
|
3087
3211
|
fontFamily: "Poppins-Regular",
|
|
3088
3212
|
fontSize: ms(13),
|
|
@@ -3095,22 +3219,19 @@ var styles28 = StyleSheet.create({
|
|
|
3095
3219
|
textAlign: "right"
|
|
3096
3220
|
}
|
|
3097
3221
|
});
|
|
3098
|
-
var MONTH_NAMES =
|
|
3099
|
-
"January",
|
|
3100
|
-
"
|
|
3101
|
-
"
|
|
3102
|
-
"
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
"July",
|
|
3106
|
-
"August",
|
|
3107
|
-
"September",
|
|
3108
|
-
"October",
|
|
3109
|
-
"November",
|
|
3110
|
-
"December"
|
|
3111
|
-
];
|
|
3112
|
-
function MonthPicker({ value, onChange, style }) {
|
|
3222
|
+
var MONTH_NAMES = {
|
|
3223
|
+
en: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
|
|
3224
|
+
es: ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"],
|
|
3225
|
+
pt: ["janeiro", "fevereiro", "mar\xE7o", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"],
|
|
3226
|
+
fr: ["janvier", "f\xE9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\xFBt", "septembre", "octobre", "novembre", "d\xE9cembre"]
|
|
3227
|
+
};
|
|
3228
|
+
function MonthPicker({ value, onChange, locale = "en", formatLabel, style }) {
|
|
3113
3229
|
const { colors } = useTheme();
|
|
3230
|
+
const getLabel = () => {
|
|
3231
|
+
if (formatLabel) return formatLabel(value);
|
|
3232
|
+
const names = MONTH_NAMES[locale] ?? MONTH_NAMES.en;
|
|
3233
|
+
return `${names[value.month - 1]} ${value.year}`;
|
|
3234
|
+
};
|
|
3114
3235
|
const handlePrev = () => {
|
|
3115
3236
|
selectionAsync();
|
|
3116
3237
|
if (value.month === 1) {
|
|
@@ -3127,27 +3248,27 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
3127
3248
|
onChange({ month: value.month + 1, year: value.year });
|
|
3128
3249
|
}
|
|
3129
3250
|
};
|
|
3130
|
-
return /* @__PURE__ */
|
|
3251
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles30.container, style] }, /* @__PURE__ */ React26.createElement(
|
|
3131
3252
|
TouchableOpacity,
|
|
3132
3253
|
{
|
|
3133
|
-
style:
|
|
3254
|
+
style: styles30.arrow,
|
|
3134
3255
|
onPress: handlePrev,
|
|
3135
3256
|
activeOpacity: 0.6,
|
|
3136
3257
|
touchSoundDisabled: true
|
|
3137
3258
|
},
|
|
3138
|
-
/* @__PURE__ */
|
|
3139
|
-
), /* @__PURE__ */
|
|
3259
|
+
/* @__PURE__ */ React26.createElement(Entypo$1, { name: "chevron-left", size: 22, color: colors.foreground })
|
|
3260
|
+
), /* @__PURE__ */ React26.createElement(Text, { style: [styles30.label, { color: colors.foreground }], allowFontScaling: true }, getLabel()), /* @__PURE__ */ React26.createElement(
|
|
3140
3261
|
TouchableOpacity,
|
|
3141
3262
|
{
|
|
3142
|
-
style:
|
|
3263
|
+
style: styles30.arrow,
|
|
3143
3264
|
onPress: handleNext,
|
|
3144
3265
|
activeOpacity: 0.6,
|
|
3145
3266
|
touchSoundDisabled: true
|
|
3146
3267
|
},
|
|
3147
|
-
/* @__PURE__ */
|
|
3268
|
+
/* @__PURE__ */ React26.createElement(Entypo$1, { name: "chevron-right", size: 22, color: colors.foreground })
|
|
3148
3269
|
));
|
|
3149
3270
|
}
|
|
3150
|
-
var
|
|
3271
|
+
var styles30 = StyleSheet.create({
|
|
3151
3272
|
container: {
|
|
3152
3273
|
flexDirection: "row",
|
|
3153
3274
|
alignItems: "center",
|
|
@@ -3220,27 +3341,27 @@ function MediaCard({
|
|
|
3220
3341
|
};
|
|
3221
3342
|
const ratio = aspectRatioMap[aspectRatio];
|
|
3222
3343
|
const resolvedActionIcon = actionIconName ? renderIcon(actionIconName, 18, actionActive ? colors.primary : colors.background) : actionIcon ?? renderIcon("heart", 18, actionActive ? colors.primary : colors.background);
|
|
3223
|
-
const cardContent = /* @__PURE__ */
|
|
3344
|
+
const cardContent = /* @__PURE__ */ React26.createElement(
|
|
3224
3345
|
View,
|
|
3225
3346
|
{
|
|
3226
3347
|
style: [
|
|
3227
|
-
|
|
3228
|
-
hovered &&
|
|
3348
|
+
styles31.card,
|
|
3349
|
+
hovered && styles31.cardHovered,
|
|
3229
3350
|
style
|
|
3230
3351
|
],
|
|
3231
3352
|
...Platform.OS === "web" ? hoverHandlers : {}
|
|
3232
3353
|
},
|
|
3233
|
-
/* @__PURE__ */
|
|
3354
|
+
/* @__PURE__ */ React26.createElement(View, { style: [styles31.imageContainer, imageStyle] }, /* @__PURE__ */ React26.createElement(View, { style: { paddingTop: `${ratio * 100}%` } }, /* @__PURE__ */ React26.createElement(View, { style: StyleSheet.absoluteFill }, imageSource ? /* @__PURE__ */ React26.createElement(
|
|
3234
3355
|
Image,
|
|
3235
3356
|
{
|
|
3236
3357
|
source: imageSource,
|
|
3237
|
-
style:
|
|
3358
|
+
style: styles31.image,
|
|
3238
3359
|
resizeMode: "cover"
|
|
3239
3360
|
}
|
|
3240
|
-
) : /* @__PURE__ */
|
|
3361
|
+
) : /* @__PURE__ */ React26.createElement(View, { style: [styles31.imagePlaceholder, { backgroundColor: colors.surface }] }))), badge && /* @__PURE__ */ React26.createElement(View, { style: styles31.badgeContainer }, badge), (onActionPress || actionIcon || actionIconName) && /* @__PURE__ */ React26.createElement(
|
|
3241
3362
|
TouchableOpacity,
|
|
3242
3363
|
{
|
|
3243
|
-
style: [
|
|
3364
|
+
style: [styles31.actionButton, { backgroundColor: "rgba(0,0,0,0.24)" }],
|
|
3244
3365
|
onPress: () => {
|
|
3245
3366
|
impactLight();
|
|
3246
3367
|
onActionPress?.();
|
|
@@ -3250,10 +3371,10 @@ function MediaCard({
|
|
|
3250
3371
|
},
|
|
3251
3372
|
resolvedActionIcon
|
|
3252
3373
|
)),
|
|
3253
|
-
(title || subtitle || caption || footer) && /* @__PURE__ */
|
|
3374
|
+
(title || subtitle || caption || footer) && /* @__PURE__ */ React26.createElement(View, { style: styles31.meta }, title ? /* @__PURE__ */ React26.createElement(Text, { style: [styles31.title, { color: colors.foreground }], numberOfLines: 2, allowFontScaling: true }, title) : null, subtitle ? /* @__PURE__ */ React26.createElement(Text, { style: [styles31.subtitle, { color: colors.foregroundSubtle }], numberOfLines: 1, allowFontScaling: true }, subtitle) : null, caption ? /* @__PURE__ */ React26.createElement(Text, { style: [styles31.caption, { color: colors.foregroundMuted }], numberOfLines: 1, allowFontScaling: true }, caption) : null, footer)
|
|
3254
3375
|
);
|
|
3255
3376
|
if (onPress) {
|
|
3256
|
-
return /* @__PURE__ */
|
|
3377
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React26.createElement(
|
|
3257
3378
|
TouchableOpacity,
|
|
3258
3379
|
{
|
|
3259
3380
|
onPress: handlePress,
|
|
@@ -3267,7 +3388,7 @@ function MediaCard({
|
|
|
3267
3388
|
}
|
|
3268
3389
|
return cardContent;
|
|
3269
3390
|
}
|
|
3270
|
-
var
|
|
3391
|
+
var styles31 = StyleSheet.create({
|
|
3271
3392
|
card: {
|
|
3272
3393
|
borderRadius: RADIUS.md,
|
|
3273
3394
|
// 14px — Airbnb property card spec
|
|
@@ -3343,11 +3464,11 @@ function CategoryChip({
|
|
|
3343
3464
|
const textColor = selected ? colors.primaryForeground : colors.foregroundSubtle;
|
|
3344
3465
|
const borderColor = selected ? colors.primary : colors.border;
|
|
3345
3466
|
const resolvedIcon = typeof item.icon === "string" ? renderIcon(item.icon, 16, textColor) : item.icon ?? null;
|
|
3346
|
-
return /* @__PURE__ */
|
|
3467
|
+
return /* @__PURE__ */ React26.createElement(Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React26.createElement(
|
|
3347
3468
|
TouchableOpacity,
|
|
3348
3469
|
{
|
|
3349
3470
|
style: [
|
|
3350
|
-
|
|
3471
|
+
styles32.chip,
|
|
3351
3472
|
{
|
|
3352
3473
|
backgroundColor: bgColor,
|
|
3353
3474
|
borderColor
|
|
@@ -3359,9 +3480,9 @@ function CategoryChip({
|
|
|
3359
3480
|
activeOpacity: 1,
|
|
3360
3481
|
touchSoundDisabled: true
|
|
3361
3482
|
},
|
|
3362
|
-
resolvedIcon && /* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
3364
|
-
item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */
|
|
3483
|
+
resolvedIcon && /* @__PURE__ */ React26.createElement(View, { style: styles32.chipIcon }, resolvedIcon),
|
|
3484
|
+
/* @__PURE__ */ React26.createElement(Text, { style: [styles32.chipLabel, { color: textColor }], allowFontScaling: true }, item.label),
|
|
3485
|
+
item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */ React26.createElement(View, { style: [styles32.chipBadge, { backgroundColor: colors.primary }] }, /* @__PURE__ */ React26.createElement(Text, { style: [styles32.chipBadgeText, { color: colors.primaryForeground }] }, Math.min(item.badge, 99)))
|
|
3365
3486
|
));
|
|
3366
3487
|
}
|
|
3367
3488
|
function CategoryStrip({
|
|
@@ -3383,15 +3504,15 @@ function CategoryStrip({
|
|
|
3383
3504
|
onValueChange?.(v === value ? "" : v);
|
|
3384
3505
|
}
|
|
3385
3506
|
};
|
|
3386
|
-
return /* @__PURE__ */
|
|
3507
|
+
return /* @__PURE__ */ React26.createElement(
|
|
3387
3508
|
ScrollView,
|
|
3388
3509
|
{
|
|
3389
3510
|
horizontal: true,
|
|
3390
3511
|
showsHorizontalScrollIndicator: false,
|
|
3391
|
-
contentContainerStyle: [
|
|
3392
|
-
style:
|
|
3512
|
+
contentContainerStyle: [styles32.container, style],
|
|
3513
|
+
style: styles32.scroll
|
|
3393
3514
|
},
|
|
3394
|
-
categories.map((cat) => /* @__PURE__ */
|
|
3515
|
+
categories.map((cat) => /* @__PURE__ */ React26.createElement(View, { key: cat.value, style: itemStyle }, /* @__PURE__ */ React26.createElement(
|
|
3395
3516
|
CategoryChip,
|
|
3396
3517
|
{
|
|
3397
3518
|
item: cat,
|
|
@@ -3401,7 +3522,7 @@ function CategoryStrip({
|
|
|
3401
3522
|
)))
|
|
3402
3523
|
);
|
|
3403
3524
|
}
|
|
3404
|
-
var
|
|
3525
|
+
var styles32 = StyleSheet.create({
|
|
3405
3526
|
scroll: {
|
|
3406
3527
|
flexGrow: 0
|
|
3407
3528
|
},
|
|
@@ -3480,7 +3601,7 @@ function Pressable2({
|
|
|
3480
3601
|
onPress();
|
|
3481
3602
|
};
|
|
3482
3603
|
const hoverScaleValue = hovered && hoverScale !== 1 ? hoverScale : 1;
|
|
3483
|
-
return /* @__PURE__ */
|
|
3604
|
+
return /* @__PURE__ */ React26.createElement(
|
|
3484
3605
|
Animated.View,
|
|
3485
3606
|
{
|
|
3486
3607
|
style: [
|
|
@@ -3489,7 +3610,7 @@ function Pressable2({
|
|
|
3489
3610
|
],
|
|
3490
3611
|
...Platform.OS === "web" ? hoverHandlers : {}
|
|
3491
3612
|
},
|
|
3492
|
-
/* @__PURE__ */
|
|
3613
|
+
/* @__PURE__ */ React26.createElement(
|
|
3493
3614
|
TouchableOpacity,
|
|
3494
3615
|
{
|
|
3495
3616
|
onPress: handlePress,
|
|
@@ -3504,5 +3625,102 @@ function Pressable2({
|
|
|
3504
3625
|
)
|
|
3505
3626
|
);
|
|
3506
3627
|
}
|
|
3628
|
+
var weightMap = {
|
|
3629
|
+
normal: "Poppins-Regular",
|
|
3630
|
+
medium: "Poppins-Medium",
|
|
3631
|
+
semibold: "Poppins-SemiBold",
|
|
3632
|
+
bold: "Poppins-Bold"
|
|
3633
|
+
};
|
|
3634
|
+
function DetailRow({
|
|
3635
|
+
label,
|
|
3636
|
+
value,
|
|
3637
|
+
separator = "dotted",
|
|
3638
|
+
labelWeight = "normal",
|
|
3639
|
+
valueColor,
|
|
3640
|
+
leftIcon,
|
|
3641
|
+
leftIconName,
|
|
3642
|
+
leftIconColor,
|
|
3643
|
+
rightIconName,
|
|
3644
|
+
rightIconColor,
|
|
3645
|
+
style,
|
|
3646
|
+
labelStyle,
|
|
3647
|
+
valueStyle
|
|
3648
|
+
}) {
|
|
3649
|
+
const { colors } = useTheme();
|
|
3650
|
+
const resolvedLeftIcon = leftIconName ? renderIcon(leftIconName, ms(14), leftIconColor ?? colors.foregroundMuted) : leftIcon;
|
|
3651
|
+
const resolvedRightIcon = rightIconName ? renderIcon(rightIconName, ms(14), rightIconColor ?? colors.foregroundMuted) : null;
|
|
3652
|
+
const separatorStyle = separator === "none" ? null : {
|
|
3653
|
+
flex: 1,
|
|
3654
|
+
height: 1,
|
|
3655
|
+
borderBottomWidth: 1,
|
|
3656
|
+
borderStyle: separator,
|
|
3657
|
+
borderColor: "rgba(128,128,128,0.3)",
|
|
3658
|
+
marginHorizontal: s(4)
|
|
3659
|
+
};
|
|
3660
|
+
return /* @__PURE__ */ React26.createElement(View, { style: [styles33.row, style] }, /* @__PURE__ */ React26.createElement(View, { style: styles33.labelSide }, resolvedLeftIcon ? /* @__PURE__ */ React26.createElement(View, { style: styles33.icon }, resolvedLeftIcon) : null, typeof label === "string" ? /* @__PURE__ */ React26.createElement(
|
|
3661
|
+
Text,
|
|
3662
|
+
{
|
|
3663
|
+
style: [styles33.labelText, { color: colors.foregroundMuted, fontFamily: weightMap[labelWeight] }, labelStyle],
|
|
3664
|
+
allowFontScaling: true
|
|
3665
|
+
},
|
|
3666
|
+
label
|
|
3667
|
+
) : label), separatorStyle ? /* @__PURE__ */ React26.createElement(View, { style: separatorStyle }) : /* @__PURE__ */ React26.createElement(View, { style: styles33.spacer }), /* @__PURE__ */ React26.createElement(View, { style: styles33.valueSide }, /* @__PURE__ */ React26.createElement(
|
|
3668
|
+
Text,
|
|
3669
|
+
{
|
|
3670
|
+
style: [styles33.valueText, { color: valueColor ?? colors.foreground }, valueStyle],
|
|
3671
|
+
allowFontScaling: true
|
|
3672
|
+
},
|
|
3673
|
+
value
|
|
3674
|
+
), resolvedRightIcon ? /* @__PURE__ */ React26.createElement(View, { style: styles33.icon }, resolvedRightIcon) : null));
|
|
3675
|
+
}
|
|
3676
|
+
var styles33 = StyleSheet.create({
|
|
3677
|
+
row: {
|
|
3678
|
+
flexDirection: "row",
|
|
3679
|
+
alignItems: "center",
|
|
3680
|
+
gap: s(4)
|
|
3681
|
+
},
|
|
3682
|
+
labelSide: {
|
|
3683
|
+
flexDirection: "row",
|
|
3684
|
+
alignItems: "center",
|
|
3685
|
+
gap: s(4),
|
|
3686
|
+
flexShrink: 0
|
|
3687
|
+
},
|
|
3688
|
+
icon: {
|
|
3689
|
+
alignItems: "center",
|
|
3690
|
+
justifyContent: "center"
|
|
3691
|
+
},
|
|
3692
|
+
spacer: {
|
|
3693
|
+
flex: 1
|
|
3694
|
+
},
|
|
3695
|
+
labelText: {
|
|
3696
|
+
fontSize: ms(13),
|
|
3697
|
+
lineHeight: mvs(18)
|
|
3698
|
+
},
|
|
3699
|
+
valueSide: {
|
|
3700
|
+
flexDirection: "row",
|
|
3701
|
+
alignItems: "center",
|
|
3702
|
+
gap: s(4),
|
|
3703
|
+
flexShrink: 0
|
|
3704
|
+
},
|
|
3705
|
+
valueText: {
|
|
3706
|
+
fontFamily: "Poppins-SemiBold",
|
|
3707
|
+
fontSize: ms(13),
|
|
3708
|
+
lineHeight: mvs(18)
|
|
3709
|
+
}
|
|
3710
|
+
});
|
|
3711
|
+
|
|
3712
|
+
// src/utils/typography.ts
|
|
3713
|
+
function getResponsiveFontSize(text, maxSize, steps = [
|
|
3714
|
+
{ maxLen: 10, subtract: 0 },
|
|
3715
|
+
{ maxLen: 12, subtract: 4 },
|
|
3716
|
+
{ maxLen: 14, subtract: 6 }
|
|
3717
|
+
]) {
|
|
3718
|
+
const len = text.length;
|
|
3719
|
+
const sorted = [...steps].sort((a, b) => a.maxLen - b.maxLen);
|
|
3720
|
+
for (const step of sorted) {
|
|
3721
|
+
if (len <= step.maxLen) return maxSize - step.subtract;
|
|
3722
|
+
}
|
|
3723
|
+
return maxSize - 8;
|
|
3724
|
+
}
|
|
3507
3725
|
|
|
3508
|
-
export { Accordion, AlertBanner, Avatar, BREAKPOINTS, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryStrip, Checkbox, Chip, ChipGroup, ConfirmDialog, CurrencyDisplay, CurrencyInput, CurrencyInput as CurrencyInputLarge, EmptyState, ICON_SIZES, Icon, IconButton, Input, LabelValue, ListItem, MediaCard, MonthPicker, Pressable2 as Pressable, Progress, RADIUS, RadioGroup, SHADOWS, SPACING, Select, Separator, Sheet, Skeleton, Slider, Spinner, Switch, TYPOGRAPHY, Tabs, TabsContent, Text3 as Text, Textarea, ThemeProvider, ToastProvider, Toggle, defaultDark, defaultLight, deriveColors, renderIcon, useTheme, useToast };
|
|
3726
|
+
export { Accordion, AlertBanner, Avatar, BREAKPOINTS, Badge, Button, ButtonGroup, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryStrip, Checkbox, Chip, ChipGroup, ConfirmDialog, CurrencyDisplay, CurrencyInput, CurrencyInput as CurrencyInputLarge, DetailRow, EmptyState, ICON_SIZES, Icon, IconButton, Input, LabelValue, ListItem, MediaCard, MonthPicker, Pressable2 as Pressable, Progress, RADIUS, RadioGroup, SHADOWS, SPACING, Select, Separator, Sheet, Skeleton, Slider, Spinner, Switch, TYPOGRAPHY, Tabs, TabsContent, Text3 as Text, Textarea, ThemeProvider, ToastProvider, Toggle, defaultDark, defaultLight, deriveColors, getResponsiveFontSize, renderIcon, useTheme, useToast };
|