@widergy/mobile-ui 0.39.4 → 1.0.0

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 (41) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/lib/components/Capture/index.js +3 -3
  3. package/lib/components/Carousel/components/CarouselComponent/index.js +2 -0
  4. package/lib/components/Carousel/components/CarouselContainer/index.js +2 -10
  5. package/lib/components/CheckList/components/CheckBoxRenderer/index.js +1 -0
  6. package/lib/components/CheckList/index.js +5 -3
  7. package/lib/components/CheckList/proptypes.js +2 -2
  8. package/lib/components/Dropdown/index.js +12 -10
  9. package/lib/components/FilePicker/utils.js +2 -2
  10. package/lib/components/ImageIcon/index.js +8 -1
  11. package/lib/components/ImageRadio/index.js +21 -12
  12. package/lib/components/Loading/index.js +1 -0
  13. package/lib/components/Overlay/index.js +2 -10
  14. package/lib/components/PhotoAlbum/index.js +8 -9
  15. package/lib/components/Picker/index.js +2 -2
  16. package/lib/components/Portal/components/Manager/index.js +7 -4
  17. package/lib/components/RadioGroup/components/RadioButton/index.js +5 -5
  18. package/lib/components/RateChart/components/RateStagesGraph/components/Indicator/index.js +3 -3
  19. package/lib/components/RateChart/components/RateStagesGraph/components/Indicator/utils.js +1 -1
  20. package/lib/components/TransformView/constants.js +1 -1
  21. package/lib/components/TransformView/utils.js +674 -0
  22. package/lib/components/UTAutocomplete/index.js +4 -4
  23. package/lib/components/UTCBUInput/index.js +2 -2
  24. package/lib/components/UTMenu/components/ListView/index.js +4 -2
  25. package/lib/components/UTMenu/components/MenuOption/index.js +1 -0
  26. package/lib/components/UTMenu/index.js +3 -3
  27. package/lib/components/UTMenu/proptypes.js +2 -2
  28. package/lib/components/UTOnBoarding/components/CardContent/index.js +3 -3
  29. package/lib/components/UTOnBoarding/index.js +4 -4
  30. package/lib/components/UTPasswordField/components/PasswordValidations/index.js +2 -6
  31. package/lib/components/UTSelect/componentes/MultipleItem/index.js +1 -0
  32. package/lib/components/UTSelect/proptypes.js +1 -0
  33. package/lib/components/UTStepFeedback/components/CircleNumber/index.js +12 -10
  34. package/lib/components/UTStepFeedback/index.js +50 -29
  35. package/lib/components/UTStepFeedback/proptypes.js +2 -1
  36. package/lib/components/UTSwitch/proptypes.js +1 -0
  37. package/lib/components/UTTextInput/components/BaseInput/index.js +10 -12
  38. package/lib/components/UTTextInput/proptypes.js +1 -0
  39. package/lib/theming/DefaultTheme.js +1 -0
  40. package/lib/utils/fileUtils.js/index.js +20 -5
  41. package/package.json +47 -71
@@ -1,9 +1,13 @@
1
+ /* eslint-disable react/sort-comp */
2
+ /* eslint-disable class-methods-use-this */
1
3
  import React, { PureComponent } from 'react';
2
4
  import { FlatList } from 'react-native';
3
5
 
4
6
  import propTypes from './proptypes';
5
7
 
6
8
  class ListView extends PureComponent {
9
+ keyExtractor = (option, index) => option.id?.toString() || index.toString();
10
+
7
11
  constructor(props) {
8
12
  super(props);
9
13
  this.state = {
@@ -41,8 +45,6 @@ class ListView extends PureComponent {
41
45
  );
42
46
  };
43
47
 
44
- keyExtractor = (option, index) => option.id?.toString() || index.toString();
45
-
46
48
  render() {
47
49
  const { filteredOptions, ItemSeparatorComponent } = this.props;
48
50
  const { style } = this.state;
@@ -24,6 +24,7 @@ MenuOption.propTypes = {
24
24
  label: string,
25
25
  selected: bool,
26
26
  styles: ViewPropTypes.style,
27
+ // eslint-disable-next-line react/forbid-prop-types
27
28
  item: shape(any)
28
29
  };
29
30
 
@@ -1,4 +1,4 @@
1
- import React, { Fragment, useLayoutEffect, useMemo, useRef, useState } from 'react';
1
+ import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';
2
2
  import { Dimensions, Keyboard, KeyboardAvoidingView, Modal, TouchableOpacity, View } from 'react-native';
3
3
 
4
4
  import useKeyboardHeight from '../../hooks/useKeyboardHeight';
@@ -98,7 +98,7 @@ const UTMenu = ({
98
98
  const focusSearchInput = () => withAutocomplete && searchTextInputRef.current?.focus();
99
99
 
100
100
  return (
101
- <Fragment>
101
+ <>
102
102
  <TouchableOpacity
103
103
  disabled={disabled}
104
104
  onPress={isOpen ? closeMenu : openMenu}
@@ -156,7 +156,7 @@ const UTMenu = ({
156
156
  </KeyboardAvoidingView>
157
157
  </View>
158
158
  </Modal>
159
- </Fragment>
159
+ </>
160
160
  );
161
161
  };
162
162
 
@@ -1,10 +1,10 @@
1
- import { any, arrayOf, bool, func, number, shape, string } from 'prop-types';
1
+ import { arrayOf, bool, func, number, oneOfType, shape, string } from 'prop-types';
2
2
 
3
3
  const optionType = shape({
4
4
  label: string.isRequired,
5
5
  id: string.isRequired,
6
6
  action: func,
7
- value: any.isRequired
7
+ value: oneOfType([number, string])
8
8
  });
9
9
 
10
10
  export default {
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable react-native/no-inline-styles */
2
- import React, { Fragment } from 'react';
2
+ import React from 'react';
3
3
  import { Animated } from 'react-native';
4
4
 
5
5
  import Label from '../../../Label';
@@ -9,7 +9,7 @@ import propTypes from './propTypes';
9
9
  import ownStyles from './styles';
10
10
 
11
11
  const CardContent = ({ onPress, currentPage, opacity, styles, buttonTitle = '', disabled }) => (
12
- <Fragment>
12
+ <>
13
13
  <Animated.View style={[styles?.textContainer, { opacity }]}>
14
14
  <Label big bold style={styles?.title}>
15
15
  {currentPage?.title || ''}
@@ -26,7 +26,7 @@ const CardContent = ({ onPress, currentPage, opacity, styles, buttonTitle = '',
26
26
  {...styles?.buttonProps}
27
27
  disabled={disabled}
28
28
  />
29
- </Fragment>
29
+ </>
30
30
  );
31
31
 
32
32
  CardContent.propTypes = propTypes;
@@ -1,7 +1,7 @@
1
1
  import React, { useState, useRef } from 'react';
2
2
  import { View, ImageBackground, Animated } from 'react-native';
3
- // eslint-disable-next-line import/no-unresolved
4
- import ViewPager from '@react-native-community/viewpager';
3
+ // // eslint-disable-next-line import/no-unresolved
4
+ import PagerView from 'react-native-pager-view';
5
5
 
6
6
  import UTRoundView from '../UTRoundView';
7
7
  import useEffectOnlyOnUpdates from '../../hooks/useEffectOnlyOnUpdates';
@@ -89,7 +89,7 @@ const UTOnBoarding = ({
89
89
 
90
90
  return (
91
91
  <View style={ownStyles.expand}>
92
- <ViewPager style={ownStyles.expand} ref={viewPagerRef} scrollEnabled={false}>
92
+ <PagerView style={ownStyles.expand} ref={viewPagerRef} scrollEnabled={false}>
93
93
  {pages.map(page => (
94
94
  <ImageBackground
95
95
  key={`${page?.title} - ${page?.description}`}
@@ -97,7 +97,7 @@ const UTOnBoarding = ({
97
97
  source={page.image?.source}
98
98
  />
99
99
  ))}
100
- </ViewPager>
100
+ </PagerView>
101
101
  <UTRoundView
102
102
  styles={{
103
103
  outerContainer: [
@@ -21,12 +21,8 @@ const PasswordValidations = ({ passwordValidations, value, style, shouldShowErro
21
21
 
22
22
  const validations = validatedRegExps.filter(({ requirement }) => requirement);
23
23
  const errors = validatedRegExps.filter(({ requirement }) => !requirement);
24
- const {
25
- ValidationFailedIcon,
26
- ValidationPassedIcon,
27
- ErrorIcon,
28
- NoValueIcon
29
- } = theme.UTPasswordField.passwordIcons;
24
+ const { ValidationFailedIcon, ValidationPassedIcon, ErrorIcon, NoValueIcon } =
25
+ theme.UTPasswordField.passwordIcons;
30
26
  const showErrors = errors.some(({ assertion }) => !assertion);
31
27
 
32
28
  return (
@@ -1,3 +1,4 @@
1
+ /* eslint-disable react/forbid-prop-types */
1
2
  import { any, bool, func, shape, string } from 'prop-types';
2
3
  import React, { memo } from 'react';
3
4
 
@@ -4,6 +4,7 @@ const optionType = shape({
4
4
  label: string.isRequired,
5
5
  id: string.isRequired,
6
6
  action: func,
7
+ // eslint-disable-next-line react/forbid-prop-types
7
8
  value: any.isRequired
8
9
  });
9
10
 
@@ -16,16 +16,18 @@ const CircleNumber = ({ index, step, themedStyles, status, hideStepNumber }) =>
16
16
 
17
17
  return (
18
18
  <View style={{ ...themedStyles.step, ...complementaryStyle }}>
19
- {!hideStepNumber && <Label
20
- color={
21
- (status.isComplete && themedStyles.stepLabel.complete) ||
22
- (status.isActive && themedStyles.stepLabel.active) ||
23
- (status.isFuture && themedStyles.stepLabel.future)
24
- }
25
- bold
26
- >
27
- {step.stepShortLabel || index + 1}
28
- </Label>}
19
+ {!hideStepNumber && (
20
+ <Label
21
+ color={
22
+ (status.isComplete && themedStyles.stepLabel.complete) ||
23
+ (status.isActive && themedStyles.stepLabel.active) ||
24
+ (status.isFuture && themedStyles.stepLabel.future)
25
+ }
26
+ bold
27
+ >
28
+ {step.stepShortLabel || index + 1}
29
+ </Label>
30
+ )}
29
31
  {status.isComplete && (
30
32
  <View style={themedStyles.checkContainer}>
31
33
  <Icon name="check" color={themedStyles.checkIcon.color} size={CHECK_ICON_SIZE} />
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable react/prop-types */
2
- import React, { Fragment, useEffect, useRef, useState } from 'react';
3
- import { Animated, View } from 'react-native';
2
+ import React, { useEffect, useRef, useState } from 'react';
3
+ import { Animated, TouchableOpacity, View } from 'react-native';
4
4
  import _ from 'lodash';
5
5
 
6
6
  import IconButton from '../IconButton';
@@ -16,6 +16,19 @@ import ownStyles, {
16
16
  } from './styles';
17
17
  import stepFeedbackProptypes from './proptypes';
18
18
 
19
+ const Wrapper = ({ children, onStepPress, status, step }) =>
20
+ onStepPress ? (
21
+ <TouchableOpacity
22
+ onPress={() => {
23
+ if (!status.isActive && !status.isFuture) onStepPress(step.step);
24
+ }}
25
+ >
26
+ {children}
27
+ </TouchableOpacity>
28
+ ) : (
29
+ children
30
+ );
31
+
19
32
  const StepFeedback = ({
20
33
  currentStep,
21
34
  disableTriangle,
@@ -23,9 +36,10 @@ const StepFeedback = ({
23
36
  iconSize,
24
37
  labelsCentered,
25
38
  onClose,
39
+ onStepPress,
26
40
  steps,
27
41
  titleBottom,
28
- variant = 'default',
42
+ variant = 'default'
29
43
  }) => {
30
44
  const [offset, setOffset] = useState(0);
31
45
 
@@ -71,27 +85,25 @@ const StepFeedback = ({
71
85
  const isFirst = index === 0;
72
86
  const centerLabel = isLast || isFirst;
73
87
  return (
74
- <Fragment>
75
- <View style={styles.centerLabelContainer}>
76
- <Label
77
- center={labelsCentered || !centerLabel}
78
- small
79
- style={[
80
- styles.title,
81
- isFirst && !labelsCentered && styles.textAlignFirst,
82
- isLast && !labelsCentered && styles.textAlingLast
83
- ]}
84
- textProps={{ numberOfLines: 2 }}
85
- color={
86
- (status.isComplete && styles.titleLabel.complete) ||
87
- (status.isActive && styles.titleLabel.active) ||
88
- (status.isFuture && styles.titleLabel.future)
89
- }
90
- >
91
- {step.stepDescription}
92
- </Label>
93
- </View>
94
- </Fragment>
88
+ <View style={styles.centerLabelContainer}>
89
+ <Label
90
+ center={labelsCentered || !centerLabel}
91
+ small
92
+ style={[
93
+ styles.title,
94
+ isFirst && !labelsCentered && styles.textAlignFirst,
95
+ isLast && !labelsCentered && styles.textAlingLast
96
+ ]}
97
+ textProps={{ numberOfLines: 2 }}
98
+ color={
99
+ (status.isComplete && styles.titleLabel.complete) ||
100
+ (status.isActive && styles.titleLabel.active) ||
101
+ (status.isFuture && styles.titleLabel.future)
102
+ }
103
+ >
104
+ {step.stepDescription}
105
+ </Label>
106
+ </View>
95
107
  );
96
108
  };
97
109
 
@@ -103,16 +115,25 @@ const StepFeedback = ({
103
115
  };
104
116
 
105
117
  return (
106
- <Fragment>
118
+ <>
107
119
  <View style={styles.stepContainer}>
108
- <View style={styles.centerStepContainer}>
109
- <CircleNumber hideStepNumber={hideStepNumber} index={index} status={status} step={step} themedStyles={styles} variant={variant} />
110
- </View>
120
+ <Wrapper onStepPress={onStepPress} status={status} step={step}>
121
+ <View style={styles.centerStepContainer}>
122
+ <CircleNumber
123
+ hideStepNumber={hideStepNumber}
124
+ index={index}
125
+ status={status}
126
+ step={step}
127
+ themedStyles={styles}
128
+ variant={variant}
129
+ />
130
+ </View>
131
+ </Wrapper>
111
132
  </View>
112
133
  {index < steps.length - 1 && (
113
134
  <View style={[styles.stepSeparator, status.isComplete && styles.stepSeparatorComplete]} />
114
135
  )}
115
- </Fragment>
136
+ </>
116
137
  );
117
138
  };
118
139
 
@@ -12,7 +12,8 @@ export default {
12
12
  hideStepNumber: bool,
13
13
  iconSize: number,
14
14
  onClose: func,
15
+ onStepPress: func,
15
16
  steps: arrayOf(stepPropType).isRequired,
16
17
  titleBottom: bool,
17
- variant: string,
18
+ variant: string
18
19
  };
@@ -13,6 +13,7 @@ export default {
13
13
  trackSize: number,
14
14
  thumbSize: number,
15
15
  theme: number,
16
+ // eslint-disable-next-line react/forbid-prop-types
16
17
  input: shape({ onChange: func.isRequired, value: any }),
17
18
  hitSlop: shape({
18
19
  bottom: number,
@@ -1,13 +1,5 @@
1
1
  import { bool, elementType, func, oneOf, shape, string } from 'prop-types';
2
- import React, {
3
- Fragment,
4
- useState,
5
- forwardRef,
6
- useImperativeHandle,
7
- useRef,
8
- useEffect,
9
- useMemo
10
- } from 'react';
2
+ import React, { useState, forwardRef, useImperativeHandle, useRef, useEffect, useMemo } from 'react';
11
3
  import { ViewPropTypes } from 'deprecated-react-native-prop-types';
12
4
  import { TextInput } from 'react-native';
13
5
  import _ from 'lodash';
@@ -78,7 +70,7 @@ const BaseInput = forwardRef(
78
70
  : {};
79
71
 
80
72
  return (
81
- <Fragment>
73
+ <>
82
74
  <TextInput
83
75
  autoCorrect={false}
84
76
  ref={textInputRef}
@@ -90,7 +82,11 @@ const BaseInput = forwardRef(
90
82
  editable={!select && !disabled}
91
83
  {...props}
92
84
  secureTextEntry={!showInput}
93
- style={[...variantStyle.text, select && { color: theme.fonts?.fontColor }, select && disabled && { color: theme.fonts?.fontDisabledColor}]}
85
+ style={[
86
+ ...variantStyle.text,
87
+ select && { color: theme.fonts?.fontColor },
88
+ select && disabled && { color: theme.fonts?.fontDisabledColor }
89
+ ]}
94
90
  />
95
91
  {(RightIcon || hiddenInput) && (
96
92
  <Touchable
@@ -111,11 +107,13 @@ const BaseInput = forwardRef(
111
107
  )}
112
108
  </Touchable>
113
109
  )}
114
- </Fragment>
110
+ </>
115
111
  );
116
112
  }
117
113
  );
118
114
 
115
+ BaseInput.displayName = 'BaseInput';
116
+
119
117
  BaseInput.propTypes = {
120
118
  onBlur: func.isRequired,
121
119
  onFocus: func.isRequired,
@@ -1,5 +1,6 @@
1
1
  import { string, func, bool, any, shape, elementType, oneOfType } from 'prop-types';
2
2
 
3
+ // eslint-disable-next-line react/forbid-prop-types
3
4
  const refPropType = oneOfType([func, shape({ current: any })]);
4
5
 
5
6
  export default {
@@ -151,6 +151,7 @@ export const themeType = shape({
151
151
  xbig: number
152
152
  }),
153
153
  fontColor: string,
154
+ // eslint-disable-next-line react/forbid-prop-types
154
155
  customVariants: object,
155
156
  fontFamily: string
156
157
  }),
@@ -1,5 +1,5 @@
1
1
  // eslint-disable-next-line import/no-unresolved
2
- import ImageResizer from 'react-native-image-resizer';
2
+ import ImageResizer from '@bam.tech/react-native-image-resizer';
3
3
 
4
4
  import { IS_IOS } from '../platformUtils/constants';
5
5
 
@@ -14,6 +14,23 @@ export const isImageByUri = uri => {
14
14
 
15
15
  export const blobToFile = (blob, type) => new File([blob], blob.data.name, { type });
16
16
 
17
+ // We use the XMLHttpRequest API since the fetch API does not behave correctly under new sdks on Android
18
+ export const uriToBlob = uri => {
19
+ return new Promise((resolve, reject) => {
20
+ const xhr = new XMLHttpRequest();
21
+ xhr.onload = () => {
22
+ resolve(xhr.response);
23
+ };
24
+ xhr.onerror = () => {
25
+ reject(new Error('uriToBlob failed'));
26
+ };
27
+ xhr.responseType = 'blob';
28
+ xhr.open('GET', uri, true);
29
+
30
+ xhr.send(null);
31
+ });
32
+ };
33
+
17
34
  export const retrieveFile = async (uri, type) => {
18
35
  const uriToUse = IS_IOS ? uri.replace('file://', '') : uri;
19
36
  let blob;
@@ -26,11 +43,9 @@ export const retrieveFile = async (uri, type) => {
26
43
  'JPEG',
27
44
  IMG_QUALITY
28
45
  );
29
- const imageResponse = await fetch(resizedImage.uri);
30
- blob = await imageResponse.blob();
46
+ blob = await uriToBlob(resizedImage.uri);
31
47
  } else {
32
- const res = await fetch(uriToUse);
33
- blob = await res.blob();
48
+ blob = await uriToBlob(uriToUse);
34
49
  }
35
50
 
36
51
  return blob;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@widergy/mobile-ui",
3
3
  "description": "Widergy Mobile Components",
4
4
  "author": "widergy",
5
- "version": "0.39.4",
5
+ "version": "1.0.0",
6
6
  "repository": "https://github.com/widergy/mobile-ui.git",
7
7
  "main": "lib/index.js",
8
8
  "files": [
@@ -18,90 +18,66 @@
18
18
  "prepublish": "npm run build",
19
19
  "android": "cd example && yarn android",
20
20
  "ios": "cd example && yarn ios",
21
- "start": "cd example && yarn start"
21
+ "start": "cd example && yarn start",
22
+ "prepare": "husky install"
22
23
  },
23
24
  "peerDependencies": {
24
- "@react-native-community/viewpager": "^4.1.6",
25
25
  "prop-types": "*",
26
26
  "react": "*",
27
27
  "react-native": "*",
28
- "react-native-document-picker": "^3.4.0",
29
- "react-native-image-picker": "4.x.x",
30
- "react-native-image-resizer": "^1.2.2",
31
- "react-native-svg": "*",
32
- "react-native-vector-icons": "*"
28
+ "react-native-document-picker": "^9.0.1",
29
+ "react-native-image-picker": "^5.0.0",
30
+ "react-native-pager-view": "^6.2.0",
31
+ "@bam.tech/react-native-image-resizer": "^3.0.7",
32
+ "react-native-svg": "^13.0.0",
33
+ "react-native-vector-icons": "^10.0.0"
33
34
  },
34
35
  "dependencies": {
35
- "@widergy/web-utils": "^1.22.0",
36
- "deprecated-react-native-prop-types": "^2.3.0",
37
- "lodash": "^4.17.15",
36
+ "@widergy/web-utils": "^2.0.0",
37
+ "core-js": "3",
38
+ "deprecated-react-native-prop-types": "^4.2.1",
39
+ "lodash": "^4.17.21",
38
40
  "numeral": "^2.0.6",
39
- "pdf-lib": "^1.14.1",
40
- "react-native-markdown-display": ">=6.1.6",
41
- "react-native-modal": "^11.5.6"
41
+ "pdf-lib": "^1.17.1",
42
+ "react-native-markdown-display": "^7.0.0-alpha.2",
43
+ "react-native-modal": "^13.0.1",
44
+ "react-native-pager-view": "^6.2.1"
42
45
  },
43
46
  "devDependencies": {
44
- "@babel/cli": "^7.4.4",
45
- "@babel/core": "^7.6.2",
46
- "@babel/plugin-proposal-class-properties": "^7.4.0",
47
- "@babel/preset-env": "^7.4.5",
48
- "@babel/preset-react": "^7.0.0",
49
- "@babel/runtime": "^7.6.2",
50
- "@commitlint/cli": "^8.2.0",
51
- "@commitlint/config-conventional": "^8.2.0",
47
+ "@babel/cli": "^7.22.10",
48
+ "@babel/core": "^7.22.10",
49
+ "@babel/eslint-parser": "^7.22.10",
50
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
51
+ "@babel/preset-env": "^7.22.10",
52
+ "@babel/preset-react": "^7.22.5",
53
+ "@babel/runtime": "^7.22.10",
54
+ "@commitlint/cli": "^17.7.1",
55
+ "@commitlint/config-conventional": "^17.7.0",
52
56
  "@widergy/semantic-release-package-config": "^1.0.0",
53
- "babel-eslint": "^10.0.2",
54
- "babel-jest": "^24.9.0",
55
- "babel-preset-minify": "^0.5.0",
56
- "eslint": "^6.5.1",
57
- "eslint-config-airbnb": "^17.1.0",
58
- "eslint-config-prettier": "^3.3.0",
59
- "eslint-plugin-flowtype": "^3.2.0",
60
- "eslint-plugin-import": "^2.14.0",
61
- "eslint-plugin-jsx-a11y": "^6.1.2",
62
- "eslint-plugin-prettier": "^3.0.0",
63
- "eslint-plugin-react": "^7.11.1",
64
- "eslint-plugin-react-hooks": "^4.2.0",
65
- "eslint-plugin-react-native": "^3.7.0",
66
- "husky": "4.0.0-beta.5",
67
- "jest": "^24.8.0",
68
- "prettier": "^1.15.2",
69
- "prettier-eslint": "^8.8.2",
70
- "prop-types": "^15.7.2",
71
- "react": "16.11.0",
72
- "react-native": "0.62.2",
73
- "react-native-vector-icons": "^6.4.2",
74
- "react-native-version": "^3.1.0",
57
+ "babel-jest": "^29.6.2",
58
+ "babel-preset-minify": "^0.5.2",
59
+ "eslint": "^8.47.0",
60
+ "eslint-config-airbnb": "^19.0.4",
61
+ "eslint-config-prettier": "^9.0.0",
62
+ "eslint-plugin-flowtype": "^8.0.3",
63
+ "eslint-plugin-import": "^2.28.0",
64
+ "eslint-plugin-jsx-a11y": "^6.7.1",
65
+ "eslint-plugin-prettier": "^5.0.0",
66
+ "eslint-plugin-react": "^7.33.1",
67
+ "eslint-plugin-react-hooks": "^4.6.0",
68
+ "eslint-plugin-react-native": "^4.0.0",
69
+ "husky": "^8.0.0",
70
+ "jest": "^29.6.2",
71
+ "prettier": "^3.0.1",
72
+ "prettier-eslint": "^15.0.1",
73
+ "prop-types": "^15.8.1",
74
+ "react": "18.2.0",
75
+ "react-native": "0.72.6",
76
+ "react-native-vector-icons": "^10.0.0",
77
+ "react-native-version": "^4.0.0",
75
78
  "semantic-release": "^15.13.31"
76
79
  },
77
- "jest": {
78
- "preset": "react-native",
79
- "transform": {
80
- "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
81
- }
82
- },
83
- "husky": {
84
- "hooks": {
85
- "pre-commit": "yarn lint-diff && node branch-name-hook",
86
- "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
87
- }
88
- },
89
80
  "release": {
90
81
  "extends": "@widergy/semantic-release-package-config"
91
- },
92
- "commitlint": {
93
- "extends": [
94
- "@commitlint/config-conventional"
95
- ],
96
- "rules": {
97
- "subject-case": [
98
- 2,
99
- "never",
100
- [
101
- "start-case",
102
- "pascal-case"
103
- ]
104
- ]
105
- }
106
82
  }
107
83
  }