diff --git a/assets/animations/loadingDots.json b/assets/animations/loadingDots.json
new file mode 100644
index 00000000..2c95b51d
--- /dev/null
+++ b/assets/animations/loadingDots.json
@@ -0,0 +1 @@
+{"v":"5.8.1","fr":30,"ip":0,"op":46,"w":144,"h":144,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Left","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,72,0],"ix":2,"l":2},"a":{"a":0,"k":[30,72,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":4,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":11,"s":[150,150,100]},{"t":18,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.627,0],[0,-6.627],[6.627,0],[0,6.627]],"o":[[6.627,0],[0,6.627],[-6.627,0],[0,-6.627]],"v":[[0,-12],[12,0],[0,12],[-12,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.136999990426,0.122000002394,0.125,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,72],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Mid","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[72,72,0],"ix":2,"l":2},"a":{"a":0,"k":[72,72,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":16,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":23,"s":[150,150,100]},{"t":30,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.627,0],[0,-6.627],[6.627,0],[0,6.627]],"o":[[6.627,0],[0,6.627],[-6.627,0],[0,-6.627]],"v":[[0,-12],[12,0],[0,12],[-12,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.136999990426,0.122000002394,0.125,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[72,72],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Right","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[114,72,0],"ix":2,"l":2},"a":{"a":0,"k":[114,72,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":28,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":35,"s":[150,150,100]},{"t":42,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.627,0],[0,-6.627],[6.627,0],[0,6.627]],"o":[[6.627,0],[0,6.627],[-6.627,0],[0,-6.627]],"v":[[0,-12],[12,0],[0,12],[-12,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.136999990426,0.122000002394,0.125,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[114,72],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/assets/index.js b/assets/index.js
new file mode 100644
index 00000000..48415526
--- /dev/null
+++ b/assets/index.js
@@ -0,0 +1,4 @@
+/* eslint-disable global-require */
+export const animations = {
+ loadingDots: require('./animations/loadingDots.json'),
+};
diff --git a/components/Icon/assets/attach-media.svg b/components/Icon/assets/attach-media.svg
new file mode 100644
index 00000000..7bcc4d69
--- /dev/null
+++ b/components/Icon/assets/attach-media.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/Icon/assets/clock.svg b/components/Icon/assets/clock.svg
new file mode 100644
index 00000000..c7780d57
--- /dev/null
+++ b/components/Icon/assets/clock.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/Icon/assets/download.svg b/components/Icon/assets/download.svg
new file mode 100644
index 00000000..0ae6d275
--- /dev/null
+++ b/components/Icon/assets/download.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/Icon/assets/forward-10.svg b/components/Icon/assets/forward-10.svg
new file mode 100644
index 00000000..26780d33
--- /dev/null
+++ b/components/Icon/assets/forward-10.svg
@@ -0,0 +1,5 @@
+
diff --git a/components/Icon/assets/forward-30.svg b/components/Icon/assets/forward-30.svg
new file mode 100644
index 00000000..40abb23b
--- /dev/null
+++ b/components/Icon/assets/forward-30.svg
@@ -0,0 +1,6 @@
+
diff --git a/components/Icon/assets/forward-5.svg b/components/Icon/assets/forward-5.svg
new file mode 100644
index 00000000..927b0a53
--- /dev/null
+++ b/components/Icon/assets/forward-5.svg
@@ -0,0 +1,5 @@
+
diff --git a/components/Icon/assets/forward.svg b/components/Icon/assets/forward.svg
new file mode 100644
index 00000000..25e9dde4
--- /dev/null
+++ b/components/Icon/assets/forward.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/Icon/assets/garbage-can.svg b/components/Icon/assets/garbage-can.svg
new file mode 100644
index 00000000..760a10cc
--- /dev/null
+++ b/components/Icon/assets/garbage-can.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/Icon/assets/index.js b/components/Icon/assets/index.js
index c7d82eac..bb2c3ecc 100644
--- a/components/Icon/assets/index.js
+++ b/components/Icon/assets/index.js
@@ -6,6 +6,7 @@ import addToCart from './add-to-cart.svg';
import addToFavoritesOff from './add-to-favorites-off.svg';
import addToFavoritesOn from './add-to-favorites-on.svg';
import address from './address.svg';
+import attachMedia from './attach-media.svg';
import back from './back.svg';
import books from './books.svg';
import call from './call.svg';
@@ -17,12 +18,14 @@ import checkboxOn from './checkbox-on.svg';
import checkboxRectangleOff from './checkbox-rectangle-off.svg';
import checkboxRectangleOn from './checkbox-rectangle-on.svg';
import clearText from './clear-text.svg';
+import clock from './clock.svg';
import close from './close.svg';
import comment from './comment.svg';
import comments from './comments.svg';
import deals from './deals.svg';
import directions from './directions.svg';
import downArrow from './down-arrow.svg';
+import download from './download.svg';
import dropDown from './drop-down.svg';
import edit from './edit.svg';
import email from './email.svg';
@@ -35,8 +38,13 @@ import eyeCrossed from './eye-crossed.svg';
import facebook from './facebook.svg';
import facebookLogo from './facebook-logo.svg';
import folder from './folder.svg';
+import forward5 from './forward-5.svg';
+import forward10 from './forward-10.svg';
+import forward30 from './forward-30.svg';
+import forward from './forward.svg';
import friends from './friends.svg';
import gallery from './gallery.svg';
+import garbageCan from './garbage-can.svg';
import gift from './gift.svg';
import github from './github.svg';
import hangUp from './hang-up.svg';
@@ -49,6 +57,7 @@ import like from './like.svg';
import likeHeart from './like-heart.svg';
import link from './link.svg';
import linkedin from './linkedin.svg';
+import locationPins from './location-pins.svg';
import lock from './lock.svg';
import loyaltyCard from './loyalty-card.svg';
import maps from './maps.svg';
@@ -74,8 +83,13 @@ import radiobuttonOff from './radiobutton-off.svg';
import radiobuttonOn from './radiobutton-on.svg';
import receipt from './receipt.svg';
import refresh from './refresh.svg';
+import replay5 from './replay-5.svg';
+import replay10 from './replay-10.svg';
+import replay30 from './replay-30.svg';
+import replay from './replay.svg';
import restaurant from './restaurant.svg';
import restaurantMenu from './restaurant-menu.svg';
+import restore from './restore.svg';
import rightArrow from './right-arrow.svg';
import rssFeed from './rss-feed.svg';
import rsvp from './rsvp.svg';
@@ -83,6 +97,7 @@ import search from './search.svg';
import settings from './settings.svg';
import share from './share.svg';
import shareAndroid from './share-android.svg';
+import sleep from './sleep.svg';
import sidebar from './sidebar.svg';
import socialWall from './social-wall.svg';
import stamp from './stamp.svg';
@@ -110,6 +125,7 @@ export const defaultConfig = [
{ name: 'add-to-favorites-off', icon: addToFavoritesOff },
{ name: 'add-to-favorites-on', icon: addToFavoritesOn },
{ name: 'address', icon: address },
+ { name: 'attach-media', icon: attachMedia },
{ name: 'back', icon: back },
{ name: 'books', icon: books },
{ name: 'call', icon: call },
@@ -121,12 +137,14 @@ export const defaultConfig = [
{ name: 'checkbox-rectangle-off', icon: checkboxRectangleOff },
{ name: 'checkbox-rectangle-on', icon: checkboxRectangleOn },
{ name: 'clear-text', icon: clearText },
+ { name: 'clock', icon: clock },
{ name: 'close', icon: close },
{ name: 'comment', icon: comment },
{ name: 'comments', icon: comments },
{ name: 'deals', icon: deals },
{ name: 'directions', icon: directions },
{ name: 'down-arrow', icon: downArrow },
+ { name: 'download', icon: download },
{ name: 'drop-down', icon: dropDown },
{ name: 'edit', icon: edit },
{ name: 'email', icon: email },
@@ -139,8 +157,14 @@ export const defaultConfig = [
{ name: 'facebook', icon: facebook },
{ name: 'facebook-logo', icon: facebookLogo },
{ name: 'folder', icon: folder },
+ { name: 'forward-5', icon: forward5 },
+ { name: 'forward-10', icon: forward10 },
+ { name: 'forward-30', icon: forward30 },
+ { name: 'forward', icon: forward },
{ name: 'gallery', icon: gallery },
{ name: 'friends', icon: friends },
+ { name: 'gallery', icon: gallery },
+ { name: 'garbage-can', icon: garbageCan },
{ name: 'gift', icon: gift },
{ name: 'github', icon: github },
{ name: 'hang-up', icon: hangUp },
@@ -153,6 +177,7 @@ export const defaultConfig = [
{ name: 'like-heart', icon: likeHeart },
{ name: 'link', icon: link },
{ name: 'linkedin', icon: linkedin },
+ { name: 'location-pins', icon: locationPins },
{ name: 'lock', icon: lock },
{ name: 'loyalty-card', icon: loyaltyCard },
{ name: 'maps', icon: maps },
@@ -178,8 +203,13 @@ export const defaultConfig = [
{ name: 'radiobutton-on', icon: radiobuttonOn },
{ name: 'receipt', icon: receipt },
{ name: 'refresh', icon: refresh },
+ { name: 'replay-5', icon: replay5 },
+ { name: 'replay-10', icon: replay10 },
+ { name: 'replay-30', icon: replay30 },
+ { name: 'replay', icon: replay },
{ name: 'restaurant', icon: restaurant },
{ name: 'restaurant-menu', icon: restaurantMenu },
+ { name: 'restore', icon: restore },
{ name: 'right-arrow', icon: rightArrow },
{ name: 'rss-feed', icon: rssFeed },
{ name: 'rsvp', icon: rsvp },
@@ -188,6 +218,7 @@ export const defaultConfig = [
{ name: 'share', icon: share },
{ name: 'share-android', icon: shareAndroid },
{ name: 'sidebar', icon: sidebar },
+ { name: 'sleep', icon: sleep },
{ name: 'social-wall', icon: socialWall },
{ name: 'stamp', icon: stamp },
{ name: 'stop', icon: stop },
diff --git a/components/Icon/assets/location-pins.svg b/components/Icon/assets/location-pins.svg
new file mode 100644
index 00000000..138cfedb
--- /dev/null
+++ b/components/Icon/assets/location-pins.svg
@@ -0,0 +1,3 @@
+
diff --git a/components/Icon/assets/replay-10.svg b/components/Icon/assets/replay-10.svg
new file mode 100644
index 00000000..a4031e84
--- /dev/null
+++ b/components/Icon/assets/replay-10.svg
@@ -0,0 +1,5 @@
+
diff --git a/components/Icon/assets/replay-30.svg b/components/Icon/assets/replay-30.svg
new file mode 100644
index 00000000..7f46bdc1
--- /dev/null
+++ b/components/Icon/assets/replay-30.svg
@@ -0,0 +1,6 @@
+
diff --git a/components/Icon/assets/replay-5.svg b/components/Icon/assets/replay-5.svg
new file mode 100644
index 00000000..1c136dd0
--- /dev/null
+++ b/components/Icon/assets/replay-5.svg
@@ -0,0 +1,5 @@
+
diff --git a/components/Icon/assets/replay.svg b/components/Icon/assets/replay.svg
new file mode 100644
index 00000000..b3b63e5f
--- /dev/null
+++ b/components/Icon/assets/replay.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/Icon/assets/restore.svg b/components/Icon/assets/restore.svg
new file mode 100644
index 00000000..1a44be86
--- /dev/null
+++ b/components/Icon/assets/restore.svg
@@ -0,0 +1,3 @@
+
diff --git a/components/Icon/assets/sleep.svg b/components/Icon/assets/sleep.svg
new file mode 100644
index 00000000..bcb6fac2
--- /dev/null
+++ b/components/Icon/assets/sleep.svg
@@ -0,0 +1,4 @@
+
diff --git a/components/ImagePreview.js b/components/ImagePreview.js
index 11d474d7..52713fa3 100644
--- a/components/ImagePreview.js
+++ b/components/ImagePreview.js
@@ -1,10 +1,10 @@
import React, { PureComponent } from 'react';
import { Image, Modal, TouchableOpacity, View } from 'react-native';
-import Icon from 'react-native-vector-icons/MaterialIcons';
import autoBindReact from 'auto-bind/react';
import PropTypes from 'prop-types';
import { makeZoomable } from '@shoutem/animation';
import { connectStyle } from '@shoutem/theme';
+import { Icon } from './Icon/Icon';
const ZoomableImage = makeZoomable(Image);
@@ -55,11 +55,7 @@ class ImagePreview extends PureComponent {
style={style.fullScreen}
onPress={this.onPressCloseButton}
>
-
+
);
diff --git a/components/ListView.js b/components/ListView.js
index 35448aef..4474b2cb 100644
--- a/components/ListView.js
+++ b/components/ListView.js
@@ -165,8 +165,10 @@ class ListView extends PureComponent {
// is data refreshing
mappedProps.refreshing = refreshing === Status.REFRESHING;
- // if list is empty, show empty placeholder
- if (!ListEmptyComponent) {
+ // If list is empty and user hasn't defined ListEmptyComponent in props,
+ // use default ListEmptyComponent.
+ // If ListEmptyComponent prop is null, render nothing
+ if (ListEmptyComponent === undefined) {
mappedProps.ListEmptyComponent = this.renderListEmptyComponent();
}
@@ -357,7 +359,7 @@ ListView.propTypes = {
getSectionId: PropTypes.func,
hasFeaturedItem: PropTypes.bool,
keyExtractor: PropTypes.func,
- ListEmptyComponent: PropTypes.node,
+ ListEmptyComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
loading: PropTypes.bool,
renderFeaturedItem: PropTypes.func,
renderFooter: PropTypes.func,
diff --git a/components/LoadingContainer.js b/components/LoadingContainer.js
new file mode 100644
index 00000000..885af98c
--- /dev/null
+++ b/components/LoadingContainer.js
@@ -0,0 +1,80 @@
+import React, { useMemo, useState } from 'react';
+import LottieView from 'lottie-react-native';
+import PropTypes from 'prop-types';
+import { connectStyle } from '@shoutem/theme';
+import { View } from '@shoutem/ui';
+import { animations } from '../assets';
+
+function LoadingContainer({
+ animation,
+ children,
+ loading,
+ animationScale,
+ style,
+}) {
+ const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
+
+ function onLayoutChange(event) {
+ const { width, height } = event.nativeEvent.layout;
+
+ if (width === 0 && height === 0) {
+ return;
+ }
+
+ setDimensions({ width, height });
+ }
+
+ const lottieViewDimensions = useMemo(
+ () => ({
+ width: dimensions.width * animationScale,
+ height: dimensions.height * animationScale,
+ }),
+ [animationScale, dimensions],
+ );
+
+ if (!children) {
+ return null;
+ }
+
+ return (
+
+ {!loading && {children}}
+ {loading && (
+
+
+
+ )}
+
+ );
+}
+
+LoadingContainer.propTypes = {
+ animation: PropTypes.object,
+ animationScale: PropTypes.number,
+ children: PropTypes.oneOfType([
+ PropTypes.object,
+ PropTypes.func,
+ PropTypes.node,
+ ]),
+ loading: PropTypes.bool,
+ style: PropTypes.object,
+};
+
+LoadingContainer.defaultProps = {
+ animationScale: 1,
+ children: undefined,
+ animation: animations.loadingDots,
+ loading: false,
+ style: {},
+};
+
+const StyledLoadingContainer = connectStyle('shoutem.ui.LoadingContainer')(
+ LoadingContainer,
+);
+export { StyledLoadingContainer as LoadingContainer };
diff --git a/examples/RestaurantsApp/package-lock.json b/examples/RestaurantsApp/package-lock.json
index 41393986..457b9478 100644
--- a/examples/RestaurantsApp/package-lock.json
+++ b/examples/RestaurantsApp/package-lock.json
@@ -3250,9 +3250,9 @@
"dev": true
},
"ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
@@ -12158,13 +12158,19 @@
}
},
"plist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
- "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
+ "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
"requires": {
- "base64-js": "^1.2.3",
- "xmlbuilder": "^9.0.7",
- "xmldom": "0.1.x"
+ "base64-js": "^1.5.1",
+ "xmlbuilder": "^9.0.7"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ }
}
},
"plugin-error": {
@@ -13874,9 +13880,9 @@
}
},
"ua-parser-js": {
- "version": "0.7.21",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz",
- "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ=="
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
+ "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ=="
},
"uglify-es": {
"version": "3.3.9",
@@ -14256,11 +14262,6 @@
"sax": "^1.2.1"
}
},
- "xmldom": {
- "version": "0.1.31",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
- "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
- },
"xpipe": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz",
diff --git a/examples/create-react-native-app/package-lock.json b/examples/create-react-native-app/package-lock.json
index 08459fbe..6f5c0e31 100644
--- a/examples/create-react-native-app/package-lock.json
+++ b/examples/create-react-native-app/package-lock.json
@@ -2857,9 +2857,9 @@
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
},
"ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -10760,13 +10760,19 @@
}
},
"plist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
- "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
+ "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
"requires": {
- "base64-js": "^1.2.3",
- "xmlbuilder": "^9.0.7",
- "xmldom": "0.1.x"
+ "base64-js": "^1.5.1",
+ "xmlbuilder": "^9.0.7"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ }
}
},
"plugin-error": {
@@ -12818,11 +12824,6 @@
"sax": "^1.2.1"
}
},
- "xmldom": {
- "version": "0.1.31",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
- "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
- },
"xpipe": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz",
diff --git a/index.js b/index.js
index 3389eade..dc092e8c 100644
--- a/index.js
+++ b/index.js
@@ -80,6 +80,7 @@ export { SearchField } from './components/SearchField';
export { TabMenu } from './components/TabMenu';
export { YearRangePicker } from './components/YearRangePicker';
export { DateTimePicker } from './components/DateTimePicker';
+export { LoadingContainer } from './components/LoadingContainer';
export { Examples } from './examples/components';
diff --git a/package-lock.json b/package-lock.json
index d699e39c..89600ef5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "@shoutem/ui",
- "version": "4.9.2",
+ "version": "5.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -1641,6 +1641,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
"requires": {
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
@@ -1650,12 +1651,14 @@
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
@@ -1880,7 +1883,13 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "dedent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
+ "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s="
},
"deep-eql": {
"version": "3.0.1",
@@ -1982,7 +1991,8 @@
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
},
"entities": {
"version": "1.1.2",
@@ -2638,6 +2648,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
"requires": {
"locate-path": "^3.0.0"
}
@@ -2731,7 +2742,8 @@
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
},
"get-func-name": {
"version": "2.0.0",
@@ -3147,7 +3159,8 @@
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
},
"is-glob": {
"version": "4.0.3",
@@ -3354,6 +3367,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@@ -3418,6 +3432,16 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
+ "lottie-react-native": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.0.1.tgz",
+ "integrity": "sha512-V+ODPqiHOSRzEWg8VsfrJBicgc2k0ZPlCjk3J7ULUkh94smL1nrsF/n4OGukj4MLZwonpv+frVK7pPh5U7t3rQ==",
+ "requires": {
+ "invariant": "^2.2.2",
+ "prop-types": "^15.5.10",
+ "react-native-safe-modules": "^1.0.3"
+ }
+ },
"make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
@@ -3806,6 +3830,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
"requires": {
"p-try": "^2.0.0"
}
@@ -3814,6 +3839,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
"requires": {
"p-limit": "^2.0.0"
}
@@ -3821,7 +3847,8 @@
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
},
"parent-module": {
"version": "1.0.1",
@@ -3857,7 +3884,8 @@
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
},
"path-is-absolute": {
"version": "1.0.1",
@@ -4115,6 +4143,14 @@
"stringify-entities": "^2.0.0"
}
},
+ "react-native-safe-modules": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz",
+ "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==",
+ "requires": {
+ "dedent": "^0.6.0"
+ }
+ },
"react-native-scroller": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/react-native-scroller/-/react-native-scroller-0.0.6.tgz",
@@ -4148,16 +4184,6 @@
"react-native-view-transformer": "github:shoutem/react-native-view-transformer#v0.0.29"
}
},
- "react-native-vector-icons": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz",
- "integrity": "sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw==",
- "requires": {
- "lodash": "^4.0.0",
- "prop-types": "^15.6.2",
- "yargs": "^13.2.2"
- }
- },
"react-native-view-transformer": {
"version": "github:shoutem/react-native-view-transformer#8dff34405f9b443ae5effa3660eefccbc35049ed",
"from": "github:shoutem/react-native-view-transformer#v0.0.29",
@@ -4313,12 +4339,14 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
},
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
},
"resolve": {
"version": "1.21.0",
@@ -4404,7 +4432,8 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
},
"shallow-clone": {
"version": "0.1.2",
@@ -4522,6 +4551,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
@@ -4531,12 +4561,14 @@
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
@@ -4910,7 +4942,8 @@
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
},
"wide-align": {
"version": "1.1.3",
@@ -4958,6 +4991,7 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
"requires": {
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
@@ -4967,12 +5001,14 @@
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -4981,6 +5017,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
@@ -5005,12 +5042,14 @@
"y18n": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
},
"yargs": {
"version": "13.3.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
"requires": {
"cliui": "^5.0.0",
"find-up": "^3.0.0",
@@ -5028,6 +5067,7 @@
"version": "13.1.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
diff --git a/package.json b/package.json
index 08101f60..fd9b3cc5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@shoutem/ui",
- "version": "4.9.2",
+ "version": "5.0.0",
"description": "Styleable set of components for React Native applications",
"scripts": {
"lint": "eslint .",
@@ -21,19 +21,19 @@
"html-entities": "1.3.1",
"htmlparser2": "3.10.1",
"lodash": "4.17.21",
+ "lottie-react-native": "5.0.1",
"prop-types": "15.8.1",
"qs": "6.9.3",
"react-native-device-info": "8.4.8",
"react-native-lightbox": "shoutem/react-native-lightbox#v0.7.2",
"react-native-linear-gradient": "2.5.6",
"react-native-modal": "11.7.0",
- "react-native-photo-view": "shoutem/react-native-photo-view#0ffa1481f6b6cb8663cb291b7db1d6644440584d",
+ "react-native-photo-view": "shoutem/react-native-photo-view#e7f0003",
"react-native-render-html": "4.2.5",
"react-native-render-html-table-bridge": "0.6.0",
"react-native-svg": "12.1.1",
"react-native-svg-transformer": "0.14.3",
"react-native-transformable-image": "shoutem/react-native-transformable-image#v0.0.20",
- "react-native-vector-icons": "6.6.0",
"react-native-webview": "11.0.3",
"react-native-youtube-iframe": "2.1.2",
"stream": "0.0.2",
@@ -70,9 +70,9 @@
"@react-native-community/datetimepicker",
"react-native-device-info",
"react-native-linear-gradient",
+ "lottie-react-native",
"react-native-photo-view",
"react-native-svg",
- "react-native-vector-icons",
"react-native-webview"
],
"homepage": "http://shoutem.github.io/docs/ui-toolkit/introduction",
@@ -86,40 +86,20 @@
"license": "BSD-3-Clause",
"maintainers": [
{
- "email": "bruna.andjelic@gmail.com",
- "name": "bAndelic"
+ "email": "lucija.tatarevic@shoutem.com",
+ "name": "ltatarev"
},
{
- "email": "belma.dzi@gmail.com",
- "name": "morrigan"
+ "email": "slavko@shoutem.com",
+ "name": "sstimac"
},
{
- "email": "luka.bracanovic@shoutem.com",
- "name": "MrBr"
- },
- {
- "email": "ivan@shoutem.com",
- "name": "SoHotSoup"
- },
- {
- "email": "tomislav.tenodi@shoutem.com",
- "name": "tenodi"
- },
- {
- "email": "vladimir@shoutem.com",
- "name": "Vunovati"
+ "email": "tomislav.arambasic@shoutem.com",
+ "name": "tomislav-arambasic"
},
{
"email": "vlad@definitely-not-vlad.com",
"name": "Definitely-Not-Vlad"
- },
- {
- "email": "zeljko@shoutem.com",
- "name": "zrumenjak"
- },
- {
- "email": "tomislav.arambasic@shoutem.com",
- "name": "tomislav-arambasic"
}
],
"eslintConfig": {
diff --git a/theme.js b/theme.js
index 793cdd2e..d955d0fa 100644
--- a/theme.js
+++ b/theme.js
@@ -2710,6 +2710,8 @@ export default (variables = defaultThemeVariables) => ({
color: 'white',
marginLeft: 15,
marginTop: -STATUS_BAR_OFFSET + 20,
+ height: 25,
+ width: 25,
},
},
@@ -2944,4 +2946,11 @@ export default (variables = defaultThemeVariables) => ({
borderWidth: 1,
},
},
+
+ 'shoutem.ui.LoadingContainer': {
+ container: {
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ },
});