@shoutem/ui 4.6.7 → 4.9.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 (73) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -2
  3. package/components/ActionSheet/ActionSheet.js +6 -6
  4. package/components/DateTimePicker.js +2 -2
  5. package/components/DropDownMenu/DropDownMenu.js +1 -1
  6. package/components/DropDownMenu/DropDownModal.js +2 -2
  7. package/components/EmptyListImage.js +9 -5
  8. package/components/FormGroup.js +0 -1
  9. package/components/GridRow.js +2 -2
  10. package/components/HorizontalPager/HorizontalPager.js +2 -2
  11. package/components/Icon/services/icons.js +0 -2
  12. package/components/Icon/services/index.js +1 -1
  13. package/components/Image.js +1 -1
  14. package/components/ImageBackground.js +1 -1
  15. package/components/ImageGallery/ImageGallery.android.js +1 -0
  16. package/components/ImageGallery/ImageGallery.ios.js +2 -1
  17. package/components/ImageGalleryOverlay.js +1 -1
  18. package/components/ImagePreview.js +2 -2
  19. package/components/InlineDropDownMenu/InlineDropDownMenu.js +47 -28
  20. package/components/InlineDropDownMenu/InlineDropDownMenuItem.js +15 -17
  21. package/components/ListView.js +71 -32
  22. package/components/LoadingIndicator.js +1 -1
  23. package/components/NavigationBar/NavigationBar.js +3 -7
  24. package/components/NavigationBar/NavigationBarAnimations.js +1 -1
  25. package/components/ScrollView/ScrollDriverProvider.js +23 -3
  26. package/components/ScrollView/ScrollView.js +10 -8
  27. package/components/ShareButton.js +1 -1
  28. package/components/Spinner.js +1 -1
  29. package/components/Switch.js +2 -2
  30. package/components/TabMenu/TabMenu.js +2 -2
  31. package/components/TabMenu/TabMenuItem.js +7 -4
  32. package/components/Text.js +2 -2
  33. package/components/TextInput.js +3 -3
  34. package/components/Tile.js +1 -1
  35. package/components/Touchable.js +2 -2
  36. package/components/TouchableNativeFeedback.js +2 -2
  37. package/components/TouchableOpacity.js +1 -1
  38. package/components/Video/Video.js +1 -1
  39. package/components/Video/VideoSourceReader.js +2 -1
  40. package/components/View.js +1 -1
  41. package/components/YearRangePicker/YearRangePicker.js +2 -2
  42. package/components/YearRangePicker/YearRangePickerButton.js +2 -2
  43. package/components/YearRangePicker/YearRangePickerModal.js +11 -11
  44. package/examples/components/Cards.js +1 -1
  45. package/examples/components/DropDownMenus.js +8 -8
  46. package/examples/components/Examples.js +1 -1
  47. package/examples/components/FormComponents.js +1 -1
  48. package/examples/components/Headers.js +1 -1
  49. package/examples/components/NavigationBars.js +4 -4
  50. package/examples/components/Rows.js +1 -1
  51. package/examples/components/Stage.js +1 -1
  52. package/examples/components/Tiles.js +1 -1
  53. package/examples/components/Typography.js +1 -1
  54. package/examples/components/Videos.js +3 -3
  55. package/helpers/device-selector.js +11 -3
  56. package/helpers/keyboard.js +2 -3
  57. package/html/Html.js +3 -3
  58. package/html/components/Image.js +1 -1
  59. package/html/components/SimpleHtml.js +9 -9
  60. package/html/elements/A.js +3 -3
  61. package/html/elements/Block.js +2 -2
  62. package/html/elements/Img.js +1 -1
  63. package/html/elements/Inline.js +5 -5
  64. package/html/elements/Text.js +2 -2
  65. package/html/elements/list/Ol.js +1 -1
  66. package/html/elements/list/Ul.js +1 -1
  67. package/html/elements/list/index.js +4 -4
  68. package/html/index.js +33 -33
  69. package/html/services/ElementRegistry.js +1 -1
  70. package/html/services/HtmlParser.js +2 -1
  71. package/package.json +40 -30
  72. package/scripts/add-native-deps.js +0 -1
  73. package/theme.js +10 -12
@@ -1,26 +1,26 @@
1
- import { Dimensions, Linking } from 'react-native';
2
- import autoBindReact from 'auto-bind/react';
3
- import _ from 'lodash';
4
- import PropTypes from 'prop-types';
5
1
  import React, { PureComponent } from 'react';
2
+ import { Dimensions, Linking } from 'react-native';
6
3
  import Html from 'react-native-render-html';
4
+ import { iframe } from 'react-native-render-html/src/HTMLRenderers';
7
5
  import {
8
- cssStringToObject,
9
6
  cssObjectToString,
7
+ cssStringToObject,
10
8
  } from 'react-native-render-html/src/HTMLStyles';
11
- import WebView from 'react-native-webview';
12
9
  import {
13
- makeTableRenderer,
14
10
  alterNode as tableAlterNode,
15
11
  cssRulesFromSpecs,
16
12
  defaultTableStylesSpecs,
17
13
  IGNORED_TAGS,
14
+ makeTableRenderer,
18
15
  } from 'react-native-render-html-table-bridge';
19
- import { iframe } from 'react-native-render-html/src/HTMLRenderers';
16
+ import WebView from 'react-native-webview';
20
17
  import YoutubePlayer from 'react-native-youtube-iframe';
18
+ import autoBindReact from 'auto-bind/react';
19
+ import _ from 'lodash';
20
+ import PropTypes from 'prop-types';
21
21
  import { connectStyle } from '@shoutem/theme';
22
- import { View } from '../../components/View';
23
22
  import { Text } from '../../components/Text';
23
+ import { View } from '../../components/View';
24
24
  import getEmptyObjectKeys from '../services/getEmptyObjectKeys';
25
25
  import isValidVideoFormat from '../services/isValidVideoFormat';
26
26
  import Image from './Image';
@@ -1,11 +1,11 @@
1
1
  import React, { PureComponent } from 'react';
2
+ import { Linking } from 'react-native';
2
3
  import autoBindReact from 'auto-bind/react';
3
4
  import _ from 'lodash';
4
5
  import PropTypes from 'prop-types';
5
- import { Linking } from 'react-native';
6
6
  import { connectStyle } from '@shoutem/theme';
7
- import { isImg } from '../elements/Img';
8
- import { ElementPropTypes, combineMappers, mapElementProps } from '../Html';
7
+ import { combineMappers, ElementPropTypes, mapElementProps } from '../Html';
8
+ import { isImg } from './Img';
9
9
  import { Inline } from './Inline';
10
10
 
11
11
  class A extends PureComponent {
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import _ from 'lodash';
3
3
  import {
4
- ElementPropTypes,
5
4
  combineMappers,
6
- mapElementProps,
5
+ ElementPropTypes,
7
6
  isBlockElement,
7
+ mapElementProps,
8
8
  } from '../Html';
9
9
  import { Inline } from './Inline';
10
10
 
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import _ from 'lodash';
3
3
  import Image from '../components/Image';
4
- import { ElementPropTypes, combineMappers, mapElementProps } from '../Html';
4
+ import { combineMappers, ElementPropTypes, mapElementProps } from '../Html';
5
5
 
6
6
  export function isImg(element) {
7
7
  return _.get(element, 'tag') === 'img';
@@ -4,17 +4,17 @@ import PropTypes from 'prop-types';
4
4
  import { Text } from '../../components/Text';
5
5
  import { TouchableOpacity } from '../../components/TouchableOpacity';
6
6
  import { View } from '../../components/View';
7
- import { Display } from '../services/ElementRegistry';
8
7
  import {
9
- isBlockElement,
10
- hasBlockElement,
11
- ElementPropTypes,
12
8
  combineMappers,
9
+ ElementPropTypes,
10
+ hasBlockElement,
11
+ isBlockElement,
13
12
  mapElementProps,
14
13
  renderChildElements,
15
14
  } from '../Html';
15
+ import { Display } from '../services/ElementRegistry';
16
16
  import { isImg } from './Img';
17
- import { removeWhiteSpace, isText } from './Text';
17
+ import { isText, removeWhiteSpace } from './Text';
18
18
 
19
19
  export const blockDisplayIfAnyChildIsBlock = function(element) {
20
20
  return hasBlockElement(element.childElements)
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
+ import { Text } from 'react-native';
2
3
  import { AllHtmlEntities as Entities } from 'html-entities';
3
4
  import _ from 'lodash';
4
- import { Text } from 'react-native';
5
- import { ElementPropTypes, combineMappers, mapElementProps } from '../Html';
5
+ import { combineMappers, ElementPropTypes, mapElementProps } from '../Html';
6
6
 
7
7
  const html = new Entities();
8
8
 
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { View } from '../../../components/View';
4
- import { ElementPropTypes, combineMappers, mapElementProps } from '../../Html';
4
+ import { combineMappers, ElementPropTypes, mapElementProps } from '../../Html';
5
5
  import pickLiChildElements from './helpers/pickLiChildElements';
6
6
  import renderItems from './helpers/renderItems';
7
7
 
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { View } from '../../../components/View';
4
- import { ElementPropTypes, combineMappers, mapElementProps } from '../../Html';
4
+ import { combineMappers, ElementPropTypes, mapElementProps } from '../../Html';
5
5
  import pickLiChildElements from './helpers/pickLiChildElements';
6
6
  import renderItems from './helpers/renderItems';
7
7
 
@@ -1,7 +1,7 @@
1
- import Ul from './Ul';
2
- import Li from './Li';
3
- import Ol from './Ol';
4
1
  import Bullet from './prefix/Bullet';
5
2
  import Number from './prefix/Number';
3
+ import Li from './Li';
4
+ import Ol from './Ol';
5
+ import Ul from './Ul';
6
6
 
7
- export { Ul, Ol, Li, Bullet, Number };
7
+ export { Bullet, Li, Number, Ol, Ul };
package/html/index.js CHANGED
@@ -1,31 +1,31 @@
1
+ import Gallery from './components/Gallery';
2
+ import Image from './components/Image';
3
+ import SimpleHtml from './components/SimpleHtml';
4
+ import A from './elements/A';
5
+ import Block from './elements/Block';
6
+ import Br from './elements/Br';
7
+ import Img from './elements/Img';
8
+ import Inline, { InlineSettings } from './elements/Inline';
9
+ import { Bullet, Li, Number, Ol, Ul } from './elements/list';
10
+ import Text from './elements/Text';
11
+ import Video from './elements/Video';
12
+ import Virtual from './elements/Virtual';
1
13
  import {
2
- registerElement,
3
14
  Display,
15
+ getElement,
4
16
  getElementDisplay,
5
17
  getElementProperty,
6
- getElement,
18
+ registerElement,
7
19
  } from './services/ElementRegistry';
8
20
  import Html, {
21
+ combineMappers,
9
22
  customizeRenderElement,
10
23
  ElementPropTypes,
11
24
  hasBlockElement,
12
- combineMappers,
13
25
  mapElementProps,
14
26
  renderChildElements,
15
27
  renderChildren,
16
28
  } from './Html';
17
- import SimpleHtml from './components/SimpleHtml';
18
- import Gallery from './components/Gallery';
19
- import Image from './components/Image';
20
- import Inline, { InlineSettings } from './elements/Inline';
21
- import Virtual from './elements/Virtual';
22
- import Block from './elements/Block';
23
- import Text from './elements/Text';
24
- import { Ul, Ol, Li, Bullet, Number } from './elements/list';
25
- import Img from './elements/Img';
26
- import A from './elements/A';
27
- import Br from './elements/Br';
28
- import Video from './elements/Video';
29
29
 
30
30
  // Text elements with primary inline display
31
31
  Html.registerElement('em', Inline, InlineSettings);
@@ -69,31 +69,31 @@ Html.registerElement('p', Block);
69
69
  Html.registerElement('div', Block);
70
70
 
71
71
  export {
72
- Html,
73
- customizeRenderElement,
74
- ElementPropTypes,
75
- hasBlockElement,
72
+ A,
73
+ Block,
76
74
  combineMappers,
77
- mapElementProps,
78
- renderChildElements,
79
- renderChildren,
75
+ customizeRenderElement,
80
76
  // Element Registry
81
77
  Display,
82
- registerElement,
78
+ ElementPropTypes,
79
+ // Components
80
+ Gallery,
81
+ getElement,
83
82
  getElementDisplay,
84
83
  getElementProperty,
85
- getElement,
84
+ hasBlockElement,
85
+ Html,
86
+ Image,
87
+ Img,
86
88
  // Elements
87
89
  Inline,
88
- Block,
89
- Img,
90
- A,
91
- Ul,
92
- Ol,
93
90
  Li,
94
- Virtual,
95
- // Components
96
- Gallery,
97
- Image,
91
+ mapElementProps,
92
+ Ol,
93
+ registerElement,
94
+ renderChildElements,
95
+ renderChildren,
98
96
  SimpleHtml,
97
+ Ul,
98
+ Virtual,
99
99
  };
@@ -36,7 +36,7 @@ export function getElementDisplay(element) {
36
36
  return null;
37
37
  }
38
38
 
39
- const display = elementClass.display;
39
+ const { display } = elementClass;
40
40
  if (!display) {
41
41
  // eslint-disable-next-line no-console
42
42
  console.warn(
@@ -40,7 +40,8 @@ function stripNewLines(html) {
40
40
  .replace(htmlNewLineRegex, match => {
41
41
  if (newLineAfterClosingTagRegex.test(match)) {
42
42
  return '>';
43
- } else if (newLineBeforeOpeningTagRegex.test(match)) {
43
+ }
44
+ if (newLineBeforeOpeningTagRegex.test(match)) {
44
45
  return '<';
45
46
  }
46
47
  return ' ';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shoutem/ui",
3
- "version": "4.6.7",
3
+ "version": "4.9.0",
4
4
  "description": "Styleable set of components for React Native applications",
5
5
  "scripts": {
6
6
  "lint": "eslint .",
@@ -9,33 +9,33 @@
9
9
  "test": "mocha '_tests_/*.js' --require react-native-mock-render/mock --require @babel/register"
10
10
  },
11
11
  "dependencies": {
12
- "@react-native-community/datetimepicker": "^3.5.2",
13
- "@shoutem/animation": "~0.14.0",
14
- "@shoutem/eslint-config-react": "^1.0.1",
15
- "@shoutem/theme": "~0.12.0",
16
- "react-native-render-html-table-bridge": "0.6.0",
17
- "auto-bind": "^4.0.0",
18
- "babel-plugin-transform-decorators-legacy": "~1.3.4",
12
+ "@react-native-community/datetimepicker": "3.5.2",
13
+ "@shoutem/animation": "~0.15.0",
14
+ "@shoutem/eslint-config-react": "~1.0.6",
15
+ "@shoutem/theme": "~0.13.0",
16
+ "auto-bind": "4.0.0",
17
+ "babel-plugin-transform-decorators-legacy": "1.3.5",
19
18
  "buffer": "5.6.0",
20
19
  "events": "1.1.0",
21
- "fs-extra": "^7.0.1",
20
+ "fs-extra": "7.0.1",
22
21
  "html-entities": "1.3.1",
23
22
  "htmlparser2": "3.10.1",
24
23
  "lodash": "4.17.21",
25
- "prop-types": "^15.7.2",
24
+ "prop-types": "15.8.1",
26
25
  "qs": "6.9.3",
26
+ "react-native-device-info": "8.4.8",
27
27
  "react-native-lightbox": "shoutem/react-native-lightbox#v0.7.2",
28
- "react-native-linear-gradient": "~2.5.6",
28
+ "react-native-linear-gradient": "2.5.6",
29
29
  "react-native-modal": "11.7.0",
30
30
  "react-native-photo-view": "shoutem/react-native-photo-view#0ffa1481f6b6cb8663cb291b7db1d6644440584d",
31
- "react-native-render-html": "~4.2.0",
32
- "react-native-status-bar-height": "2.5.0",
33
- "react-native-svg": "^12.1.1",
34
- "react-native-svg-transformer": "^0.14.3",
31
+ "react-native-render-html": "4.2.5",
32
+ "react-native-render-html-table-bridge": "0.6.0",
33
+ "react-native-svg": "12.1.1",
34
+ "react-native-svg-transformer": "0.14.3",
35
35
  "react-native-transformable-image": "shoutem/react-native-transformable-image#v0.0.20",
36
- "react-native-vector-icons": "~6.6.0",
37
- "react-native-webview": "~11.0.0",
38
- "react-native-youtube-iframe": "~2.1.2",
36
+ "react-native-vector-icons": "6.6.0",
37
+ "react-native-webview": "11.0.3",
38
+ "react-native-youtube-iframe": "2.1.2",
39
39
  "stream": "0.0.2",
40
40
  "tinycolor2": "1.4.1"
41
41
  },
@@ -44,27 +44,31 @@
44
44
  "react-native": ">=0.61.5"
45
45
  },
46
46
  "devDependencies": {
47
- "@babel/core": "^7.9.6",
47
+ "@babel/core": "7.16.7",
48
48
  "@babel/register": "7.9.0",
49
- "@babel/plugin-proposal-decorators": "^7.3.0",
50
- "babel-eslint": "^9.0.0",
49
+ "@babel/plugin-proposal-decorators": "7.16.7",
50
+ "@shoutem/eslint-config-react-native": "~1.0.2",
51
+ "babel-eslint": "10.1.0",
51
52
  "chai": "4.2.0",
52
53
  "deep-freeze": "0.0.1",
53
- "eslint": "^6.8.0",
54
- "eslint-plugin-import": "^2.20.1",
55
- "eslint-plugin-jsx-a11y": "^1.3.1",
54
+ "eslint": "6.8.0",
55
+ "eslint-plugin-import": "2.25.4",
56
+ "eslint-plugin-jsx-a11y": "6.5.1",
56
57
  "eslint-plugin-prettier": "3.1.3",
57
- "eslint-plugin-react": "^5.1.1",
58
- "eslint-plugin-react-native": "~3.6.0",
59
- "metro-react-native-babel-preset": "^0.56.0",
58
+ "eslint-plugin-react": "7.28.0",
59
+ "eslint-plugin-react-hooks": "4.2.0",
60
+ "eslint-plugin-react-native": "3.11.0",
61
+ "eslint-plugin-simple-import-sort": "7.0.0",
62
+ "metro-react-native-babel-preset": "0.66.2",
60
63
  "mocha": "7.1.2",
61
64
  "prettier": "1.19.1",
62
- "react-addons-test-utils": "^15.6.2",
63
- "react-dom": "^16.8.6",
65
+ "react-addons-test-utils": "15.6.2",
66
+ "react-dom": "16.14.0",
64
67
  "react-native-mock-render": "0.1.9"
65
68
  },
66
69
  "nativeDependencies": [
67
70
  "@react-native-community/datetimepicker",
71
+ "react-native-device-info",
68
72
  "react-native-linear-gradient",
69
73
  "react-native-photo-view",
70
74
  "react-native-svg",
@@ -119,11 +123,17 @@
119
123
  }
120
124
  ],
121
125
  "eslintConfig": {
122
- "extends": "@shoutem/react",
126
+ "extends": "@shoutem/react-native",
123
127
  "parser": "babel-eslint",
124
128
  "parserOptions": {
125
129
  "ecmaVersion": 6,
126
130
  "sourceType": "module"
127
131
  }
132
+ },
133
+ "prettier": {
134
+ "bracketSpacing": true,
135
+ "jsxBracketSameLine": false,
136
+ "singleQuote": true,
137
+ "trailingComma": "all"
128
138
  }
129
139
  }
@@ -33,7 +33,6 @@ function insertNativeDependencies() {
33
33
  console.log(
34
34
  `[@shoutem/ui] - error adding dependencies to root package.json\n${e.message}`,
35
35
  );
36
- return;
37
36
  }
38
37
  }
39
38
 
package/theme.js CHANGED
@@ -1,17 +1,17 @@
1
- import { Dimensions, StyleSheet, Platform, StatusBar } from 'react-native';
1
+ import { Dimensions, Platform, StatusBar, StyleSheet } from 'react-native';
2
2
  import {
3
- INCLUDE,
4
- createVariations,
5
- createSharedStyle,
6
- inverseColorBrightnessForAmount,
7
3
  changeColorAlpha,
4
+ createSharedStyle,
5
+ createVariations,
8
6
  getSizeRelativeToReference,
7
+ INCLUDE,
8
+ inverseColorBrightnessForAmount,
9
9
  } from '@shoutem/theme';
10
10
  import {
11
- NAVIGATION_HEADER_HEIGHT,
11
+ IPHONE_X_HOME_INDICATOR_PADDING,
12
12
  IPHONE_X_NOTCH_PADDING,
13
13
  IPHONE_XR_NOTCH_PADDING,
14
- IPHONE_X_HOME_INDICATOR_PADDING,
14
+ NAVIGATION_HEADER_HEIGHT,
15
15
  } from './const';
16
16
  import { Device } from './helpers';
17
17
 
@@ -22,6 +22,7 @@ const STATUS_BAR_OFFSET =
22
22
  export const NAVIGATION_BAR_HEIGHT = Device.select({
23
23
  iPhoneX: NAVIGATION_HEADER_HEIGHT + IPHONE_X_NOTCH_PADDING,
24
24
  iPhoneXR: NAVIGATION_HEADER_HEIGHT + IPHONE_XR_NOTCH_PADDING,
25
+ notchedAndroid: NAVIGATION_HEADER_HEIGHT + StatusBar.currentHeight,
25
26
  default: NAVIGATION_HEADER_HEIGHT,
26
27
  });
27
28
 
@@ -1751,17 +1752,14 @@ export default (variables = defaultThemeVariables) => ({
1751
1752
  statusBar: {
1752
1753
  backgroundColor: variables.statusBarColor,
1753
1754
  statusBarStyle: variables.statusBarStyle,
1754
- height: Device.select({
1755
- iPhoneX: IPHONE_X_NOTCH_PADDING,
1756
- iPhoneXR: IPHONE_XR_NOTCH_PADDING,
1757
- default: 0,
1758
- }),
1755
+ height: StatusBar.currentHeight,
1759
1756
  },
1760
1757
  screenBackground: variables.backgroundColor,
1761
1758
  navigationBarImage: {
1762
1759
  marginTop: Device.select({
1763
1760
  iPhoneX: IPHONE_X_NOTCH_PADDING,
1764
1761
  iPhoneXR: IPHONE_XR_NOTCH_PADDING,
1762
+ notchedAndroid: StatusBar.currentHeight,
1765
1763
  default: 0,
1766
1764
  }),
1767
1765
  flex: 1,