rn-feav-ui 1.0.3 → 1.0.4
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/dist/components/Alert/index.js +10 -16
- package/dist/components/Avatar/index.js +3 -3
- package/dist/components/Badge/index.js +3 -4
- package/dist/components/Button/index.js +7 -15
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/Dialog/index.js +3 -1
- package/dist/components/GlassCard/index.js +3 -3
- package/dist/components/Input/index.js +4 -4
- package/dist/components/Modal/index.js +1 -3
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/Separator/index.js +1 -1
- package/dist/components/Skeleton/index.js +6 -6
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/TabBar/index.js +1 -1
- package/dist/components/Tabs/index.js +5 -5
- package/dist/components/Textarea/index.js +4 -4
- package/dist/components/Typography/index.js +7 -1
- package/dist/theme/colors.d.ts +34 -4
- package/dist/theme/colors.js +43 -10
- package/package.json +1 -1
- package/readme.md +87 -87
|
@@ -44,25 +44,19 @@ var AlertFEA = function (_a) {
|
|
|
44
44
|
return (React.createElement(react_native_1.View, { style: [
|
|
45
45
|
styles.container,
|
|
46
46
|
{
|
|
47
|
-
backgroundColor: destructive
|
|
48
|
-
|
|
49
|
-
? "#fef2f2"
|
|
50
|
-
: "rgba(127,29,29,0.35)"
|
|
51
|
-
: theme.mode === "light"
|
|
52
|
-
? "#ffffff"
|
|
53
|
-
: "#020617",
|
|
54
|
-
borderColor: destructive
|
|
55
|
-
? theme.mode === "light"
|
|
56
|
-
? "#fecaca"
|
|
57
|
-
: "rgba(248,113,113,0.4)"
|
|
58
|
-
: theme.mode === "light"
|
|
59
|
-
? "#e5e7eb"
|
|
60
|
-
: "#1f2937",
|
|
47
|
+
backgroundColor: destructive ? theme.colors.destructive : theme.colors.card,
|
|
48
|
+
borderColor: destructive ? theme.colors.destructive : theme.colors.border,
|
|
61
49
|
},
|
|
62
50
|
style,
|
|
63
51
|
] },
|
|
64
|
-
React.createElement(react_native_1.Text, { style: [
|
|
65
|
-
|
|
52
|
+
React.createElement(react_native_1.Text, { style: [
|
|
53
|
+
styles.title,
|
|
54
|
+
{ color: destructive ? theme.colors.destructiveForeground : theme.colors.cardForeground },
|
|
55
|
+
] }, title),
|
|
56
|
+
description ? (React.createElement(react_native_1.Text, { style: [
|
|
57
|
+
styles.description,
|
|
58
|
+
{ color: destructive ? theme.colors.destructiveForeground : theme.colors.cardForeground, opacity: 0.85 },
|
|
59
|
+
] }, description)) : null));
|
|
66
60
|
};
|
|
67
61
|
exports.AlertFEA = AlertFEA;
|
|
68
62
|
var styles = react_native_1.StyleSheet.create({
|
|
@@ -50,11 +50,11 @@ var AvatarFEA = function (_a) {
|
|
|
50
50
|
width: size,
|
|
51
51
|
height: size,
|
|
52
52
|
borderRadius: size / 2,
|
|
53
|
-
backgroundColor: theme.
|
|
54
|
-
borderColor: theme.
|
|
53
|
+
backgroundColor: theme.colors.muted,
|
|
54
|
+
borderColor: theme.colors.border,
|
|
55
55
|
},
|
|
56
56
|
] },
|
|
57
|
-
React.createElement(react_native_1.Text, { style: { color: theme.colors.
|
|
57
|
+
React.createElement(react_native_1.Text, { style: { color: theme.colors.foreground, fontWeight: "600", fontSize: Math.max(12, size / 3) } }, initials)));
|
|
58
58
|
};
|
|
59
59
|
exports.AvatarFEA = AvatarFEA;
|
|
60
60
|
var styles = react_native_1.StyleSheet.create({
|
|
@@ -40,18 +40,17 @@ var react_native_1 = require("react-native");
|
|
|
40
40
|
var BadgeFEA = function (_a) {
|
|
41
41
|
var label = _a.label, _b = _a.style, style = _b === void 0 ? {} : _b;
|
|
42
42
|
var theme = (0, ThemeFEAVUiProvider_1.useTheme)().theme;
|
|
43
|
-
var isLight = theme.mode === "light";
|
|
44
43
|
return (React.createElement(react_native_1.View, { style: [
|
|
45
44
|
styles.badge,
|
|
46
45
|
{
|
|
47
|
-
backgroundColor:
|
|
48
|
-
borderColor:
|
|
46
|
+
backgroundColor: theme.colors.secondary,
|
|
47
|
+
borderColor: theme.colors.border,
|
|
49
48
|
},
|
|
50
49
|
style,
|
|
51
50
|
] },
|
|
52
51
|
React.createElement(react_native_1.Text, { style: [
|
|
53
52
|
styles.label,
|
|
54
|
-
{ color:
|
|
53
|
+
{ color: theme.colors.secondaryForeground },
|
|
55
54
|
] }, label)));
|
|
56
55
|
};
|
|
57
56
|
exports.BadgeFEA = BadgeFEA;
|
|
@@ -51,7 +51,7 @@ var ButtonFEA = function (_a) {
|
|
|
51
51
|
React.createElement(react_native_1.TouchableOpacity, { onPress: onPress, activeOpacity: 0.85, style: [styles.baseButton, sizeStyle], disabled: disabled },
|
|
52
52
|
React.createElement(react_native_1.Text, { style: [
|
|
53
53
|
styles.text,
|
|
54
|
-
{ color: theme.colors.
|
|
54
|
+
{ color: theme.colors.foreground, opacity: disabled ? 0.5 : 1 },
|
|
55
55
|
] }, title))));
|
|
56
56
|
}
|
|
57
57
|
if (variant === "soft") {
|
|
@@ -59,13 +59,13 @@ var ButtonFEA = function (_a) {
|
|
|
59
59
|
styles.baseButton,
|
|
60
60
|
sizeStyle,
|
|
61
61
|
styles.softButton,
|
|
62
|
-
|
|
62
|
+
{ backgroundColor: theme.colors.secondary, borderColor: theme.colors.border },
|
|
63
63
|
disabled && styles.disabled,
|
|
64
64
|
style,
|
|
65
65
|
] },
|
|
66
66
|
React.createElement(react_native_1.Text, { style: [
|
|
67
67
|
styles.text,
|
|
68
|
-
{ color: theme.colors.
|
|
68
|
+
{ color: theme.colors.secondaryForeground, opacity: disabled ? 0.6 : 1 },
|
|
69
69
|
] }, title)));
|
|
70
70
|
}
|
|
71
71
|
if (variant === "outline") {
|
|
@@ -74,7 +74,7 @@ var ButtonFEA = function (_a) {
|
|
|
74
74
|
sizeStyle,
|
|
75
75
|
styles.outlineButton,
|
|
76
76
|
{
|
|
77
|
-
borderColor: theme.
|
|
77
|
+
borderColor: theme.colors.border,
|
|
78
78
|
},
|
|
79
79
|
disabled && styles.disabled,
|
|
80
80
|
style,
|
|
@@ -82,7 +82,7 @@ var ButtonFEA = function (_a) {
|
|
|
82
82
|
React.createElement(react_native_1.Text, { style: [
|
|
83
83
|
styles.text,
|
|
84
84
|
{
|
|
85
|
-
color: theme.colors.
|
|
85
|
+
color: theme.colors.foreground,
|
|
86
86
|
opacity: disabled ? 0.6 : 1,
|
|
87
87
|
},
|
|
88
88
|
] }, title)));
|
|
@@ -98,7 +98,7 @@ var ButtonFEA = function (_a) {
|
|
|
98
98
|
React.createElement(react_native_1.Text, { style: [
|
|
99
99
|
styles.text,
|
|
100
100
|
{
|
|
101
|
-
color: theme.colors.
|
|
101
|
+
color: theme.colors.foreground,
|
|
102
102
|
opacity: disabled ? 0.5 : 1,
|
|
103
103
|
},
|
|
104
104
|
] }, title)));
|
|
@@ -112,7 +112,7 @@ var ButtonFEA = function (_a) {
|
|
|
112
112
|
] },
|
|
113
113
|
React.createElement(react_native_1.Text, { style: [
|
|
114
114
|
styles.text,
|
|
115
|
-
|
|
115
|
+
{ color: theme.colors.primaryForeground },
|
|
116
116
|
disabled && { opacity: 0.8 },
|
|
117
117
|
] }, title)));
|
|
118
118
|
};
|
|
@@ -152,14 +152,6 @@ var styles = react_native_1.StyleSheet.create({
|
|
|
152
152
|
borderWidth: 1,
|
|
153
153
|
width: "100%",
|
|
154
154
|
},
|
|
155
|
-
softLight: {
|
|
156
|
-
backgroundColor: "#f9fafb",
|
|
157
|
-
borderColor: "#e5e7eb",
|
|
158
|
-
},
|
|
159
|
-
softDark: {
|
|
160
|
-
backgroundColor: "rgba(15,23,42,0.75)",
|
|
161
|
-
borderColor: "rgba(148,163,184,0.5)",
|
|
162
|
-
},
|
|
163
155
|
outlineButton: {
|
|
164
156
|
backgroundColor: "transparent",
|
|
165
157
|
borderWidth: 1,
|
|
@@ -43,8 +43,8 @@ var CardFEA = function (_a) {
|
|
|
43
43
|
return (React.createElement(react_native_1.View, { style: [
|
|
44
44
|
styles.card,
|
|
45
45
|
{
|
|
46
|
-
backgroundColor: theme.
|
|
47
|
-
borderColor: theme.
|
|
46
|
+
backgroundColor: theme.colors.card,
|
|
47
|
+
borderColor: theme.colors.border,
|
|
48
48
|
},
|
|
49
49
|
style,
|
|
50
50
|
] }, children));
|
|
@@ -44,12 +44,12 @@ var CheckboxFEA = function (_a) {
|
|
|
44
44
|
React.createElement(react_native_1.View, { style: [
|
|
45
45
|
styles.box,
|
|
46
46
|
{
|
|
47
|
-
borderColor: checked ? theme.colors.primary : theme.
|
|
47
|
+
borderColor: checked ? theme.colors.primary : theme.colors.input,
|
|
48
48
|
backgroundColor: checked ? theme.colors.primary : "transparent",
|
|
49
49
|
opacity: disabled ? 0.5 : 1,
|
|
50
50
|
},
|
|
51
51
|
] }, checked ? React.createElement(react_native_1.Text, { style: styles.tick }, "\u2713") : null),
|
|
52
|
-
label ? React.createElement(react_native_1.Text, { style: { color: theme.colors.
|
|
52
|
+
label ? (React.createElement(react_native_1.Text, { style: { color: theme.colors.foreground, opacity: disabled ? 0.6 : 1 } }, label)) : null));
|
|
53
53
|
};
|
|
54
54
|
exports.CheckboxFEA = CheckboxFEA;
|
|
55
55
|
var styles = react_native_1.StyleSheet.create({
|
|
@@ -44,7 +44,9 @@ var DialogFEA = function (_a) {
|
|
|
44
44
|
return (React.createElement(react_native_1.Modal, { transparent: true, visible: open, animationType: "fade", onRequestClose: function () { return onOpenChange(false); } },
|
|
45
45
|
React.createElement(react_native_1.Pressable, { style: [
|
|
46
46
|
styles.overlay,
|
|
47
|
-
{
|
|
47
|
+
{
|
|
48
|
+
backgroundColor: theme.mode === "light" ? "rgba(0,0,0,0.35)" : "rgba(0,0,0,0.6)",
|
|
49
|
+
},
|
|
48
50
|
], onPress: function () { return onOpenChange(false); } },
|
|
49
51
|
React.createElement(react_native_1.Pressable, { onPress: function () { return null; }, style: styles.innerPress },
|
|
50
52
|
React.createElement(Card_1.CardFEA, { style: [styles.card, style] }, children)))));
|
|
@@ -43,11 +43,11 @@ var GlassCardFEA = function (_a) {
|
|
|
43
43
|
var children = _a.children, _b = _a.style, style = _b === void 0 ? {} : _b;
|
|
44
44
|
var theme = (0, ThemeFEAVUiProvider_1.useTheme)().theme;
|
|
45
45
|
return (React.createElement(expo_linear_gradient_1.LinearGradient, { colors: theme.mode === 'light'
|
|
46
|
-
? ['rgba(255,255,255,0.
|
|
47
|
-
: ['rgba(
|
|
46
|
+
? ['rgba(255,255,255,0.75)', 'rgba(255,255,255,0.55)']
|
|
47
|
+
: ['rgba(11,18,32,0.72)', 'rgba(2,6,23,0.62)'], style: [
|
|
48
48
|
styles_1.glassCardStyles.card,
|
|
49
49
|
theme.mode === 'light' ? styles_1.glassCardStyles.shadowLight : styles_1.glassCardStyles.shadowDark,
|
|
50
|
-
{ borderColor: theme.
|
|
50
|
+
{ borderColor: theme.colors.border },
|
|
51
51
|
style,
|
|
52
52
|
] },
|
|
53
53
|
React.createElement(react_native_1.View, { style: styles_1.glassCardStyles.inner }, children)));
|
|
@@ -40,12 +40,12 @@ var react_native_1 = require("react-native");
|
|
|
40
40
|
var InputFEA = function (_a) {
|
|
41
41
|
var placeholder = _a.placeholder, _b = _a.style, style = _b === void 0 ? {} : _b;
|
|
42
42
|
var theme = (0, ThemeFEAVUiProvider_1.useTheme)().theme;
|
|
43
|
-
return (React.createElement(react_native_1.TextInput, { placeholder: placeholder, placeholderTextColor: theme.
|
|
43
|
+
return (React.createElement(react_native_1.TextInput, { placeholder: placeholder, placeholderTextColor: theme.colors.mutedForeground, style: [
|
|
44
44
|
styles.base,
|
|
45
45
|
{
|
|
46
|
-
backgroundColor: theme.
|
|
47
|
-
color: theme.colors.
|
|
48
|
-
borderColor: theme.
|
|
46
|
+
backgroundColor: theme.colors.background,
|
|
47
|
+
color: theme.colors.foreground,
|
|
48
|
+
borderColor: theme.colors.input,
|
|
49
49
|
},
|
|
50
50
|
style,
|
|
51
51
|
] }));
|
|
@@ -46,9 +46,7 @@ var ModalFEA = function (_a) {
|
|
|
46
46
|
return (React.createElement(react_native_1.View, { pointerEvents: "box-none", style: [
|
|
47
47
|
styles.overlay,
|
|
48
48
|
{
|
|
49
|
-
backgroundColor: theme.mode === "light"
|
|
50
|
-
? "rgba(15,23,42,0.15)"
|
|
51
|
-
: "rgba(0,0,0,0.45)",
|
|
49
|
+
backgroundColor: theme.mode === "light" ? "rgba(0,0,0,0.35)" : "rgba(0,0,0,0.6)",
|
|
52
50
|
},
|
|
53
51
|
] },
|
|
54
52
|
React.createElement(Card_1.CardFEA, { style: [styles.card, { width: "80%" }, style] }, children)));
|
|
@@ -43,7 +43,7 @@ var SeparatorFEA = function (_a) {
|
|
|
43
43
|
return (React.createElement(react_native_1.View, { style: [
|
|
44
44
|
styles.sep,
|
|
45
45
|
{
|
|
46
|
-
backgroundColor: theme.
|
|
46
|
+
backgroundColor: theme.colors.border,
|
|
47
47
|
},
|
|
48
48
|
style,
|
|
49
49
|
] }));
|
|
@@ -42,14 +42,14 @@ var SkeletonFEA = function (_a) {
|
|
|
42
42
|
var theme = (0, ThemeFEAVUiProvider_1.useTheme)().theme;
|
|
43
43
|
var colors = theme.mode === "light"
|
|
44
44
|
? [
|
|
45
|
-
"rgba(
|
|
46
|
-
"rgba(
|
|
47
|
-
"rgba(
|
|
45
|
+
"rgba(241,245,249,1)",
|
|
46
|
+
"rgba(226,232,240,1)",
|
|
47
|
+
"rgba(241,245,249,1)",
|
|
48
48
|
]
|
|
49
49
|
: [
|
|
50
|
-
"rgba(148,163,184,0.
|
|
51
|
-
"rgba(
|
|
52
|
-
"rgba(148,163,184,0.
|
|
50
|
+
"rgba(148,163,184,0.10)",
|
|
51
|
+
"rgba(148,163,184,0.18)",
|
|
52
|
+
"rgba(148,163,184,0.10)",
|
|
53
53
|
];
|
|
54
54
|
return (React.createElement(expo_linear_gradient_1.LinearGradient, { colors: colors, start: { x: 0, y: 0 }, end: { x: 1, y: 0 }, style: [{ height: height, borderRadius: borderRadius, marginVertical: marginVertical }, style] }));
|
|
55
55
|
};
|
|
@@ -41,7 +41,7 @@ var SwitchFEA = function (_a) {
|
|
|
41
41
|
var value = _a.value, onValueChange = _a.onValueChange, label = _a.label, style = _a.style, _b = _a.disabled, disabled = _b === void 0 ? false : _b;
|
|
42
42
|
var theme = (0, ThemeFEAVUiProvider_1.useTheme)().theme;
|
|
43
43
|
return (React.createElement(react_native_1.View, { style: [{ flexDirection: "row", alignItems: "center", justifyContent: "space-between" }, style] },
|
|
44
|
-
label ? React.createElement(react_native_1.Text, { style: { color: theme.colors.
|
|
45
|
-
React.createElement(react_native_1.Switch, { value: value, onValueChange: onValueChange, disabled: disabled, trackColor: { false: theme.
|
|
44
|
+
label ? (React.createElement(react_native_1.Text, { style: { color: theme.colors.foreground, opacity: disabled ? 0.6 : 1 } }, label)) : (React.createElement(react_native_1.View, null)),
|
|
45
|
+
React.createElement(react_native_1.Switch, { value: value, onValueChange: onValueChange, disabled: disabled, trackColor: { false: theme.colors.input, true: theme.colors.primary }, thumbColor: "#ffffff" })));
|
|
46
46
|
};
|
|
47
47
|
exports.SwitchFEA = SwitchFEA;
|
|
@@ -44,7 +44,7 @@ var TabBarFEA = function (_a) {
|
|
|
44
44
|
return (React.createElement(Card_1.CardFEA, { style: [
|
|
45
45
|
styles.container,
|
|
46
46
|
{
|
|
47
|
-
borderColor: theme.
|
|
47
|
+
borderColor: theme.colors.border,
|
|
48
48
|
},
|
|
49
49
|
style,
|
|
50
50
|
] }, children));
|
|
@@ -50,8 +50,8 @@ var TabsListFEA = function (_a) {
|
|
|
50
50
|
return (React.createElement(react_native_1.View, { style: [
|
|
51
51
|
styles.list,
|
|
52
52
|
{
|
|
53
|
-
backgroundColor: theme.
|
|
54
|
-
borderColor: theme.
|
|
53
|
+
backgroundColor: theme.colors.muted,
|
|
54
|
+
borderColor: theme.colors.border,
|
|
55
55
|
},
|
|
56
56
|
style,
|
|
57
57
|
] }, children));
|
|
@@ -68,12 +68,12 @@ var TabsTriggerFEA = function (_a) {
|
|
|
68
68
|
styles.trigger,
|
|
69
69
|
active
|
|
70
70
|
? {
|
|
71
|
-
backgroundColor: theme.
|
|
72
|
-
borderColor: theme.
|
|
71
|
+
backgroundColor: theme.colors.background,
|
|
72
|
+
borderColor: theme.colors.border,
|
|
73
73
|
}
|
|
74
74
|
: undefined,
|
|
75
75
|
], onPress: function () { return ctx.setValue(value); } },
|
|
76
|
-
React.createElement(react_native_1.Text, { style: { color: theme.colors.
|
|
76
|
+
React.createElement(react_native_1.Text, { style: { color: theme.colors.foreground, fontWeight: active ? "600" : "500" } }, children)));
|
|
77
77
|
};
|
|
78
78
|
exports.TabsTriggerFEA = TabsTriggerFEA;
|
|
79
79
|
var TabsContentFEA = function (_a) {
|
|
@@ -40,12 +40,12 @@ var ThemeFEAVUiProvider_1 = require("../../theme/ThemeFEAVUiProvider");
|
|
|
40
40
|
var TextareaFEA = function (_a) {
|
|
41
41
|
var placeholder = _a.placeholder, style = _a.style;
|
|
42
42
|
var theme = (0, ThemeFEAVUiProvider_1.useTheme)().theme;
|
|
43
|
-
return (React.createElement(react_native_1.TextInput, { multiline: true, textAlignVertical: "top", placeholder: placeholder, placeholderTextColor: theme.
|
|
43
|
+
return (React.createElement(react_native_1.TextInput, { multiline: true, textAlignVertical: "top", placeholder: placeholder, placeholderTextColor: theme.colors.mutedForeground, style: [
|
|
44
44
|
styles.base,
|
|
45
45
|
{
|
|
46
|
-
backgroundColor: theme.
|
|
47
|
-
color: theme.colors.
|
|
48
|
-
borderColor: theme.
|
|
46
|
+
backgroundColor: theme.colors.background,
|
|
47
|
+
color: theme.colors.foreground,
|
|
48
|
+
borderColor: theme.colors.input,
|
|
49
49
|
},
|
|
50
50
|
style,
|
|
51
51
|
] }));
|
|
@@ -51,7 +51,13 @@ var TypographyFEA = function (_a) {
|
|
|
51
51
|
: variant === "muted"
|
|
52
52
|
? styles.muted
|
|
53
53
|
: styles.p;
|
|
54
|
-
return (React.createElement(react_native_1.Text, { style: [
|
|
54
|
+
return (React.createElement(react_native_1.Text, { style: [
|
|
55
|
+
variantStyle,
|
|
56
|
+
{
|
|
57
|
+
color: variant === "muted" ? theme.colors.mutedForeground : theme.colors.foreground,
|
|
58
|
+
},
|
|
59
|
+
style,
|
|
60
|
+
] }, children));
|
|
55
61
|
};
|
|
56
62
|
exports.TypographyFEA = TypographyFEA;
|
|
57
63
|
var styles = react_native_1.StyleSheet.create({
|
package/dist/theme/colors.d.ts
CHANGED
|
@@ -1,20 +1,50 @@
|
|
|
1
1
|
export declare const lightTheme: {
|
|
2
2
|
mode: string;
|
|
3
3
|
colors: {
|
|
4
|
+
background: string;
|
|
5
|
+
foreground: string;
|
|
6
|
+
card: string;
|
|
7
|
+
cardForeground: string;
|
|
8
|
+
popover: string;
|
|
9
|
+
popoverForeground: string;
|
|
10
|
+
muted: string;
|
|
11
|
+
mutedForeground: string;
|
|
12
|
+
border: string;
|
|
13
|
+
input: string;
|
|
14
|
+
ring: string;
|
|
15
|
+
primary: string;
|
|
16
|
+
primaryForeground: string;
|
|
17
|
+
secondary: string;
|
|
18
|
+
secondaryForeground: string;
|
|
19
|
+
destructive: string;
|
|
20
|
+
destructiveForeground: string;
|
|
4
21
|
bg: string;
|
|
5
22
|
text: string;
|
|
6
|
-
primary: string;
|
|
7
|
-
border: string;
|
|
8
23
|
glass: string;
|
|
9
24
|
};
|
|
10
25
|
};
|
|
11
26
|
export declare const darkTheme: {
|
|
12
27
|
mode: string;
|
|
13
28
|
colors: {
|
|
29
|
+
background: string;
|
|
30
|
+
foreground: string;
|
|
31
|
+
card: string;
|
|
32
|
+
cardForeground: string;
|
|
33
|
+
popover: string;
|
|
34
|
+
popoverForeground: string;
|
|
35
|
+
muted: string;
|
|
36
|
+
mutedForeground: string;
|
|
37
|
+
border: string;
|
|
38
|
+
input: string;
|
|
39
|
+
ring: string;
|
|
40
|
+
primary: string;
|
|
41
|
+
primaryForeground: string;
|
|
42
|
+
secondary: string;
|
|
43
|
+
secondaryForeground: string;
|
|
44
|
+
destructive: string;
|
|
45
|
+
destructiveForeground: string;
|
|
14
46
|
bg: string;
|
|
15
47
|
text: string;
|
|
16
|
-
primary: string;
|
|
17
|
-
border: string;
|
|
18
48
|
glass: string;
|
|
19
49
|
};
|
|
20
50
|
};
|
package/dist/theme/colors.js
CHANGED
|
@@ -7,20 +7,53 @@ exports.darkTheme = exports.lightTheme = void 0;
|
|
|
7
7
|
exports.lightTheme = {
|
|
8
8
|
mode: 'light',
|
|
9
9
|
colors: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
// shadcn-like semantic tokens (neutral base + clear primary)
|
|
11
|
+
background: "#ffffff",
|
|
12
|
+
foreground: "#0f172a",
|
|
13
|
+
card: "#ffffff",
|
|
14
|
+
cardForeground: "#0f172a",
|
|
15
|
+
popover: "#ffffff",
|
|
16
|
+
popoverForeground: "#0f172a",
|
|
17
|
+
muted: "#f1f5f9",
|
|
18
|
+
mutedForeground: "#64748b",
|
|
19
|
+
border: "#e2e8f0",
|
|
20
|
+
input: "#e2e8f0",
|
|
21
|
+
ring: "#2563eb",
|
|
22
|
+
primary: "#2563eb",
|
|
23
|
+
primaryForeground: "#ffffff",
|
|
24
|
+
secondary: "#f1f5f9",
|
|
25
|
+
secondaryForeground: "#0f172a",
|
|
26
|
+
destructive: "#dc2626",
|
|
27
|
+
destructiveForeground: "#ffffff",
|
|
28
|
+
// backwards-compatible aliases
|
|
29
|
+
bg: "#ffffff",
|
|
30
|
+
text: "#0f172a",
|
|
31
|
+
glass: "rgba(255,255,255,0.55)",
|
|
15
32
|
}
|
|
16
33
|
};
|
|
17
34
|
exports.darkTheme = {
|
|
18
35
|
mode: 'dark',
|
|
19
36
|
colors: {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
background: "#020617",
|
|
38
|
+
foreground: "#f8fafc",
|
|
39
|
+
card: "#0b1220",
|
|
40
|
+
cardForeground: "#f8fafc",
|
|
41
|
+
popover: "#0b1220",
|
|
42
|
+
popoverForeground: "#f8fafc",
|
|
43
|
+
muted: "rgba(148,163,184,0.12)",
|
|
44
|
+
mutedForeground: "rgba(148,163,184,0.85)",
|
|
45
|
+
border: "rgba(148,163,184,0.22)",
|
|
46
|
+
input: "rgba(148,163,184,0.22)",
|
|
47
|
+
ring: "#60a5fa",
|
|
48
|
+
primary: "#60a5fa",
|
|
49
|
+
primaryForeground: "#020617",
|
|
50
|
+
secondary: "rgba(148,163,184,0.12)",
|
|
51
|
+
secondaryForeground: "#f8fafc",
|
|
52
|
+
destructive: "#f87171",
|
|
53
|
+
destructiveForeground: "#020617",
|
|
54
|
+
// backwards-compatible aliases
|
|
55
|
+
bg: "#020617",
|
|
56
|
+
text: "#f8fafc",
|
|
57
|
+
glass: "rgba(2,6,23,0.6)",
|
|
25
58
|
}
|
|
26
59
|
};
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
# rn-feav-ui
|
|
2
|
-
|
|
3
|
-
Shadcn-style React Native UI kit with theme support (light/dark).
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- Simple, consistent “shadcn-like” components (Button/Input/Card/etc.)
|
|
8
|
-
- Light/Dark mode via `ThemeFEAVUiProvider`
|
|
9
|
-
- Pure React Native primitives (minimal native dependencies)
|
|
10
|
-
|
|
11
|
-
## Installation
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm install rn-feav-ui
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### TypeScript IntelliSense (auto-complete)
|
|
18
|
-
|
|
19
|
-
Thư viện đã cấu hình `types`/`exports` nên bạn có thể import trực tiếp từ package root để IDE gợi ý component:
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
import { ButtonFEA, InputFEA, CardFEA, ThemeFEAVUiProvider } from "rn-feav-ui";
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Usage
|
|
26
|
-
|
|
27
|
-
Wrap your app with the theme provider:
|
|
28
|
-
|
|
29
|
-
```tsx
|
|
30
|
-
import * as React from "react";
|
|
31
|
-
import { ThemeFEAVUiProvider } from "rn-feav-ui";
|
|
32
|
-
|
|
33
|
-
export default function App() {
|
|
34
|
-
return <ThemeFEAVUiProvider>{/* your screens */}</ThemeFEAVUiProvider>;
|
|
35
|
-
}
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Example (Button + Input + Dialog):
|
|
39
|
-
|
|
40
|
-
```tsx
|
|
41
|
-
import * as React from "react";
|
|
42
|
-
import {
|
|
43
|
-
ButtonFEA,
|
|
44
|
-
InputFEA,
|
|
45
|
-
DialogFEA,
|
|
46
|
-
DialogHeaderFEA,
|
|
47
|
-
DialogFooterFEA,
|
|
48
|
-
TypographyFEA,
|
|
49
|
-
} from "rn-feav-ui";
|
|
50
|
-
|
|
51
|
-
export function Example() {
|
|
52
|
-
const [open, setOpen] = React.useState(false);
|
|
53
|
-
|
|
54
|
-
return (
|
|
55
|
-
<>
|
|
56
|
-
<InputFEA placeholder="Email" />
|
|
57
|
-
<ButtonFEA title="Open dialog" onPress={() => setOpen(true)} />
|
|
58
|
-
<DialogFEA open={open} onOpenChange={setOpen}>
|
|
59
|
-
<DialogHeaderFEA>
|
|
60
|
-
<TypographyFEA variant="h3">Confirm</TypographyFEA>
|
|
61
|
-
</DialogHeaderFEA>
|
|
62
|
-
<DialogFooterFEA>
|
|
63
|
-
<ButtonFEA title="Cancel" variant="ghost" onPress={() => setOpen(false)} />
|
|
64
|
-
<ButtonFEA title="OK" onPress={() => setOpen(false)} />
|
|
65
|
-
</DialogFooterFEA>
|
|
66
|
-
</DialogFEA>
|
|
67
|
-
</>
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Component List
|
|
73
|
-
|
|
74
|
-
Core components (exported from `rn-feav-ui`):
|
|
75
|
-
- Layout/Surface: `CardFEA`, `GlassCardFEA`, `SeparatorFEA`
|
|
76
|
-
- Navigation/Containers: `NavbarFEA`, `TabBarFEA`, `TabsFEA` (with `TabsListFEA`, `TabsTriggerFEA`, `TabsContentFEA`)
|
|
77
|
-
- Inputs/Form: `InputFEA`, `TextareaFEA`, `LabelFEA`, `CheckboxFEA`, `SwitchFEA`
|
|
78
|
-
- Feedback: `AlertFEA`, `ProgressFEA`, `SkeletonFEA`
|
|
79
|
-
- Data display: `AvatarFEA`, `ListItemFEA`, `BadgeFEA`
|
|
80
|
-
- Overlays: `ModalFEA`, `BottomSheetFEA`, `DialogFEA` (with `DialogHeaderFEA`, `DialogFooterFEA`)
|
|
81
|
-
- Misc: `AccordionFEA`, `TypographyFEA`, `ButtonFEA`
|
|
82
|
-
|
|
83
|
-
## Showcase
|
|
84
|
-
|
|
85
|
-
There is a full demo inside the repo at:
|
|
86
|
-
|
|
87
|
-
- `src/examples/Showcase.tsx`
|
|
1
|
+
# rn-feav-ui
|
|
2
|
+
|
|
3
|
+
Shadcn-style React Native UI kit with theme support (light/dark).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Simple, consistent “shadcn-like” components (Button/Input/Card/etc.)
|
|
8
|
+
- Light/Dark mode via `ThemeFEAVUiProvider`
|
|
9
|
+
- Pure React Native primitives (minimal native dependencies)
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install rn-feav-ui
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### TypeScript IntelliSense (auto-complete)
|
|
18
|
+
|
|
19
|
+
Thư viện đã cấu hình `types`/`exports` nên bạn có thể import trực tiếp từ package root để IDE gợi ý component:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { ButtonFEA, InputFEA, CardFEA, ThemeFEAVUiProvider } from "rn-feav-ui";
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
Wrap your app with the theme provider:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import * as React from "react";
|
|
31
|
+
import { ThemeFEAVUiProvider } from "rn-feav-ui";
|
|
32
|
+
|
|
33
|
+
export default function App() {
|
|
34
|
+
return <ThemeFEAVUiProvider>{/* your screens */}</ThemeFEAVUiProvider>;
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Example (Button + Input + Dialog):
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import * as React from "react";
|
|
42
|
+
import {
|
|
43
|
+
ButtonFEA,
|
|
44
|
+
InputFEA,
|
|
45
|
+
DialogFEA,
|
|
46
|
+
DialogHeaderFEA,
|
|
47
|
+
DialogFooterFEA,
|
|
48
|
+
TypographyFEA,
|
|
49
|
+
} from "rn-feav-ui";
|
|
50
|
+
|
|
51
|
+
export function Example() {
|
|
52
|
+
const [open, setOpen] = React.useState(false);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<>
|
|
56
|
+
<InputFEA placeholder="Email" />
|
|
57
|
+
<ButtonFEA title="Open dialog" onPress={() => setOpen(true)} />
|
|
58
|
+
<DialogFEA open={open} onOpenChange={setOpen}>
|
|
59
|
+
<DialogHeaderFEA>
|
|
60
|
+
<TypographyFEA variant="h3">Confirm</TypographyFEA>
|
|
61
|
+
</DialogHeaderFEA>
|
|
62
|
+
<DialogFooterFEA>
|
|
63
|
+
<ButtonFEA title="Cancel" variant="ghost" onPress={() => setOpen(false)} />
|
|
64
|
+
<ButtonFEA title="OK" onPress={() => setOpen(false)} />
|
|
65
|
+
</DialogFooterFEA>
|
|
66
|
+
</DialogFEA>
|
|
67
|
+
</>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Component List
|
|
73
|
+
|
|
74
|
+
Core components (exported from `rn-feav-ui`):
|
|
75
|
+
- Layout/Surface: `CardFEA`, `GlassCardFEA`, `SeparatorFEA`
|
|
76
|
+
- Navigation/Containers: `NavbarFEA`, `TabBarFEA`, `TabsFEA` (with `TabsListFEA`, `TabsTriggerFEA`, `TabsContentFEA`)
|
|
77
|
+
- Inputs/Form: `InputFEA`, `TextareaFEA`, `LabelFEA`, `CheckboxFEA`, `SwitchFEA`
|
|
78
|
+
- Feedback: `AlertFEA`, `ProgressFEA`, `SkeletonFEA`
|
|
79
|
+
- Data display: `AvatarFEA`, `ListItemFEA`, `BadgeFEA`
|
|
80
|
+
- Overlays: `ModalFEA`, `BottomSheetFEA`, `DialogFEA` (with `DialogHeaderFEA`, `DialogFooterFEA`)
|
|
81
|
+
- Misc: `AccordionFEA`, `TypographyFEA`, `ButtonFEA`
|
|
82
|
+
|
|
83
|
+
## Showcase
|
|
84
|
+
|
|
85
|
+
There is a full demo inside the repo at:
|
|
86
|
+
|
|
87
|
+
- `src/examples/Showcase.tsx`
|