@draftbit/core 47.0.1-0e56b5.2 → 47.0.1-2935a8.2
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/lib/commonjs/components/Button.js +22 -31
- package/lib/commonjs/components/Checkbox/Checkbox.js +3 -1
- package/lib/commonjs/components/DeprecatedButton.js +151 -0
- package/lib/commonjs/components/DeprecatedCardWrapper.js +2 -2
- package/lib/commonjs/components/DeprecatedFAB.js +2 -1
- package/lib/commonjs/components/Picker/Picker.js +4 -3
- package/lib/commonjs/components/Picker/PickerComponent.ios.js +2 -2
- package/lib/commonjs/components/Touchable.js +11 -27
- package/lib/commonjs/components/Touchable.web.js +9 -0
- package/lib/commonjs/mappings/Button.js +10 -29
- package/lib/commonjs/mappings/FlashList.js +38 -2
- package/lib/commonjs/mappings/FlatList.js +9 -0
- package/lib/commonjs/mappings/Touchable.js +20 -0
- package/lib/module/components/Button.js +16 -25
- package/lib/module/components/Checkbox/Checkbox.js +3 -2
- package/lib/module/components/DeprecatedButton.js +141 -0
- package/lib/module/components/DeprecatedCardWrapper.js +2 -2
- package/lib/module/components/DeprecatedFAB.js +3 -2
- package/lib/module/components/Picker/Picker.js +4 -3
- package/lib/module/components/Picker/PickerComponent.ios.js +1 -1
- package/lib/module/components/Touchable.js +10 -25
- package/lib/module/components/Touchable.web.js +2 -0
- package/lib/module/mappings/Button.js +11 -30
- package/lib/module/mappings/FlashList.js +39 -3
- package/lib/module/mappings/FlatList.js +10 -1
- package/lib/module/mappings/Touchable.js +13 -0
- package/lib/typescript/src/components/Button.d.ts +0 -2
- package/lib/typescript/src/components/Button.d.ts.map +1 -1
- package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +2 -2
- package/lib/typescript/src/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/lib/typescript/src/components/DeprecatedButton.d.ts +54 -0
- package/lib/typescript/src/components/DeprecatedButton.d.ts.map +1 -0
- package/lib/typescript/src/components/DeprecatedCardWrapper.d.ts.map +1 -1
- package/lib/typescript/src/components/DeprecatedFAB.d.ts +2 -2
- package/lib/typescript/src/components/DeprecatedFAB.d.ts.map +1 -1
- package/lib/typescript/src/components/Picker/Picker.d.ts.map +1 -1
- package/lib/typescript/src/components/Touchable.d.ts +2 -9
- package/lib/typescript/src/components/Touchable.d.ts.map +1 -1
- package/lib/typescript/src/components/Touchable.web.d.ts +3 -0
- package/lib/typescript/src/components/Touchable.web.d.ts.map +1 -0
- package/lib/typescript/src/mappings/Button.d.ts +4 -113
- package/lib/typescript/src/mappings/Button.d.ts.map +1 -1
- package/lib/typescript/src/mappings/FlashList.d.ts +130 -2
- package/lib/typescript/src/mappings/FlashList.d.ts.map +1 -1
- package/lib/typescript/src/mappings/FlatList.d.ts +51 -0
- package/lib/typescript/src/mappings/FlatList.d.ts.map +1 -1
- package/lib/typescript/src/mappings/Touchable.d.ts +22 -0
- package/lib/typescript/src/mappings/Touchable.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/components/Button.js +18 -22
- package/src/components/Button.tsx +18 -49
- package/src/components/Checkbox/Checkbox.js +3 -2
- package/src/components/Checkbox/Checkbox.tsx +7 -5
- package/src/components/DeprecatedButton.js +95 -0
- package/src/components/DeprecatedButton.tsx +214 -0
- package/src/components/DeprecatedCardWrapper.js +2 -2
- package/src/components/DeprecatedCardWrapper.tsx +4 -3
- package/src/components/DeprecatedFAB.js +3 -2
- package/src/components/DeprecatedFAB.tsx +5 -5
- package/src/components/Picker/Picker.js +4 -3
- package/src/components/Picker/Picker.tsx +4 -4
- package/src/components/Picker/PickerComponent.ios.js +1 -1
- package/src/components/Picker/PickerComponent.ios.tsx +1 -1
- package/src/components/Touchable.js +11 -16
- package/src/components/Touchable.tsx +11 -42
- package/src/components/Touchable.web.js +2 -0
- package/src/components/Touchable.web.tsx +3 -0
- package/src/mappings/Button.js +10 -29
- package/src/mappings/Button.ts +10 -31
- package/src/mappings/FlashList.js +75 -31
- package/src/mappings/FlashList.ts +77 -30
- package/src/mappings/FlatList.js +15 -1
- package/src/mappings/FlatList.ts +16 -0
- package/src/mappings/Touchable.js +17 -0
- package/src/mappings/Touchable.ts +23 -0
- package/lib/commonjs/components/Pressable.js +0 -48
- package/lib/commonjs/mappings/Pressable.js +0 -52
- package/lib/module/components/Pressable.js +0 -40
- package/lib/module/mappings/Pressable.js +0 -45
- package/lib/typescript/src/components/Pressable.d.ts +0 -18
- package/lib/typescript/src/components/Pressable.d.ts.map +0 -1
- package/lib/typescript/src/mappings/Pressable.d.ts +0 -76
- package/lib/typescript/src/mappings/Pressable.d.ts.map +0 -1
- package/src/components/Pressable.js +0 -17
- package/src/components/Pressable.tsx +0 -67
- package/src/mappings/Pressable.js +0 -52
- package/src/mappings/Pressable.ts +0 -63
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as React from "react";
|
|
2
2
|
import {
|
|
3
3
|
Text,
|
|
4
4
|
Pressable,
|
|
5
|
-
PressableProps,
|
|
6
|
-
PressableStateCallbackType,
|
|
7
5
|
Platform,
|
|
8
6
|
StyleSheet,
|
|
9
|
-
StyleProp,
|
|
10
7
|
TextStyle,
|
|
11
|
-
|
|
8
|
+
PressableProps,
|
|
12
9
|
ActivityIndicator,
|
|
13
10
|
} from "react-native";
|
|
14
11
|
|
|
@@ -30,12 +27,6 @@ type BaseProps = {
|
|
|
30
27
|
loading: boolean;
|
|
31
28
|
style?: TextStyle;
|
|
32
29
|
onPress: () => void;
|
|
33
|
-
onLongPress?: () => void;
|
|
34
|
-
activeOpacity?: number;
|
|
35
|
-
disabledOpacity?: number;
|
|
36
|
-
delayLongPress?: number;
|
|
37
|
-
hitSlop?: number;
|
|
38
|
-
pressRetentionOffset?: number;
|
|
39
30
|
icon?: string;
|
|
40
31
|
} & PressableProps &
|
|
41
32
|
IconSlot;
|
|
@@ -46,29 +37,16 @@ type Props = {
|
|
|
46
37
|
loading: boolean;
|
|
47
38
|
style?: TextStyle;
|
|
48
39
|
onPress: () => void;
|
|
49
|
-
onLongPress?: () => void;
|
|
50
|
-
activeOpacity?: number;
|
|
51
|
-
disabledOpacity?: number;
|
|
52
|
-
delayLongPress?: number;
|
|
53
|
-
hitSlop?: number;
|
|
54
|
-
pressRetentionOffset?: number;
|
|
55
40
|
icon?: string;
|
|
56
41
|
theme: Theme;
|
|
57
42
|
} & PressableProps &
|
|
58
43
|
IconSlot;
|
|
59
44
|
|
|
60
|
-
export type StyleType = (
|
|
61
|
-
state: PressableStateCallbackType
|
|
62
|
-
) => StyleProp<ViewStyle>;
|
|
63
|
-
|
|
64
45
|
function Base({
|
|
65
46
|
Icon,
|
|
66
47
|
icon,
|
|
67
48
|
title,
|
|
68
49
|
onPress,
|
|
69
|
-
onLongPress,
|
|
70
|
-
activeOpacity,
|
|
71
|
-
disabledOpacity,
|
|
72
50
|
loading,
|
|
73
51
|
disabled,
|
|
74
52
|
style,
|
|
@@ -111,31 +89,19 @@ function Base({
|
|
|
111
89
|
buttonStyles.justifyContent = "flex-end";
|
|
112
90
|
}
|
|
113
91
|
|
|
114
|
-
const getOpacity = useCallback(
|
|
115
|
-
(pressed: boolean) => {
|
|
116
|
-
if (disabled) {
|
|
117
|
-
return disabledOpacity;
|
|
118
|
-
} else {
|
|
119
|
-
if (pressed) return activeOpacity;
|
|
120
|
-
else return 1;
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
[activeOpacity, disabled, disabledOpacity]
|
|
124
|
-
);
|
|
125
|
-
const _style = useCallback<StyleType>(
|
|
126
|
-
({ pressed }) => [
|
|
127
|
-
buttonStyles as ViewStyle,
|
|
128
|
-
{ opacity: getOpacity(pressed) },
|
|
129
|
-
],
|
|
130
|
-
[getOpacity, buttonStyles]
|
|
131
|
-
);
|
|
132
|
-
|
|
133
92
|
return (
|
|
134
93
|
<Pressable
|
|
135
94
|
onPress={onPress}
|
|
136
|
-
onLongPress={onLongPress}
|
|
137
95
|
disabled={disabled || loading}
|
|
138
|
-
style={(
|
|
96
|
+
style={({ pressed }) => {
|
|
97
|
+
return [
|
|
98
|
+
styles.base,
|
|
99
|
+
{
|
|
100
|
+
opacity: pressed || disabled ? 0.75 : 1,
|
|
101
|
+
},
|
|
102
|
+
buttonStyles,
|
|
103
|
+
];
|
|
104
|
+
}}
|
|
139
105
|
{...props}
|
|
140
106
|
>
|
|
141
107
|
{loading ? (
|
|
@@ -202,10 +168,8 @@ const styles = StyleSheet.create({
|
|
|
202
168
|
flexDirection: "row",
|
|
203
169
|
alignItems: "center",
|
|
204
170
|
justifyContent: "center",
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
paddingRight: CONSTANTS.padding,
|
|
208
|
-
paddingBottom: CONSTANTS.padding,
|
|
171
|
+
minHeight: CONSTANTS.baseHeight,
|
|
172
|
+
paddingHorizontal: 12,
|
|
209
173
|
fontFamily: "System",
|
|
210
174
|
fontWeight: "700",
|
|
211
175
|
...Platform.select({
|
|
@@ -219,6 +183,11 @@ const styles = StyleSheet.create({
|
|
|
219
183
|
backgroundColor: "transparent",
|
|
220
184
|
borderWidth: 1,
|
|
221
185
|
},
|
|
186
|
+
bare: {
|
|
187
|
+
backgroundColor: "transparent",
|
|
188
|
+
padding: 0,
|
|
189
|
+
minHeight: undefined,
|
|
190
|
+
},
|
|
222
191
|
loading: {
|
|
223
192
|
marginRight: 6,
|
|
224
193
|
},
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { View, StyleSheet,
|
|
2
|
+
import { View, StyleSheet, } from "react-native";
|
|
3
3
|
import { useTheme } from "../../theming";
|
|
4
|
+
import Touchable from "../Touchable";
|
|
4
5
|
import { usePrevious } from "../../hooks";
|
|
5
6
|
const Checkbox = ({ Icon, status, disabled = false, onPress, onCheck, onUncheck, color, uncheckedColor, defaultValue, checkedIcon = "MaterialCommunityIcons/checkbox-marked", uncheckedIcon = "MaterialCommunityIcons/checkbox-blank-outline", size = 24, style, ...rest }) => {
|
|
6
7
|
const [internalValue, setInternalValue] = React.useState(status || defaultValue || false);
|
|
@@ -32,7 +33,7 @@ const Checkbox = ({ Icon, status, disabled = false, onPress, onCheck, onUncheck,
|
|
|
32
33
|
onUncheck === null || onUncheck === void 0 ? void 0 : onUncheck();
|
|
33
34
|
}
|
|
34
35
|
};
|
|
35
|
-
return (React.createElement(
|
|
36
|
+
return (React.createElement(Touchable, { ...rest, onPress: handlePress, disabled: disabled, accessibilityState: { disabled }, accessibilityRole: "button", accessibilityLiveRegion: "polite", style: [styles.container, style, { width: size, height: size }] },
|
|
36
37
|
React.createElement(Icon, { style: styles.icon, name: internalValue ? checkedIcon : uncheckedIcon, size: size, color: checkboxColor }),
|
|
37
38
|
React.createElement(View, { style: [StyleSheet.absoluteFill, styles.fillContainer] },
|
|
38
39
|
React.createElement(View, { style: [
|
|
@@ -2,14 +2,14 @@ import * as React from "react";
|
|
|
2
2
|
import {
|
|
3
3
|
View,
|
|
4
4
|
StyleSheet,
|
|
5
|
+
TouchableHighlightProps,
|
|
5
6
|
StyleProp,
|
|
6
7
|
ViewStyle,
|
|
7
|
-
Pressable,
|
|
8
|
-
PressableProps,
|
|
9
8
|
} from "react-native";
|
|
10
9
|
import { useTheme } from "../../theming";
|
|
11
10
|
import type { IconSlot } from "../../interfaces/Icon";
|
|
12
11
|
|
|
12
|
+
import Touchable from "../Touchable";
|
|
13
13
|
import { usePrevious } from "../../hooks";
|
|
14
14
|
|
|
15
15
|
export interface CheckboxProps {
|
|
@@ -27,7 +27,9 @@ export interface CheckboxProps {
|
|
|
27
27
|
style?: StyleProp<ViewStyle>;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const Checkbox: React.FC<
|
|
30
|
+
const Checkbox: React.FC<
|
|
31
|
+
CheckboxProps & TouchableHighlightProps & IconSlot
|
|
32
|
+
> = ({
|
|
31
33
|
Icon,
|
|
32
34
|
status,
|
|
33
35
|
disabled = false,
|
|
@@ -85,7 +87,7 @@ const Checkbox: React.FC<CheckboxProps & PressableProps & IconSlot> = ({
|
|
|
85
87
|
};
|
|
86
88
|
|
|
87
89
|
return (
|
|
88
|
-
<
|
|
90
|
+
<Touchable
|
|
89
91
|
{...rest}
|
|
90
92
|
onPress={handlePress}
|
|
91
93
|
disabled={disabled}
|
|
@@ -109,7 +111,7 @@ const Checkbox: React.FC<CheckboxProps & PressableProps & IconSlot> = ({
|
|
|
109
111
|
]}
|
|
110
112
|
/>
|
|
111
113
|
</View>
|
|
112
|
-
</
|
|
114
|
+
</Touchable>
|
|
113
115
|
);
|
|
114
116
|
};
|
|
115
117
|
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ActivityIndicator, View, Text, StyleSheet, } from "react-native";
|
|
3
|
+
import color from "color";
|
|
4
|
+
import Config from "./Config";
|
|
5
|
+
import Touchable from "./Touchable";
|
|
6
|
+
import Elevation from "./Elevation";
|
|
7
|
+
import { withTheme } from "../theming";
|
|
8
|
+
const Button = ({ Icon, icon, disabled = false, type = "solid", loading = false, labelColor, color: colorOverride, children, onPress, elevation = 0, style, theme: { colors, disabledOpacity, roundness, typography }, ...rest }) => {
|
|
9
|
+
let backgroundColor, borderColor, textColor, borderWidth;
|
|
10
|
+
const buttonColor = colorOverride || colors.primary;
|
|
11
|
+
if (type === "solid") {
|
|
12
|
+
backgroundColor = buttonColor;
|
|
13
|
+
if (disabled) {
|
|
14
|
+
textColor = color(colors.surface).alpha(disabledOpacity).rgb().string();
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
textColor = labelColor || colors.surface;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
backgroundColor = "transparent";
|
|
22
|
+
if (disabled) {
|
|
23
|
+
textColor = color(buttonColor).alpha(disabledOpacity).rgb().string();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
textColor = labelColor || buttonColor;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (type === "outline") {
|
|
30
|
+
if (disabled) {
|
|
31
|
+
borderColor = color(buttonColor).alpha(disabledOpacity).rgb().string();
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
borderColor = buttonColor;
|
|
35
|
+
}
|
|
36
|
+
borderWidth = StyleSheet.hairlineWidth;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
borderColor = "transparent";
|
|
40
|
+
borderWidth = 0;
|
|
41
|
+
}
|
|
42
|
+
const buttonStyle = {
|
|
43
|
+
backgroundColor,
|
|
44
|
+
borderColor,
|
|
45
|
+
borderWidth,
|
|
46
|
+
borderRadius: roundness,
|
|
47
|
+
};
|
|
48
|
+
const textStyle = {
|
|
49
|
+
textAlign: "center",
|
|
50
|
+
color: textColor,
|
|
51
|
+
marginVertical: 16,
|
|
52
|
+
marginHorizontal: 16,
|
|
53
|
+
};
|
|
54
|
+
const iconStyle = [
|
|
55
|
+
styles.icon,
|
|
56
|
+
{
|
|
57
|
+
marginLeft: 16,
|
|
58
|
+
marginRight: -8,
|
|
59
|
+
width: Config.buttonIconSize,
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
const { margin, marginEnd, marginTop, marginLeft, marginRight, marginBottom, marginHorizontal, marginVertical, ...innerStyles } = StyleSheet.flatten(style || {});
|
|
63
|
+
const margins = {
|
|
64
|
+
margin,
|
|
65
|
+
marginEnd,
|
|
66
|
+
marginTop,
|
|
67
|
+
marginLeft,
|
|
68
|
+
marginRight,
|
|
69
|
+
marginBottom,
|
|
70
|
+
marginHorizontal,
|
|
71
|
+
marginVertical,
|
|
72
|
+
};
|
|
73
|
+
return (React.createElement(Elevation, { style: { elevation, alignSelf: "stretch", ...margins } },
|
|
74
|
+
React.createElement(Touchable, { ...rest, onPress: onPress, accessibilityState: { disabled }, accessibilityRole: "button", disabled: disabled || loading, style: [styles.button, buttonStyle, innerStyles] },
|
|
75
|
+
React.createElement(View, { style: styles.content },
|
|
76
|
+
icon && loading !== true ? (React.createElement(View, { style: iconStyle },
|
|
77
|
+
React.createElement(Icon, { name: icon, size: Config.buttonIconSize, color: textColor }))) : null,
|
|
78
|
+
loading ? (React.createElement(ActivityIndicator, { size: "small", color: textColor, style: iconStyle })) : null,
|
|
79
|
+
React.createElement(Text, { numberOfLines: 1, style: [textStyle, typography.button] }, children)))));
|
|
80
|
+
};
|
|
81
|
+
const styles = StyleSheet.create({
|
|
82
|
+
button: {
|
|
83
|
+
minWidth: 64,
|
|
84
|
+
borderStyle: "solid",
|
|
85
|
+
},
|
|
86
|
+
content: {
|
|
87
|
+
flexDirection: "row",
|
|
88
|
+
alignItems: "center",
|
|
89
|
+
justifyContent: "center",
|
|
90
|
+
},
|
|
91
|
+
icon: {
|
|
92
|
+
width: Config.buttonIconSize,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
export default withTheme(Button);
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {
|
|
3
|
+
ActivityIndicator,
|
|
4
|
+
View,
|
|
5
|
+
Text,
|
|
6
|
+
StyleSheet,
|
|
7
|
+
TouchableHighlightProps,
|
|
8
|
+
StyleProp,
|
|
9
|
+
ViewStyle,
|
|
10
|
+
TextStyle,
|
|
11
|
+
} from "react-native";
|
|
12
|
+
import color from "color";
|
|
13
|
+
import Config from "./Config";
|
|
14
|
+
import Touchable from "./Touchable";
|
|
15
|
+
import Elevation from "./Elevation";
|
|
16
|
+
import { withTheme } from "../theming";
|
|
17
|
+
|
|
18
|
+
import type { Theme } from "../styles/DefaultTheme";
|
|
19
|
+
import type { IconSlot } from "../interfaces/Icon";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A button is component that the user can press to trigger an action.
|
|
23
|
+
*
|
|
24
|
+
* <div class="screenshots">
|
|
25
|
+
* <figure>
|
|
26
|
+
* <img src="screenshots/button-1.png" />
|
|
27
|
+
* <figcaption>Text button</figcaption>
|
|
28
|
+
* </figure>
|
|
29
|
+
* <figure>
|
|
30
|
+
* <img src="screenshots/button-2.png" />
|
|
31
|
+
* <figcaption>Outlined button</figcaption>
|
|
32
|
+
* </figure>
|
|
33
|
+
* <figure>
|
|
34
|
+
* <img src="screenshots/button-3.png" />
|
|
35
|
+
* <figcaption>Contained button</figcaption>
|
|
36
|
+
* </figure>
|
|
37
|
+
* </div>
|
|
38
|
+
*
|
|
39
|
+
* ## Usage
|
|
40
|
+
* ```js
|
|
41
|
+
* import * as React from 'react';
|
|
42
|
+
* import { Button } from '@draftbit/ui';
|
|
43
|
+
*
|
|
44
|
+
* const MyComponent = () => (
|
|
45
|
+
* <Button icon="add-a-photo" type="solid" onPress={() => console.log('Pressed')}>
|
|
46
|
+
* Press me
|
|
47
|
+
* </Button>
|
|
48
|
+
* );
|
|
49
|
+
*
|
|
50
|
+
* export default MyComponent;
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
type Props = {
|
|
55
|
+
disabled?: boolean;
|
|
56
|
+
type?: "solid" | "outline" | "text";
|
|
57
|
+
loading?: boolean;
|
|
58
|
+
icon?: string;
|
|
59
|
+
labelColor?: string;
|
|
60
|
+
color?: string;
|
|
61
|
+
children?: React.ReactNode;
|
|
62
|
+
onPress: () => void;
|
|
63
|
+
elevation?: number;
|
|
64
|
+
style?: StyleProp<ViewStyle>;
|
|
65
|
+
theme: Theme;
|
|
66
|
+
} & TouchableHighlightProps &
|
|
67
|
+
IconSlot;
|
|
68
|
+
|
|
69
|
+
const Button: React.FC<React.PropsWithChildren<Props>> = ({
|
|
70
|
+
Icon,
|
|
71
|
+
icon,
|
|
72
|
+
disabled = false,
|
|
73
|
+
type = "solid",
|
|
74
|
+
loading = false,
|
|
75
|
+
labelColor,
|
|
76
|
+
color: colorOverride,
|
|
77
|
+
children,
|
|
78
|
+
onPress,
|
|
79
|
+
elevation = 0,
|
|
80
|
+
style,
|
|
81
|
+
theme: { colors, disabledOpacity, roundness, typography },
|
|
82
|
+
...rest
|
|
83
|
+
}) => {
|
|
84
|
+
let backgroundColor, borderColor, textColor, borderWidth;
|
|
85
|
+
const buttonColor = colorOverride || colors.primary;
|
|
86
|
+
|
|
87
|
+
if (type === "solid") {
|
|
88
|
+
backgroundColor = buttonColor;
|
|
89
|
+
|
|
90
|
+
if (disabled) {
|
|
91
|
+
textColor = color(colors.surface).alpha(disabledOpacity).rgb().string();
|
|
92
|
+
} else {
|
|
93
|
+
textColor = labelColor || colors.surface;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
backgroundColor = "transparent";
|
|
97
|
+
|
|
98
|
+
if (disabled) {
|
|
99
|
+
textColor = color(buttonColor).alpha(disabledOpacity).rgb().string();
|
|
100
|
+
} else {
|
|
101
|
+
textColor = labelColor || buttonColor;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (type === "outline") {
|
|
106
|
+
if (disabled) {
|
|
107
|
+
borderColor = color(buttonColor).alpha(disabledOpacity).rgb().string();
|
|
108
|
+
} else {
|
|
109
|
+
borderColor = buttonColor;
|
|
110
|
+
}
|
|
111
|
+
borderWidth = StyleSheet.hairlineWidth;
|
|
112
|
+
} else {
|
|
113
|
+
borderColor = "transparent";
|
|
114
|
+
borderWidth = 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const buttonStyle = {
|
|
118
|
+
backgroundColor,
|
|
119
|
+
borderColor,
|
|
120
|
+
borderWidth,
|
|
121
|
+
borderRadius: roundness,
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const textStyle: StyleProp<TextStyle> = {
|
|
125
|
+
textAlign: "center",
|
|
126
|
+
color: textColor,
|
|
127
|
+
marginVertical: 16,
|
|
128
|
+
marginHorizontal: 16,
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const iconStyle = [
|
|
132
|
+
styles.icon,
|
|
133
|
+
{
|
|
134
|
+
marginLeft: 16,
|
|
135
|
+
marginRight: -8,
|
|
136
|
+
width: Config.buttonIconSize,
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
const {
|
|
141
|
+
margin,
|
|
142
|
+
marginEnd,
|
|
143
|
+
marginTop,
|
|
144
|
+
marginLeft,
|
|
145
|
+
marginRight,
|
|
146
|
+
marginBottom,
|
|
147
|
+
marginHorizontal,
|
|
148
|
+
marginVertical,
|
|
149
|
+
...innerStyles
|
|
150
|
+
} = StyleSheet.flatten(style || {});
|
|
151
|
+
|
|
152
|
+
const margins = {
|
|
153
|
+
margin,
|
|
154
|
+
marginEnd,
|
|
155
|
+
marginTop,
|
|
156
|
+
marginLeft,
|
|
157
|
+
marginRight,
|
|
158
|
+
marginBottom,
|
|
159
|
+
marginHorizontal,
|
|
160
|
+
marginVertical,
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<Elevation style={{ elevation, alignSelf: "stretch", ...margins }}>
|
|
165
|
+
<Touchable
|
|
166
|
+
{...rest}
|
|
167
|
+
onPress={onPress}
|
|
168
|
+
accessibilityState={{ disabled }}
|
|
169
|
+
accessibilityRole="button"
|
|
170
|
+
disabled={disabled || loading}
|
|
171
|
+
style={[styles.button, buttonStyle, innerStyles]}
|
|
172
|
+
>
|
|
173
|
+
<View style={styles.content}>
|
|
174
|
+
{icon && loading !== true ? (
|
|
175
|
+
<View style={iconStyle}>
|
|
176
|
+
<Icon
|
|
177
|
+
name={icon}
|
|
178
|
+
size={Config.buttonIconSize}
|
|
179
|
+
color={textColor}
|
|
180
|
+
/>
|
|
181
|
+
</View>
|
|
182
|
+
) : null}
|
|
183
|
+
{loading ? (
|
|
184
|
+
<ActivityIndicator
|
|
185
|
+
size="small"
|
|
186
|
+
color={textColor}
|
|
187
|
+
style={iconStyle}
|
|
188
|
+
/>
|
|
189
|
+
) : null}
|
|
190
|
+
<Text numberOfLines={1} style={[textStyle, typography.button]}>
|
|
191
|
+
{children}
|
|
192
|
+
</Text>
|
|
193
|
+
</View>
|
|
194
|
+
</Touchable>
|
|
195
|
+
</Elevation>
|
|
196
|
+
);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const styles = StyleSheet.create({
|
|
200
|
+
button: {
|
|
201
|
+
minWidth: 64,
|
|
202
|
+
borderStyle: "solid",
|
|
203
|
+
},
|
|
204
|
+
content: {
|
|
205
|
+
flexDirection: "row",
|
|
206
|
+
alignItems: "center",
|
|
207
|
+
justifyContent: "center",
|
|
208
|
+
},
|
|
209
|
+
icon: {
|
|
210
|
+
width: Config.buttonIconSize,
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
export default withTheme(Button);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { withTheme } from "../theming";
|
|
3
|
-
import
|
|
3
|
+
import Touchable from "./Touchable";
|
|
4
4
|
const getWidth = (numColumns) => {
|
|
5
5
|
switch (numColumns) {
|
|
6
6
|
case 1:
|
|
@@ -13,6 +13,6 @@ const getWidth = (numColumns) => {
|
|
|
13
13
|
};
|
|
14
14
|
const Card = ({ numColumns = 3, children, onPress, style, ...rest }) => {
|
|
15
15
|
const width = getWidth(numColumns);
|
|
16
|
-
return (React.createElement(
|
|
16
|
+
return (React.createElement(Touchable, { disabled: !onPress, onPress: onPress, style: [style, { width }], ...rest }, children));
|
|
17
17
|
};
|
|
18
18
|
export default withTheme(Card);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { withTheme } from "../theming";
|
|
3
|
-
import
|
|
3
|
+
import Touchable from "./Touchable";
|
|
4
|
+
import { StyleProp, ViewStyle } from "react-native";
|
|
4
5
|
import theme from "../styles/DefaultTheme";
|
|
5
6
|
|
|
6
7
|
type Props = {
|
|
@@ -31,14 +32,14 @@ const Card: React.FC<React.PropsWithChildren<Props>> = ({
|
|
|
31
32
|
}) => {
|
|
32
33
|
const width = getWidth(numColumns);
|
|
33
34
|
return (
|
|
34
|
-
<
|
|
35
|
+
<Touchable
|
|
35
36
|
disabled={!onPress}
|
|
36
37
|
onPress={onPress}
|
|
37
38
|
style={[style, { width }]}
|
|
38
39
|
{...rest}
|
|
39
40
|
>
|
|
40
41
|
{children}
|
|
41
|
-
</
|
|
42
|
+
</Touchable>
|
|
42
43
|
);
|
|
43
44
|
};
|
|
44
45
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { ActivityIndicator, View, StyleSheet,
|
|
2
|
+
import { ActivityIndicator, View, StyleSheet, } from "react-native";
|
|
3
3
|
import color from "color";
|
|
4
4
|
import Config from "./Config";
|
|
5
5
|
import Text from "./Text";
|
|
6
|
+
import Touchable from "./Touchable";
|
|
6
7
|
import Elevation from "./Elevation";
|
|
7
8
|
import { withTheme } from "../theming";
|
|
8
9
|
const FAB = ({ Icon, icon, disabled = false, type = "solid", loading = false, color: colorOverride, label, onPress, elevation = 0, style, theme: { colors, disabledOpacity, roundness, typography }, ...rest }) => {
|
|
@@ -82,7 +83,7 @@ const FAB = ({ Icon, icon, disabled = false, type = "solid", loading = false, co
|
|
|
82
83
|
});
|
|
83
84
|
}
|
|
84
85
|
return (React.createElement(Elevation, { style: [{ elevation }, style] },
|
|
85
|
-
React.createElement(
|
|
86
|
+
React.createElement(Touchable, { ...rest, onPress: onPress, accessibilityState: { disabled }, accessibilityRole: "button", disabled: disabled || loading, style: buttonStyles },
|
|
86
87
|
React.createElement(View, { style: styles.content },
|
|
87
88
|
icon && loading !== true ? (React.createElement(View, { style: iconStyle },
|
|
88
89
|
React.createElement(Icon, { name: icon, size: Config.buttonIconSize, color: textColor }))) : null,
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
ActivityIndicator,
|
|
4
4
|
View,
|
|
5
5
|
StyleSheet,
|
|
6
|
+
TouchableHighlightProps,
|
|
6
7
|
StyleProp,
|
|
7
8
|
ViewStyle,
|
|
8
9
|
TextStyle,
|
|
9
|
-
Pressable,
|
|
10
|
-
PressableProps,
|
|
11
10
|
} from "react-native";
|
|
12
11
|
import color from "color";
|
|
13
12
|
import Config from "./Config";
|
|
14
13
|
import Text from "./Text";
|
|
14
|
+
import Touchable from "./Touchable";
|
|
15
15
|
import Elevation from "./Elevation";
|
|
16
16
|
import { withTheme } from "../theming";
|
|
17
17
|
|
|
@@ -65,7 +65,7 @@ type Props = {
|
|
|
65
65
|
elevation?: number;
|
|
66
66
|
theme: Theme;
|
|
67
67
|
style?: StyleProp<ViewStyle>;
|
|
68
|
-
} &
|
|
68
|
+
} & TouchableHighlightProps &
|
|
69
69
|
IconSlot;
|
|
70
70
|
|
|
71
71
|
const FAB: React.FC<React.PropsWithChildren<Props>> = ({
|
|
@@ -169,7 +169,7 @@ const FAB: React.FC<React.PropsWithChildren<Props>> = ({
|
|
|
169
169
|
|
|
170
170
|
return (
|
|
171
171
|
<Elevation style={[{ elevation }, style]}>
|
|
172
|
-
<
|
|
172
|
+
<Touchable
|
|
173
173
|
{...rest}
|
|
174
174
|
onPress={onPress}
|
|
175
175
|
accessibilityState={{ disabled }}
|
|
@@ -200,7 +200,7 @@ const FAB: React.FC<React.PropsWithChildren<Props>> = ({
|
|
|
200
200
|
</Text>
|
|
201
201
|
) : null}
|
|
202
202
|
</View>
|
|
203
|
-
</
|
|
203
|
+
</Touchable>
|
|
204
204
|
</Elevation>
|
|
205
205
|
);
|
|
206
206
|
};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { View, StyleSheet, Text, Platform, Dimensions,
|
|
2
|
+
import { View, StyleSheet, Text, Platform, Dimensions, } from "react-native";
|
|
3
3
|
import { omit, pickBy, identity, isObject } from "lodash";
|
|
4
4
|
import { SafeAreaView } from "react-native-safe-area-context";
|
|
5
5
|
import { Picker as NativePicker } from "@react-native-picker/picker";
|
|
6
6
|
import { withTheme } from "../../theming";
|
|
7
7
|
import Portal from "../Portal/Portal";
|
|
8
|
-
import
|
|
8
|
+
import Button from "../DeprecatedButton";
|
|
9
|
+
import Touchable from "../Touchable";
|
|
9
10
|
import { extractStyles, extractBorderAndMarginStyles, borderStyleNames, marginStyleNames, } from "../../utilities";
|
|
10
11
|
function normalizeOptions(options) {
|
|
11
12
|
if (options.length === 0) {
|
|
@@ -165,7 +166,7 @@ const Picker = ({ error, options = [], onValueChange, defaultValue, Icon, style,
|
|
|
165
166
|
return (
|
|
166
167
|
/* marginsContainer */
|
|
167
168
|
React.createElement(View, { style: [styles.marginsContainer, marginStyles] },
|
|
168
|
-
React.createElement(
|
|
169
|
+
React.createElement(Touchable, { disabled: disabled, onPress: togglePickerVisible, style: styles.touchableContainer },
|
|
169
170
|
React.createElement(View, { pointerEvents: "none", style: [
|
|
170
171
|
styles.outsetContainer,
|
|
171
172
|
stylesWithoutBordersAndMargins,
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
ViewStyle,
|
|
8
8
|
StyleProp,
|
|
9
9
|
Dimensions,
|
|
10
|
-
Pressable,
|
|
11
10
|
} from "react-native";
|
|
12
11
|
import { omit, pickBy, identity, isObject } from "lodash";
|
|
13
12
|
import { SafeAreaView } from "react-native-safe-area-context";
|
|
@@ -15,7 +14,8 @@ import { Picker as NativePicker } from "@react-native-picker/picker";
|
|
|
15
14
|
|
|
16
15
|
import { withTheme } from "../../theming";
|
|
17
16
|
import Portal from "../Portal/Portal";
|
|
18
|
-
import
|
|
17
|
+
import Button from "../DeprecatedButton";
|
|
18
|
+
import Touchable from "../Touchable";
|
|
19
19
|
import type { Theme } from "../../styles/DefaultTheme";
|
|
20
20
|
import type { IconSlot } from "../../interfaces/Icon";
|
|
21
21
|
import {
|
|
@@ -306,7 +306,7 @@ const Picker: React.FC<PickerProps> = ({
|
|
|
306
306
|
/* marginsContainer */
|
|
307
307
|
<View style={[styles.marginsContainer, marginStyles]}>
|
|
308
308
|
{/* touchableContainer */}
|
|
309
|
-
<
|
|
309
|
+
<Touchable
|
|
310
310
|
disabled={disabled}
|
|
311
311
|
onPress={togglePickerVisible}
|
|
312
312
|
style={styles.touchableContainer}
|
|
@@ -342,7 +342,7 @@ const Picker: React.FC<PickerProps> = ({
|
|
|
342
342
|
</View>
|
|
343
343
|
</View>
|
|
344
344
|
{assistiveTextLabel}
|
|
345
|
-
</
|
|
345
|
+
</Touchable>
|
|
346
346
|
|
|
347
347
|
{/* iosPicker */}
|
|
348
348
|
{isIos && pickerVisible ? (
|
|
@@ -5,7 +5,7 @@ import omit from "lodash.omit";
|
|
|
5
5
|
import { Picker as NativePicker } from "@react-native-picker/picker";
|
|
6
6
|
import { withTheme } from "../../theming";
|
|
7
7
|
import Portal from "../Portal/Portal";
|
|
8
|
-
import
|
|
8
|
+
import Button from "../DeprecatedButton";
|
|
9
9
|
import TextField from "../TextField";
|
|
10
10
|
import Touchable from "../Touchable";
|
|
11
11
|
import { extractStyles } from "../../utilities";
|
|
@@ -8,7 +8,7 @@ import { Picker as NativePicker } from "@react-native-picker/picker";
|
|
|
8
8
|
import { withTheme } from "../../theming";
|
|
9
9
|
|
|
10
10
|
import Portal from "../Portal/Portal";
|
|
11
|
-
import
|
|
11
|
+
import Button from "../DeprecatedButton";
|
|
12
12
|
import TextField from "../TextField";
|
|
13
13
|
import Touchable from "../Touchable";
|
|
14
14
|
import { PickerComponentProps } from "./PickerTypes";
|