@beyondcorp/beyond-ui-native 0.1.1 → 0.1.3
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/{chunk-2B6HTSGM.mjs → chunk-RNHEGFYR.mjs} +16 -2
- package/dist/chunk-RNHEGFYR.mjs.map +1 -0
- package/dist/index.d.mts +2 -145
- package/dist/index.d.ts +2 -145
- package/dist/index.js +37 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +23 -8
- package/dist/index.mjs.map +1 -1
- package/dist/preset-BmUHLoAa.d.mts +274 -0
- package/dist/preset-BmUHLoAa.d.ts +274 -0
- package/dist/preset.d.mts +1 -117
- package/dist/preset.d.ts +1 -117
- package/dist/preset.js +19 -3
- package/dist/preset.js.map +1 -1
- package/dist/preset.mjs +5 -3
- package/package.json +11 -5
- package/src/components/accordion/accordion.tsx +245 -0
- package/src/components/accordion/index.ts +1 -0
- package/src/components/alert/alert.tsx +118 -0
- package/src/components/alert/index.ts +1 -0
- package/src/components/avatar/avatar.tsx +125 -0
- package/src/components/avatar/index.ts +1 -0
- package/src/components/badge/badge.tsx +89 -0
- package/src/components/badge/index.ts +1 -0
- package/src/components/bottom-sheet/bottom-sheet.tsx +336 -0
- package/src/components/bottom-sheet/index.ts +1 -0
- package/src/components/button/button.tsx +172 -0
- package/src/components/button/index.ts +1 -0
- package/src/components/card/card.tsx +121 -0
- package/src/components/card/index.ts +1 -0
- package/src/components/checkbox/checkbox.tsx +100 -0
- package/src/components/checkbox/index.ts +1 -0
- package/src/components/data-table/data-table.tsx +277 -0
- package/src/components/data-table/index.ts +1 -0
- package/src/components/dialog/dialog.tsx +278 -0
- package/src/components/dialog/index.ts +1 -0
- package/src/components/input/index.ts +1 -0
- package/src/components/input/input.tsx +130 -0
- package/src/components/radio/index.ts +1 -0
- package/src/components/radio/radio.tsx +117 -0
- package/src/components/select/index.ts +1 -0
- package/src/components/select/select.tsx +375 -0
- package/src/components/separator/index.ts +1 -0
- package/src/components/separator/separator.tsx +28 -0
- package/src/components/skeleton/index.ts +1 -0
- package/src/components/skeleton/skeleton.tsx +43 -0
- package/src/components/spinner/index.ts +1 -0
- package/src/components/spinner/spinner.tsx +46 -0
- package/src/components/stats-card/index.ts +1 -0
- package/src/components/stats-card/stats-card.tsx +92 -0
- package/src/components/switch/index.ts +1 -0
- package/src/components/switch/switch.tsx +80 -0
- package/src/components/tabs/index.ts +1 -0
- package/src/components/tabs/tabs.tsx +172 -0
- package/src/components/text/heading.tsx +50 -0
- package/src/components/text/index.ts +2 -0
- package/src/components/text/text.tsx +62 -0
- package/src/components/textarea/index.ts +1 -0
- package/src/components/textarea/textarea.tsx +87 -0
- package/src/components/toast/index.ts +2 -0
- package/src/components/toast/toast.tsx +136 -0
- package/src/components/toast/types.ts +32 -0
- package/src/index.ts +42 -0
- package/src/primitives/box.tsx +25 -0
- package/src/primitives/index.ts +2 -0
- package/src/primitives/pressable.tsx +49 -0
- package/src/providers/BeyondUIProvider.tsx +100 -0
- package/src/templates/auth/ForgotPasswordTemplate.tsx +132 -0
- package/src/templates/auth/SignInTemplate.tsx +213 -0
- package/src/templates/auth/SignUpTemplate.tsx +233 -0
- package/src/templates/auth/index.ts +3 -0
- package/src/templates/dashboard/DashboardTemplate.tsx +205 -0
- package/src/templates/dashboard/index.ts +1 -0
- package/src/templates/index.ts +3 -0
- package/src/templates/settings/SettingsTemplate.tsx +226 -0
- package/src/templates/settings/index.ts +1 -0
- package/src/theme/preset.ts +45 -0
- package/src/theme/tokens.ts +144 -0
- package/src/types/nativewind-env.d.ts +26 -0
- package/src/utilities/accessibility.ts +43 -0
- package/src/utilities/cn.ts +9 -0
- package/src/utilities/index.ts +2 -0
- package/dist/chunk-2B6HTSGM.mjs.map +0 -1
package/dist/preset.d.ts
CHANGED
|
@@ -1,117 +1 @@
|
|
|
1
|
-
|
|
2
|
-
darkMode: string;
|
|
3
|
-
theme: {
|
|
4
|
-
extend: {
|
|
5
|
-
colors: {
|
|
6
|
-
primary: {
|
|
7
|
-
readonly 50: "#eff6ff";
|
|
8
|
-
readonly 100: "#dbeafe";
|
|
9
|
-
readonly 200: "#bfdbfe";
|
|
10
|
-
readonly 300: "#93c5fd";
|
|
11
|
-
readonly 400: "#60a5fa";
|
|
12
|
-
readonly 500: "#3b82f6";
|
|
13
|
-
readonly 600: "#2563eb";
|
|
14
|
-
readonly 700: "#1d4ed8";
|
|
15
|
-
readonly 800: "#1e40af";
|
|
16
|
-
readonly 900: "#1e3a8a";
|
|
17
|
-
readonly 950: "#172554";
|
|
18
|
-
readonly DEFAULT: "#2563eb";
|
|
19
|
-
};
|
|
20
|
-
secondary: {
|
|
21
|
-
readonly 50: "#f8fafc";
|
|
22
|
-
readonly 100: "#f1f5f9";
|
|
23
|
-
readonly 200: "#e2e8f0";
|
|
24
|
-
readonly 300: "#cbd5e1";
|
|
25
|
-
readonly 400: "#94a3b8";
|
|
26
|
-
readonly 500: "#64748b";
|
|
27
|
-
readonly 600: "#475569";
|
|
28
|
-
readonly 700: "#334155";
|
|
29
|
-
readonly 800: "#1e293b";
|
|
30
|
-
readonly 900: "#0f172a";
|
|
31
|
-
readonly 950: "#020617";
|
|
32
|
-
readonly DEFAULT: "#475569";
|
|
33
|
-
};
|
|
34
|
-
danger: {
|
|
35
|
-
readonly 50: "#fef2f2";
|
|
36
|
-
readonly 100: "#fee2e2";
|
|
37
|
-
readonly 200: "#fecaca";
|
|
38
|
-
readonly 300: "#fca5a5";
|
|
39
|
-
readonly 400: "#f87171";
|
|
40
|
-
readonly 500: "#ef4444";
|
|
41
|
-
readonly 600: "#dc2626";
|
|
42
|
-
readonly 700: "#b91c1c";
|
|
43
|
-
readonly 800: "#991b1b";
|
|
44
|
-
readonly 900: "#7f1d1d";
|
|
45
|
-
readonly 950: "#450a0a";
|
|
46
|
-
readonly DEFAULT: "#dc2626";
|
|
47
|
-
};
|
|
48
|
-
destructive: {
|
|
49
|
-
readonly 50: "#fef2f2";
|
|
50
|
-
readonly 100: "#fee2e2";
|
|
51
|
-
readonly 200: "#fecaca";
|
|
52
|
-
readonly 300: "#fca5a5";
|
|
53
|
-
readonly 400: "#f87171";
|
|
54
|
-
readonly 500: "#ef4444";
|
|
55
|
-
readonly 600: "#dc2626";
|
|
56
|
-
readonly 700: "#b91c1c";
|
|
57
|
-
readonly 800: "#991b1b";
|
|
58
|
-
readonly 900: "#7f1d1d";
|
|
59
|
-
readonly 950: "#450a0a";
|
|
60
|
-
readonly DEFAULT: "#dc2626";
|
|
61
|
-
};
|
|
62
|
-
success: {
|
|
63
|
-
readonly 50: "#f0fdf4";
|
|
64
|
-
readonly 100: "#dcfce7";
|
|
65
|
-
readonly 200: "#bbf7d0";
|
|
66
|
-
readonly 300: "#86efac";
|
|
67
|
-
readonly 400: "#4ade80";
|
|
68
|
-
readonly 500: "#22c55e";
|
|
69
|
-
readonly 600: "#16a34a";
|
|
70
|
-
readonly 700: "#15803d";
|
|
71
|
-
readonly 800: "#166534";
|
|
72
|
-
readonly 900: "#14532d";
|
|
73
|
-
readonly 950: "#052e16";
|
|
74
|
-
readonly DEFAULT: "#16a34a";
|
|
75
|
-
};
|
|
76
|
-
warning: {
|
|
77
|
-
readonly 50: "#fffbeb";
|
|
78
|
-
readonly 100: "#fef3c7";
|
|
79
|
-
readonly 200: "#fde68a";
|
|
80
|
-
readonly 300: "#fcd34d";
|
|
81
|
-
readonly 400: "#fbbf24";
|
|
82
|
-
readonly 500: "#f59e0b";
|
|
83
|
-
readonly 600: "#d97706";
|
|
84
|
-
readonly 700: "#b45309";
|
|
85
|
-
readonly 800: "#92400e";
|
|
86
|
-
readonly 900: "#78350f";
|
|
87
|
-
readonly 950: "#451a03";
|
|
88
|
-
readonly DEFAULT: "#d97706";
|
|
89
|
-
};
|
|
90
|
-
neutral: {
|
|
91
|
-
readonly 50: "#f9fafb";
|
|
92
|
-
readonly 100: "#f3f4f6";
|
|
93
|
-
readonly 200: "#e5e7eb";
|
|
94
|
-
readonly 300: "#d1d5db";
|
|
95
|
-
readonly 400: "#9ca3af";
|
|
96
|
-
readonly 500: "#6b7280";
|
|
97
|
-
readonly 600: "#4b5563";
|
|
98
|
-
readonly 700: "#374151";
|
|
99
|
-
readonly 800: "#1f2937";
|
|
100
|
-
readonly 900: "#111827";
|
|
101
|
-
readonly 950: "#030712";
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
borderRadius: {
|
|
105
|
-
none: string;
|
|
106
|
-
sm: string;
|
|
107
|
-
md: string;
|
|
108
|
-
lg: string;
|
|
109
|
-
xl: string;
|
|
110
|
-
"2xl": string;
|
|
111
|
-
full: string;
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
export { beyondUIPreset, beyondUIPreset as default };
|
|
1
|
+
export { b as beyondUIPreset, b as default, t as tokens } from './preset-BmUHLoAa.js';
|
package/dist/preset.js
CHANGED
|
@@ -21,7 +21,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var preset_exports = {};
|
|
22
22
|
__export(preset_exports, {
|
|
23
23
|
beyondUIPreset: () => beyondUIPreset,
|
|
24
|
-
default: () => preset_default
|
|
24
|
+
default: () => preset_default,
|
|
25
|
+
tokens: () => tokens
|
|
25
26
|
});
|
|
26
27
|
module.exports = __toCommonJS(preset_exports);
|
|
27
28
|
|
|
@@ -181,7 +182,21 @@ var beyondUIPreset = {
|
|
|
181
182
|
destructive: tokens.colors.destructive,
|
|
182
183
|
success: tokens.colors.success,
|
|
183
184
|
warning: tokens.colors.warning,
|
|
184
|
-
neutral: tokens.colors.neutral
|
|
185
|
+
neutral: tokens.colors.neutral,
|
|
186
|
+
background: tokens.colors.semantic.light.background,
|
|
187
|
+
foreground: tokens.colors.semantic.light.foreground,
|
|
188
|
+
card: {
|
|
189
|
+
DEFAULT: tokens.colors.semantic.light.card,
|
|
190
|
+
foreground: tokens.colors.semantic.light.cardForeground
|
|
191
|
+
},
|
|
192
|
+
cardForeground: tokens.colors.semantic.light.cardForeground,
|
|
193
|
+
muted: {
|
|
194
|
+
DEFAULT: tokens.colors.semantic.light.mutedForeground,
|
|
195
|
+
foreground: tokens.colors.semantic.light.mutedForeground
|
|
196
|
+
},
|
|
197
|
+
mutedForeground: tokens.colors.semantic.light.mutedForeground,
|
|
198
|
+
border: tokens.colors.semantic.light.border,
|
|
199
|
+
input: tokens.colors.semantic.light.input
|
|
185
200
|
},
|
|
186
201
|
borderRadius: {
|
|
187
202
|
none: "0px",
|
|
@@ -198,6 +213,7 @@ var beyondUIPreset = {
|
|
|
198
213
|
var preset_default = beyondUIPreset;
|
|
199
214
|
// Annotate the CommonJS export names for ESM import in node:
|
|
200
215
|
0 && (module.exports = {
|
|
201
|
-
beyondUIPreset
|
|
216
|
+
beyondUIPreset,
|
|
217
|
+
tokens
|
|
202
218
|
});
|
|
203
219
|
//# sourceMappingURL=preset.js.map
|
package/dist/preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/preset.ts","../src/theme/tokens.ts"],"sourcesContent":["import { tokens } from \"./tokens\";\n\nexport const beyondUIPreset = {\n darkMode: \"class\",\n theme: {\n extend: {\n colors: {\n primary: tokens.colors.primary,\n secondary: tokens.colors.secondary,\n danger: tokens.colors.danger,\n destructive: tokens.colors.destructive,\n success: tokens.colors.success,\n warning: tokens.colors.warning,\n neutral: tokens.colors.neutral,\n },\n borderRadius: {\n none: \"0px\",\n sm: `${tokens.radius.sm}px`,\n md: `${tokens.radius.md}px`,\n lg: `${tokens.radius.lg}px`,\n xl: `${tokens.radius.xl}px`,\n \"2xl\": `${tokens.radius[\"2xl\"]}px`,\n full: \"9999px\",\n },\n },\n },\n};\n\nexport default beyondUIPreset;\n","export const tokens = {\n colors: {\n primary: {\n 50: \"#eff6ff\",\n 100: \"#dbeafe\",\n 200: \"#bfdbfe\",\n 300: \"#93c5fd\",\n 400: \"#60a5fa\",\n 500: \"#3b82f6\",\n 600: \"#2563eb\",\n 700: \"#1d4ed8\",\n 800: \"#1e40af\",\n 900: \"#1e3a8a\",\n 950: \"#172554\",\n DEFAULT: \"#2563eb\",\n },\n secondary: {\n 50: \"#f8fafc\",\n 100: \"#f1f5f9\",\n 200: \"#e2e8f0\",\n 300: \"#cbd5e1\",\n 400: \"#94a3b8\",\n 500: \"#64748b\",\n 600: \"#475569\",\n 700: \"#334155\",\n 800: \"#1e293b\",\n 900: \"#0f172a\",\n 950: \"#020617\",\n DEFAULT: \"#475569\",\n },\n danger: {\n 50: \"#fef2f2\",\n 100: \"#fee2e2\",\n 200: \"#fecaca\",\n 300: \"#fca5a5\",\n 400: \"#f87171\",\n 500: \"#ef4444\",\n 600: \"#dc2626\",\n 700: \"#b91c1c\",\n 800: \"#991b1b\",\n 900: \"#7f1d1d\",\n 950: \"#450a0a\",\n DEFAULT: \"#dc2626\",\n },\n // Alias for shadcn / React Native convention compatibility\n destructive: {\n 50: \"#fef2f2\",\n 100: \"#fee2e2\",\n 200: \"#fecaca\",\n 300: \"#fca5a5\",\n 400: \"#f87171\",\n 500: \"#ef4444\",\n 600: \"#dc2626\",\n 700: \"#b91c1c\",\n 800: \"#991b1b\",\n 900: \"#7f1d1d\",\n 950: \"#450a0a\",\n DEFAULT: \"#dc2626\",\n },\n success: {\n 50: \"#f0fdf4\",\n 100: \"#dcfce7\",\n 200: \"#bbf7d0\",\n 300: \"#86efac\",\n 400: \"#4ade80\",\n 500: \"#22c55e\",\n 600: \"#16a34a\",\n 700: \"#15803d\",\n 800: \"#166534\",\n 900: \"#14532d\",\n 950: \"#052e16\",\n DEFAULT: \"#16a34a\",\n },\n warning: {\n 50: \"#fffbeb\",\n 100: \"#fef3c7\",\n 200: \"#fde68a\",\n 300: \"#fcd34d\",\n 400: \"#fbbf24\",\n 500: \"#f59e0b\",\n 600: \"#d97706\",\n 700: \"#b45309\",\n 800: \"#92400e\",\n 900: \"#78350f\",\n 950: \"#451a03\",\n DEFAULT: \"#d97706\",\n },\n neutral: {\n 50: \"#f9fafb\",\n 100: \"#f3f4f6\",\n 200: \"#e5e7eb\",\n 300: \"#d1d5db\",\n 400: \"#9ca3af\",\n 500: \"#6b7280\",\n 600: \"#4b5563\",\n 700: \"#374151\",\n 800: \"#1f2937\",\n 900: \"#111827\",\n 950: \"#030712\",\n },\n semantic: {\n light: {\n background: \"#ffffff\",\n foreground: \"#0f172a\",\n card: \"#ffffff\",\n cardForeground: \"#0f172a\",\n muted: \"#f8fafc\",\n mutedForeground: \"#64748b\",\n border: \"#e2e8f0\",\n input: \"#e2e8f0\",\n },\n dark: {\n background: \"#090d16\",\n foreground: \"#f8fafc\",\n card: \"#0f172a\",\n cardForeground: \"#f8fafc\",\n muted: \"#1e293b\",\n mutedForeground: \"#94a3b8\",\n border: \"#334155\",\n input: \"#334155\",\n },\n },\n },\n radius: {\n none: 0,\n sm: 6,\n md: 10,\n lg: 14,\n xl: 20,\n \"2xl\": 28,\n full: 9999,\n },\n spacing: {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n \"2xl\": 32,\n \"3xl\": 48,\n },\n} as const;\n\nexport type BeyondUITokens = typeof tokens;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../src/theme/preset.ts","../src/theme/tokens.ts"],"sourcesContent":["import { tokens } from \"./tokens\";\n\nexport { tokens };\n\nexport const beyondUIPreset = {\n darkMode: \"class\",\n theme: {\n extend: {\n colors: {\n primary: tokens.colors.primary,\n secondary: tokens.colors.secondary,\n danger: tokens.colors.danger,\n destructive: tokens.colors.destructive,\n success: tokens.colors.success,\n warning: tokens.colors.warning,\n neutral: tokens.colors.neutral,\n background: tokens.colors.semantic.light.background,\n foreground: tokens.colors.semantic.light.foreground,\n card: {\n DEFAULT: tokens.colors.semantic.light.card,\n foreground: tokens.colors.semantic.light.cardForeground,\n },\n cardForeground: tokens.colors.semantic.light.cardForeground,\n muted: {\n DEFAULT: tokens.colors.semantic.light.mutedForeground,\n foreground: tokens.colors.semantic.light.mutedForeground,\n },\n mutedForeground: tokens.colors.semantic.light.mutedForeground,\n border: tokens.colors.semantic.light.border,\n input: tokens.colors.semantic.light.input,\n },\n borderRadius: {\n none: \"0px\",\n sm: `${tokens.radius.sm}px`,\n md: `${tokens.radius.md}px`,\n lg: `${tokens.radius.lg}px`,\n xl: `${tokens.radius.xl}px`,\n \"2xl\": `${tokens.radius[\"2xl\"]}px`,\n full: \"9999px\",\n },\n },\n },\n};\n\nexport default beyondUIPreset;\n","export const tokens = {\n colors: {\n primary: {\n 50: \"#eff6ff\",\n 100: \"#dbeafe\",\n 200: \"#bfdbfe\",\n 300: \"#93c5fd\",\n 400: \"#60a5fa\",\n 500: \"#3b82f6\",\n 600: \"#2563eb\",\n 700: \"#1d4ed8\",\n 800: \"#1e40af\",\n 900: \"#1e3a8a\",\n 950: \"#172554\",\n DEFAULT: \"#2563eb\",\n },\n secondary: {\n 50: \"#f8fafc\",\n 100: \"#f1f5f9\",\n 200: \"#e2e8f0\",\n 300: \"#cbd5e1\",\n 400: \"#94a3b8\",\n 500: \"#64748b\",\n 600: \"#475569\",\n 700: \"#334155\",\n 800: \"#1e293b\",\n 900: \"#0f172a\",\n 950: \"#020617\",\n DEFAULT: \"#475569\",\n },\n danger: {\n 50: \"#fef2f2\",\n 100: \"#fee2e2\",\n 200: \"#fecaca\",\n 300: \"#fca5a5\",\n 400: \"#f87171\",\n 500: \"#ef4444\",\n 600: \"#dc2626\",\n 700: \"#b91c1c\",\n 800: \"#991b1b\",\n 900: \"#7f1d1d\",\n 950: \"#450a0a\",\n DEFAULT: \"#dc2626\",\n },\n // Alias for shadcn / React Native convention compatibility\n destructive: {\n 50: \"#fef2f2\",\n 100: \"#fee2e2\",\n 200: \"#fecaca\",\n 300: \"#fca5a5\",\n 400: \"#f87171\",\n 500: \"#ef4444\",\n 600: \"#dc2626\",\n 700: \"#b91c1c\",\n 800: \"#991b1b\",\n 900: \"#7f1d1d\",\n 950: \"#450a0a\",\n DEFAULT: \"#dc2626\",\n },\n success: {\n 50: \"#f0fdf4\",\n 100: \"#dcfce7\",\n 200: \"#bbf7d0\",\n 300: \"#86efac\",\n 400: \"#4ade80\",\n 500: \"#22c55e\",\n 600: \"#16a34a\",\n 700: \"#15803d\",\n 800: \"#166534\",\n 900: \"#14532d\",\n 950: \"#052e16\",\n DEFAULT: \"#16a34a\",\n },\n warning: {\n 50: \"#fffbeb\",\n 100: \"#fef3c7\",\n 200: \"#fde68a\",\n 300: \"#fcd34d\",\n 400: \"#fbbf24\",\n 500: \"#f59e0b\",\n 600: \"#d97706\",\n 700: \"#b45309\",\n 800: \"#92400e\",\n 900: \"#78350f\",\n 950: \"#451a03\",\n DEFAULT: \"#d97706\",\n },\n neutral: {\n 50: \"#f9fafb\",\n 100: \"#f3f4f6\",\n 200: \"#e5e7eb\",\n 300: \"#d1d5db\",\n 400: \"#9ca3af\",\n 500: \"#6b7280\",\n 600: \"#4b5563\",\n 700: \"#374151\",\n 800: \"#1f2937\",\n 900: \"#111827\",\n 950: \"#030712\",\n },\n semantic: {\n light: {\n background: \"#ffffff\",\n foreground: \"#0f172a\",\n card: \"#ffffff\",\n cardForeground: \"#0f172a\",\n muted: \"#f8fafc\",\n mutedForeground: \"#64748b\",\n border: \"#e2e8f0\",\n input: \"#e2e8f0\",\n },\n dark: {\n background: \"#090d16\",\n foreground: \"#f8fafc\",\n card: \"#0f172a\",\n cardForeground: \"#f8fafc\",\n muted: \"#1e293b\",\n mutedForeground: \"#94a3b8\",\n border: \"#334155\",\n input: \"#334155\",\n },\n },\n },\n radius: {\n none: 0,\n sm: 6,\n md: 10,\n lg: 14,\n xl: 20,\n \"2xl\": 28,\n full: 9999,\n },\n spacing: {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n \"2xl\": 32,\n \"3xl\": 48,\n },\n} as const;\n\nexport type BeyondUITokens = typeof tokens;\n"],"mappings":"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","names":[]}
|
package/dist/preset.mjs
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
beyondUIPreset,
|
|
3
|
-
preset_default
|
|
4
|
-
|
|
3
|
+
preset_default,
|
|
4
|
+
tokens
|
|
5
|
+
} from "./chunk-RNHEGFYR.mjs";
|
|
5
6
|
export {
|
|
6
7
|
beyondUIPreset,
|
|
7
|
-
preset_default as default
|
|
8
|
+
preset_default as default,
|
|
9
|
+
tokens
|
|
8
10
|
};
|
|
9
11
|
//# sourceMappingURL=preset.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beyondcorp/beyond-ui-native",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Accessible, NativeWind-first React Native component library for Beyond Softwares",
|
|
5
5
|
"author": "Beyond Corp",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,12 +28,15 @@
|
|
|
28
28
|
],
|
|
29
29
|
"main": "./dist/index.js",
|
|
30
30
|
"module": "./dist/index.mjs",
|
|
31
|
+
"react-native": "./src/index.ts",
|
|
31
32
|
"types": "./dist/index.d.ts",
|
|
32
33
|
"exports": {
|
|
33
34
|
".": {
|
|
34
35
|
"types": "./dist/index.d.ts",
|
|
35
|
-
"
|
|
36
|
-
"
|
|
36
|
+
"react-native": "./src/index.ts",
|
|
37
|
+
"import": "./src/index.ts",
|
|
38
|
+
"require": "./dist/index.js",
|
|
39
|
+
"default": "./src/index.ts"
|
|
37
40
|
},
|
|
38
41
|
"./preset": {
|
|
39
42
|
"types": "./dist/preset.d.ts",
|
|
@@ -42,12 +45,15 @@
|
|
|
42
45
|
},
|
|
43
46
|
"./utilities": {
|
|
44
47
|
"types": "./dist/utilities.d.ts",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
48
|
+
"react-native": "./src/utilities/index.ts",
|
|
49
|
+
"import": "./src/utilities/index.ts",
|
|
50
|
+
"require": "./dist/utilities.js",
|
|
51
|
+
"default": "./src/utilities/index.ts"
|
|
47
52
|
}
|
|
48
53
|
},
|
|
49
54
|
"files": [
|
|
50
55
|
"dist",
|
|
56
|
+
"src",
|
|
51
57
|
"README.md",
|
|
52
58
|
"LICENSE"
|
|
53
59
|
],
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {
|
|
3
|
+
View,
|
|
4
|
+
Pressable,
|
|
5
|
+
Animated,
|
|
6
|
+
type ViewProps,
|
|
7
|
+
type PressableProps,
|
|
8
|
+
} from "react-native";
|
|
9
|
+
import { cn } from "../../utilities/cn";
|
|
10
|
+
import { Text } from "../text/text";
|
|
11
|
+
|
|
12
|
+
type AccordionType = "single" | "multiple";
|
|
13
|
+
|
|
14
|
+
interface AccordionContextValue {
|
|
15
|
+
type: AccordionType;
|
|
16
|
+
value: string[];
|
|
17
|
+
toggleItem: (itemValue: string) => void;
|
|
18
|
+
collapsible: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const AccordionContext = React.createContext<AccordionContextValue | null>(null);
|
|
22
|
+
|
|
23
|
+
function useAccordionContext() {
|
|
24
|
+
const context = React.useContext(AccordionContext);
|
|
25
|
+
if (!context) {
|
|
26
|
+
throw new Error("Accordion components must be used within an Accordion");
|
|
27
|
+
}
|
|
28
|
+
return context;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface AccordionProps extends ViewProps {
|
|
32
|
+
type?: AccordionType;
|
|
33
|
+
value?: string | string[];
|
|
34
|
+
defaultValue?: string | string[];
|
|
35
|
+
onValueChange?: (value: string | string[]) => void;
|
|
36
|
+
collapsible?: boolean;
|
|
37
|
+
className?: string;
|
|
38
|
+
children: React.ReactNode;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const Accordion = React.forwardRef<View, AccordionProps>(
|
|
42
|
+
(
|
|
43
|
+
{
|
|
44
|
+
type = "single",
|
|
45
|
+
value: controlledValue,
|
|
46
|
+
defaultValue,
|
|
47
|
+
onValueChange,
|
|
48
|
+
collapsible = true,
|
|
49
|
+
className,
|
|
50
|
+
children,
|
|
51
|
+
...props
|
|
52
|
+
},
|
|
53
|
+
ref
|
|
54
|
+
) => {
|
|
55
|
+
const toArray = (v?: string | string[]): string[] => {
|
|
56
|
+
if (!v) return [];
|
|
57
|
+
return Array.isArray(v) ? v : [v];
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const [uncontrolledValue, setUncontrolledValue] = React.useState<string[]>(
|
|
61
|
+
toArray(defaultValue)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const isControlled = controlledValue !== undefined;
|
|
65
|
+
const currentValues = isControlled ? toArray(controlledValue) : uncontrolledValue;
|
|
66
|
+
|
|
67
|
+
const toggleItem = React.useCallback(
|
|
68
|
+
(itemValue: string) => {
|
|
69
|
+
let nextValues: string[];
|
|
70
|
+
const isCurrentOpen = currentValues.includes(itemValue);
|
|
71
|
+
|
|
72
|
+
if (type === "single") {
|
|
73
|
+
if (isCurrentOpen) {
|
|
74
|
+
nextValues = collapsible ? [] : [itemValue];
|
|
75
|
+
} else {
|
|
76
|
+
nextValues = [itemValue];
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
if (isCurrentOpen) {
|
|
80
|
+
nextValues = currentValues.filter((v) => v !== itemValue);
|
|
81
|
+
} else {
|
|
82
|
+
nextValues = [...currentValues, itemValue];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (!isControlled) {
|
|
87
|
+
setUncontrolledValue(nextValues);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (onValueChange) {
|
|
91
|
+
onValueChange(type === "single" ? nextValues[0] ?? "" : nextValues);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
[currentValues, type, collapsible, isControlled, onValueChange]
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
return (
|
|
98
|
+
<AccordionContext.Provider
|
|
99
|
+
value={{
|
|
100
|
+
type,
|
|
101
|
+
value: currentValues,
|
|
102
|
+
toggleItem,
|
|
103
|
+
collapsible,
|
|
104
|
+
}}
|
|
105
|
+
>
|
|
106
|
+
<View
|
|
107
|
+
ref={ref}
|
|
108
|
+
className={cn("w-full divide-y divide-border", className)}
|
|
109
|
+
{...props}
|
|
110
|
+
>
|
|
111
|
+
{children}
|
|
112
|
+
</View>
|
|
113
|
+
</AccordionContext.Provider>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
Accordion.displayName = "Accordion";
|
|
118
|
+
|
|
119
|
+
// --- Accordion Item ---
|
|
120
|
+
|
|
121
|
+
interface AccordionItemContextValue {
|
|
122
|
+
value: string;
|
|
123
|
+
isOpen: boolean;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);
|
|
127
|
+
|
|
128
|
+
function useAccordionItemContext() {
|
|
129
|
+
const context = React.useContext(AccordionItemContext);
|
|
130
|
+
if (!context) {
|
|
131
|
+
throw new Error("AccordionItem subcomponents must be used within an AccordionItem");
|
|
132
|
+
}
|
|
133
|
+
return context;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export interface AccordionItemProps extends ViewProps {
|
|
137
|
+
value: string;
|
|
138
|
+
className?: string;
|
|
139
|
+
children: React.ReactNode;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const AccordionItem = React.forwardRef<View, AccordionItemProps>(
|
|
143
|
+
({ value, className, children, ...props }, ref) => {
|
|
144
|
+
const { value: selectedValues } = useAccordionContext();
|
|
145
|
+
const isOpen = selectedValues.includes(value);
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<AccordionItemContext.Provider value={{ value, isOpen }}>
|
|
149
|
+
<View
|
|
150
|
+
ref={ref}
|
|
151
|
+
className={cn("border-b border-border py-1", className)}
|
|
152
|
+
{...props}
|
|
153
|
+
>
|
|
154
|
+
{children}
|
|
155
|
+
</View>
|
|
156
|
+
</AccordionItemContext.Provider>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
AccordionItem.displayName = "AccordionItem";
|
|
161
|
+
|
|
162
|
+
// --- Accordion Trigger ---
|
|
163
|
+
|
|
164
|
+
export interface AccordionTriggerProps extends PressableProps {
|
|
165
|
+
className?: string;
|
|
166
|
+
children: React.ReactNode;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export const AccordionTrigger = React.forwardRef<View, AccordionTriggerProps>(
|
|
170
|
+
({ className, children, ...props }, ref) => {
|
|
171
|
+
const { toggleItem } = useAccordionContext();
|
|
172
|
+
const { value, isOpen } = useAccordionItemContext();
|
|
173
|
+
|
|
174
|
+
const rotationAnim = React.useRef(new Animated.Value(isOpen ? 1 : 0)).current;
|
|
175
|
+
|
|
176
|
+
React.useEffect(() => {
|
|
177
|
+
Animated.timing(rotationAnim, {
|
|
178
|
+
toValue: isOpen ? 1 : 0,
|
|
179
|
+
duration: 200,
|
|
180
|
+
useNativeDriver: true,
|
|
181
|
+
}).start();
|
|
182
|
+
}, [isOpen, rotationAnim]);
|
|
183
|
+
|
|
184
|
+
const rotate = rotationAnim.interpolate({
|
|
185
|
+
inputRange: [0, 1],
|
|
186
|
+
outputRange: ["0deg", "180deg"],
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
<Pressable
|
|
191
|
+
ref={ref}
|
|
192
|
+
onPress={() => toggleItem(value)}
|
|
193
|
+
accessibilityRole="button"
|
|
194
|
+
accessibilityState={{ expanded: isOpen }}
|
|
195
|
+
className={cn(
|
|
196
|
+
"flex-row items-center justify-between py-3 px-1 active:opacity-70",
|
|
197
|
+
className
|
|
198
|
+
)}
|
|
199
|
+
{...props}
|
|
200
|
+
>
|
|
201
|
+
<View className="flex-1 pr-2">
|
|
202
|
+
{typeof children === "string" ? (
|
|
203
|
+
<Text className="text-base font-medium text-foreground">{children}</Text>
|
|
204
|
+
) : (
|
|
205
|
+
children
|
|
206
|
+
)}
|
|
207
|
+
</View>
|
|
208
|
+
<Animated.View style={{ transform: [{ rotate }] }}>
|
|
209
|
+
<Text className="text-muted text-base font-semibold">▼</Text>
|
|
210
|
+
</Animated.View>
|
|
211
|
+
</Pressable>
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
AccordionTrigger.displayName = "AccordionTrigger";
|
|
216
|
+
|
|
217
|
+
// --- Accordion Content ---
|
|
218
|
+
|
|
219
|
+
export interface AccordionContentProps extends ViewProps {
|
|
220
|
+
className?: string;
|
|
221
|
+
children: React.ReactNode;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export const AccordionContent = React.forwardRef<View, AccordionContentProps>(
|
|
225
|
+
({ className, children, ...props }, ref) => {
|
|
226
|
+
const { isOpen } = useAccordionItemContext();
|
|
227
|
+
|
|
228
|
+
if (!isOpen) return null;
|
|
229
|
+
|
|
230
|
+
return (
|
|
231
|
+
<View
|
|
232
|
+
ref={ref}
|
|
233
|
+
className={cn("pt-1 pb-3 px-1 text-sm text-muted", className)}
|
|
234
|
+
{...props}
|
|
235
|
+
>
|
|
236
|
+
{typeof children === "string" ? (
|
|
237
|
+
<Text className="text-sm text-muted leading-relaxed">{children}</Text>
|
|
238
|
+
) : (
|
|
239
|
+
children
|
|
240
|
+
)}
|
|
241
|
+
</View>
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
);
|
|
245
|
+
AccordionContent.displayName = "AccordionContent";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./accordion";
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { View, Text, type ViewProps, type TextProps } from "react-native";
|
|
3
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
4
|
+
import { cn } from "../../utilities/cn";
|
|
5
|
+
|
|
6
|
+
export const alertVariants = cva(
|
|
7
|
+
"w-full rounded-2xl border p-4 flex-col gap-1",
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
info: "bg-primary-50 border-primary-200 dark:bg-primary-950/40 dark:border-primary-800",
|
|
12
|
+
success: "bg-success-50 border-success-200 dark:bg-success-950/40 dark:border-success-800",
|
|
13
|
+
warning: "bg-warning-50 border-warning-200 dark:bg-warning-950/40 dark:border-warning-800",
|
|
14
|
+
danger: "bg-danger-50 border-danger-200 dark:bg-danger-950/40 dark:border-danger-800",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
variant: "info",
|
|
19
|
+
},
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export const alertTitleVariants = cva("text-base font-bold tracking-tight", {
|
|
24
|
+
variants: {
|
|
25
|
+
variant: {
|
|
26
|
+
info: "text-primary-800 dark:text-primary-300",
|
|
27
|
+
success: "text-success-800 dark:text-success-300",
|
|
28
|
+
warning: "text-warning-800 dark:text-warning-300",
|
|
29
|
+
danger: "text-danger-800 dark:text-danger-300",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
defaultVariants: {
|
|
33
|
+
variant: "info",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export const alertDescriptionVariants = cva("text-sm", {
|
|
38
|
+
variants: {
|
|
39
|
+
variant: {
|
|
40
|
+
info: "text-primary-700 dark:text-primary-400",
|
|
41
|
+
success: "text-success-700 dark:text-success-400",
|
|
42
|
+
warning: "text-warning-700 dark:text-warning-400",
|
|
43
|
+
danger: "text-danger-700 dark:text-danger-400",
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
defaultVariants: {
|
|
47
|
+
variant: "info",
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
type AlertVariantProps = VariantProps<typeof alertVariants>;
|
|
52
|
+
|
|
53
|
+
interface AlertContextValue {
|
|
54
|
+
variant: AlertVariantProps["variant"];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const AlertContext = React.createContext<AlertContextValue>({ variant: "info" });
|
|
58
|
+
|
|
59
|
+
export interface AlertProps extends ViewProps, AlertVariantProps {
|
|
60
|
+
className?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function Alert({
|
|
64
|
+
variant = "info",
|
|
65
|
+
className,
|
|
66
|
+
children,
|
|
67
|
+
...props
|
|
68
|
+
}: AlertProps) {
|
|
69
|
+
return (
|
|
70
|
+
<AlertContext.Provider value={{ variant }}>
|
|
71
|
+
<View
|
|
72
|
+
accessibilityRole="alert"
|
|
73
|
+
className={cn(alertVariants({ variant }), className)}
|
|
74
|
+
{...props}
|
|
75
|
+
>
|
|
76
|
+
{children}
|
|
77
|
+
</View>
|
|
78
|
+
</AlertContext.Provider>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Alert.displayName = "Alert";
|
|
83
|
+
|
|
84
|
+
export function AlertTitle({
|
|
85
|
+
className,
|
|
86
|
+
children,
|
|
87
|
+
...props
|
|
88
|
+
}: TextProps & { className?: string }) {
|
|
89
|
+
const { variant } = React.useContext(AlertContext);
|
|
90
|
+
return (
|
|
91
|
+
<Text
|
|
92
|
+
className={cn(alertTitleVariants({ variant }), className)}
|
|
93
|
+
{...props}
|
|
94
|
+
>
|
|
95
|
+
{children}
|
|
96
|
+
</Text>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
AlertTitle.displayName = "Alert.Title";
|
|
101
|
+
|
|
102
|
+
export function AlertDescription({
|
|
103
|
+
className,
|
|
104
|
+
children,
|
|
105
|
+
...props
|
|
106
|
+
}: TextProps & { className?: string }) {
|
|
107
|
+
const { variant } = React.useContext(AlertContext);
|
|
108
|
+
return (
|
|
109
|
+
<Text
|
|
110
|
+
className={cn(alertDescriptionVariants({ variant }), className)}
|
|
111
|
+
{...props}
|
|
112
|
+
>
|
|
113
|
+
{children}
|
|
114
|
+
</Text>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
AlertDescription.displayName = "Alert.Description";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./alert";
|