@draftbit/core 48.4.9-3aa6b7.2 → 48.4.9-4c18cb.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.
Files changed (64) hide show
  1. package/lib/commonjs/components/Picker/Picker.js +1 -1
  2. package/lib/commonjs/components/Picker/PickerComponent.android.js +1 -0
  3. package/lib/commonjs/components/Picker/PickerComponent.ios.js +1 -0
  4. package/lib/commonjs/components/Picker/PickerComponent.web.js +1 -0
  5. package/lib/commonjs/components/TextField.js +1 -1
  6. package/lib/commonjs/utilities.js +1 -1
  7. package/lib/typescript/src/components/Picker/Picker.d.ts +35 -3
  8. package/lib/typescript/src/components/Picker/Picker.js +244 -69
  9. package/lib/typescript/src/components/Picker/Picker.js.map +1 -1
  10. package/lib/typescript/src/components/Picker/PickerComponent.android.d.ts +6 -0
  11. package/lib/typescript/src/components/Picker/PickerComponent.android.js +70 -0
  12. package/lib/typescript/src/components/Picker/PickerComponent.android.js.map +1 -0
  13. package/lib/typescript/src/components/Picker/PickerComponent.ios.d.ts +7 -0
  14. package/lib/typescript/src/components/Picker/PickerComponent.ios.js +80 -0
  15. package/lib/typescript/src/components/Picker/PickerComponent.ios.js.map +1 -0
  16. package/lib/typescript/src/components/Picker/PickerComponent.web.d.ts +6 -0
  17. package/lib/typescript/src/components/Picker/PickerComponent.web.js +71 -0
  18. package/lib/typescript/src/components/Picker/PickerComponent.web.js.map +1 -0
  19. package/lib/typescript/src/components/Picker/PickerTypes.d.ts +18 -0
  20. package/lib/typescript/src/components/Picker/PickerTypes.js +2 -0
  21. package/lib/typescript/src/components/Picker/PickerTypes.js.map +1 -0
  22. package/lib/typescript/src/components/TextField.d.ts +3 -3
  23. package/lib/typescript/src/components/TextField.js +6 -9
  24. package/lib/typescript/src/components/TextField.js.map +1 -1
  25. package/lib/typescript/src/utilities.d.ts +0 -4
  26. package/lib/typescript/src/utilities.js +1 -15
  27. package/lib/typescript/src/utilities.js.map +1 -1
  28. package/lib/typescript/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +3 -5
  30. package/src/components/Picker/Picker.js +244 -69
  31. package/src/components/Picker/Picker.js.map +1 -1
  32. package/src/components/Picker/Picker.tsx +441 -111
  33. package/src/components/Picker/PickerComponent.android.js +70 -0
  34. package/src/components/Picker/PickerComponent.android.js.map +1 -0
  35. package/src/components/Picker/PickerComponent.android.tsx +116 -0
  36. package/src/components/Picker/PickerComponent.ios.js +80 -0
  37. package/src/components/Picker/PickerComponent.ios.js.map +1 -0
  38. package/src/components/Picker/PickerComponent.ios.tsx +142 -0
  39. package/src/components/Picker/PickerComponent.web.js +71 -0
  40. package/src/components/Picker/PickerComponent.web.js.map +1 -0
  41. package/src/components/Picker/PickerComponent.web.tsx +117 -0
  42. package/src/components/Picker/PickerTypes.js +2 -0
  43. package/src/components/Picker/PickerTypes.js.map +1 -0
  44. package/src/components/Picker/PickerTypes.ts +18 -0
  45. package/src/components/TextField.js +6 -9
  46. package/src/components/TextField.js.map +1 -1
  47. package/src/components/TextField.tsx +8 -14
  48. package/src/utilities.js +1 -15
  49. package/src/utilities.js.map +1 -1
  50. package/src/utilities.ts +1 -22
  51. package/lib/commonjs/components/Picker/PickerInputContainer.js +0 -1
  52. package/lib/typescript/src/components/Picker/PickerCommon.d.ts +0 -27
  53. package/lib/typescript/src/components/Picker/PickerCommon.js +0 -2
  54. package/lib/typescript/src/components/Picker/PickerCommon.js.map +0 -1
  55. package/lib/typescript/src/components/Picker/PickerInputContainer.d.ts +0 -9
  56. package/lib/typescript/src/components/Picker/PickerInputContainer.js +0 -26
  57. package/lib/typescript/src/components/Picker/PickerInputContainer.js.map +0 -1
  58. package/src/components/Picker/PickerCommon.js +0 -2
  59. package/src/components/Picker/PickerCommon.js.map +0 -1
  60. package/src/components/Picker/PickerCommon.ts +0 -30
  61. package/src/components/Picker/PickerInputContainer.js +0 -26
  62. package/src/components/Picker/PickerInputContainer.js.map +0 -1
  63. package/src/components/Picker/PickerInputContainer.tsx +0 -74
  64. /package/lib/commonjs/components/Picker/{PickerCommon.js → PickerTypes.js} +0 -0
@@ -0,0 +1,116 @@
1
+ import * as React from "react";
2
+ import { View, StyleSheet } from "react-native";
3
+ import omit from "lodash.omit";
4
+ import { withTheme } from "../../theming";
5
+ import { Picker as NativePicker } from "@react-native-picker/picker";
6
+ import { extractStyles } from "../../utilities";
7
+
8
+ import TextField from "../TextField";
9
+ import Touchable from "../Touchable";
10
+ import { PickerComponentProps } from "./PickerTypes";
11
+
12
+ const Picker: React.FC<PickerComponentProps> = ({
13
+ style,
14
+ options,
15
+ placeholder,
16
+ selectedValue,
17
+ disabled = false,
18
+ onValueChange: onValueChangeOverride = () => {},
19
+ ...props
20
+ }) => {
21
+ const {
22
+ viewStyles: {
23
+ borderRadius, // eslint-disable-line @typescript-eslint/no-unused-vars
24
+ borderWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
25
+ borderTopWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
26
+ borderRightWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
27
+ borderBottomWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
28
+ borderLeftWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
29
+ borderColor, // eslint-disable-line @typescript-eslint/no-unused-vars
30
+ backgroundColor, // eslint-disable-line @typescript-eslint/no-unused-vars
31
+ padding, // eslint-disable-line @typescript-eslint/no-unused-vars
32
+ paddingTop, // eslint-disable-line @typescript-eslint/no-unused-vars
33
+ paddingRight, // eslint-disable-line @typescript-eslint/no-unused-vars
34
+ paddingBottom, // eslint-disable-line @typescript-eslint/no-unused-vars
35
+ paddingLeft, // eslint-disable-line @typescript-eslint/no-unused-vars
36
+ ...viewStyles
37
+ },
38
+ } = extractStyles(style);
39
+
40
+ const textField = React.useRef<typeof TextField | undefined>(undefined);
41
+
42
+ const onValueChange = (itemValue: string, itemIndex: number) => {
43
+ toggleFocus();
44
+ onValueChangeOverride(itemValue, itemIndex);
45
+ };
46
+
47
+ const toggleFocus = () => {
48
+ if (!disabled) {
49
+ // @ts-ignore
50
+ textField.current.toggleFocus(); // cannot determine if method exists due to component being wrapped in a withTheme()
51
+ }
52
+ };
53
+
54
+ const stylesWithoutMargin =
55
+ style &&
56
+ omit(StyleSheet.flatten(style), [
57
+ "margin",
58
+ "marginTop",
59
+ "marginRight",
60
+ "marginBottom",
61
+ "marginLeft",
62
+ ]);
63
+
64
+ const selectedLabel =
65
+ selectedValue &&
66
+ (options.find((o) => o.value === selectedValue)?.label ?? selectedValue);
67
+
68
+ return (
69
+ <Touchable
70
+ disabled={disabled}
71
+ onPress={toggleFocus}
72
+ style={[styles.container, viewStyles]}
73
+ >
74
+ <View>
75
+ <NativePicker
76
+ enabled={!disabled}
77
+ selectedValue={selectedValue}
78
+ onValueChange={onValueChange}
79
+ style={{
80
+ opacity: 0,
81
+ position: "absolute",
82
+ top: 0,
83
+ left: 0,
84
+ right: 0,
85
+ bottom: 0,
86
+ width: "100%",
87
+ }}
88
+ >
89
+ {options.map((o) => (
90
+ <NativePicker.Item label={o.label} value={o.value} key={o.value} />
91
+ ))}
92
+ </NativePicker>
93
+ <View pointerEvents="none">
94
+ <TextField
95
+ {...props}
96
+ value={selectedLabel}
97
+ placeholder={placeholder}
98
+ // @ts-ignore
99
+ ref={textField} // cannot determine if ref is of correct type due to component being wrapped in a withTheme()
100
+ disabled={disabled}
101
+ // @ts-expect-error
102
+ style={stylesWithoutMargin}
103
+ />
104
+ </View>
105
+ </View>
106
+ </Touchable>
107
+ );
108
+ };
109
+
110
+ const styles = StyleSheet.create({
111
+ container: {
112
+ alignSelf: "stretch",
113
+ },
114
+ });
115
+
116
+ export default withTheme(Picker);
@@ -0,0 +1,80 @@
1
+ import * as React from "react";
2
+ import { View, StyleSheet } from "react-native";
3
+ import { SafeAreaView } from "react-native-safe-area-context";
4
+ import omit from "lodash.omit";
5
+ import { Picker as NativePicker } from "@react-native-picker/picker";
6
+ import { withTheme } from "../../theming";
7
+ import Portal from "../Portal/Portal";
8
+ import Button from "../../deprecated-components/DeprecatedButton";
9
+ import TextField from "../TextField";
10
+ import Touchable from "../Touchable";
11
+ import { extractStyles } from "../../utilities";
12
+ const Picker = ({ Icon, style, options, placeholder, selectedValue, disabled = false, onValueChange = () => { }, theme: { colors }, ...props }) => {
13
+ var _a, _b;
14
+ const { viewStyles: { borderRadius, // eslint-disable-line @typescript-eslint/no-unused-vars
15
+ borderWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
16
+ borderTopWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
17
+ borderRightWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
18
+ borderBottomWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
19
+ borderLeftWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
20
+ borderColor, // eslint-disable-line @typescript-eslint/no-unused-vars
21
+ backgroundColor, // eslint-disable-line @typescript-eslint/no-unused-vars
22
+ padding, // eslint-disable-line @typescript-eslint/no-unused-vars
23
+ paddingTop, // eslint-disable-line @typescript-eslint/no-unused-vars
24
+ paddingRight, // eslint-disable-line @typescript-eslint/no-unused-vars
25
+ paddingBottom, // eslint-disable-line @typescript-eslint/no-unused-vars
26
+ paddingLeft, // eslint-disable-line @typescript-eslint/no-unused-vars
27
+ ...viewStyles }, } = extractStyles(style);
28
+ const textField = React.useRef(undefined);
29
+ const [pickerVisible, setIsPickerVisible] = React.useState(false);
30
+ const toggleVisibility = () => {
31
+ setIsPickerVisible(!pickerVisible);
32
+ // @ts-ignore
33
+ textField.current.toggleFocus(); // cannot determine if method exists due to component being wrapped in a withTheme()
34
+ };
35
+ const stylesWithoutMargin = style &&
36
+ omit(StyleSheet.flatten(style), [
37
+ "margin",
38
+ "marginTop",
39
+ "marginRight",
40
+ "marginBottom",
41
+ "marginLeft",
42
+ ]);
43
+ const selectedLabel = selectedValue &&
44
+ ((_b = (_a = options.find((o) => o.value === selectedValue)) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : selectedValue);
45
+ return (React.createElement(View, { style: [styles.container, viewStyles] },
46
+ React.createElement(Touchable, { disabled: disabled, onPress: toggleVisibility },
47
+ React.createElement(TextField, { ...props, value: String(selectedLabel), placeholder: placeholder,
48
+ // @ts-ignore
49
+ ref: textField, disabled: disabled, pointerEvents: "none",
50
+ // @ts-expect-error
51
+ style: stylesWithoutMargin, Icon: Icon })),
52
+ pickerVisible && (React.createElement(Portal, null,
53
+ React.createElement(View, { style: [styles.picker, { backgroundColor: colors.divider }] },
54
+ React.createElement(SafeAreaView, { style: styles.pickerContainer },
55
+ React.createElement(Button, { Icon: Icon, type: "text", onPress: toggleVisibility, style: styles.closeButton }, "Close"),
56
+ React.createElement(NativePicker, { style: { backgroundColor: "white" }, selectedValue: selectedValue, onValueChange: onValueChange }, options.map((o) => (React.createElement(NativePicker.Item, { label: o.label, value: o.value, key: o.value }))))))))));
57
+ };
58
+ const styles = StyleSheet.create({
59
+ container: {
60
+ alignSelf: "stretch",
61
+ },
62
+ picker: {
63
+ position: "absolute",
64
+ bottom: 0,
65
+ left: 0,
66
+ right: 0,
67
+ flexDirection: "row",
68
+ justifyContent: "center",
69
+ },
70
+ pickerContainer: {
71
+ backgroundColor: "white",
72
+ flexDirection: "column",
73
+ width: "100%",
74
+ },
75
+ closeButton: {
76
+ alignSelf: "flex-end",
77
+ },
78
+ });
79
+ export default withTheme(Picker);
80
+ //# sourceMappingURL=PickerComponent.ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickerComponent.ios.js","sourceRoot":"","sources":["PickerComponent.ios.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,IAAI,MAAM,aAAa,CAAC;AAE/B,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,MAAM,MAAM,8CAA8C,CAAC;AAClE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,MAAM,GAA8C,CAAC,EACzD,IAAI,EACJ,KAAK,EACL,OAAO,EACP,WAAW,EACX,aAAa,EACb,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,EACxB,KAAK,EAAE,EAAE,MAAM,EAAE,EACjB,GAAG,KAAK,EACT,EAAE,EAAE;;IACH,MAAM,EACJ,UAAU,EAAE,EACV,YAAY,EAAE,wDAAwD;IACtE,WAAW,EAAE,wDAAwD;IACrE,cAAc,EAAE,wDAAwD;IACxE,gBAAgB,EAAE,wDAAwD;IAC1E,iBAAiB,EAAE,wDAAwD;IAC3E,eAAe,EAAE,wDAAwD;IACzE,WAAW,EAAE,wDAAwD;IACrE,eAAe,EAAE,wDAAwD;IACzE,OAAO,EAAE,wDAAwD;IACjE,UAAU,EAAE,wDAAwD;IACpE,YAAY,EAAE,wDAAwD;IACtE,aAAa,EAAE,wDAAwD;IACvE,WAAW,EAAE,wDAAwD;IACrE,GAAG,UAAU,EACd,GACF,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAA+B,SAAS,CAAC,CAAC;IACxE,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,kBAAkB,CAAC,CAAC,aAAa,CAAC,CAAC;QACnC,aAAa;QACb,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,oFAAoF;IACvH,CAAC,CAAC;IAEF,MAAM,mBAAmB,GACvB,KAAK;QACL,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC9B,QAAQ;YACR,WAAW;YACX,aAAa;YACb,cAAc;YACd,YAAY;SACb,CAAC,CAAC;IAEL,MAAM,aAAa,GACjB,aAAa;QACb,CAAC,MAAA,MAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,0CAAE,KAAK,mCAAI,aAAa,CAAC,CAAC;IAE3E,OAAO,CACL,oBAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;QACzC,oBAAC,SAAS,IAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB;YACtD,oBAAC,SAAS,OACJ,KAAK,EACT,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,EAC5B,WAAW,EAAE,WAAW;gBACxB,aAAa;gBACb,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAC,MAAM;gBACpB,mBAAmB;gBACnB,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,IAAI,GACV,CACQ;QACX,aAAa,IAAI,CAChB,oBAAC,MAAM;YACL,oBAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/D,oBAAC,YAAY,IAAC,KAAK,EAAE,MAAM,CAAC,eAAe;oBACzC,oBAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,CAAC,WAAW,YAGlB;oBACT,oBAAC,YAAY,IACX,KAAK,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,EACnC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,IAE3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CACvB,oBAAC,YAAY,CAAC,IAAI,IAChB,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,GAAG,EAAE,CAAC,CAAC,KAAK,GACZ,CACH,CAAC,CACW,CACF,CACV,CACA,CACV,CACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,SAAS,EAAE,SAAS;KACrB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,eAAe,EAAE;QACf,eAAe,EAAE,OAAO;QACxB,aAAa,EAAE,QAAQ;QACvB,KAAK,EAAE,MAAM;KACd;IACD,WAAW,EAAE;QACX,SAAS,EAAE,UAAU;KACtB;CACF,CAAC,CAAC;AAEH,eAAe,SAAS,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,142 @@
1
+ import * as React from "react";
2
+ import { View, StyleSheet } from "react-native";
3
+ import { SafeAreaView } from "react-native-safe-area-context";
4
+ import omit from "lodash.omit";
5
+
6
+ import { Picker as NativePicker } from "@react-native-picker/picker";
7
+
8
+ import { withTheme } from "../../theming";
9
+
10
+ import Portal from "../Portal/Portal";
11
+ import Button from "../../deprecated-components/DeprecatedButton";
12
+ import TextField from "../TextField";
13
+ import Touchable from "../Touchable";
14
+ import { PickerComponentProps } from "./PickerTypes";
15
+ import { extractStyles } from "../../utilities";
16
+ import type { IconSlot } from "../../interfaces/Icon";
17
+
18
+ const Picker: React.FC<PickerComponentProps & IconSlot> = ({
19
+ Icon,
20
+ style,
21
+ options,
22
+ placeholder,
23
+ selectedValue,
24
+ disabled = false,
25
+ onValueChange = () => {},
26
+ theme: { colors },
27
+ ...props
28
+ }) => {
29
+ const {
30
+ viewStyles: {
31
+ borderRadius, // eslint-disable-line @typescript-eslint/no-unused-vars
32
+ borderWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
33
+ borderTopWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
34
+ borderRightWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
35
+ borderBottomWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
36
+ borderLeftWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
37
+ borderColor, // eslint-disable-line @typescript-eslint/no-unused-vars
38
+ backgroundColor, // eslint-disable-line @typescript-eslint/no-unused-vars
39
+ padding, // eslint-disable-line @typescript-eslint/no-unused-vars
40
+ paddingTop, // eslint-disable-line @typescript-eslint/no-unused-vars
41
+ paddingRight, // eslint-disable-line @typescript-eslint/no-unused-vars
42
+ paddingBottom, // eslint-disable-line @typescript-eslint/no-unused-vars
43
+ paddingLeft, // eslint-disable-line @typescript-eslint/no-unused-vars
44
+ ...viewStyles
45
+ },
46
+ } = extractStyles(style);
47
+
48
+ const textField = React.useRef<typeof TextField | undefined>(undefined);
49
+ const [pickerVisible, setIsPickerVisible] = React.useState(false);
50
+
51
+ const toggleVisibility = () => {
52
+ setIsPickerVisible(!pickerVisible);
53
+ // @ts-ignore
54
+ textField.current.toggleFocus(); // cannot determine if method exists due to component being wrapped in a withTheme()
55
+ };
56
+
57
+ const stylesWithoutMargin =
58
+ style &&
59
+ omit(StyleSheet.flatten(style), [
60
+ "margin",
61
+ "marginTop",
62
+ "marginRight",
63
+ "marginBottom",
64
+ "marginLeft",
65
+ ]);
66
+
67
+ const selectedLabel =
68
+ selectedValue &&
69
+ (options.find((o) => o.value === selectedValue)?.label ?? selectedValue);
70
+
71
+ return (
72
+ <View style={[styles.container, viewStyles]}>
73
+ <Touchable disabled={disabled} onPress={toggleVisibility}>
74
+ <TextField
75
+ {...props}
76
+ value={String(selectedLabel)}
77
+ placeholder={placeholder}
78
+ // @ts-ignore
79
+ ref={textField} // cannot determine if ref is of correct type due to component being wrapped in a withTheme()
80
+ disabled={disabled}
81
+ pointerEvents="none"
82
+ // @ts-expect-error
83
+ style={stylesWithoutMargin}
84
+ Icon={Icon}
85
+ />
86
+ </Touchable>
87
+ {pickerVisible && (
88
+ <Portal>
89
+ <View style={[styles.picker, { backgroundColor: colors.divider }]}>
90
+ <SafeAreaView style={styles.pickerContainer}>
91
+ <Button
92
+ Icon={Icon}
93
+ type="text"
94
+ onPress={toggleVisibility}
95
+ style={styles.closeButton}
96
+ >
97
+ Close
98
+ </Button>
99
+ <NativePicker
100
+ style={{ backgroundColor: "white" }}
101
+ selectedValue={selectedValue}
102
+ onValueChange={onValueChange}
103
+ >
104
+ {options.map((o: any) => (
105
+ <NativePicker.Item
106
+ label={o.label}
107
+ value={o.value}
108
+ key={o.value}
109
+ />
110
+ ))}
111
+ </NativePicker>
112
+ </SafeAreaView>
113
+ </View>
114
+ </Portal>
115
+ )}
116
+ </View>
117
+ );
118
+ };
119
+
120
+ const styles = StyleSheet.create({
121
+ container: {
122
+ alignSelf: "stretch",
123
+ },
124
+ picker: {
125
+ position: "absolute",
126
+ bottom: 0,
127
+ left: 0,
128
+ right: 0,
129
+ flexDirection: "row",
130
+ justifyContent: "center",
131
+ },
132
+ pickerContainer: {
133
+ backgroundColor: "white",
134
+ flexDirection: "column",
135
+ width: "100%",
136
+ },
137
+ closeButton: {
138
+ alignSelf: "flex-end",
139
+ },
140
+ });
141
+
142
+ export default withTheme(Picker);
@@ -0,0 +1,71 @@
1
+ import * as React from "react";
2
+ import { View, StyleSheet } from "react-native";
3
+ import { Picker as NativePicker } from "@react-native-picker/picker";
4
+ import omit from "lodash.omit";
5
+ import { withTheme } from "../../theming";
6
+ import { extractStyles } from "../../utilities";
7
+ import TextField from "../TextField";
8
+ import Touchable from "../Touchable";
9
+ const Picker = ({ style, options, placeholder, selectedValue, disabled = false, onValueChange: onValueChangeOverride = () => { }, ...props }) => {
10
+ var _a, _b;
11
+ const { viewStyles: { borderRadius, // eslint-disable-line @typescript-eslint/no-unused-vars
12
+ borderWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
13
+ borderTopWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
14
+ borderRightWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
15
+ borderBottomWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
16
+ borderLeftWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
17
+ borderColor, // eslint-disable-line @typescript-eslint/no-unused-vars
18
+ backgroundColor, // eslint-disable-line @typescript-eslint/no-unused-vars
19
+ padding, // eslint-disable-line @typescript-eslint/no-unused-vars
20
+ paddingTop, // eslint-disable-line @typescript-eslint/no-unused-vars
21
+ paddingRight, // eslint-disable-line @typescript-eslint/no-unused-vars
22
+ paddingBottom, // eslint-disable-line @typescript-eslint/no-unused-vars
23
+ paddingLeft, // eslint-disable-line @typescript-eslint/no-unused-vars
24
+ ...viewStyles }, } = extractStyles(style);
25
+ const textField = React.useRef(undefined);
26
+ const onValueChange = (itemValue, itemIndex) => {
27
+ toggleFocus();
28
+ onValueChangeOverride(itemValue, itemIndex);
29
+ };
30
+ const toggleFocus = () => {
31
+ if (!disabled) {
32
+ // @ts-ignore
33
+ textField.current.toggleFocus(); // cannot determine if method exists due to component being wrapped in a withTheme()
34
+ }
35
+ };
36
+ const stylesWithoutMargin = style &&
37
+ omit(StyleSheet.flatten(style), [
38
+ "margin",
39
+ "marginTop",
40
+ "marginRight",
41
+ "marginBottom",
42
+ "marginLeft",
43
+ ]);
44
+ const selectedLabel = selectedValue &&
45
+ ((_b = (_a = options.find((o) => o.value === selectedValue)) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : selectedValue);
46
+ return (React.createElement(Touchable, { disabled: disabled, onPress: toggleFocus, style: [styles.container, viewStyles] },
47
+ React.createElement(View, null,
48
+ React.createElement(NativePicker, { enabled: !disabled, selectedValue: selectedValue, onValueChange: onValueChange, style: {
49
+ flex: 1,
50
+ opacity: 0,
51
+ position: "absolute",
52
+ top: 0,
53
+ left: 0,
54
+ right: 0,
55
+ bottom: 0,
56
+ width: "100%",
57
+ } }, options.map((o) => (React.createElement(NativePicker.Item, { label: o.label, value: o.value, key: o.value })))),
58
+ React.createElement(View, { pointerEvents: "none" },
59
+ React.createElement(TextField, { ...props, value: selectedLabel, placeholder: placeholder,
60
+ // @ts-ignore
61
+ ref: textField, disabled: disabled,
62
+ // @ts-expect-error
63
+ style: stylesWithoutMargin })))));
64
+ };
65
+ const styles = StyleSheet.create({
66
+ container: {
67
+ alignSelf: "stretch",
68
+ },
69
+ });
70
+ export default withTheme(Picker);
71
+ //# sourceMappingURL=PickerComponent.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickerComponent.web.js","sourceRoot":"","sources":["PickerComponent.web.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import * as React from "react";
2
+ import { View, StyleSheet } from "react-native";
3
+ import { Picker as NativePicker } from "@react-native-picker/picker";
4
+ import omit from "lodash.omit";
5
+ import { withTheme } from "../../theming";
6
+ import { extractStyles } from "../../utilities";
7
+
8
+ import TextField from "../TextField";
9
+ import Touchable from "../Touchable";
10
+ import { PickerComponentProps } from "./PickerTypes";
11
+
12
+ const Picker: React.FC<PickerComponentProps> = ({
13
+ style,
14
+ options,
15
+ placeholder,
16
+ selectedValue,
17
+ disabled = false,
18
+ onValueChange: onValueChangeOverride = () => {},
19
+ ...props
20
+ }) => {
21
+ const {
22
+ viewStyles: {
23
+ borderRadius, // eslint-disable-line @typescript-eslint/no-unused-vars
24
+ borderWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
25
+ borderTopWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
26
+ borderRightWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
27
+ borderBottomWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
28
+ borderLeftWidth, // eslint-disable-line @typescript-eslint/no-unused-vars
29
+ borderColor, // eslint-disable-line @typescript-eslint/no-unused-vars
30
+ backgroundColor, // eslint-disable-line @typescript-eslint/no-unused-vars
31
+ padding, // eslint-disable-line @typescript-eslint/no-unused-vars
32
+ paddingTop, // eslint-disable-line @typescript-eslint/no-unused-vars
33
+ paddingRight, // eslint-disable-line @typescript-eslint/no-unused-vars
34
+ paddingBottom, // eslint-disable-line @typescript-eslint/no-unused-vars
35
+ paddingLeft, // eslint-disable-line @typescript-eslint/no-unused-vars
36
+ ...viewStyles
37
+ },
38
+ } = extractStyles(style);
39
+
40
+ const textField = React.useRef<typeof TextField | undefined>(undefined);
41
+
42
+ const onValueChange = (itemValue: string, itemIndex: number) => {
43
+ toggleFocus();
44
+ onValueChangeOverride(itemValue, itemIndex);
45
+ };
46
+
47
+ const toggleFocus = () => {
48
+ if (!disabled) {
49
+ // @ts-ignore
50
+ textField.current.toggleFocus(); // cannot determine if method exists due to component being wrapped in a withTheme()
51
+ }
52
+ };
53
+
54
+ const stylesWithoutMargin =
55
+ style &&
56
+ omit(StyleSheet.flatten(style), [
57
+ "margin",
58
+ "marginTop",
59
+ "marginRight",
60
+ "marginBottom",
61
+ "marginLeft",
62
+ ]);
63
+
64
+ const selectedLabel =
65
+ selectedValue &&
66
+ (options.find((o) => o.value === selectedValue)?.label ?? selectedValue);
67
+
68
+ return (
69
+ <Touchable
70
+ disabled={disabled}
71
+ onPress={toggleFocus}
72
+ style={[styles.container, viewStyles]}
73
+ >
74
+ <View>
75
+ <NativePicker
76
+ enabled={!disabled}
77
+ selectedValue={selectedValue}
78
+ onValueChange={onValueChange}
79
+ style={{
80
+ flex: 1,
81
+ opacity: 0,
82
+ position: "absolute",
83
+ top: 0,
84
+ left: 0,
85
+ right: 0,
86
+ bottom: 0,
87
+ width: "100%",
88
+ }}
89
+ >
90
+ {options.map((o) => (
91
+ <NativePicker.Item label={o.label} value={o.value} key={o.value} />
92
+ ))}
93
+ </NativePicker>
94
+ <View pointerEvents="none">
95
+ <TextField
96
+ {...props}
97
+ value={selectedLabel}
98
+ placeholder={placeholder}
99
+ // @ts-ignore
100
+ ref={textField} // cannot determine if ref is of correct type due to component being wrapped in a withTheme()
101
+ disabled={disabled}
102
+ // @ts-expect-error
103
+ style={stylesWithoutMargin}
104
+ />
105
+ </View>
106
+ </View>
107
+ </Touchable>
108
+ );
109
+ };
110
+
111
+ const styles = StyleSheet.create({
112
+ container: {
113
+ alignSelf: "stretch",
114
+ },
115
+ });
116
+
117
+ export default withTheme(Picker);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PickerTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickerTypes.js","sourceRoot":"","sources":["PickerTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { ViewStyle } from "react-native";
2
+ import { StyleProp } from "react-native";
3
+ import { Props as TextFieldProps } from "../TextField";
4
+
5
+ export interface PickerOption {
6
+ value: string;
7
+ label: string;
8
+ }
9
+
10
+ export interface PickerComponentProps extends TextFieldProps {
11
+ style?: StyleProp<ViewStyle> & { height?: number };
12
+ options: PickerOption[];
13
+ placeholder?: string;
14
+ selectedValue: string;
15
+ disabled?: boolean;
16
+ onValueChange?: (value: string, index: number) => void;
17
+ defaultValue?: string;
18
+ }
@@ -141,7 +141,7 @@ class TextField extends React.Component {
141
141
  return this._root && this._root.blur();
142
142
  }
143
143
  render() {
144
- const { Icon, type = "underline", disabled = false, label, error = false, leftIconName, leftIconMode, rightIconName, iconColor, iconSize, assistiveText, underlineColor: underlineColorProp, activeBorderColor: activeBorderColorProp, multiline = false, numberOfLines = 4, style, theme: { colors, typography, roundness, disabledOpacity }, render = (props) => React.createElement(TextInput, { ...props }), ...rest } = this.props;
144
+ const { Icon, type = "underline", disabled = false, label, error = false, leftIconName, leftIconMode, rightIconName, assistiveText, underlineColor: underlineColorProp, activeBorderColor: activeBorderColorProp, multiline = false, numberOfLines = 4, style, theme: { colors, typography, roundness, disabledOpacity }, render = (props) => React.createElement(TextInput, { ...props }), ...rest } = this.props;
145
145
  const MINIMIZED_LABEL_Y_OFFSET = -(typography.caption.lineHeight + 4);
146
146
  const OUTLINE_MINIMIZED_LABEL_Y_OFFSET = -(16 * 0.5 + 4);
147
147
  const MAXIMIZED_LABEL_FONT_SIZE = typography.subtitle1.fontSize;
@@ -159,7 +159,7 @@ class TextField extends React.Component {
159
159
  else {
160
160
  activeColor = error ? colors.error : activeBorderColorProp;
161
161
  placeholderColor = borderColor = colors.light;
162
- underlineColor = underlineColorProp || colors.light;
162
+ underlineColor = underlineColorProp;
163
163
  backgroundColor = colors.background;
164
164
  }
165
165
  if (rest.placeholderTextColor) {
@@ -218,10 +218,7 @@ class TextField extends React.Component {
218
218
  containerStyle.marginLeft = ICON_SIZE + 8;
219
219
  }
220
220
  let leftIconColor;
221
- if (iconColor) {
222
- leftIconColor = iconColor;
223
- }
224
- else if (error) {
221
+ if (error) {
225
222
  leftIconColor = colors.error;
226
223
  }
227
224
  else if (this.state.focused) {
@@ -231,7 +228,7 @@ class TextField extends React.Component {
231
228
  leftIconColor = colors.light;
232
229
  }
233
230
  const leftIconProps = {
234
- size: iconSize || 24,
231
+ size: 24,
235
232
  color: leftIconColor,
236
233
  name: leftIconName || "",
237
234
  };
@@ -296,7 +293,7 @@ class TextField extends React.Component {
296
293
  return (React.createElement(View, { style: [styles.container, styleProp] },
297
294
  leftIconName && leftIconMode === "outset" ? (React.createElement(Icon, { ...leftIconProps, style: leftIconStyle })) : null,
298
295
  React.createElement(View, { style: applyStyles([containerStyle], {
299
- height: styleProp.height,
296
+ height: style === null || style === void 0 ? void 0 : style.height,
300
297
  backgroundColor: bgColor,
301
298
  padding,
302
299
  paddingTop,
@@ -392,7 +389,7 @@ class TextField extends React.Component {
392
389
  ...this.state.nativeProps,
393
390
  value: this.state.value,
394
391
  })),
395
- rightIconName ? (React.createElement(Icon, { name: rightIconName, size: iconSize || ICON_SIZE, color: iconColor || colors.light, style: {
392
+ rightIconName ? (React.createElement(Icon, { name: rightIconName, size: ICON_SIZE, color: colors.light, style: {
396
393
  position: "absolute",
397
394
  right: 16,
398
395
  marginTop: type === "solid" ? MINIMIZED_LABEL_FONT_SIZE + 4 : 16,