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.
@@ -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
- ? theme.mode === "light"
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: [styles.title, { color: destructive ? "#dc2626" : theme.colors.text }] }, title),
65
- description ? (React.createElement(react_native_1.Text, { style: [styles.description, { color: destructive ? "#b91c1c" : theme.colors.text }] }, description)) : null));
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.mode === "light" ? "#f3f4f6" : "#1f2937",
54
- borderColor: theme.mode === "light" ? "#e5e7eb" : "#374151",
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.text, fontWeight: "600", fontSize: Math.max(12, size / 3) } }, initials)));
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: isLight ? "#eef2ff" : "rgba(30,64,175,0.35)",
48
- borderColor: isLight ? "#c7d2fe" : "rgba(129,140,248,0.6)",
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: isLight ? "#1d4ed8" : "#c7d2fe" },
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.text, opacity: disabled ? 0.5 : 1 },
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
- theme.mode === "light" ? styles.softLight : styles.softDark,
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.text, opacity: disabled ? 0.6 : 1 },
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.mode === "light" ? "#e5e7eb" : "rgba(148,163,184,0.7)",
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.text,
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.text,
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
- styles.primaryText,
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.mode === "light" ? "#ffffff" : "#020617",
47
- borderColor: theme.mode === "light" ? "#e5e7eb" : "#1f2937",
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.mode === "light" ? "#d1d5db" : "#475569",
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.text, opacity: disabled ? 0.6 : 1 } }, label) : null));
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
- { backgroundColor: theme.mode === "light" ? "rgba(15,23,42,0.18)" : "rgba(0,0,0,0.55)" },
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.97)', 'rgba(248,250,252,0.88)']
47
- : ['rgba(15,23,42,0.88)', 'rgba(2,6,23,0.85)'], style: [
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.mode === 'light' ? 'rgba(15,23,42,0.08)' : 'rgba(148,163,184,0.2)' },
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.mode === "light" ? "#9ca3af" : "rgba(148,163,184,0.9)", style: [
43
+ return (React.createElement(react_native_1.TextInput, { placeholder: placeholder, placeholderTextColor: theme.colors.mutedForeground, style: [
44
44
  styles.base,
45
45
  {
46
- backgroundColor: theme.mode === "light" ? "#ffffff" : "rgba(15,23,42,0.9)",
47
- color: theme.colors.text,
48
- borderColor: theme.mode === "light" ? "#e5e7eb" : "rgba(51,65,85,0.9)",
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)));
@@ -44,7 +44,7 @@ var ProgressFEA = function (_a) {
44
44
  return (React.createElement(react_native_1.View, { style: [
45
45
  styles.track,
46
46
  {
47
- backgroundColor: theme.mode === "light" ? "#f3f4f6" : "#1f2937",
47
+ backgroundColor: theme.colors.muted,
48
48
  },
49
49
  style,
50
50
  ] },
@@ -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.mode === "light" ? "rgba(15,23,42,0.08)" : "rgba(148,163,184,0.2)",
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(229,231,235,1)",
46
- "rgba(243,244,246,1)",
47
- "rgba(229,231,235,1)",
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.25)",
51
- "rgba(51,65,85,0.35)",
52
- "rgba(148,163,184,0.25)",
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.text, 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.mode === "light" ? "#d1d5db" : "#475569", true: theme.colors.primary }, thumbColor: "#ffffff" })));
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.mode === "light" ? "#e5e7eb" : "rgba(148,163,184,0.35)",
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.mode === "light" ? "#f3f4f6" : "#1f2937",
54
- borderColor: theme.mode === "light" ? "#e5e7eb" : "#374151",
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.mode === "light" ? "#ffffff" : "#0f172a",
72
- borderColor: theme.mode === "light" ? "#d1d5db" : "#334155",
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.text, fontWeight: active ? "600" : "500" } }, children)));
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.mode === "light" ? "#9ca3af" : "rgba(148,163,184,0.9)", style: [
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.mode === "light" ? "#ffffff" : "rgba(15,23,42,0.9)",
47
- color: theme.colors.text,
48
- borderColor: theme.mode === "light" ? "#e5e7eb" : "rgba(51,65,85,0.9)",
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: [variantStyle, { color: theme.colors.text }, style] }, children));
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({
@@ -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
  };
@@ -7,20 +7,53 @@ exports.darkTheme = exports.lightTheme = void 0;
7
7
  exports.lightTheme = {
8
8
  mode: 'light',
9
9
  colors: {
10
- bg: '#eef1f5',
11
- text: '#1f2937',
12
- primary: '#6c7cff',
13
- border: 'rgba(255,255,255,0.4)',
14
- glass: 'rgba(255,255,255,0.2)',
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
- bg: '#0f172a',
21
- text: '#f1f5f9',
22
- primary: '#8b9cff',
23
- border: 'rgba(255,255,255,0.1)',
24
- glass: 'rgba(255,255,255,0.05)',
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rn-feav-ui",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Shadcn-style React Native UI kit with theme support.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
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`