@draftbit/core 44.1.13-c10e64.0 → 44.1.14

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 (228) hide show
  1. package/lib/commonjs/components/CircularProgress.js.map +1 -1
  2. package/lib/commonjs/components/DatePicker/DatePickerComponent.web.js.map +1 -1
  3. package/lib/commonjs/components/DeprecatedCardWrapper.js +2 -14
  4. package/lib/commonjs/components/DeprecatedCardWrapper.js.map +1 -1
  5. package/lib/commonjs/components/Justification.js +0 -3
  6. package/lib/commonjs/components/Picker/Picker.js +266 -27
  7. package/lib/commonjs/components/Picker/Picker.js.map +1 -1
  8. package/lib/commonjs/components/Picker/PickerComponent.android.js +34 -110
  9. package/lib/commonjs/components/Picker/PickerComponent.android.js.map +1 -1
  10. package/lib/commonjs/components/Picker/PickerComponent.ios.js +44 -113
  11. package/lib/commonjs/components/Picker/PickerComponent.ios.js.map +1 -1
  12. package/lib/commonjs/components/Picker/PickerComponent.web.js +34 -111
  13. package/lib/commonjs/components/Picker/PickerComponent.web.js.map +1 -1
  14. package/lib/commonjs/components/ResizeMode.js +0 -3
  15. package/lib/commonjs/mappings/Picker.js +7 -1
  16. package/lib/commonjs/mappings/Picker.js.map +1 -1
  17. package/lib/commonjs/mappings/RadioButtonGroup.js.map +1 -1
  18. package/lib/commonjs/mappings/RadioButtonRow.js.map +1 -1
  19. package/lib/commonjs/utilities.js +19 -0
  20. package/lib/commonjs/utilities.js.map +1 -1
  21. package/lib/module/components/Justification.js +1 -1
  22. package/lib/module/components/Picker/Picker.js +260 -28
  23. package/lib/module/components/Picker/Picker.js.map +1 -1
  24. package/lib/module/components/Picker/PickerComponent.android.js +32 -103
  25. package/lib/module/components/Picker/PickerComponent.android.js.map +1 -1
  26. package/lib/module/components/Picker/PickerComponent.ios.js +42 -108
  27. package/lib/module/components/Picker/PickerComponent.ios.js.map +1 -1
  28. package/lib/module/components/Picker/PickerComponent.web.js +32 -104
  29. package/lib/module/components/Picker/PickerComponent.web.js.map +1 -1
  30. package/lib/module/components/ResizeMode.js +1 -1
  31. package/lib/module/mappings/Picker.js +8 -2
  32. package/lib/module/mappings/Picker.js.map +1 -1
  33. package/lib/module/utilities.js +12 -1
  34. package/lib/module/utilities.js.map +1 -1
  35. package/lib/typescript/src/components/Picker/Picker.d.ts +28 -4
  36. package/lib/typescript/src/components/Picker/PickerComponent.android.d.ts +12 -5
  37. package/lib/typescript/src/components/Picker/PickerComponent.ios.d.ts +11 -5
  38. package/lib/typescript/src/components/Picker/PickerComponent.web.d.ts +12 -5
  39. package/lib/typescript/src/mappings/Picker.d.ts +21 -0
  40. package/lib/typescript/src/utilities.d.ts +7 -0
  41. package/package.json +2 -2
  42. package/src/components/Picker/Picker.tsx +434 -34
  43. package/src/components/Picker/PickerComponent.android.tsx +44 -101
  44. package/src/components/Picker/PickerComponent.ios.tsx +63 -116
  45. package/src/components/Picker/PickerComponent.web.tsx +44 -102
  46. package/src/mappings/Picker.ts +4 -0
  47. package/src/utilities.ts +65 -1
  48. package/lib/commonjs/components/Picker/PickerTypes.js +0 -6
  49. package/lib/commonjs/components/Picker/PickerTypes.js.map +0 -1
  50. package/lib/module/components/Picker/PickerTypes.js +0 -2
  51. package/lib/module/components/Picker/PickerTypes.js.map +0 -1
  52. package/lib/typescript/src/components/Picker/PickerTypes.d.ts +0 -18
  53. package/src/Provider.js +0 -9
  54. package/src/components/Accordion/AccordionGroup.js +0 -44
  55. package/src/components/Accordion/AccordionItem.js +0 -32
  56. package/src/components/Accordion/index.js +0 -2
  57. package/src/components/ActionSheet/ActionSheet.js +0 -45
  58. package/src/components/ActionSheet/ActionSheetCancel.js +0 -6
  59. package/src/components/ActionSheet/ActionSheetItem.js +0 -30
  60. package/src/components/ActionSheet/index.js +0 -3
  61. package/src/components/AnimatedCircularProgress.js +0 -43
  62. package/src/components/AspectRatio.js +0 -18
  63. package/src/components/AvatarEdit.js +0 -30
  64. package/src/components/Banner.js +0 -109
  65. package/src/components/Button.js +0 -112
  66. package/src/components/Card.js +0 -57
  67. package/src/components/CardBlock.js +0 -54
  68. package/src/components/CardContainer.js +0 -69
  69. package/src/components/CardContainerRating.js +0 -79
  70. package/src/components/CardContainerShortImage.js +0 -33
  71. package/src/components/CardInline.js +0 -36
  72. package/src/components/Carousel.js +0 -66
  73. package/src/components/Checkbox/Checkbox.js +0 -63
  74. package/src/components/Checkbox/CheckboxGroup.js +0 -21
  75. package/src/components/Checkbox/CheckboxGroupRow.js +0 -77
  76. package/src/components/Checkbox/CheckboxRow.js +0 -78
  77. package/src/components/Checkbox/context.js +0 -14
  78. package/src/components/Checkbox/index.js +0 -3
  79. package/src/components/CircleImage.js +0 -8
  80. package/src/components/CircularProgress.js +0 -78
  81. package/src/components/Config.js +0 -63
  82. package/src/components/Container.js +0 -43
  83. package/src/components/DatePicker/DatePicker.js +0 -368
  84. package/src/components/DatePicker/DatePickerComponent.js +0 -13
  85. package/src/components/DatePicker/DatePickerComponent.web.js +0 -30
  86. package/src/components/DatePicker/DatePickerComponentType.js +0 -1
  87. package/src/components/DeprecatedButton.js +0 -95
  88. package/src/components/DeprecatedCardWrapper.js +0 -18
  89. package/src/components/DeprecatedFAB.js +0 -115
  90. package/src/components/Divider.js +0 -13
  91. package/src/components/Elevation.js +0 -20
  92. package/src/components/FAB.js +0 -46
  93. package/src/components/FieldSearchBarFull.js +0 -53
  94. package/src/components/FormRow.js +0 -19
  95. package/src/components/Header.js +0 -44
  96. package/src/components/HeaderLarge.js +0 -7
  97. package/src/components/HeaderMedium.js +0 -7
  98. package/src/components/HeaderOverline.js +0 -7
  99. package/src/components/IconButton.js +0 -35
  100. package/src/components/Image.js +0 -47
  101. package/src/components/Justification.js +0 -1
  102. package/src/components/Layout.js +0 -50
  103. package/src/components/NumberInput.js +0 -49
  104. package/src/components/Picker/Picker.js +0 -56
  105. package/src/components/Picker/PickerComponent.android.js +0 -68
  106. package/src/components/Picker/PickerComponent.ios.js +0 -78
  107. package/src/components/Picker/PickerComponent.web.js +0 -69
  108. package/src/components/Picker/PickerTypes.js +0 -1
  109. package/src/components/Picker/PickerTypes.ts +0 -18
  110. package/src/components/Portal/Portal.js +0 -35
  111. package/src/components/Portal/PortalConsumer.js +0 -28
  112. package/src/components/Portal/PortalHost.js +0 -105
  113. package/src/components/Portal/PortalManager.js +0 -29
  114. package/src/components/ProgressBar.js +0 -118
  115. package/src/components/ProgressCircle.js +0 -13
  116. package/src/components/ProgressIndicator.js +0 -27
  117. package/src/components/RadioButton/RadioButton.js +0 -17
  118. package/src/components/RadioButton/RadioButtonFieldGroup.js +0 -17
  119. package/src/components/RadioButton/RadioButtonGroup.js +0 -43
  120. package/src/components/RadioButton/RadioButtonRow.js +0 -76
  121. package/src/components/RadioButton/context.js +0 -14
  122. package/src/components/RadioButton/index.js +0 -4
  123. package/src/components/ResizeMode.js +0 -1
  124. package/src/components/Row.js +0 -48
  125. package/src/components/RowBodyIcon.js +0 -8
  126. package/src/components/RowHeadlineImageCaption.js +0 -12
  127. package/src/components/RowHeadlineImageIcon.js +0 -14
  128. package/src/components/ScreenContainer.js +0 -34
  129. package/src/components/Slider.js +0 -63
  130. package/src/components/StarRating.js +0 -50
  131. package/src/components/StepIndicator.js +0 -346
  132. package/src/components/Stepper.js +0 -39
  133. package/src/components/Surface.js +0 -32
  134. package/src/components/Swiper/Swiper.js +0 -29
  135. package/src/components/Swiper/SwiperItem.js +0 -9
  136. package/src/components/Swiper/index.js +0 -2
  137. package/src/components/Switch.js +0 -56
  138. package/src/components/Text.js +0 -28
  139. package/src/components/TextField.js +0 -420
  140. package/src/components/ToggleButton.js +0 -39
  141. package/src/components/Touchable.js +0 -12
  142. package/src/components/Touchable.web.js +0 -2
  143. package/src/components/Typography.js +0 -36
  144. package/src/components/useAuthState.js +0 -31
  145. package/src/constants.js +0 -10
  146. package/src/hooks.js +0 -12
  147. package/src/index.js +0 -52
  148. package/src/interfaces/Icon.js +0 -8
  149. package/src/mappings/Accordion.js +0 -41
  150. package/src/mappings/AccordionItem.js +0 -16
  151. package/src/mappings/ActionSheet.js +0 -13
  152. package/src/mappings/ActionSheetCancel.js +0 -19
  153. package/src/mappings/ActionSheetItem.js +0 -23
  154. package/src/mappings/ActivityIndicator.js +0 -53
  155. package/src/mappings/AudioPlayer.js +0 -20
  156. package/src/mappings/AvatarEdit.js +0 -37
  157. package/src/mappings/Banner.js +0 -32
  158. package/src/mappings/BlurView.js +0 -41
  159. package/src/mappings/Button.js +0 -56
  160. package/src/mappings/Card.js +0 -52
  161. package/src/mappings/CardBlock.js +0 -122
  162. package/src/mappings/CardContainer.js +0 -102
  163. package/src/mappings/CardContainerRating.js +0 -124
  164. package/src/mappings/CardContainerShortImage.js +0 -118
  165. package/src/mappings/CardInline.js +0 -51
  166. package/src/mappings/Carousel.js +0 -18
  167. package/src/mappings/Checkbox.js +0 -45
  168. package/src/mappings/CheckboxGroup.js +0 -25
  169. package/src/mappings/CheckboxRow.js +0 -56
  170. package/src/mappings/CircleImage.js +0 -24
  171. package/src/mappings/Container.js +0 -29
  172. package/src/mappings/CustomCode.js +0 -8
  173. package/src/mappings/DatePicker.js +0 -146
  174. package/src/mappings/Divider.js +0 -26
  175. package/src/mappings/FAB.js +0 -36
  176. package/src/mappings/Fetch.js +0 -12
  177. package/src/mappings/FieldSearchBarFull.js +0 -49
  178. package/src/mappings/FlatList.js +0 -19
  179. package/src/mappings/HeaderLarge.js +0 -28
  180. package/src/mappings/HeaderMedium.js +0 -54
  181. package/src/mappings/HeaderOverline.js +0 -54
  182. package/src/mappings/Icon.js +0 -25
  183. package/src/mappings/IconButton.js +0 -30
  184. package/src/mappings/Image.js +0 -15
  185. package/src/mappings/ImageBackground.js +0 -28
  186. package/src/mappings/KeyboardAvoidingView.js +0 -40
  187. package/src/mappings/KeyboardAwareScrollView.js +0 -49
  188. package/src/mappings/Layout.js +0 -195
  189. package/src/mappings/LinearGradient.js +0 -77
  190. package/src/mappings/MapCallout.js +0 -21
  191. package/src/mappings/MapMarker.js +0 -47
  192. package/src/mappings/MapView.js +0 -138
  193. package/src/mappings/Modal.js +0 -41
  194. package/src/mappings/Picker.js +0 -137
  195. package/src/mappings/ProgressBar.js +0 -100
  196. package/src/mappings/ProgressCircle.js +0 -108
  197. package/src/mappings/ProgressIndicator.js +0 -180
  198. package/src/mappings/RadioButton.js +0 -50
  199. package/src/mappings/RadioButtonGroup.js +0 -16
  200. package/src/mappings/RadioButtonRow.js +0 -37
  201. package/src/mappings/RowBodyIcon.js +0 -75
  202. package/src/mappings/RowHeadlineImageCaption.js +0 -167
  203. package/src/mappings/RowHeadlineImageIcon.js +0 -99
  204. package/src/mappings/SafeAreaView.js +0 -33
  205. package/src/mappings/ScrollView.js +0 -30
  206. package/src/mappings/Slider.js +0 -59
  207. package/src/mappings/StarRating.js +0 -42
  208. package/src/mappings/Stepper.js +0 -28
  209. package/src/mappings/Surface.js +0 -13
  210. package/src/mappings/Swiper.js +0 -60
  211. package/src/mappings/SwiperItem.js +0 -8
  212. package/src/mappings/Switch.js +0 -75
  213. package/src/mappings/Text.js +0 -232
  214. package/src/mappings/TextArea.js +0 -52
  215. package/src/mappings/TextField.js +0 -158
  216. package/src/mappings/TextInput.js +0 -208
  217. package/src/mappings/ToggleButton.js +0 -45
  218. package/src/mappings/Touchable.js +0 -12
  219. package/src/mappings/Video.js +0 -74
  220. package/src/mappings/View.js +0 -206
  221. package/src/mappings/WebView.js +0 -18
  222. package/src/styles/DarkTheme.js +0 -26
  223. package/src/styles/DefaultTheme.js +0 -111
  224. package/src/styles/fonts.js +0 -62
  225. package/src/styles/overlay.js +0 -60
  226. package/src/styles/shadow.js +0 -51
  227. package/src/theming.js +0 -3
  228. package/src/utilities.js +0 -54
@@ -1,142 +1,89 @@
1
1
  import * as React from "react";
2
- import { View, StyleSheet } from "react-native";
2
+ import { View, StyleSheet, Dimensions } from "react-native";
3
3
  import { SafeAreaView } from "react-native-safe-area-context";
4
- import omit from "lodash.omit";
5
-
6
4
  import { Picker as NativePicker } from "@react-native-picker/picker";
7
5
 
8
- import { withTheme } from "../../theming";
9
-
6
+ import type { IconSlot } from "../../interfaces/Icon";
10
7
  import Portal from "../Portal/Portal";
11
8
  import Button from "../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);
9
+ import { PickerOption } from "./Picker";
50
10
 
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
- };
11
+ const { width: deviceWidth, height: deviceHeight } = Dimensions.get("screen");
56
12
 
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);
13
+ interface PickerComponentProps {
14
+ Icon: IconSlot["Icon"];
15
+ androidPickerRef: React.RefObject<any>;
16
+ togglePickerVisible: () => void;
17
+ pickerOptions: PickerOption[];
18
+ internalValue: string | undefined;
19
+ handleValueChange: (newValue: string, itemIndex: number) => void;
20
+ }
70
21
 
22
+ export const PickerComponent: React.FC<PickerComponentProps> = ({
23
+ Icon,
24
+ togglePickerVisible,
25
+ pickerOptions,
26
+ internalValue,
27
+ handleValueChange,
28
+ }) => {
71
29
  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>
30
+ <Portal>
31
+ <View style={styles.iosPicker}>
32
+ <SafeAreaView style={styles.iosSafeArea}>
33
+ <Button
34
+ Icon={Icon}
35
+ type="text"
36
+ onPress={togglePickerVisible}
37
+ style={styles.iosButton}
38
+ >
39
+ {"Close"}
40
+ </Button>
41
+
42
+ <NativePicker
43
+ style={styles.iosNativePicker}
44
+ selectedValue={internalValue}
45
+ onValueChange={handleValueChange}
46
+ >
47
+ {(pickerOptions as unknown as PickerOption[]).map((option) => (
48
+ <NativePicker.Item
49
+ label={option.label}
50
+ value={option.value}
51
+ key={option.value}
52
+ />
53
+ ))}
54
+ </NativePicker>
55
+ </SafeAreaView>
56
+ </View>
57
+ </Portal>
117
58
  );
118
59
  };
119
60
 
120
61
  const styles = StyleSheet.create({
121
- container: {
122
- alignSelf: "stretch",
123
- },
124
- picker: {
62
+ iosPicker: {
125
63
  position: "absolute",
126
64
  bottom: 0,
127
65
  left: 0,
128
66
  right: 0,
129
67
  flexDirection: "row",
130
68
  justifyContent: "center",
69
+ width: deviceWidth, // TODO
70
+ maxWidth: deviceWidth,
71
+ maxHeight: deviceHeight,
72
+ backgroundColor: "green", // TODO
73
+ // backgroundColor: "rgba(255, 255, 255, 1)",
131
74
  },
132
- pickerContainer: {
133
- backgroundColor: "white",
75
+ iosSafeArea: {
76
+ backgroundColor: "yellow",
77
+ // backgroundColor: "white",// TODO
134
78
  flexDirection: "column",
135
- width: "100%",
79
+ width: deviceWidth,
80
+ maxWidth: deviceWidth,
136
81
  },
137
- closeButton: {
82
+ iosButton: {
138
83
  alignSelf: "flex-end",
139
84
  },
85
+ iosNativePicker: {
86
+ //backgroundColor: "white",// TODO
87
+ backgroundColor: "red",
88
+ },
140
89
  });
141
-
142
- export default withTheme(Picker);
@@ -1,117 +1,59 @@
1
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);
2
+ import { StyleSheet, Dimensions } from "react-native";
39
3
 
40
- const textField = React.useRef<typeof TextField | undefined>(undefined);
4
+ import { Picker as NativePicker } from "@react-native-picker/picker";
41
5
 
42
- const onValueChange = (itemValue: string, itemIndex: number) => {
43
- toggleFocus();
44
- onValueChangeOverride(itemValue, itemIndex);
45
- };
6
+ import type { IconSlot } from "../../interfaces/Icon";
46
7
 
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
- };
8
+ import { PickerOption } from "./Picker";
53
9
 
54
- const stylesWithoutMargin =
55
- style &&
56
- omit(StyleSheet.flatten(style), [
57
- "margin",
58
- "marginTop",
59
- "marginRight",
60
- "marginBottom",
61
- "marginLeft",
62
- ]);
10
+ const { width: deviceWidth, height: deviceHeight } = Dimensions.get("screen");
63
11
 
64
- const selectedLabel =
65
- selectedValue &&
66
- (options.find((o) => o.value === selectedValue)?.label ?? selectedValue);
12
+ interface PickerComponentProps {
13
+ Icon: IconSlot["Icon"];
14
+ androidPickerRef: React.RefObject<any>;
15
+ togglePickerVisible: () => void;
16
+ pickerOptions: PickerOption[];
17
+ internalValue: string | undefined;
18
+ handleValueChange: (newValue: string, itemIndex: number) => void;
19
+ }
67
20
 
21
+ export const PickerComponent: React.FC<PickerComponentProps> = ({
22
+ androidPickerRef,
23
+ togglePickerVisible,
24
+ pickerOptions,
25
+ internalValue,
26
+ handleValueChange,
27
+ }) => {
68
28
  return (
69
- <Touchable
70
- disabled={disabled}
71
- onPress={toggleFocus}
72
- style={[styles.container, viewStyles]}
29
+ <NativePicker
30
+ selectedValue={internalValue}
31
+ onValueChange={handleValueChange}
32
+ style={styles.nonIosPicker}
33
+ ref={androidPickerRef}
34
+ onBlur={togglePickerVisible}
73
35
  >
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>
36
+ {(pickerOptions as unknown as PickerOption[]).map((option) => (
37
+ <NativePicker.Item
38
+ label={option.label}
39
+ value={option.value}
40
+ key={option.value}
41
+ />
42
+ ))}
43
+ </NativePicker>
108
44
  );
109
45
  };
110
46
 
111
47
  const styles = StyleSheet.create({
112
- container: {
113
- alignSelf: "stretch",
48
+ nonIosPicker: {
49
+ opacity: 0,
50
+ position: "absolute",
51
+ top: 0,
52
+ left: 0,
53
+ right: 0,
54
+ bottom: 0,
55
+ width: "100%",
56
+ maxWidth: deviceWidth,
57
+ maxHeight: deviceHeight,
114
58
  },
115
59
  });
116
-
117
- export default withTheme(Picker);
@@ -5,6 +5,8 @@ import {
5
5
  FORM_TYPES,
6
6
  PROP_TYPES,
7
7
  FIELD_NAME,
8
+ createIconSizeProp,
9
+ createColorProp,
8
10
  } from "@draftbit/types";
9
11
 
10
12
  const SEED_DATA_PROPS = {
@@ -143,6 +145,8 @@ export const SEED_DATA = [
143
145
  required: true,
144
146
  group: GROUPS.basic,
145
147
  },
148
+ iconSize: createIconSizeProp({ defaultValue: 24 }),
149
+ iconColor: createColorProp({ label: "Icon Color" }),
146
150
  },
147
151
  layout: {},
148
152
  },
package/src/utilities.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { StyleSheet, StyleProp, TextStyle } from "react-native";
2
- import { isString, isNumber } from "lodash";
2
+ import { isString, isNumber, pick, pickBy, identity } from "lodash";
3
3
 
4
4
  export function extractStyles(style: StyleProp<any>) {
5
5
  const {
@@ -34,6 +34,70 @@ export function extractStyles(style: StyleProp<any>) {
34
34
  return { viewStyles, textStyles };
35
35
  }
36
36
 
37
+ export const borderStyleNames = [
38
+ "borderRadius",
39
+ "borderBottomColor",
40
+ "borderBottomEndRadius",
41
+ "borderBottomLeftRadius",
42
+ "borderBottomRightRadius",
43
+ "borderBottomStartRadius",
44
+ "borderBottomWidth",
45
+ "borderColor",
46
+ "borderEndColor",
47
+ "borderLeftColor",
48
+ "borderLeftWidth",
49
+ "borderRadius",
50
+ "borderRightColor",
51
+ "borderRightWidth",
52
+ "borderStartColor",
53
+ "borderStyle",
54
+ "borderTopColor",
55
+ "borderTopEndRadius",
56
+ "borderTopLeftRadius",
57
+ "borderTopRightRadius",
58
+ "borderTopStartRadius",
59
+ "borderTopWidth",
60
+ "borderWidth",
61
+ ];
62
+
63
+ export const marginStyleNames = [
64
+ "margin",
65
+ "marginBottom",
66
+ "marginEnd",
67
+ "marginHorizontal",
68
+ "marginLeft",
69
+ "marginRight",
70
+ "marginStart",
71
+ "marginTop",
72
+ "marginVertical",
73
+ ];
74
+
75
+ export function extractBorderAndMarginStyles(
76
+ style: StyleProp<any>,
77
+ additionalBorderStyles?: string[],
78
+ additionalMarginStyles?: string[]
79
+ ) {
80
+ const flatStyle = StyleSheet.flatten(style || {});
81
+
82
+ const borderStyles = pickBy(
83
+ pick(flatStyle, [
84
+ ...borderStyleNames,
85
+ ...(additionalBorderStyles ? additionalBorderStyles : []),
86
+ ]),
87
+ identity
88
+ );
89
+
90
+ const marginStyles = pickBy(
91
+ pick(flatStyle, [
92
+ ...marginStyleNames,
93
+ ...(additionalMarginStyles ? additionalMarginStyles : []),
94
+ ]),
95
+ identity
96
+ );
97
+
98
+ return { borderStyles, marginStyles };
99
+ }
100
+
37
101
  /**
38
102
  * Merges a style object on top of another style object. In React Native,
39
103
  * keys with undefined values in a style object will still override styles
@@ -1,6 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- //# sourceMappingURL=PickerTypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=PickerTypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -1,18 +0,0 @@
1
- import { ViewStyle } from "react-native";
2
- import { StyleProp } from "react-native";
3
- import { Props as TextFieldProps } from "../TextField";
4
- export interface PickerOption {
5
- value: string;
6
- label: string;
7
- }
8
- export interface PickerComponentProps extends TextFieldProps {
9
- style?: StyleProp<ViewStyle> & {
10
- height?: number;
11
- };
12
- options: PickerOption[];
13
- placeholder?: string;
14
- selectedValue: string;
15
- disabled?: boolean;
16
- onValueChange?: (value: string, index: number) => void;
17
- defaultValue?: string;
18
- }
package/src/Provider.js DELETED
@@ -1,9 +0,0 @@
1
- import * as React from "react";
2
- import { ThemeProvider } from "./theming";
3
- import PortalHost from "./components/Portal/PortalHost";
4
- export default class Provider extends React.Component {
5
- render() {
6
- return (React.createElement(PortalHost, null,
7
- React.createElement(ThemeProvider, { theme: this.props.theme }, this.props.children)));
8
- }
9
- }
@@ -1,44 +0,0 @@
1
- import * as React from "react";
2
- import { View, StyleSheet, Pressable, } from "react-native";
3
- import Text from "../Text";
4
- import { withTheme } from "../../theming";
5
- import { extractStyles } from "../../utilities";
6
- const AccordionGroup = ({ label, expanded: expandedProp = false, openColor, closedColor, caretColor: caretColorProp, caretSize = 24, icon, iconSize = 24, style, children, theme, Icon, }) => {
7
- const [expanded, setExpanded] = React.useState(expandedProp);
8
- const { textStyles, viewStyles } = extractStyles(style);
9
- const expandedColor = openColor || theme.colors.primary;
10
- const collapsedColor = closedColor || theme.colors.primary;
11
- const labelColor = expanded ? expandedColor : collapsedColor;
12
- const caretColor = caretColorProp || labelColor;
13
- const handlePressAction = () => {
14
- setExpanded(!expanded);
15
- };
16
- return (React.createElement(React.Fragment, null,
17
- React.createElement(Pressable, { style: [styles.row, viewStyles], onPress: handlePressAction, accessibilityRole: "button" },
18
- icon ? (React.createElement(Icon, { name: icon, size: iconSize, color: labelColor, style: styles.icon })) : null,
19
- React.createElement(View, { style: styles.content },
20
- React.createElement(Text, { selectable: false, style: [
21
- textStyles,
22
- {
23
- color: labelColor,
24
- },
25
- ] }, label)),
26
- React.createElement(Icon, { name: expanded
27
- ? "MaterialIcons/keyboard-arrow-up"
28
- : "MaterialIcons/keyboard-arrow-down", color: caretColor, size: caretSize })),
29
- expanded ? children : null));
30
- };
31
- const styles = StyleSheet.create({
32
- row: {
33
- flexDirection: "row",
34
- alignItems: "center",
35
- },
36
- content: {
37
- flex: 1,
38
- justifyContent: "center",
39
- },
40
- icon: {
41
- marginRight: 8,
42
- },
43
- });
44
- export default withTheme(AccordionGroup);
@@ -1,32 +0,0 @@
1
- import * as React from "react";
2
- import { Pressable, StyleSheet, View, } from "react-native";
3
- import Text from "../Text";
4
- import { extractStyles } from "../../utilities";
5
- import { withTheme } from "../../theming";
6
- const AccordionItem = ({ Icon, icon, label, style, iconColor, theme, ...rest }) => {
7
- const { textStyles, viewStyles } = extractStyles(style);
8
- return (React.createElement(Pressable, { style: [styles.container, viewStyles], ...rest },
9
- React.createElement(View, { style: styles.row },
10
- icon ? (React.createElement(Icon, { name: icon, size: 24, color: iconColor || theme.colors.primary })) : null,
11
- React.createElement(View, { style: [styles.item, styles.content] },
12
- React.createElement(Text, { selectable: false, style: textStyles }, label)))));
13
- };
14
- const styles = StyleSheet.create({
15
- container: {
16
- padding: 8,
17
- },
18
- row: {
19
- flexDirection: "row",
20
- alignItems: "center",
21
- paddingLeft: 8,
22
- },
23
- item: {
24
- marginVertical: 6,
25
- paddingLeft: 8,
26
- },
27
- content: {
28
- flex: 1,
29
- justifyContent: "center",
30
- },
31
- });
32
- export default withTheme(AccordionItem);
@@ -1,2 +0,0 @@
1
- export { default as AccordionGroup } from "./AccordionGroup";
2
- export { default as AccordionItem } from "./AccordionItem";
@@ -1,45 +0,0 @@
1
- import React from "react";
2
- import { View, StyleSheet } from "react-native";
3
- import Portal from "../Portal/Portal";
4
- import Touchable from "../Touchable";
5
- import ActionSheetCancel from "./ActionSheetCancel";
6
- const ActionSheet = ({ visible = false, onClose, children }) => {
7
- return visible ? (React.createElement(Portal, null,
8
- React.createElement(Touchable, { style: styles.wrapper, onPress: onClose },
9
- React.createElement(View, { style: styles.overlay }),
10
- React.createElement(View, { style: styles.groupWrapper },
11
- React.createElement(View, { style: styles.group }, React.Children.toArray(children).filter((child) => child?.type !== ActionSheetCancel)),
12
- React.createElement(View, { style: styles.group }, React.Children.toArray(children).filter((child) => child.type === ActionSheetCancel)))))) : (React.createElement(React.Fragment, null));
13
- };
14
- const styles = StyleSheet.create({
15
- wrapper: {
16
- flex: 1,
17
- display: "flex",
18
- flexDirection: "column",
19
- },
20
- overlay: {
21
- position: "absolute",
22
- top: 0,
23
- left: 0,
24
- right: 0,
25
- bottom: 0,
26
- backgroundColor: "#000000",
27
- opacity: 0.3,
28
- },
29
- groupWrapper: {
30
- flex: 1,
31
- flexDirection: "column",
32
- justifyContent: "flex-end",
33
- display: "flex",
34
- marginBottom: 25,
35
- },
36
- group: {
37
- display: "flex",
38
- flexDirection: "column",
39
- borderRadius: 10,
40
- marginHorizontal: 7,
41
- marginVertical: 2.5,
42
- overflow: "hidden",
43
- },
44
- });
45
- export default ActionSheet;
@@ -1,6 +0,0 @@
1
- import React from "react";
2
- import ActionSheetItem from "./ActionSheetItem";
3
- const ActionSheetCancel = ({ label = "Cancel", color, style, onPress, }) => {
4
- return (React.createElement(ActionSheetItem, { label: label, color: color || "#FF453A", style: [style], onPress: onPress }));
5
- };
6
- export default ActionSheetCancel;