@whatmore-repo/whatmore-reactnative-sdk 1.0.10 → 1.0.12

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 (36) hide show
  1. package/commands.txt +45 -45
  2. package/index.js +31 -31
  3. package/package.json +29 -29
  4. package/pre-integration-steps.txt +2 -2
  5. package/src/api/cart-commands/CartCommands.js +26 -26
  6. package/src/api/navigation-commands/NavigationCommands.js +16 -16
  7. package/src/api/partners/PartnerUtils.js +10 -10
  8. package/src/api/partners/appbrew/AppbrewCommands.js +26 -26
  9. package/src/api/product-details-commands/ProductDetailsCommands.js +389 -389
  10. package/src/api/shopify-commands/ShopifyCommands.js +28 -28
  11. package/src/api/whatmore-backend/WhatmoreMetricCommands.js +159 -159
  12. package/src/components/EventClickComponent.js +30 -30
  13. package/src/components/EventShoppingOverlay.js +74 -74
  14. package/src/components/EventShoppingView.js +31 -31
  15. package/src/components/EventsVerticalSwipeView.js +59 -59
  16. package/src/components/EventsVerticalSwipeViewNoModal.js +51 -51
  17. package/src/components/WhatmoreRootComponent.js +88 -88
  18. package/src/components/commons/AppMuteUnmuteIcon.js +35 -35
  19. package/src/components/cta-buttons/AddToCartButton.jsx +345 -345
  20. package/src/components/product-tiles/ProductPriceBadge.js +51 -51
  21. package/src/components/product-tiles/ProductTileV1.js +204 -204
  22. package/src/components/product-tiles/SelectVariantComponent.js +116 -116
  23. package/src/components/video-player/AppVideoPlayer.js +25 -25
  24. package/src/constants/AppGlobalVars.js +12 -12
  25. package/src/globals/useAppState_APP.js +17 -17
  26. package/src/hooks/useAddToCartStates.js +194 -194
  27. package/src/icons/icon-components/CartIcon.jsx +26 -26
  28. package/src/icons/icon-components/LoadingIcon.jsx +17 -17
  29. package/src/icons/icon-components/MuteIcon.jsx +22 -22
  30. package/src/icons/icon-components/PlusIcon.jsx +26 -26
  31. package/src/icons/icon-components/UnmuteIcon.jsx +22 -22
  32. package/src/icons/svg-utils.txt +6 -6
  33. package/src/utils/ColorUtils.js +39 -39
  34. package/src/utils/EventSanityUtils.js +21 -21
  35. package/src/utils/PriceUtils.js +27 -27
  36. package/src/utils/ProductUtils.js +5 -5
@@ -1,195 +1,195 @@
1
- import { useRef } from "react";
2
- import { useState } from "react";
3
- import { getGlobalState, setGlobalState, useGlobalState } from "../globals/useAppState_APP";
4
- import { increaseEventProductAddToCartCount } from "../api/whatmore-backend/WhatmoreMetricCommands.js";
5
- import { productDetailsDetailed } from "../api/product-details-commands/ProductDetailsCommands.js";
6
- import { addToCartCommand } from "../api/cart-commands/CartCommands";
7
-
8
-
9
- /**
10
- *
11
- * @param {*} initialCartCount initial count of product in cart
12
- * @returns
13
- */
14
- function useAddToCartStates(initialCartCount, product, event){
15
- const whatmoreShopId = getGlobalState('whatmoreShopId');
16
- const isInDesignMode = getGlobalState('isInDesignMode');
17
- const isDemoBrand = getGlobalState('isDemoBrand');
18
- const brandDomainContext = getGlobalState('brandDomainContext');
19
-
20
- const [productVariantOptions, setProductVariantOptions] = useState(null);
21
- const productVariantDetailsRef = useRef(null);
22
-
23
- /**
24
- *
25
- * init -> productVariantDetailsApiCallInProgress -> awaitingVariantSelection -> atcApiCallInProgress -> init(+1)
26
- * -> errored
27
- */
28
- const [cartState, setCartState] = useState(
29
- {"state" : "init", "cart_count" : initialCartCount}
30
- );
31
-
32
- function updateCartState(newState, newCartCount){
33
- setCartState({"state" : newState, "cart_count" : (newCartCount ?? cartState["cart_count"])});
34
-
35
- // disable auto slide according to cart state
36
- if(!(newState == "init" || newState == "errored")){
37
- setGlobalState("whatmoreAllowAutoSlide", false);
38
- }else{
39
- setGlobalState("whatmoreAllowAutoSlide", true);
40
- }
41
- }
42
-
43
- function _getVariantIdFromSelectedOption(selectedOptions){
44
- const matchedVariants = productVariantDetailsRef.current.filter(variant =>
45
- variant.option1 == selectedOptions[0] && variant.option2 == selectedOptions[1] && variant.option3 == selectedOptions[2]);
46
-
47
- if(matchedVariants.length == 0){return null;}
48
- return matchedVariants[0]['id'];
49
- }
50
-
51
- function getPriceDetailsFromSelectedOption(selectedOptions){
52
- const matchedVariants = productVariantDetailsRef.current.filter(variant =>
53
- variant.option1 == selectedOptions[0] && variant.option2 == selectedOptions[1] && variant.option3 == selectedOptions[2]);
54
-
55
- if(matchedVariants.length == 0){return null;}
56
-
57
- const price = matchedVariants[0]['price'] ?? 0;
58
- const comparePrice = matchedVariants[0]['compare_at_price'] ?? 0;
59
- return {
60
- 'price': (price / 100.0),
61
- 'compare_price': (comparePrice / 100.0)
62
- }
63
- }
64
-
65
- function _getVariantOptions(result){
66
- var options1 = [];
67
- var options2 = [];
68
- var options3 = [];
69
-
70
- result.variants.forEach(variant => {
71
- variant.option1 && options1.push({"option" : variant.option1, "available" : variant.available ?? true, "type": result.options[0].name});
72
- variant.option2 && options2.push({"option" : variant.option2, "available" : variant.available ?? true, "type": result.options[1].name});
73
- variant.option3 && options3.push({"option" : variant.option3, "available" : variant.available ?? true, "type": result.options[2].name});
74
- });
75
-
76
- options1 = options1.reduce((result, option, index) => {
77
- var res = result.filter(_option => _option['option'] == option['option']);
78
- if(res.length == 0){
79
- return [...result, option];
80
- }
81
- return result;
82
- }, []);
83
-
84
- options2 = options2.reduce((result, option, index) => {
85
- var res = result.filter(_option => _option['option'] == option['option']);
86
- if(res.length == 0){
87
- return [...result, option];
88
- }
89
- return result;
90
- }, []);
91
-
92
- options3 = options3.reduce((result, option, index) => {
93
- var res = result.filter(_option => _option['option'] == option['option']);
94
- if(res.length == 0){
95
- return [...result, option];
96
- }
97
- return result;
98
- }, []);
99
-
100
- return [options1, options2, options3];
101
- }
102
-
103
- function _getFirstAvailableOption(options){
104
- if(options.length == 0){return null;}
105
-
106
- const availableOptions = options.filter(option => option['available']);
107
- if(availableOptions.length == 0){return null;}
108
-
109
- return availableOptions[0]['option'];
110
- }
111
-
112
- function _isSingleVariantProduct(variantOptions){
113
- return variantOptions[0].length <= 1 && variantOptions[1].length <= 1 && variantOptions[2].length <= 1;
114
- }
115
-
116
- function _atleastOneVariantAvailableInStock(){
117
- if(productVariantDetailsRef.current && productVariantDetailsRef.current.length >= 1){
118
- const availableVariants = productVariantDetailsRef.current.filter(variant => variant.available);
119
- return availableVariants.length >= 1;
120
- }
121
- return false;
122
- }
123
-
124
- function initiateVariantSelection(handleAtcCall){
125
- updateCartState("productVariantDetailsApiCallInProgress", null)
126
- productDetailsDetailed(product, brandDomainContext, whatmoreShopId)
127
- .then(result => {
128
- productVariantDetailsRef.current = result.variants;
129
- const variantOptions = _getVariantOptions(result);
130
- setProductVariantOptions(variantOptions);
131
-
132
- if(_isSingleVariantProduct(variantOptions)){
133
- if(!_atleastOneVariantAvailableInStock()){
134
- updateCartState("errored", null);
135
- }else{
136
- initiateAtcApiCall([
137
- _getFirstAvailableOption(variantOptions[0]),
138
- _getFirstAvailableOption(variantOptions[1]),
139
- _getFirstAvailableOption(variantOptions[2])
140
- ], handleAtcCall);
141
- }
142
- }else{
143
- updateCartState("awaitingVariantSelection", null);
144
- }
145
- })
146
- .catch(error => {
147
- updateCartState("errored", null);
148
- });
149
- }
150
-
151
- function pushAddToCartMetric(event, product, quantity){
152
- if(!isInDesignMode && !isDemoBrand){
153
- (async () => {
154
- increaseEventProductAddToCartCount(event, product, quantity);
155
- })();
156
- }
157
- }
158
-
159
- function initiateAtcApiCall(selectedOptions){
160
- const variantId = _getVariantIdFromSelectedOption(selectedOptions);
161
- if(!variantId){
162
- updateCartState("init", cartState["cart_count"]);
163
- return;
164
- }
165
-
166
- const itemQuantity = 1;
167
-
168
- updateCartState("atcApiCallInProgress", null);
169
-
170
- const res = addToCartCommand(variantId, itemQuantity, product, brandDomainContext, whatmoreShopId);
171
- res.then((isSuccess) => {
172
- if(isSuccess){
173
- pushAddToCartMetric(event, product, itemQuantity);
174
- updateCartState("init", cartState["cart_count"] + 1);
175
- setGlobalState("whatmoreAddedToCart", true);
176
- }else{
177
- updateCartState("errored", null);
178
- console.error('Error while adding to cart:', error);
179
- }
180
- })
181
- .catch((error) => {
182
- updateCartState("errored", null);
183
- console.error('Error while adding to cart:', error);
184
- });
185
- }
186
-
187
- function initiateAtcCartIconClickAction(){
188
- return;
189
- }
190
-
191
- return [cartState, productVariantOptions, initiateVariantSelection, initiateAtcApiCall, getPriceDetailsFromSelectedOption, initiateAtcCartIconClickAction];
192
-
193
- }
194
-
1
+ import { useRef } from "react";
2
+ import { useState } from "react";
3
+ import { getGlobalState, setGlobalState, useGlobalState } from "../globals/useAppState_APP";
4
+ import { increaseEventProductAddToCartCount } from "../api/whatmore-backend/WhatmoreMetricCommands.js";
5
+ import { productDetailsDetailed } from "../api/product-details-commands/ProductDetailsCommands.js";
6
+ import { addToCartCommand } from "../api/cart-commands/CartCommands";
7
+
8
+
9
+ /**
10
+ *
11
+ * @param {*} initialCartCount initial count of product in cart
12
+ * @returns
13
+ */
14
+ function useAddToCartStates(initialCartCount, product, event){
15
+ const whatmoreShopId = getGlobalState('whatmoreShopId');
16
+ const isInDesignMode = getGlobalState('isInDesignMode');
17
+ const isDemoBrand = getGlobalState('isDemoBrand');
18
+ const brandDomainContext = getGlobalState('brandDomainContext');
19
+
20
+ const [productVariantOptions, setProductVariantOptions] = useState(null);
21
+ const productVariantDetailsRef = useRef(null);
22
+
23
+ /**
24
+ *
25
+ * init -> productVariantDetailsApiCallInProgress -> awaitingVariantSelection -> atcApiCallInProgress -> init(+1)
26
+ * -> errored
27
+ */
28
+ const [cartState, setCartState] = useState(
29
+ {"state" : "init", "cart_count" : initialCartCount}
30
+ );
31
+
32
+ function updateCartState(newState, newCartCount){
33
+ setCartState({"state" : newState, "cart_count" : (newCartCount ?? cartState["cart_count"])});
34
+
35
+ // disable auto slide according to cart state
36
+ if(!(newState == "init" || newState == "errored")){
37
+ setGlobalState("whatmoreAllowAutoSlide", false);
38
+ }else{
39
+ setGlobalState("whatmoreAllowAutoSlide", true);
40
+ }
41
+ }
42
+
43
+ function _getVariantIdFromSelectedOption(selectedOptions){
44
+ const matchedVariants = productVariantDetailsRef.current.filter(variant =>
45
+ variant.option1 == selectedOptions[0] && variant.option2 == selectedOptions[1] && variant.option3 == selectedOptions[2]);
46
+
47
+ if(matchedVariants.length == 0){return null;}
48
+ return matchedVariants[0]['id'];
49
+ }
50
+
51
+ function getPriceDetailsFromSelectedOption(selectedOptions){
52
+ const matchedVariants = productVariantDetailsRef.current.filter(variant =>
53
+ variant.option1 == selectedOptions[0] && variant.option2 == selectedOptions[1] && variant.option3 == selectedOptions[2]);
54
+
55
+ if(matchedVariants.length == 0){return null;}
56
+
57
+ const price = matchedVariants[0]['price'] ?? 0;
58
+ const comparePrice = matchedVariants[0]['compare_at_price'] ?? 0;
59
+ return {
60
+ 'price': (price / 100.0),
61
+ 'compare_price': (comparePrice / 100.0)
62
+ }
63
+ }
64
+
65
+ function _getVariantOptions(result){
66
+ var options1 = [];
67
+ var options2 = [];
68
+ var options3 = [];
69
+
70
+ result.variants.forEach(variant => {
71
+ variant.option1 && options1.push({"option" : variant.option1, "available" : variant.available ?? true, "type": result.options[0].name});
72
+ variant.option2 && options2.push({"option" : variant.option2, "available" : variant.available ?? true, "type": result.options[1].name});
73
+ variant.option3 && options3.push({"option" : variant.option3, "available" : variant.available ?? true, "type": result.options[2].name});
74
+ });
75
+
76
+ options1 = options1.reduce((result, option, index) => {
77
+ var res = result.filter(_option => _option['option'] == option['option']);
78
+ if(res.length == 0){
79
+ return [...result, option];
80
+ }
81
+ return result;
82
+ }, []);
83
+
84
+ options2 = options2.reduce((result, option, index) => {
85
+ var res = result.filter(_option => _option['option'] == option['option']);
86
+ if(res.length == 0){
87
+ return [...result, option];
88
+ }
89
+ return result;
90
+ }, []);
91
+
92
+ options3 = options3.reduce((result, option, index) => {
93
+ var res = result.filter(_option => _option['option'] == option['option']);
94
+ if(res.length == 0){
95
+ return [...result, option];
96
+ }
97
+ return result;
98
+ }, []);
99
+
100
+ return [options1, options2, options3];
101
+ }
102
+
103
+ function _getFirstAvailableOption(options){
104
+ if(options.length == 0){return null;}
105
+
106
+ const availableOptions = options.filter(option => option['available']);
107
+ if(availableOptions.length == 0){return null;}
108
+
109
+ return availableOptions[0]['option'];
110
+ }
111
+
112
+ function _isSingleVariantProduct(variantOptions){
113
+ return variantOptions[0].length <= 1 && variantOptions[1].length <= 1 && variantOptions[2].length <= 1;
114
+ }
115
+
116
+ function _atleastOneVariantAvailableInStock(){
117
+ if(productVariantDetailsRef.current && productVariantDetailsRef.current.length >= 1){
118
+ const availableVariants = productVariantDetailsRef.current.filter(variant => variant.available);
119
+ return availableVariants.length >= 1;
120
+ }
121
+ return false;
122
+ }
123
+
124
+ function initiateVariantSelection(handleAtcCall){
125
+ updateCartState("productVariantDetailsApiCallInProgress", null)
126
+ productDetailsDetailed(product, brandDomainContext, whatmoreShopId)
127
+ .then(result => {
128
+ productVariantDetailsRef.current = result.variants;
129
+ const variantOptions = _getVariantOptions(result);
130
+ setProductVariantOptions(variantOptions);
131
+
132
+ if(_isSingleVariantProduct(variantOptions)){
133
+ if(!_atleastOneVariantAvailableInStock()){
134
+ updateCartState("errored", null);
135
+ }else{
136
+ initiateAtcApiCall([
137
+ _getFirstAvailableOption(variantOptions[0]),
138
+ _getFirstAvailableOption(variantOptions[1]),
139
+ _getFirstAvailableOption(variantOptions[2])
140
+ ], handleAtcCall);
141
+ }
142
+ }else{
143
+ updateCartState("awaitingVariantSelection", null);
144
+ }
145
+ })
146
+ .catch(error => {
147
+ updateCartState("errored", null);
148
+ });
149
+ }
150
+
151
+ function pushAddToCartMetric(event, product, quantity){
152
+ if(!isInDesignMode && !isDemoBrand){
153
+ (async () => {
154
+ increaseEventProductAddToCartCount(event, product, quantity);
155
+ })();
156
+ }
157
+ }
158
+
159
+ function initiateAtcApiCall(selectedOptions){
160
+ const variantId = _getVariantIdFromSelectedOption(selectedOptions);
161
+ if(!variantId){
162
+ updateCartState("init", cartState["cart_count"]);
163
+ return;
164
+ }
165
+
166
+ const itemQuantity = 1;
167
+
168
+ updateCartState("atcApiCallInProgress", null);
169
+
170
+ const res = addToCartCommand(variantId, itemQuantity, product, brandDomainContext, whatmoreShopId);
171
+ res.then((isSuccess) => {
172
+ if(isSuccess){
173
+ pushAddToCartMetric(event, product, itemQuantity);
174
+ updateCartState("init", cartState["cart_count"] + 1);
175
+ setGlobalState("whatmoreAddedToCart", true);
176
+ }else{
177
+ updateCartState("errored", null);
178
+ console.error('Error while adding to cart:', error);
179
+ }
180
+ })
181
+ .catch((error) => {
182
+ updateCartState("errored", null);
183
+ console.error('Error while adding to cart:', error);
184
+ });
185
+ }
186
+
187
+ function initiateAtcCartIconClickAction(){
188
+ return;
189
+ }
190
+
191
+ return [cartState, productVariantOptions, initiateVariantSelection, initiateAtcApiCall, getPriceDetailsFromSelectedOption, initiateAtcCartIconClickAction];
192
+
193
+ }
194
+
195
195
  export default useAddToCartStates;
@@ -1,27 +1,27 @@
1
- import * as React from 'react';
2
- import Svg, { G, Path } from 'react-native-svg';
3
-
4
- function CartIcon(props) {
5
- const fillColor = props.color || '#FFFFFF';
6
- const width = props.size || 40;
7
- const height = props.size || 40;
8
-
9
- return (
10
- <Svg
11
- width={width} height={height}
12
- viewBox="0 0 24 24"
13
- {...props}
14
- >
15
- <G fill={fillColor}>
16
- <Path d="M4.468 10.266l.024.216.126 1.131c.088.794.164 1.483.298 2.033.143.59.38 1.148.873 1.59.494.441 1.074.615 1.677.692C8.026 16 8.72 16 9.519 16h5.353c.548 0 1.032 0 1.435-.041.438-.044.863-.143 1.271-.389.41-.246.695-.576.94-.941.224-.338.45-.765.707-1.25l2.49-4.702C22.596 7.01 21.387 5 19.5 5H9.399c-.983 0-1.824 0-2.49.093a3.974 3.974 0 00-.976.25L5.79 4.05A2.303 2.303 0 003.5 2H3a1 1 0 100 2h.5c.155 0 .285.116.302.27l.666 5.996z" />
17
- <Path
18
- fillRule="evenodd"
19
- clipRule="evenodd"
20
- d="M14 19.5a2.5 2.5 0 115 0 2.5 2.5 0 01-5 0zM5 19.5a2.5 2.5 0 115 0 2.5 2.5 0 01-5 0z"
21
- />
22
- </G>
23
- </Svg>
24
- );
25
- }
26
-
1
+ import * as React from 'react';
2
+ import Svg, { G, Path } from 'react-native-svg';
3
+
4
+ function CartIcon(props) {
5
+ const fillColor = props.color || '#FFFFFF';
6
+ const width = props.size || 40;
7
+ const height = props.size || 40;
8
+
9
+ return (
10
+ <Svg
11
+ width={width} height={height}
12
+ viewBox="0 0 24 24"
13
+ {...props}
14
+ >
15
+ <G fill={fillColor}>
16
+ <Path d="M4.468 10.266l.024.216.126 1.131c.088.794.164 1.483.298 2.033.143.59.38 1.148.873 1.59.494.441 1.074.615 1.677.692C8.026 16 8.72 16 9.519 16h5.353c.548 0 1.032 0 1.435-.041.438-.044.863-.143 1.271-.389.41-.246.695-.576.94-.941.224-.338.45-.765.707-1.25l2.49-4.702C22.596 7.01 21.387 5 19.5 5H9.399c-.983 0-1.824 0-2.49.093a3.974 3.974 0 00-.976.25L5.79 4.05A2.303 2.303 0 003.5 2H3a1 1 0 100 2h.5c.155 0 .285.116.302.27l.666 5.996z" />
17
+ <Path
18
+ fillRule="evenodd"
19
+ clipRule="evenodd"
20
+ d="M14 19.5a2.5 2.5 0 115 0 2.5 2.5 0 01-5 0zM5 19.5a2.5 2.5 0 115 0 2.5 2.5 0 01-5 0z"
21
+ />
22
+ </G>
23
+ </Svg>
24
+ );
25
+ }
26
+
27
27
  export default CartIcon;
@@ -1,18 +1,18 @@
1
- import * as React from 'react';
2
- import Svg, { G, Path } from 'react-native-svg';
3
-
4
- function LoadingIcon(props) {
5
- const fillColor = props.color || '#FFFFFF';
6
- const width = props.size || 40;
7
- const height = props.size || 40;
8
-
9
- return (
10
- <Svg width={width} height={height} viewBox="-7 0 32 32" xmlns="http://www.w3.org/2000/svg" {...props}>
11
- <G fill={fillColor}>
12
- <Path d="M2.08 14.04l4-1.04c.44-.12.72-.56.6-1.04a.847.847 0 00-1.04-.6l-2.08.56c.68-.88 1.56-1.6 2.64-2.08 1.64-.72 3.44-.76 5.12-.12A6.75 6.75 0 0115 13.24c.2.44.68.6 1.12.44.44-.2.6-.68.44-1.12-.88-2.04-2.52-3.6-4.6-4.44-2.08-.8-4.36-.76-6.4.12-1.36.6-2.48 1.52-3.36 2.68l-.52-1.96a.847.847 0 00-1.04-.6c-.44.12-.72.56-.6 1.04l1.04 4c.12.56.4.8 1 .64zm15.64 8.48l-1.04-3.96s-.16-.8-.96-.6l-4 1.04c-.44.12-.72.56-.6 1.04.12.44.56.72 1.04.6l2.08-.56a6.62 6.62 0 01-7.72 2.16 6.75 6.75 0 01-3.68-3.52c-.2-.44-.68-.6-1.12-.44-.44.2-.6.68-.44 1.12.88 2.04 2.52 3.6 4.6 4.44 1 .4 2 .56 3.04.56 2.64 0 5.12-1.24 6.72-3.4l.52 1.96c.08.36.44.64.8.64.08 0 .16 0 .2-.04.4-.16.68-.6.56-1.04z" />
13
- </G>
14
- </Svg>
15
- );
16
- }
17
-
1
+ import * as React from 'react';
2
+ import Svg, { G, Path } from 'react-native-svg';
3
+
4
+ function LoadingIcon(props) {
5
+ const fillColor = props.color || '#FFFFFF';
6
+ const width = props.size || 40;
7
+ const height = props.size || 40;
8
+
9
+ return (
10
+ <Svg width={width} height={height} viewBox="-7 0 32 32" xmlns="http://www.w3.org/2000/svg" {...props}>
11
+ <G fill={fillColor}>
12
+ <Path d="M2.08 14.04l4-1.04c.44-.12.72-.56.6-1.04a.847.847 0 00-1.04-.6l-2.08.56c.68-.88 1.56-1.6 2.64-2.08 1.64-.72 3.44-.76 5.12-.12A6.75 6.75 0 0115 13.24c.2.44.68.6 1.12.44.44-.2.6-.68.44-1.12-.88-2.04-2.52-3.6-4.6-4.44-2.08-.8-4.36-.76-6.4.12-1.36.6-2.48 1.52-3.36 2.68l-.52-1.96a.847.847 0 00-1.04-.6c-.44.12-.72.56-.6 1.04l1.04 4c.12.56.4.8 1 .64zm15.64 8.48l-1.04-3.96s-.16-.8-.96-.6l-4 1.04c-.44.12-.72.56-.6 1.04.12.44.56.72 1.04.6l2.08-.56a6.62 6.62 0 01-7.72 2.16 6.75 6.75 0 01-3.68-3.52c-.2-.44-.68-.6-1.12-.44-.44.2-.6.68-.44 1.12.88 2.04 2.52 3.6 4.6 4.44 1 .4 2 .56 3.04.56 2.64 0 5.12-1.24 6.72-3.4l.52 1.96c.08.36.44.64.8.64.08 0 .16 0 .2-.04.4-.16.68-.6.56-1.04z" />
13
+ </G>
14
+ </Svg>
15
+ );
16
+ }
17
+
18
18
  export default LoadingIcon;
@@ -1,23 +1,23 @@
1
- import * as React from 'react';
2
- import Svg, { G, Path } from 'react-native-svg';
3
-
4
- function MuteIcon(props) {
5
- const fillColor = props.color || '#FFFFFF';
6
- const width = props.size || 40;
7
- const height = props.size || 40;
8
-
9
- return (
10
- <Svg width={width} height={height} viewBox="-1.44 -1.44 26.88 26.88" {...props}>
11
- <G fill={fillColor}>
12
- <Path
13
- fillRule="evenodd"
14
- clipRule="evenodd"
15
- d="M20.515 6.316a.75.75 0 01.991.376c.468 1.035.994 2.768.994 5.308 0 2.192-.392 3.783-.8 4.844-.204.53-.41.925-.572 1.195a4.73 4.73 0 01-.289.425l-.007.01-.003.003-.002.002L20.25 18l.576.48a.75.75 0 01-1.156-.956l.003-.004.031-.041a3.27 3.27 0 00.137-.212c.12-.199.288-.516.459-.961.342-.889.7-2.298.7-4.306 0-2.326-.48-3.849-.86-4.692a.75.75 0 01.375-.992zM18.414 9.266a.75.75 0 01.887.582c.11.53.199 1.24.199 2.152 0 1.11-.132 1.923-.273 2.474-.071.275-.144.484-.203.631a2.947 2.947 0 01-.102.228l-.01.018-.003.007-.002.003v.002s-.001.001-.657-.363l.656.364a.75.75 0 01-1.317-.719l.005-.01c.007-.015.02-.043.038-.087a3.66 3.66 0 00.141-.447c.11-.424.227-1.111.227-2.101 0-.813-.08-1.421-.168-1.848a.75.75 0 01.582-.886z"
16
- />
17
- <Path d="M21.78 3.53a.75.75 0 00-1.06-1.06l-4.45 4.449a11.265 11.265 0 00-.193-1.39c-.172-.788-.477-1.473-1.116-1.923a3.066 3.066 0 00-.769-.39c-.818-.28-1.631-.057-2.457.345-.814.395-1.8 1.046-3.032 1.857l-.267.176c-.447.295-.602.394-.76.464-.171.076-.35.13-.535.16-.171.03-.354.032-.89.032h-.162c-1.217 0-2.062-.001-2.814.347A3.962 3.962 0 001.548 8.22c-.392.729-.438 1.491-.504 2.575l-.008.13C1.014 11.294 1 11.658 1 12c0 .342.014.706.036 1.074l.008.13c.066 1.084.112 1.846.504 2.575a3.962 3.962 0 001.727 1.624c.61.283 1.283.336 2.166.345L2.72 20.47a.75.75 0 101.06 1.06l18-18zM16.5 12a.75.75 0 00-1.255-.554l-.071.074-6 6.274A.778.778 0 009.34 19c1.039.68 1.899 1.225 2.631 1.549.743.328 1.48.489 2.222.236.272-.093.534-.226.769-.391.706-.497 1.005-1.28 1.167-2.18.159-.884.213-2.056.281-3.516l.003-.058c.052-1.115.088-2.088.088-2.64z" />
18
- </G>
19
- </Svg>
20
- );
21
- }
22
-
1
+ import * as React from 'react';
2
+ import Svg, { G, Path } from 'react-native-svg';
3
+
4
+ function MuteIcon(props) {
5
+ const fillColor = props.color || '#FFFFFF';
6
+ const width = props.size || 40;
7
+ const height = props.size || 40;
8
+
9
+ return (
10
+ <Svg width={width} height={height} viewBox="-1.44 -1.44 26.88 26.88" {...props}>
11
+ <G fill={fillColor}>
12
+ <Path
13
+ fillRule="evenodd"
14
+ clipRule="evenodd"
15
+ d="M20.515 6.316a.75.75 0 01.991.376c.468 1.035.994 2.768.994 5.308 0 2.192-.392 3.783-.8 4.844-.204.53-.41.925-.572 1.195a4.73 4.73 0 01-.289.425l-.007.01-.003.003-.002.002L20.25 18l.576.48a.75.75 0 01-1.156-.956l.003-.004.031-.041a3.27 3.27 0 00.137-.212c.12-.199.288-.516.459-.961.342-.889.7-2.298.7-4.306 0-2.326-.48-3.849-.86-4.692a.75.75 0 01.375-.992zM18.414 9.266a.75.75 0 01.887.582c.11.53.199 1.24.199 2.152 0 1.11-.132 1.923-.273 2.474-.071.275-.144.484-.203.631a2.947 2.947 0 01-.102.228l-.01.018-.003.007-.002.003v.002s-.001.001-.657-.363l.656.364a.75.75 0 01-1.317-.719l.005-.01c.007-.015.02-.043.038-.087a3.66 3.66 0 00.141-.447c.11-.424.227-1.111.227-2.101 0-.813-.08-1.421-.168-1.848a.75.75 0 01.582-.886z"
16
+ />
17
+ <Path d="M21.78 3.53a.75.75 0 00-1.06-1.06l-4.45 4.449a11.265 11.265 0 00-.193-1.39c-.172-.788-.477-1.473-1.116-1.923a3.066 3.066 0 00-.769-.39c-.818-.28-1.631-.057-2.457.345-.814.395-1.8 1.046-3.032 1.857l-.267.176c-.447.295-.602.394-.76.464-.171.076-.35.13-.535.16-.171.03-.354.032-.89.032h-.162c-1.217 0-2.062-.001-2.814.347A3.962 3.962 0 001.548 8.22c-.392.729-.438 1.491-.504 2.575l-.008.13C1.014 11.294 1 11.658 1 12c0 .342.014.706.036 1.074l.008.13c.066 1.084.112 1.846.504 2.575a3.962 3.962 0 001.727 1.624c.61.283 1.283.336 2.166.345L2.72 20.47a.75.75 0 101.06 1.06l18-18zM16.5 12a.75.75 0 00-1.255-.554l-.071.074-6 6.274A.778.778 0 009.34 19c1.039.68 1.899 1.225 2.631 1.549.743.328 1.48.489 2.222.236.272-.093.534-.226.769-.391.706-.497 1.005-1.28 1.167-2.18.159-.884.213-2.056.281-3.516l.003-.058c.052-1.115.088-2.088.088-2.64z" />
18
+ </G>
19
+ </Svg>
20
+ );
21
+ }
22
+
23
23
  export default MuteIcon;
@@ -1,27 +1,27 @@
1
- import * as React from 'react';
2
- import Svg, { G, Path } from 'react-native-svg';
3
-
4
- function PlusIcon(props) {
5
- const fillColor = props.color || '#FFFFFF';
6
- const width = props.size || 40;
7
- const height = props.size || 40;
8
-
9
- return (
10
- <Svg
11
- width={width} height={height}
12
- viewBox="0 0 24 24"
13
- {...props}
14
- >
15
- <G fill={fillColor}>
16
- <Path fill="#fff" d="M0 0H24V24H0z" />
17
- <Path
18
- fillRule="evenodd"
19
- clipRule="evenodd"
20
- d="M13 9a1 1 0 10-2 0v2H9a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V9zM7.25 2.388C8.55 2.099 10.124 2 12 2s3.451.1 4.75.388c1.31.291 2.399.788 3.236 1.626.838.837 1.335 1.926 1.626 3.236C21.901 8.55 22 10.124 22 12s-.1 3.451-.388 4.75c-.291 1.31-.788 2.399-1.626 3.236-.837.838-1.926 1.335-3.236 1.626-1.299.289-2.874.388-4.75.388s-3.451-.1-4.75-.388c-1.31-.291-2.399-.788-3.236-1.626-.838-.837-1.335-1.926-1.626-3.236C2.099 15.45 2 13.876 2 12s.1-3.451.388-4.75c.291-1.31.788-2.399 1.626-3.236.837-.838 1.926-1.335 3.236-1.626z"
21
- />
22
- </G>
23
- </Svg>
24
- );
25
- }
26
-
1
+ import * as React from 'react';
2
+ import Svg, { G, Path } from 'react-native-svg';
3
+
4
+ function PlusIcon(props) {
5
+ const fillColor = props.color || '#FFFFFF';
6
+ const width = props.size || 40;
7
+ const height = props.size || 40;
8
+
9
+ return (
10
+ <Svg
11
+ width={width} height={height}
12
+ viewBox="0 0 24 24"
13
+ {...props}
14
+ >
15
+ <G fill={fillColor}>
16
+ <Path fill="#fff" d="M0 0H24V24H0z" />
17
+ <Path
18
+ fillRule="evenodd"
19
+ clipRule="evenodd"
20
+ d="M13 9a1 1 0 10-2 0v2H9a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V9zM7.25 2.388C8.55 2.099 10.124 2 12 2s3.451.1 4.75.388c1.31.291 2.399.788 3.236 1.626.838.837 1.335 1.926 1.626 3.236C21.901 8.55 22 10.124 22 12s-.1 3.451-.388 4.75c-.291 1.31-.788 2.399-1.626 3.236-.837.838-1.926 1.335-3.236 1.626-1.299.289-2.874.388-4.75.388s-3.451-.1-4.75-.388c-1.31-.291-2.399-.788-3.236-1.626-.838-.837-1.335-1.926-1.626-3.236C2.099 15.45 2 13.876 2 12s.1-3.451.388-4.75c.291-1.31.788-2.399 1.626-3.236.837-.838 1.926-1.335 3.236-1.626z"
21
+ />
22
+ </G>
23
+ </Svg>
24
+ );
25
+ }
26
+
27
27
  export default PlusIcon;
@@ -1,23 +1,23 @@
1
- import * as React from 'react';
2
- import Svg, { G, Path } from 'react-native-svg';
3
-
4
- function UnmuteIcon(props) {
5
- const fillColor = props.color || '#FFFFFF';
6
- const width = props.size || 40;
7
- const height = props.size || 40;
8
-
9
- return (
10
- <Svg width={width} height={height} viewBox="0 0 24 24" {...props}>
11
- <G fill={fillColor}>
12
- <Path d="M2.003 11.716c.037-1.843.056-2.764.668-3.552.112-.144.276-.315.413-.431.752-.636 1.746-.636 3.733-.636.71 0 1.065 0 1.403-.092.07-.02.14-.042.209-.067.33-.121.627-.33 1.22-.746 2.338-1.645 3.508-2.467 4.489-2.11.188.069.37.168.533.29.848.635.913 2.115 1.042 5.073.048 1.096.08 2.034.08 2.555 0 .521-.032 1.46-.08 2.555-.13 2.958-.194 4.438-1.042 5.073-.163.122-.345.221-.533.29-.982.357-2.15-.465-4.49-2.11-.592-.416-.889-.625-1.22-.746a2.61 2.61 0 00-.208-.067c-.338-.092-.693-.092-1.403-.092-1.987 0-2.98 0-3.733-.636a3.145 3.145 0 01-.413-.43c-.612-.79-.63-1.71-.668-3.553a14.06 14.06 0 010-.569z" />
13
- <Path
14
- fillRule="evenodd"
15
- clipRule="evenodd"
16
- d="M19.49 5.552a.66.66 0 01.97.094l-.529.471.53-.47.002.002.003.004.007.009a2.572 2.572 0 01.079.112c.047.071.111.173.186.305.149.264.339.652.526 1.171C21.64 8.291 22 9.851 22 12c0 2.15-.36 3.71-.736 4.75-.187.52-.377.907-.526 1.172a4.655 4.655 0 01-.265.417l-.007.009-.003.003-.001.002s-.001.001-.531-.47l.53.471a.66.66 0 01-.971.094.77.77 0 01-.09-1.035l.03-.041c.026-.04.07-.11.125-.207a6.28 6.28 0 00.422-.943c.314-.871.644-2.253.644-4.222 0-1.97-.33-3.35-.644-4.222a6.28 6.28 0 00-.422-.942 3.152 3.152 0 00-.157-.253M17.757 8.416c.333-.197.753-.07.938.286l-.603.357.603-.357.001.002.002.003.003.007.01.018.024.053c.018.042.042.099.07.17.053.145.12.35.185.62.13.54.252 1.337.252 2.425 0 1.089-.122 1.886-.252 2.426-.065.27-.132.475-.186.619a3.04 3.04 0 01-.094.223l-.009.018-.003.007-.002.003v.002s-.001.001-.604-.356l.603.357c-.185.355-.605.483-.938.286-.33-.196-.45-.638-.272-.991l.004-.01.035-.085c.032-.086.08-.23.13-.438.1-.416.208-1.09.208-2.06 0-.971-.108-1.645-.208-2.06a3.757 3.757 0 00-.165-.524l-.004-.01c-.179-.354-.058-.795.272-.991z"
17
- />
18
- </G>
19
- </Svg>
20
- );
21
- }
22
-
1
+ import * as React from 'react';
2
+ import Svg, { G, Path } from 'react-native-svg';
3
+
4
+ function UnmuteIcon(props) {
5
+ const fillColor = props.color || '#FFFFFF';
6
+ const width = props.size || 40;
7
+ const height = props.size || 40;
8
+
9
+ return (
10
+ <Svg width={width} height={height} viewBox="0 0 24 24" {...props}>
11
+ <G fill={fillColor}>
12
+ <Path d="M2.003 11.716c.037-1.843.056-2.764.668-3.552.112-.144.276-.315.413-.431.752-.636 1.746-.636 3.733-.636.71 0 1.065 0 1.403-.092.07-.02.14-.042.209-.067.33-.121.627-.33 1.22-.746 2.338-1.645 3.508-2.467 4.489-2.11.188.069.37.168.533.29.848.635.913 2.115 1.042 5.073.048 1.096.08 2.034.08 2.555 0 .521-.032 1.46-.08 2.555-.13 2.958-.194 4.438-1.042 5.073-.163.122-.345.221-.533.29-.982.357-2.15-.465-4.49-2.11-.592-.416-.889-.625-1.22-.746a2.61 2.61 0 00-.208-.067c-.338-.092-.693-.092-1.403-.092-1.987 0-2.98 0-3.733-.636a3.145 3.145 0 01-.413-.43c-.612-.79-.63-1.71-.668-3.553a14.06 14.06 0 010-.569z" />
13
+ <Path
14
+ fillRule="evenodd"
15
+ clipRule="evenodd"
16
+ d="M19.49 5.552a.66.66 0 01.97.094l-.529.471.53-.47.002.002.003.004.007.009a2.572 2.572 0 01.079.112c.047.071.111.173.186.305.149.264.339.652.526 1.171C21.64 8.291 22 9.851 22 12c0 2.15-.36 3.71-.736 4.75-.187.52-.377.907-.526 1.172a4.655 4.655 0 01-.265.417l-.007.009-.003.003-.001.002s-.001.001-.531-.47l.53.471a.66.66 0 01-.971.094.77.77 0 01-.09-1.035l.03-.041c.026-.04.07-.11.125-.207a6.28 6.28 0 00.422-.943c.314-.871.644-2.253.644-4.222 0-1.97-.33-3.35-.644-4.222a6.28 6.28 0 00-.422-.942 3.152 3.152 0 00-.157-.253M17.757 8.416c.333-.197.753-.07.938.286l-.603.357.603-.357.001.002.002.003.003.007.01.018.024.053c.018.042.042.099.07.17.053.145.12.35.185.62.13.54.252 1.337.252 2.425 0 1.089-.122 1.886-.252 2.426-.065.27-.132.475-.186.619a3.04 3.04 0 01-.094.223l-.009.018-.003.007-.002.003v.002s-.001.001-.604-.356l.603.357c-.185.355-.605.483-.938.286-.33-.196-.45-.638-.272-.991l.004-.01.035-.085c.032-.086.08-.23.13-.438.1-.416.208-1.09.208-2.06 0-.971-.108-1.645-.208-2.06a3.757 3.757 0 00-.165-.524l-.004-.01c-.179-.354-.058-.795.272-.991z"
17
+ />
18
+ </G>
19
+ </Svg>
20
+ );
21
+ }
22
+
23
23
  export default UnmuteIcon;