@entropix/react-native 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/accordion.cjs +26 -0
  2. package/dist/accordion.d.cts +34 -0
  3. package/dist/accordion.d.ts +34 -0
  4. package/dist/accordion.js +5 -0
  5. package/dist/button.cjs +14 -0
  6. package/dist/button.d.cts +35 -0
  7. package/dist/button.d.ts +35 -0
  8. package/dist/button.js +5 -0
  9. package/dist/checkbox.cjs +14 -0
  10. package/dist/checkbox.d.cts +41 -0
  11. package/dist/checkbox.d.ts +41 -0
  12. package/dist/checkbox.js +5 -0
  13. package/dist/chunk-2SQB7RNT.cjs +110 -0
  14. package/dist/chunk-3MHE2C74.js +143 -0
  15. package/dist/chunk-45KMMZUT.js +131 -0
  16. package/dist/chunk-64DK6YFL.js +164 -0
  17. package/dist/chunk-73BDGPZT.js +89 -0
  18. package/dist/chunk-B5YFEA66.cjs +243 -0
  19. package/dist/chunk-BOUIB4OY.cjs +56 -0
  20. package/dist/chunk-C6HF6QXK.js +154 -0
  21. package/dist/chunk-CXQNNEPC.js +249 -0
  22. package/dist/chunk-EFRYMWJB.js +86 -0
  23. package/dist/chunk-FQUZIDVS.cjs +174 -0
  24. package/dist/chunk-G7WPUTB6.cjs +258 -0
  25. package/dist/chunk-HH3CEDSH.js +122 -0
  26. package/dist/chunk-IRQWSFCZ.cjs +156 -0
  27. package/dist/chunk-KU24A5PQ.js +92 -0
  28. package/dist/chunk-OMKUPSHJ.cjs +95 -0
  29. package/dist/chunk-P5NAXMSC.cjs +91 -0
  30. package/dist/chunk-PKDXWKLO.cjs +245 -0
  31. package/dist/chunk-PVTPOJRU.js +155 -0
  32. package/dist/chunk-Q7TEJ62Q.cjs +160 -0
  33. package/dist/chunk-THX22NZW.cjs +146 -0
  34. package/dist/chunk-UHVTF2Y4.js +172 -0
  35. package/dist/chunk-UYXJHKYK.cjs +166 -0
  36. package/dist/chunk-VP567WZL.js +237 -0
  37. package/dist/chunk-XBNX4SLA.js +105 -0
  38. package/dist/chunk-XND7AIKO.cjs +133 -0
  39. package/dist/chunk-XSOLJOBG.js +238 -0
  40. package/dist/chunk-Z2MBHXUQ.cjs +127 -0
  41. package/dist/chunk-ZPAOLIIG.cjs +88 -0
  42. package/dist/chunk-ZYOTKLBG.js +52 -0
  43. package/dist/dialog.cjs +38 -0
  44. package/dist/dialog.d.cts +83 -0
  45. package/dist/dialog.d.ts +83 -0
  46. package/dist/dialog.js +5 -0
  47. package/dist/index.cjs +187 -2084
  48. package/dist/index.d.cts +21 -672
  49. package/dist/index.d.ts +21 -672
  50. package/dist/index.js +15 -2045
  51. package/dist/input.cjs +14 -0
  52. package/dist/input.d.cts +57 -0
  53. package/dist/input.d.ts +57 -0
  54. package/dist/input.js +5 -0
  55. package/dist/layout.cjs +25 -0
  56. package/dist/layout.d.cts +108 -0
  57. package/dist/layout.d.ts +108 -0
  58. package/dist/layout.js +4 -0
  59. package/dist/menu.cjs +26 -0
  60. package/dist/menu.d.cts +34 -0
  61. package/dist/menu.d.ts +34 -0
  62. package/dist/menu.js +5 -0
  63. package/dist/radio.cjs +18 -0
  64. package/dist/radio.d.cts +55 -0
  65. package/dist/radio.d.ts +55 -0
  66. package/dist/radio.js +5 -0
  67. package/dist/select.cjs +26 -0
  68. package/dist/select.d.cts +86 -0
  69. package/dist/select.d.ts +86 -0
  70. package/dist/select.js +5 -0
  71. package/dist/switch.cjs +14 -0
  72. package/dist/switch.d.cts +27 -0
  73. package/dist/switch.d.ts +27 -0
  74. package/dist/switch.js +5 -0
  75. package/dist/tabs.cjs +26 -0
  76. package/dist/tabs.d.cts +33 -0
  77. package/dist/tabs.d.ts +33 -0
  78. package/dist/tabs.js +5 -0
  79. package/dist/textarea.cjs +14 -0
  80. package/dist/textarea.d.cts +55 -0
  81. package/dist/textarea.d.ts +55 -0
  82. package/dist/textarea.js +5 -0
  83. package/dist/theme.cjs +20 -0
  84. package/dist/theme.d.cts +59 -0
  85. package/dist/theme.d.ts +59 -0
  86. package/dist/theme.js +3 -0
  87. package/dist/toggle.cjs +18 -0
  88. package/dist/toggle.d.cts +41 -0
  89. package/dist/toggle.d.ts +41 -0
  90. package/dist/toggle.js +5 -0
  91. package/package.json +146 -4
  92. package/dist/index.cjs.map +0 -1
  93. package/dist/index.js.map +0 -1
@@ -0,0 +1,249 @@
1
+ import { useTheme } from './chunk-ZYOTKLBG.js';
2
+ import { View, Dimensions } from 'react-native';
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import { useCallback, useState, useEffect } from 'react';
5
+
6
+ function Stack({
7
+ gap,
8
+ align,
9
+ fullWidth,
10
+ style,
11
+ children,
12
+ ...rest
13
+ }) {
14
+ const { baseTokens: bt } = useTheme();
15
+ const gapValue = getGapValue(gap, bt);
16
+ const alignMap = {
17
+ start: "flex-start",
18
+ center: "center",
19
+ end: "flex-end",
20
+ stretch: "stretch"
21
+ };
22
+ return /* @__PURE__ */ jsx(
23
+ View,
24
+ {
25
+ style: [
26
+ { flexDirection: "column" },
27
+ gapValue !== void 0 && { gap: gapValue },
28
+ gapValue === void 0 && { gap: bt.entropixSpaceLayoutStack },
29
+ align && { alignItems: alignMap[align] },
30
+ fullWidth && { width: "100%" },
31
+ style
32
+ ],
33
+ ...rest,
34
+ children
35
+ }
36
+ );
37
+ }
38
+ function getGapValue(gap, bt) {
39
+ if (!gap) return void 0;
40
+ switch (gap) {
41
+ case "none":
42
+ return 0;
43
+ case "xs":
44
+ return bt.entropixSpacing1;
45
+ case "sm":
46
+ return bt.entropixSpacing2;
47
+ case "md":
48
+ return bt.entropixSpacing4;
49
+ case "lg":
50
+ return bt.entropixSpacing6;
51
+ case "xl":
52
+ return bt.entropixSpacing8;
53
+ case "2xl":
54
+ return bt.entropixSpacing12;
55
+ }
56
+ }
57
+ function Inline({
58
+ gap,
59
+ align,
60
+ justify,
61
+ wrap,
62
+ style,
63
+ children,
64
+ ...rest
65
+ }) {
66
+ const { baseTokens: bt } = useTheme();
67
+ const gapValue = getGapValue2(gap, bt);
68
+ const alignMap = {
69
+ start: "flex-start",
70
+ center: "center",
71
+ end: "flex-end",
72
+ stretch: "stretch",
73
+ baseline: "baseline"
74
+ };
75
+ const justifyMap = {
76
+ start: "flex-start",
77
+ center: "center",
78
+ end: "flex-end",
79
+ between: "space-between",
80
+ around: "space-around"
81
+ };
82
+ return /* @__PURE__ */ jsx(
83
+ View,
84
+ {
85
+ style: [
86
+ {
87
+ flexDirection: "row",
88
+ alignItems: "center"
89
+ },
90
+ gapValue !== void 0 && { gap: gapValue },
91
+ gapValue === void 0 && { gap: bt.entropixSpaceLayoutInline },
92
+ align && { alignItems: alignMap[align] },
93
+ justify && { justifyContent: justifyMap[justify] },
94
+ wrap && { flexWrap: "wrap" },
95
+ style
96
+ ],
97
+ ...rest,
98
+ children
99
+ }
100
+ );
101
+ }
102
+ function getGapValue2(gap, bt) {
103
+ if (!gap) return void 0;
104
+ switch (gap) {
105
+ case "none":
106
+ return 0;
107
+ case "xs":
108
+ return bt.entropixSpacing1;
109
+ case "sm":
110
+ return bt.entropixSpacing2;
111
+ case "md":
112
+ return bt.entropixSpacing4;
113
+ case "lg":
114
+ return bt.entropixSpacing6;
115
+ case "xl":
116
+ return bt.entropixSpacing8;
117
+ case "2xl":
118
+ return bt.entropixSpacing12;
119
+ }
120
+ }
121
+ var BREAKPOINTS = {
122
+ sm: 640,
123
+ md: 768,
124
+ lg: 1024,
125
+ xl: 1280,
126
+ "2xl": 1536
127
+ };
128
+ var BREAKPOINT_ORDER = ["base", "sm", "md", "lg", "xl", "2xl"];
129
+ function useBreakpoint() {
130
+ const getBreakpoint = useCallback(() => {
131
+ const { width } = Dimensions.get("window");
132
+ if (width >= BREAKPOINTS["2xl"]) return "2xl";
133
+ if (width >= BREAKPOINTS.xl) return "xl";
134
+ if (width >= BREAKPOINTS.lg) return "lg";
135
+ if (width >= BREAKPOINTS.md) return "md";
136
+ if (width >= BREAKPOINTS.sm) return "sm";
137
+ return "base";
138
+ }, []);
139
+ const [breakpoint, setBreakpoint] = useState(getBreakpoint);
140
+ useEffect(() => {
141
+ const subscription = Dimensions.addEventListener("change", ({ window }) => {
142
+ const width = window.width;
143
+ let next = "base";
144
+ if (width >= BREAKPOINTS["2xl"]) next = "2xl";
145
+ else if (width >= BREAKPOINTS.xl) next = "xl";
146
+ else if (width >= BREAKPOINTS.lg) next = "lg";
147
+ else if (width >= BREAKPOINTS.md) next = "md";
148
+ else if (width >= BREAKPOINTS.sm) next = "sm";
149
+ setBreakpoint((prev) => prev !== next ? next : prev);
150
+ });
151
+ return () => subscription.remove();
152
+ }, []);
153
+ return breakpoint;
154
+ }
155
+ function useBreakpointValue(breakpoint) {
156
+ const current = useBreakpoint();
157
+ const currentIndex = BREAKPOINT_ORDER.indexOf(current);
158
+ const targetIndex = BREAKPOINT_ORDER.indexOf(breakpoint);
159
+ return currentIndex >= targetIndex;
160
+ }
161
+ function useScreenDimensions() {
162
+ const [dimensions, setDimensions] = useState(() => Dimensions.get("window"));
163
+ useEffect(() => {
164
+ const subscription = Dimensions.addEventListener("change", ({ window }) => {
165
+ setDimensions(window);
166
+ });
167
+ return () => subscription.remove();
168
+ }, []);
169
+ return { width: dimensions.width, height: dimensions.height };
170
+ }
171
+ var maxWidthMap = {
172
+ xs: 480,
173
+ sm: 640,
174
+ md: 768,
175
+ lg: 1024,
176
+ xl: 1280,
177
+ full: void 0
178
+ };
179
+ function Container({
180
+ maxWidth = "lg",
181
+ center,
182
+ style,
183
+ children,
184
+ ...rest
185
+ }) {
186
+ const { baseTokens: bt } = useTheme();
187
+ const breakpoint = useBreakpoint();
188
+ const maxW = maxWidthMap[maxWidth];
189
+ let pageMargin = bt.entropixSpaceLayoutPageMargin;
190
+ if (breakpoint === "lg" || breakpoint === "xl" || breakpoint === "2xl") {
191
+ pageMargin = bt.entropixSpaceLayoutPageMarginLg;
192
+ } else if (breakpoint === "md") {
193
+ pageMargin = bt.entropixSpaceLayoutPageMarginMd;
194
+ }
195
+ return /* @__PURE__ */ jsx(
196
+ View,
197
+ {
198
+ style: [
199
+ {
200
+ width: "100%",
201
+ paddingHorizontal: pageMargin
202
+ },
203
+ maxW !== void 0 && { maxWidth: maxW, alignSelf: "center" },
204
+ center && { alignItems: "center" },
205
+ style
206
+ ],
207
+ ...rest,
208
+ children
209
+ }
210
+ );
211
+ }
212
+ function Divider({
213
+ orientation = "horizontal",
214
+ spacing,
215
+ style,
216
+ ...rest
217
+ }) {
218
+ const { tokens: t, baseTokens: bt } = useTheme();
219
+ const spacingMap = {
220
+ sm: bt.entropixSpacing2,
221
+ md: bt.entropixSpacing4,
222
+ lg: bt.entropixSpacing6
223
+ };
224
+ const spacingValue = spacing ? spacingMap[spacing] : 0;
225
+ const isVertical = orientation === "vertical";
226
+ const dividerStyle = isVertical ? {
227
+ width: 1,
228
+ alignSelf: "stretch",
229
+ backgroundColor: t.entropixColorBorderDefault,
230
+ marginHorizontal: spacingValue
231
+ } : {
232
+ height: 1,
233
+ width: "100%",
234
+ backgroundColor: t.entropixColorBorderDefault,
235
+ marginVertical: spacingValue
236
+ };
237
+ return /* @__PURE__ */ jsx(
238
+ View,
239
+ {
240
+ accessibilityRole: isVertical ? "none" : void 0,
241
+ style: [dividerStyle, style],
242
+ ...rest
243
+ }
244
+ );
245
+ }
246
+
247
+ export { BREAKPOINTS, Container, Divider, Inline, Stack, useBreakpoint, useBreakpointValue, useScreenDimensions };
248
+ //# sourceMappingURL=chunk-CXQNNEPC.js.map
249
+ //# sourceMappingURL=chunk-CXQNNEPC.js.map
@@ -0,0 +1,86 @@
1
+ import { mapAccessibilityToRN } from './chunk-73BDGPZT.js';
2
+ import { useTheme } from './chunk-ZYOTKLBG.js';
3
+ import { useCallback, useRef, useEffect } from 'react';
4
+ import { Animated, Pressable } from 'react-native';
5
+ import { useToggle } from '@entropix/core';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ var TRACK_WIDTH = 44;
9
+ var TRACK_HEIGHT = 24;
10
+ var TRACK_PADDING = 2;
11
+ var THUMB_SIZE = TRACK_HEIGHT - TRACK_PADDING * 2;
12
+ var THUMB_TRAVEL = TRACK_WIDTH - TRACK_PADDING * 2 - THUMB_SIZE;
13
+ function Switch({
14
+ checked,
15
+ defaultChecked,
16
+ onChange,
17
+ disabled,
18
+ label,
19
+ style,
20
+ ...rest
21
+ }) {
22
+ const { tokens: t, baseTokens: bt } = useTheme();
23
+ const { isDisabled, getToggleProps } = useToggle({
24
+ checked,
25
+ defaultChecked,
26
+ onChange,
27
+ disabled,
28
+ role: "switch"
29
+ });
30
+ const propGetterReturn = getToggleProps();
31
+ const rnAccessibility = mapAccessibilityToRN(propGetterReturn.accessibility);
32
+ const isChecked = propGetterReturn.accessibility.checked === true;
33
+ if (label) {
34
+ rnAccessibility.accessibilityLabel = label;
35
+ }
36
+ const handlePress = useCallback(() => {
37
+ propGetterReturn.onAction?.();
38
+ }, [propGetterReturn.onAction]);
39
+ const thumbAnim = useRef(
40
+ new Animated.Value(defaultChecked || checked ? THUMB_TRAVEL : 0)
41
+ ).current;
42
+ useEffect(() => {
43
+ Animated.timing(thumbAnim, {
44
+ toValue: isChecked ? THUMB_TRAVEL : 0,
45
+ duration: 150,
46
+ useNativeDriver: false
47
+ }).start();
48
+ }, [isChecked, thumbAnim]);
49
+ return /* @__PURE__ */ jsx(
50
+ Pressable,
51
+ {
52
+ ...rnAccessibility,
53
+ ...rest,
54
+ disabled: isDisabled,
55
+ onPress: isDisabled ? void 0 : handlePress,
56
+ style: [
57
+ {
58
+ width: TRACK_WIDTH,
59
+ height: TRACK_HEIGHT,
60
+ borderRadius: bt.entropixRadiusFull,
61
+ backgroundColor: isChecked ? t.entropixColorActionPrimaryDefault : t.entropixColorGray300,
62
+ padding: TRACK_PADDING,
63
+ justifyContent: "center"
64
+ },
65
+ isDisabled && { opacity: 0.5 },
66
+ style
67
+ ],
68
+ children: /* @__PURE__ */ jsx(
69
+ Animated.View,
70
+ {
71
+ style: {
72
+ width: THUMB_SIZE,
73
+ height: THUMB_SIZE,
74
+ borderRadius: bt.entropixRadiusFull,
75
+ backgroundColor: t.entropixColorWhite,
76
+ transform: [{ translateX: thumbAnim }]
77
+ }
78
+ }
79
+ )
80
+ }
81
+ );
82
+ }
83
+
84
+ export { Switch };
85
+ //# sourceMappingURL=chunk-EFRYMWJB.js.map
86
+ //# sourceMappingURL=chunk-EFRYMWJB.js.map
@@ -0,0 +1,174 @@
1
+ 'use strict';
2
+
3
+ var chunkP5NAXMSC_cjs = require('./chunk-P5NAXMSC.cjs');
4
+ var chunkBOUIB4OY_cjs = require('./chunk-BOUIB4OY.cjs');
5
+ var react = require('react');
6
+ var reactNative = require('react-native');
7
+ var core = require('@entropix/core');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var KEYBOARD_TYPE_MAP = {
11
+ text: "default",
12
+ email: "email-address",
13
+ password: "default",
14
+ number: "numeric",
15
+ tel: "phone-pad",
16
+ url: "url",
17
+ search: "default"
18
+ };
19
+ function Input({
20
+ value,
21
+ defaultValue,
22
+ onChange,
23
+ disabled,
24
+ readOnly,
25
+ required,
26
+ invalid,
27
+ label,
28
+ helperText,
29
+ errorMessage,
30
+ placeholder,
31
+ type = "text",
32
+ size = "md",
33
+ style,
34
+ inputStyle,
35
+ textStyle,
36
+ testID,
37
+ variant: _variant
38
+ }) {
39
+ const { tokens: t, baseTokens: bt } = chunkBOUIB4OY_cjs.useTheme();
40
+ const {
41
+ value: inputValue,
42
+ isDisabled,
43
+ isReadOnly,
44
+ isInvalid,
45
+ setValue,
46
+ getInputProps
47
+ } = core.useInput({
48
+ value,
49
+ defaultValue,
50
+ onChange,
51
+ disabled,
52
+ readOnly,
53
+ required,
54
+ invalid,
55
+ type,
56
+ placeholder
57
+ });
58
+ const propGetterReturn = getInputProps();
59
+ const rnAccessibility = chunkP5NAXMSC_cjs.mapAccessibilityToRN(propGetterReturn.accessibility);
60
+ const handleChangeText = react.useCallback(
61
+ (text) => {
62
+ setValue(text);
63
+ },
64
+ [setValue]
65
+ );
66
+ const sizeStyles = getSizeStyles(size, bt);
67
+ const showError = isInvalid && errorMessage;
68
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [{ gap: bt.entropixSpacing1 }, style], children: [
69
+ label ? /* @__PURE__ */ jsxRuntime.jsxs(
70
+ reactNative.Text,
71
+ {
72
+ style: [
73
+ {
74
+ fontSize: sizeStyles.labelFontSize,
75
+ fontWeight: "500",
76
+ color: t.entropixColorTextPrimary
77
+ },
78
+ textStyle
79
+ ],
80
+ children: [
81
+ label,
82
+ required ? " *" : ""
83
+ ]
84
+ }
85
+ ) : null,
86
+ /* @__PURE__ */ jsxRuntime.jsx(
87
+ reactNative.TextInput,
88
+ {
89
+ ...rnAccessibility,
90
+ testID,
91
+ value: inputValue,
92
+ onChangeText: handleChangeText,
93
+ placeholder,
94
+ placeholderTextColor: t.entropixColorTextTertiary,
95
+ editable: !isDisabled && !isReadOnly,
96
+ secureTextEntry: type === "password",
97
+ keyboardType: KEYBOARD_TYPE_MAP[type] ?? "default",
98
+ style: [
99
+ {
100
+ paddingVertical: sizeStyles.paddingVertical,
101
+ paddingHorizontal: sizeStyles.paddingHorizontal,
102
+ fontSize: sizeStyles.fontSize,
103
+ borderWidth: 1,
104
+ borderColor: showError ? t.entropixColorBorderDanger : t.entropixColorBorderDefault,
105
+ borderRadius: bt.entropixRadiusMd,
106
+ backgroundColor: t.entropixColorBgPrimary,
107
+ color: t.entropixColorTextPrimary
108
+ },
109
+ isDisabled && { opacity: 0.5 },
110
+ inputStyle
111
+ ]
112
+ }
113
+ ),
114
+ showError ? /* @__PURE__ */ jsxRuntime.jsx(
115
+ reactNative.Text,
116
+ {
117
+ style: [
118
+ {
119
+ fontSize: sizeStyles.helperFontSize,
120
+ color: t.entropixColorTextDanger
121
+ },
122
+ textStyle
123
+ ],
124
+ accessibilityRole: "alert",
125
+ accessibilityLiveRegion: "polite",
126
+ children: errorMessage
127
+ }
128
+ ) : helperText ? /* @__PURE__ */ jsxRuntime.jsx(
129
+ reactNative.Text,
130
+ {
131
+ style: [
132
+ {
133
+ fontSize: sizeStyles.helperFontSize,
134
+ color: t.entropixColorTextSecondary
135
+ },
136
+ textStyle
137
+ ],
138
+ children: helperText
139
+ }
140
+ ) : null
141
+ ] });
142
+ }
143
+ function getSizeStyles(size, bt) {
144
+ switch (size) {
145
+ case "sm":
146
+ return {
147
+ paddingVertical: bt.entropixSpacing1,
148
+ paddingHorizontal: bt.entropixSpacing2,
149
+ fontSize: bt.entropixFontSizeXs,
150
+ labelFontSize: bt.entropixFontSizeXs,
151
+ helperFontSize: bt.entropixFontSizeXs - 1
152
+ };
153
+ case "lg":
154
+ return {
155
+ paddingVertical: bt.entropixSpacing3,
156
+ paddingHorizontal: bt.entropixSpacing4,
157
+ fontSize: bt.entropixFontSizeBase,
158
+ labelFontSize: bt.entropixFontSizeBase,
159
+ helperFontSize: bt.entropixFontSizeSm
160
+ };
161
+ default:
162
+ return {
163
+ paddingVertical: bt.entropixSpacing2,
164
+ paddingHorizontal: bt.entropixSpacing3,
165
+ fontSize: bt.entropixFontSizeSm,
166
+ labelFontSize: bt.entropixFontSizeSm,
167
+ helperFontSize: bt.entropixFontSizeXs
168
+ };
169
+ }
170
+ }
171
+
172
+ exports.Input = Input;
173
+ //# sourceMappingURL=chunk-FQUZIDVS.cjs.map
174
+ //# sourceMappingURL=chunk-FQUZIDVS.cjs.map