react-native-ui-lib 8.3.4-snapshot.7813 → 8.3.4-snapshot.7824

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 (132) hide show
  1. package/ReactNativeUiLib.podspec +22 -0
  2. package/lib/components/HighlighterOverlayView/index.d.ts +2 -2
  3. package/lib/components/HighlighterOverlayView/index.web.d.ts +2 -2
  4. package/lib/components/Keyboard/KeyboardAccessoryView/CustomKeyboardView/CustomKeyboardViewBase.d.ts +1 -1
  5. package/lib/components/Keyboard/KeyboardAccessoryView/KeyboardRegistry/index.js +1 -5
  6. package/lib/components/Keyboard/KeyboardAccessoryView/index.d.ts +2 -2
  7. package/lib/components/Keyboard/KeyboardAccessoryView/index.js +1 -3
  8. package/lib/components/Keyboard/KeyboardTrackingView/KeyboardTrackingView.ios.js +1 -3
  9. package/lib/components/Keyboard/KeyboardTrackingView/index.d.ts +2 -6
  10. package/lib/components/Keyboard/KeyboardTrackingView/index.js +4 -5
  11. package/lib/components/Keyboard/index.d.ts +1 -2
  12. package/lib/package.json +21 -20
  13. package/lib/react-native.config.js +1 -1
  14. package/package.json +163 -161
  15. package/src/commons/asBaseComponent.js +1 -2
  16. package/src/commons/baseComponent.js +8 -0
  17. package/src/commons/forwardRef.js +4 -1
  18. package/src/commons/modifiers.d.ts +6 -0
  19. package/src/commons/modifiers.js +18 -0
  20. package/src/commons/withScrollEnabler.js +4 -0
  21. package/src/commons/withScrollReached.js +4 -0
  22. package/src/components/KeyboardAwareScrollView/KeyboardAwareBase.js +7 -0
  23. package/src/components/KeyboardAwareScrollView/KeyboardAwareFlatList.js +6 -0
  24. package/src/components/KeyboardAwareScrollView/KeyboardAwareScrollView.js +6 -0
  25. package/src/components/WheelPicker/WheelPicker.driver.d.ts +2 -2
  26. package/src/components/WheelPicker/index.d.ts +2 -2
  27. package/src/components/WheelPicker/index.js +1 -1
  28. package/src/components/WheelPicker/usePresenter.d.ts +1 -1
  29. package/src/components/actionSheet/index.d.ts +1 -1
  30. package/src/components/animatedImage/index.d.ts +1 -1
  31. package/src/components/animatedScanner/index.js +37 -0
  32. package/src/components/avatar/index.d.ts +1 -1
  33. package/src/components/badge/index.d.ts +4 -4
  34. package/src/components/baseInput/index.d.ts +1 -0
  35. package/src/components/baseInput/index.js +49 -1
  36. package/src/components/button/index.d.ts +4 -4
  37. package/src/components/button/types.d.ts +2 -2
  38. package/src/components/carousel/index.d.ts +8 -8
  39. package/src/components/carousel/types.d.ts +1 -4
  40. package/src/components/carousel/types.js +2 -0
  41. package/src/components/checkbox/index.d.ts +1 -1
  42. package/src/components/chip/index.d.ts +1 -1
  43. package/src/components/colorPalette/index.d.ts +1 -1
  44. package/src/components/dateTimePicker/index.d.ts +2 -2
  45. package/src/components/dateTimePicker/index.js +2 -2
  46. package/src/components/dialog/types.d.ts +4 -4
  47. package/src/components/dialog/useDialogContent.d.ts +1 -1
  48. package/src/components/drawer/index.d.ts +1 -1
  49. package/src/components/expandableSection/index.d.ts +2 -2
  50. package/src/components/fadedScrollView/index.js +1 -1
  51. package/src/components/featureHighlight/index.js +7 -5
  52. package/src/components/floatingButton/floatingButton.api.json +10 -15
  53. package/src/components/floatingButton/index.d.ts +13 -39
  54. package/src/components/floatingButton/index.js +57 -167
  55. package/src/components/gridListItem/index.d.ts +7 -7
  56. package/src/components/gridView/index.d.ts +1 -1
  57. package/src/components/hint/HintBubble.d.ts +1 -1
  58. package/src/components/hint/HintOld.d.ts +10 -10
  59. package/src/components/hint/hooks/useHintLayout.d.ts +1 -1
  60. package/src/components/hint/index.d.ts +2 -2
  61. package/src/components/hint/types.d.ts +2 -2
  62. package/src/components/icon/index.js +3 -0
  63. package/src/components/image/index.d.ts +1 -1
  64. package/src/components/image/index.js +17 -20
  65. package/src/components/loaderScreen/index.d.ts +1 -1
  66. package/src/components/loaderScreen/types.d.ts +1 -1
  67. package/src/components/maskedInput/index.d.ts +4 -21
  68. package/src/components/maskedInput/index.js +16 -78
  69. package/src/components/maskedInput/maskedInput.api.json +1 -0
  70. package/src/components/maskedInput/new.d.ts +22 -0
  71. package/src/components/maskedInput/new.js +85 -0
  72. package/src/components/maskedInput/old.js +95 -0
  73. package/src/components/modal/index.d.ts +3 -3
  74. package/src/components/numberInput/index.js +2 -2
  75. package/src/components/overlay/index.d.ts +1 -1
  76. package/src/components/picker/PickerDialog.android.js +15 -0
  77. package/src/components/picker/PickerDialog.js +7 -0
  78. package/src/components/picker/helpers/useImperativePickerHandle.d.ts +1 -1
  79. package/src/components/picker/helpers/useImperativePickerHandle.js +1 -1
  80. package/src/components/picker/types.d.ts +9 -9
  81. package/src/components/progressBar/index.d.ts +2 -2
  82. package/src/components/screenFooter/index.js +10 -7
  83. package/src/components/screenFooter/screenFooter.api.json +9 -21
  84. package/src/components/screenFooter/types.d.ts +6 -1
  85. package/src/components/scrollBar/index.d.ts +4 -11
  86. package/src/components/searchInput/index.js +1 -1
  87. package/src/components/searchInput/types.d.ts +2 -2
  88. package/src/components/sectionsWheelPicker/SectionsWheelPicker.driver.d.ts +2 -2
  89. package/src/components/skeletonView/index.d.ts +4 -4
  90. package/src/components/slider/Thumb.d.ts +1 -1
  91. package/src/components/slider/types.d.ts +1 -1
  92. package/src/components/stackAggregator/index.d.ts +1 -1
  93. package/src/components/tabController/TabBarItem.d.ts +2 -2
  94. package/src/components/tabController/TabBarItem.js +1 -1
  95. package/src/components/tabController/TabPage.d.ts +2 -2
  96. package/src/components/tabController/useScrollToItem.d.ts +1 -1
  97. package/src/components/text/Text.driver.d.ts +1 -1
  98. package/src/components/textArea/index.js +6 -0
  99. package/src/components/textField/TextField.driver.new.js +12 -7
  100. package/src/components/textField/index.js +31 -9
  101. package/src/components/textField/types.d.ts +4 -4
  102. package/src/components/textField/useImperativeInputHandle.d.ts +1 -1
  103. package/src/components/textField/useImperativeInputHandle.js +1 -1
  104. package/src/components/textField/usePreset.d.ts +36 -36
  105. package/src/components/textFieldOld/index.d.ts +71 -0
  106. package/src/components/textFieldOld/index.js +807 -0
  107. package/src/components/timeline/index.js +1 -1
  108. package/src/components/toast/index.js +69 -0
  109. package/src/components/wizard/index.d.ts +1 -1
  110. package/src/components/wizard/types.d.ts +1 -1
  111. package/src/components/wizard/wizard.api.json +1 -1
  112. package/src/helpers/DocsGenerator.js +61 -0
  113. package/src/hooks/useCombinedRefs/index.js +2 -1
  114. package/src/hooks/useDebounce/index.js +1 -1
  115. package/src/hooks/useHiddenLocation/index.js +2 -2
  116. package/src/hooks/useHiddenLocation/index.web.js +2 -2
  117. package/src/hooks/useMeasure/index.d.ts +1 -1
  118. package/src/hooks/useMeasure/index.js +1 -1
  119. package/src/hooks/useScrollTo/index.d.ts +2 -2
  120. package/src/incubator/calendar/index.js +1 -1
  121. package/src/incubator/calendar/types.d.ts +2 -2
  122. package/src/incubator/expandableOverlay/index.d.ts +2 -2
  123. package/src/incubator/slider/Track.d.ts +1 -1
  124. package/src/incubator/slider/index.d.ts +1 -1
  125. package/src/incubator/toast/helpers/useToastTimer.js +1 -1
  126. package/src/incubator/toast/index.js +1 -1
  127. package/src/incubator/toast/types.d.ts +2 -2
  128. package/src/testkit/Component.driver.d.ts +1 -1
  129. package/src/testkit/drivers/TestingLibraryDriver.d.ts +1 -1
  130. package/src/typings/module.d.ts +3 -12
  131. package/textFieldOld.d.ts +2 -0
  132. package/textFieldOld.js +1 -0
@@ -158,27 +158,24 @@ class Image extends PureComponent {
158
158
  const {
159
159
  margins
160
160
  } = modifiers;
161
- return <ImageView
162
- // @ts-expect-error TODO: this error emanates from the fact that
163
- // RNImage does not support `resizeMode` inside styles.containImage
164
- // I think this is too complex for TS to handle as using inline style
165
- // solves it. It is probably possible to refactor and solve it, but
166
- // I feel it is not worth the risk ATM.
167
- style={[tintColor && {
168
- tintColor
169
- }, shouldFlipRTL && styles.rtlFlipped, width ? {
170
- width
171
- } : undefined, height ? {
172
- height
173
- } : undefined, borderRadius ? {
174
- borderRadius
175
- } : undefined, cover && styles.coverImage, this.isGif() && styles.gifImage, aspectRatio ? {
176
- aspectRatio
177
- } : undefined, !useImageInsideContainer && margins, useImageInsideContainer && styles.containImage, style, useImageInsideContainer && styles.shrink]} accessible={false} accessibilityRole={'image'} fsTagName={recorderTag} {...others}
178
- // NOTE: imageStyle prop is only relevant for when rendering ImageBackground component
179
- imageStyle={this.getImageStyle()} onError={this.onError} source={source}>
161
+ return (
162
+ // @ts-ignore
163
+ <ImageView style={[tintColor && {
164
+ tintColor
165
+ }, shouldFlipRTL && styles.rtlFlipped, width && {
166
+ width
167
+ }, height && {
168
+ height
169
+ }, borderRadius && {
170
+ borderRadius
171
+ }, cover && styles.coverImage, this.isGif() && styles.gifImage, aspectRatio && {
172
+ aspectRatio
173
+ }, !useImageInsideContainer && margins, useImageInsideContainer && styles.containImage, style, useImageInsideContainer && styles.shrink]} accessible={false} accessibilityRole={'image'} fsTagName={recorderTag} {...others}
174
+ // NOTE: imageStyle prop is only relevant for when rendering ImageBackground component
175
+ imageStyle={this.getImageStyle()} onError={this.onError} source={source}>
180
176
  {(overlayType || customOverlayContent) && <Overlay type={overlayType} intensity={overlayIntensity} color={overlayColor} customContent={customOverlayContent} borderRadius={borderRadius} />}
181
- </ImageView>;
177
+ </ImageView>
178
+ );
182
179
  };
183
180
  renderRegularImage() {
184
181
  const {
@@ -3,7 +3,7 @@ import { LoaderScreenProps } from './types';
3
3
  export { LoaderScreenProps };
4
4
  declare const _default: React.ForwardRefExoticComponent<import("react-native").ActivityIndicatorProps & {
5
5
  loaderColor?: string | undefined;
6
- customLoader?: string | number | React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
6
+ customLoader?: React.ReactChild | undefined;
7
7
  backgroundColor?: string | undefined;
8
8
  message?: string | undefined;
9
9
  messageStyle?: import("react-native").TextStyle | undefined;
@@ -8,7 +8,7 @@ export type LoaderScreenProps = ActivityIndicatorProps & {
8
8
  /**
9
9
  * Custom loader
10
10
  */
11
- customLoader?: React.ReactElement<any> | number | string;
11
+ customLoader?: React.ReactChild;
12
12
  /**
13
13
  * Color of the loader background (only when passing 'overlay')
14
14
  */
@@ -1,22 +1,5 @@
1
- import React, { type JSX } from 'react';
2
- import { TextInputProps, StyleProp, ViewStyle } from 'react-native';
3
- export interface MaskedInputProps extends Omit<TextInputProps, 'value'> {
4
- /**
5
- * Initial value to pass to masked input
6
- */
7
- initialValue?: string;
8
- /**
9
- * callback for rendering the custom input out of the value returns from the actual input
10
- */
11
- renderMaskedText?: (value?: string) => JSX.Element | undefined;
12
- /**
13
- * Custom formatter for the input value
14
- */
15
- formatter?: (value?: string) => string | undefined;
16
- /**
17
- * container style for the masked input container
18
- */
19
- containerStyle?: StyleProp<ViewStyle>;
20
- }
21
- declare const _default: React.ForwardRefExoticComponent<MaskedInputProps & React.RefAttributes<any>>;
1
+ import React from 'react';
2
+ import { MaskedInputProps } from './new';
3
+ export { MaskedInputProps };
4
+ declare const _default: React.ForwardRefExoticComponent<Omit<any, "ref"> & React.RefAttributes<unknown>>;
22
5
  export default _default;
@@ -1,86 +1,24 @@
1
- import _isFunction from "lodash/isFunction";
2
- import _identity from "lodash/identity";
3
- import React, { useCallback, useEffect, useRef, useState, useImperativeHandle, forwardRef } from 'react';
4
- import { StyleSheet, Keyboard, TextInput } from 'react-native';
1
+ import React, { forwardRef, useEffect } from 'react';
5
2
  import { useThemeProps } from "../../hooks";
6
- import View from "../view";
7
- import Text from "../text";
8
- import TouchableOpacity from "../touchableOpacity";
9
- /**
10
- * @description: Mask Input to create custom looking inputs with custom formats
11
- * @gif: https://camo.githubusercontent.com/61eedb65e968845d5eac713dcd21a69691571fb1/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f4b5a5a7446666f486f454b334b2f67697068792e676966
12
- * @example: https://github.com/wix/react-native-ui-lib/blob/master/demo/src/screens/componentScreens/MaskedInputScreen.tsx
13
- */
14
- function MaskedInput(props, ref) {
3
+ // @ts-expect-error
4
+ import MaskedInputOld from "./old";
5
+ import MaskedInputNew, { MaskedInputProps } from "./new";
6
+ import { LogService } from "../../services";
7
+ function MaskedInputMigrator(props, refToForward) {
15
8
  const {
16
- initialValue,
17
- formatter = _identity,
18
- containerStyle,
19
- renderMaskedText,
20
- onChangeText,
9
+ migrate,
21
10
  ...others
22
11
  } = useThemeProps(props, 'MaskedInput');
23
- const [value, setValue] = useState(initialValue);
24
- const inputRef = useRef(undefined);
25
- const keyboardDidHideListener = useRef(undefined);
26
- useImperativeHandle(ref, () => {
27
- return {
28
- isFocused: () => inputRef.current?.isFocused(),
29
- focus,
30
- blur: () => inputRef.current?.blur(),
31
- clear: () => {
32
- inputRef.current?.clear();
33
- setValue('');
34
- // NOTE: This fixes an RN issue - when triggering imperative clear method, it doesn't call onChangeText
35
- onChangeText?.('');
36
- }
37
- };
38
- });
39
12
  useEffect(() => {
40
- if (initialValue !== value) {
41
- setValue(initialValue);
13
+ if (!migrate) {
14
+ LogService.warn(`UILib MaskedInput implementation has been updated and now requires manual migration. To proceed, pass the "migrate" prop and check if the functionality works as expected.`);
42
15
  }
43
- }, [initialValue]);
44
- useEffect(() => {
45
- keyboardDidHideListener.current = Keyboard.addListener('keyboardDidHide', () => {
46
- if (inputRef.current?.isFocused()) {
47
- inputRef.current?.blur();
48
- }
49
- });
50
- return () => keyboardDidHideListener.current.remove();
51
- }, []);
52
- const _onChangeText = useCallback(value => {
53
- const formattedValue = formatter(value) ?? '';
54
- setValue(formattedValue);
55
- onChangeText?.(formattedValue);
56
- }, [onChangeText, formatter]);
57
- const focus = useCallback(() => {
58
- inputRef.current?.focus();
59
16
  }, []);
60
- const _renderMaskedText = () => {
61
- if (_isFunction(renderMaskedText)) {
62
- return renderMaskedText(value);
63
- }
64
- return <Text>{value}</Text>;
65
- };
66
- return <TouchableOpacity style={containerStyle} activeOpacity={1} onPress={focus}>
67
- <TextInput {...others} value={value}
68
- // @ts-expect-error
69
- ref={inputRef} style={styles.hiddenInput} enableErrors={false} hideUnderline placeholder="" caretHidden multiline={false} onChangeText={_onChangeText} />
70
- <View style={styles.maskedInputWrapper}>{_renderMaskedText()}</View>
71
- </TouchableOpacity>;
72
- }
73
- const styles = StyleSheet.create({
74
- hiddenInput: {
75
- ...StyleSheet.absoluteFillObject,
76
- zIndex: 1,
77
- color: 'transparent',
78
- backgroundColor: 'transparent',
79
- height: undefined
80
- },
81
- maskedInputWrapper: {
82
- zIndex: 0
17
+ if (migrate) {
18
+ return <MaskedInputNew {...others} ref={refToForward} />;
19
+ } else {
20
+ return <MaskedInputOld {...others} ref={refToForward} />;
83
21
  }
84
- });
85
- MaskedInput.displayName = 'MaskedInput';
86
- export default forwardRef(MaskedInput);
22
+ }
23
+ export { MaskedInputProps };
24
+ export default forwardRef(MaskedInputMigrator);
@@ -44,6 +44,7 @@
44
44
  " return (",
45
45
  " <div>",
46
46
  " <MaskedInput",
47
+ " migrate",
47
48
  " renderMaskedText={renderTimeText}",
48
49
  " formatter={formatter}",
49
50
  " keyboardType={'numeric'}",
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { TextInputProps, StyleProp, ViewStyle } from 'react-native';
3
+ export interface MaskedInputProps extends Omit<TextInputProps, 'value'> {
4
+ /**
5
+ * Initial value to pass to masked input
6
+ */
7
+ initialValue?: string;
8
+ /**
9
+ * callback for rendering the custom input out of the value returns from the actual input
10
+ */
11
+ renderMaskedText?: (value?: string) => JSX.Element | undefined;
12
+ /**
13
+ * Custom formatter for the input value
14
+ */
15
+ formatter?: (value?: string) => string | undefined;
16
+ /**
17
+ * container style for the masked input container
18
+ */
19
+ containerStyle?: StyleProp<ViewStyle>;
20
+ }
21
+ declare const _default: React.ForwardRefExoticComponent<MaskedInputProps & React.RefAttributes<any>>;
22
+ export default _default;
@@ -0,0 +1,85 @@
1
+ import _isFunction from "lodash/isFunction";
2
+ import _identity from "lodash/identity";
3
+ import React, { useCallback, useEffect, useRef, useState, useImperativeHandle, forwardRef } from 'react';
4
+ import { StyleSheet, Keyboard, TextInput } from 'react-native';
5
+ import View from "../view";
6
+ import Text from "../text";
7
+ import TouchableOpacity from "../touchableOpacity";
8
+ /**
9
+ * @description: Mask Input to create custom looking inputs with custom formats
10
+ * @gif: https://camo.githubusercontent.com/61eedb65e968845d5eac713dcd21a69691571fb1/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f4b5a5a7446666f486f454b334b2f67697068792e676966
11
+ * @example: https://github.com/wix/react-native-ui-lib/blob/master/demo/src/screens/componentScreens/MaskedInputScreen.tsx
12
+ */
13
+ function MaskedInput(props, ref) {
14
+ const {
15
+ initialValue,
16
+ formatter = _identity,
17
+ containerStyle,
18
+ renderMaskedText,
19
+ onChangeText,
20
+ ...others
21
+ } = props;
22
+ const [value, setValue] = useState(initialValue);
23
+ const inputRef = useRef();
24
+ const keyboardDidHideListener = useRef();
25
+ useImperativeHandle(ref, () => {
26
+ return {
27
+ isFocused: () => inputRef.current?.isFocused(),
28
+ focus,
29
+ blur: () => inputRef.current?.blur(),
30
+ clear: () => {
31
+ inputRef.current?.clear();
32
+ setValue('');
33
+ // NOTE: This fixes an RN issue - when triggering imperative clear method, it doesn't call onChangeText
34
+ onChangeText?.('');
35
+ }
36
+ };
37
+ });
38
+ useEffect(() => {
39
+ if (initialValue !== value) {
40
+ setValue(initialValue);
41
+ }
42
+ }, [initialValue]);
43
+ useEffect(() => {
44
+ keyboardDidHideListener.current = Keyboard.addListener('keyboardDidHide', () => {
45
+ if (inputRef.current?.isFocused()) {
46
+ inputRef.current?.blur();
47
+ }
48
+ });
49
+ return () => keyboardDidHideListener.current.remove();
50
+ }, []);
51
+ const _onChangeText = useCallback(value => {
52
+ const formattedValue = formatter(value) ?? '';
53
+ setValue(formattedValue);
54
+ onChangeText?.(formattedValue);
55
+ }, [onChangeText, formatter]);
56
+ const focus = useCallback(() => {
57
+ inputRef.current?.focus();
58
+ }, []);
59
+ const _renderMaskedText = () => {
60
+ if (_isFunction(renderMaskedText)) {
61
+ return renderMaskedText(value);
62
+ }
63
+ return <Text>{value}</Text>;
64
+ };
65
+ return <TouchableOpacity style={containerStyle} activeOpacity={1} onPress={focus}>
66
+ <TextInput {...others} value={value}
67
+ // @ts-expect-error
68
+ ref={inputRef} style={styles.hiddenInput} enableErrors={false} hideUnderline placeholder="" caretHidden multiline={false} onChangeText={_onChangeText} />
69
+ <View style={styles.maskedInputWrapper}>{_renderMaskedText()}</View>
70
+ </TouchableOpacity>;
71
+ }
72
+ const styles = StyleSheet.create({
73
+ hiddenInput: {
74
+ ...StyleSheet.absoluteFillObject,
75
+ zIndex: 1,
76
+ color: 'transparent',
77
+ backgroundColor: 'transparent',
78
+ height: undefined
79
+ },
80
+ maskedInputWrapper: {
81
+ zIndex: 0
82
+ }
83
+ });
84
+ MaskedInput.displayName = 'MaskedInput';
85
+ export default forwardRef(MaskedInput);
@@ -0,0 +1,95 @@
1
+ import _ from 'lodash';
2
+ import PropTypes from 'prop-types';
3
+ import React from 'react';
4
+ import {StyleSheet, Keyboard} from 'react-native';
5
+ import {ViewPropTypes} from 'deprecated-react-native-prop-types';
6
+ import BaseInput from '../baseInput';
7
+ import TextField from '../textFieldOld';
8
+ import View from '../view';
9
+ import Text from '../text';
10
+ import TouchableOpacity from '../touchableOpacity';
11
+
12
+ /**
13
+ * @description: Mask Input to create custom looking inputs with custom formats
14
+ * @gif: https://camo.githubusercontent.com/61eedb65e968845d5eac713dcd21a69691571fb1/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f4b5a5a7446666f486f454b334b2f67697068792e676966
15
+ * @example: https://github.com/wix/react-native-ui-lib/blob/master/demo/src/screens/componentScreens/MaskedInputScreen.tsx
16
+ */
17
+ export default class MaskedInput extends BaseInput {
18
+ static displayName = 'MaskedInput';
19
+ static propTypes = {
20
+ ...TextField.propTypes,
21
+ /**
22
+ * callback for rendering the custom input out of the value returns from the actual input
23
+ */
24
+ renderMaskedText: PropTypes.elementType.isRequired,
25
+ /**
26
+ * container style for the masked input container
27
+ */
28
+ containerStyle: ViewPropTypes.style
29
+ };
30
+
31
+ componentDidMount() {
32
+ this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => {
33
+ if (_.invoke(this, 'isFocused')) {
34
+ _.invoke(this, 'blur');
35
+ }
36
+ });
37
+ }
38
+
39
+ componentWillUnmount() {
40
+ this.keyboardDidHideListener.remove();
41
+ }
42
+
43
+ clear() {
44
+ this.setState({value: ''});
45
+ this.input.clear();
46
+ }
47
+
48
+ renderMaskedText() {
49
+ const {renderMaskedText} = this.props;
50
+ const {value} = this.state;
51
+
52
+ if (_.isFunction(renderMaskedText)) {
53
+ return renderMaskedText(value);
54
+ }
55
+ return <Text>{value}</Text>;
56
+ }
57
+
58
+ render() {
59
+ // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
60
+ const {containerStyle, style} = this.props;
61
+
62
+ return (
63
+ <TouchableOpacity style={containerStyle} activeOpacity={1} onPress={() => this.input.focus()}>
64
+ <TextField
65
+ ref={r => (this.input = r)}
66
+ containerStyle={styles.hiddenInputContainer}
67
+ style={styles.hiddenInput}
68
+ enableErrors={false}
69
+ hideUnderline
70
+ placeholder=""
71
+ {...this.props}
72
+ caretHidden
73
+ multiline={false}
74
+ onChangeText={this.onChangeText}
75
+ />
76
+ <View style={styles.maskedInputWrapper}>{this.renderMaskedText()}</View>
77
+ </TouchableOpacity>
78
+ );
79
+ }
80
+ }
81
+
82
+ const styles = StyleSheet.create({
83
+ hiddenInputContainer: {
84
+ ...StyleSheet.absoluteFillObject,
85
+ zIndex: 1
86
+ },
87
+ hiddenInput: {
88
+ color: 'transparent',
89
+ backgroundColor: 'transparent',
90
+ height: undefined
91
+ },
92
+ maskedInputWrapper: {
93
+ zIndex: 0
94
+ }
95
+ });
@@ -1,4 +1,4 @@
1
- import React, { Component, type JSX } from 'react';
1
+ import React, { Component } from 'react';
2
2
  import { ModalProps as RNModalProps, GestureResponderEvent, KeyboardAvoidingViewProps } from 'react-native';
3
3
  import TopBar, { ModalTopBarProps } from './TopBar';
4
4
  export { ModalTopBarProps };
@@ -57,8 +57,8 @@ declare class Modal extends Component<ModalProps> {
57
57
  static displayName: string;
58
58
  static TopBar: typeof TopBar;
59
59
  constructor(props: ModalProps);
60
- renderTouchableOverlay(): JSX.Element | undefined;
61
- render(): JSX.Element;
60
+ renderTouchableOverlay(): React.JSX.Element | undefined;
61
+ render(): React.JSX.Element;
62
62
  }
63
63
  declare const _default: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<any>> & typeof Modal;
64
64
  export default _default;
@@ -3,7 +3,7 @@ import React, { useMemo, useCallback, useState, useRef } from 'react';
3
3
  import { StyleSheet } from 'react-native';
4
4
  import { useDidUpdate, useThemeProps } from "../../hooks";
5
5
  import { Colors } from "../../style";
6
- import MaskedInput from "../maskedInput";
6
+ import MaskedInput from "../maskedInput/new";
7
7
  import TextField from "../textField";
8
8
  import View from "../view";
9
9
  import Text from "../text";
@@ -29,7 +29,7 @@ function NumberInput(props, ref) {
29
29
  const [options, setOptions] = useState(generateOptions(locale, fractionDigits));
30
30
  const initialNumber = getInitialNumber(propsInitialNumber, options);
31
31
  const [data, setData] = useState(parseInput(`${initialNumber}`, options, propsInitialNumber));
32
- const textField = useRef(undefined);
32
+ const textField = useRef();
33
33
  const [isFocused, setIsFocused] = useState(textFieldProps?.autoFocus ?? false);
34
34
  useDidUpdate(() => {
35
35
  setOptions(generateOptions(locale, fractionDigits));
@@ -28,7 +28,7 @@ export type OverlayTypes = Pick<ImageProps, 'borderRadius'> & {
28
28
  /**
29
29
  * Custom overlay content to be rendered on top of the image
30
30
  */
31
- customContent?: React.ReactElement<any> | React.ReactElement<any>[];
31
+ customContent?: React.ReactElement | React.ReactElement[];
32
32
  };
33
33
  /**
34
34
  * @description: Overlay view with types (default, top, bottom, solid)
@@ -1,5 +1,7 @@
1
1
  import React, {Component} from 'react';
2
2
  import {StyleSheet} from 'react-native';
3
+ import {TextPropTypes} from 'deprecated-react-native-prop-types';
4
+ import PropTypes from 'prop-types';
3
5
  import _ from 'lodash';
4
6
 
5
7
  import Dialog from '../dialog';
@@ -9,6 +11,19 @@ import {Colors, BorderRadiuses} from '../../style';
9
11
 
10
12
  class PickerDialog extends Component {
11
13
  static displayName = 'PickerDialog';
14
+ static propTypes = {
15
+ onDone: PropTypes.func,
16
+ onCancel: PropTypes.func,
17
+ children: PropTypes.array,
18
+ /**
19
+ * select label style
20
+ */
21
+ selectLabelStyle: TextPropTypes.style,
22
+ /**
23
+ * cancel label style
24
+ */
25
+ cancelLabelStyle: TextPropTypes.style
26
+ };
12
27
 
13
28
  state = {};
14
29
 
@@ -1,5 +1,6 @@
1
1
  import React, {Component} from 'react';
2
2
  import {StyleSheet} from 'react-native';
3
+ import PropTypes from 'prop-types';
3
4
  import _ from 'lodash';
4
5
 
5
6
  import Dialog from '../dialog';
@@ -9,6 +10,12 @@ import {Colors} from '../../style';
9
10
 
10
11
  class PickerDialog extends Component {
11
12
  static displayName = 'PickerDialog';
13
+ static propTypes = {
14
+ onDone: PropTypes.func,
15
+ onCancel: PropTypes.func,
16
+ topBarProps: PropTypes.object,
17
+ children: PropTypes.array
18
+ };
12
19
 
13
20
  state = {};
14
21
 
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ExpandableOverlayMethods } from '../../../incubator/expandableOverlay';
3
3
  import { TextFieldMethods } from '../../textField';
4
- declare const useImperativePickerHandle: (ref: React.Ref<any>, expandableRef: React.MutableRefObject<ExpandableOverlayMethods | null>) => React.RefObject<TextFieldMethods | undefined>;
4
+ declare const useImperativePickerHandle: (ref: React.Ref<any>, expandableRef: React.MutableRefObject<ExpandableOverlayMethods | null>) => React.MutableRefObject<TextFieldMethods | undefined>;
5
5
  export default useImperativePickerHandle;
@@ -1,6 +1,6 @@
1
1
  import { useImperativeHandle, useRef } from 'react';
2
2
  const useImperativePickerHandle = (ref, expandableRef) => {
3
- const pickerRef = useRef(undefined);
3
+ const pickerRef = useRef();
4
4
  useImperativeHandle(ref, () => {
5
5
  const {
6
6
  isFocused,
@@ -1,4 +1,4 @@
1
- import { PropsWithChildren, ReactNode, type JSX } from 'react';
1
+ import { PropsWithChildren, ReactNode } from 'react';
2
2
  import { FlatListProps, StyleProp, ViewStyle, TextStyle } from 'react-native';
3
3
  import { ExpandableOverlayProps, ExpandableOverlayMethods } from '../../incubator/expandableOverlay';
4
4
  import { ModalTopBarProps } from '../modal/TopBar';
@@ -19,7 +19,7 @@ export type PickerSingleValue = string | number;
19
19
  export type PickerMultiValue = PickerSingleValue[];
20
20
  export type PickerValue = PickerSingleValue | PickerMultiValue | undefined;
21
21
  type PickerFilteredItems = ReactNode | Pick<PickerItemProps, 'label' | 'value' | 'disabled'>[] | undefined;
22
- type RenderPickerOverloads<ValueType> = ValueType extends PickerValue ? (value?: ValueType, label?: string) => React.ReactElement<any> : never;
22
+ type RenderPickerOverloads<ValueType> = ValueType extends PickerValue ? (value?: ValueType, label?: string) => React.ReactElement : never;
23
23
  type RenderPicker = RenderPickerOverloads<PickerValue>;
24
24
  export type RenderCustomModalProps = {
25
25
  visible: boolean;
@@ -55,7 +55,7 @@ type PickerPropsDeprecation = {
55
55
  renderCustomDialogHeader?: (callbacks: {
56
56
  onDone?: () => void;
57
57
  onCancel?: () => void;
58
- }) => React.ReactElement<any>;
58
+ }) => React.ReactElement;
59
59
  /**
60
60
  * @deprecated
61
61
  * Render custom picker input (the value will be passed)
@@ -69,7 +69,7 @@ type PickerPropsDeprecation = {
69
69
  * Render custom picker overlay (e.g ({visible, children, toggleModal}) => {...})
70
70
  * instead use renderOverlay
71
71
  */
72
- renderCustomModal?: (modalProps: RenderCustomModalProps) => React.ReactElement<any>;
72
+ renderCustomModal?: (modalProps: RenderCustomModalProps) => React.ReactElement;
73
73
  /**
74
74
  * @deprecated
75
75
  * Pass props to the picker modal
@@ -97,7 +97,7 @@ type PickerSearchProps = {
97
97
  /**
98
98
  * Render custom search input (only when passing showSearch)
99
99
  */
100
- renderCustomSearch?: (props: PickerItemsListProps) => React.ReactElement<any>;
100
+ renderCustomSearch?: (props: PickerItemsListProps) => React.ReactElement;
101
101
  };
102
102
  type PickerListProps = PickerSearchProps & {
103
103
  /**
@@ -106,7 +106,7 @@ type PickerListProps = PickerSearchProps & {
106
106
  renderHeader?: (callbacks: {
107
107
  onDone?: () => void;
108
108
  onCancel?: () => void;
109
- }) => React.ReactElement<any>;
109
+ }) => React.ReactElement;
110
110
  /**
111
111
  * Pass props to the list component that wraps the picker items (allows to control FlatList behavior)
112
112
  */
@@ -128,7 +128,7 @@ type PickerExpandableOverlayProps = {
128
128
  /**
129
129
  * Render custom picker overlay (e.g ({visible, children, toggleModal}) => {...})
130
130
  */
131
- renderOverlay?: (modalProps: RenderCustomModalProps) => React.ReactElement<any>;
131
+ renderOverlay?: (modalProps: RenderCustomModalProps) => React.ReactElement;
132
132
  /**
133
133
  * Add blur effect to picker modal (iOS only)
134
134
  */
@@ -213,11 +213,11 @@ export type PickerBaseProps = Omit<TextFieldProps, 'value' | 'onChange'> & Picke
213
213
  renderItem?: (value: PickerValue, itemProps: PickerItemProps & {
214
214
  isSelected: boolean;
215
215
  isItemDisabled: boolean;
216
- }, label?: string) => React.ReactElement<any>;
216
+ }, label?: string) => React.ReactElement;
217
217
  /**
218
218
  * Render custom top element
219
219
  */
220
- renderCustomTopElement?: (value?: PickerValue) => React.ReactElement<any>;
220
+ renderCustomTopElement?: (value?: PickerValue) => React.ReactElement;
221
221
  /**
222
222
  * Selection status bar props
223
223
  */
@@ -1,4 +1,4 @@
1
- import React, { PureComponent, type JSX } from 'react';
1
+ import React, { PureComponent } from 'react';
2
2
  import { Animated, StyleProp, ViewStyle, LayoutChangeEvent } from 'react-native';
3
3
  /**
4
4
  * @description: Progress bar
@@ -67,7 +67,7 @@ declare class ProgressBar extends PureComponent<Props, State> {
67
67
  borderTopRightRadius: number;
68
68
  };
69
69
  renderCustomElement(): React.FunctionComponentElement<any> | undefined;
70
- render(): JSX.Element;
70
+ render(): React.JSX.Element;
71
71
  }
72
72
  export { ProgressBar };
73
73
  declare const _default: React.ForwardRefExoticComponent<Props & React.RefAttributes<any>> & typeof ProgressBar;
@@ -26,7 +26,8 @@ const ScreenFooter = props => {
26
26
  visible = true,
27
27
  animationDuration = 200,
28
28
  shadow = ScreenFooterShadow.SH20,
29
- hideDivider = false
29
+ hideDivider = false,
30
+ contentContainerStyle: contentContainerStyleOverride
30
31
  } = props;
31
32
  const keyboard = useAnimatedKeyboard();
32
33
  const [height, setHeight] = useState(0);
@@ -112,13 +113,15 @@ const ScreenFooter = props => {
112
113
  if (isSolid) {
113
114
  const shadowStyle = Shadows[shadow]?.top;
114
115
  const backgroundElevation = shadowStyle?.elevation || 0;
115
- // When the background has a shadow (elevation on Android), it might render on top of the content
116
116
  style.push({
117
117
  elevation: backgroundElevation + 1
118
118
  });
119
119
  }
120
+ if (contentContainerStyleOverride) {
121
+ style.push(contentContainerStyleOverride);
122
+ }
120
123
  return style;
121
- }, [layout, alignItems, justifyContent, insets.bottom, isSolid, shadow, isKeyboardVisible]);
124
+ }, [layout, alignItems, justifyContent, insets.bottom, isSolid, shadow, isKeyboardVisible, contentContainerStyleOverride]);
122
125
  const solidBackgroundStyle = useMemo(() => {
123
126
  if (!isSolid) {
124
127
  return undefined;
@@ -154,13 +157,13 @@ const ScreenFooter = props => {
154
157
  maxWidth: '100%'
155
158
  };
156
159
  return <View key={index} style={fixedStyle}>
157
- {child}
158
- </View>;
160
+ {child}
161
+ </View>;
159
162
  }
160
163
  if (isHorizontal && React.isValidElement(child) && itemsFit === ItemsFit.STRETCH) {
161
164
  return <View flex row centerH key={index}>
162
- {child}
163
- </View>;
165
+ {child}
166
+ </View>;
164
167
  }
165
168
  return child;
166
169
  }, [itemsFit, itemWidth, isHorizontal]);