react-native-navigation 7.28.0 → 7.28.1-snapshot.643

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.
@@ -32,10 +32,14 @@ export const NavigationButton = class extends Component<ButtonProps> {
32
32
 
33
33
  renderButtonComponent() {
34
34
  const { button, componentId } = this.props;
35
- //@ts-ignore
35
+ // @ts-ignore
36
36
  const buttonComponentId = button.component!.componentId;
37
- //@ts-ignore
38
- const Component = Navigation.mock.store.getComponentClassForName(button.component.name)!();
37
+ // @ts-ignore
38
+ const ComponentClass = Navigation.mock.store.getComponentClassForName(button.component.name);
39
+ if (!ComponentClass) {
40
+ throw new Error(`Cannot find registered component for: ${button.component?.name}`);
41
+ }
42
+ const ButtonComponent = ComponentClass();
39
43
  const props = Navigation.mock.store.getPropsForId(buttonComponentId);
40
44
  return (
41
45
  <TouchableOpacity
@@ -52,7 +56,7 @@ export const NavigationButton = class extends Component<ButtonProps> {
52
56
  }}
53
57
  testID={button.testID}
54
58
  >
55
- <Component
59
+ <ButtonComponent
56
60
  key={buttonComponentId}
57
61
  {...props}
58
62
  componentId={buttonComponentId}
@@ -20,10 +20,14 @@ const NavigationButton = class extends react_1.Component {
20
20
  }
21
21
  renderButtonComponent() {
22
22
  const { button, componentId } = this.props;
23
- //@ts-ignore
23
+ // @ts-ignore
24
24
  const buttonComponentId = button.component.componentId;
25
- //@ts-ignore
26
- const Component = react_native_navigation_1.Navigation.mock.store.getComponentClassForName(button.component.name)();
25
+ // @ts-ignore
26
+ const ComponentClass = react_native_navigation_1.Navigation.mock.store.getComponentClassForName(button.component.name);
27
+ if (!ComponentClass) {
28
+ throw new Error(`Cannot find registered component for: ${button.component?.name}`);
29
+ }
30
+ const ButtonComponent = ComponentClass();
27
31
  const props = react_native_navigation_1.Navigation.mock.store.getPropsForId(buttonComponentId);
28
32
  return (react_1.default.createElement(react_native_1.TouchableOpacity, { onPress: () => {
29
33
  if (this.ref) {
@@ -35,7 +39,7 @@ const NavigationButton = class extends react_1.Component {
35
39
  componentId: componentId,
36
40
  });
37
41
  }, testID: button.testID },
38
- react_1.default.createElement(Component, { key: buttonComponentId, ...props, componentId: buttonComponentId, ref: (ref) => (this.ref = ref) })));
42
+ react_1.default.createElement(ButtonComponent, { key: buttonComponentId, ...props, componentId: buttonComponentId, ref: (ref) => (this.ref = ref) })));
39
43
  }
40
44
  invokeOnClick(stateNode) {
41
45
  if (stateNode.children) {
@@ -0,0 +1,24 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import "RNNButtonOptions.h"
3
+ #import "RNNIconDrawer.h"
4
+ #import "UIImage+utils.h"
5
+
6
+ @interface RNNBaseIconCreator : NSObject
7
+
8
+ - (instancetype)initWithIconDrawer:(RNNIconDrawer *)iconDrawer;
9
+
10
+ - (UIImage *)create:(RNNButtonOptions *)buttonOptions;
11
+
12
+ @property (nonatomic, retain) RNNIconDrawer* iconDrawer;
13
+
14
+ @end
15
+
16
+ @interface RNNBaseIconCreator (Private)
17
+
18
+ - (UIImage *)createIcon:(RNNButtonOptions *)buttonOptions
19
+ tintColor:(UIColor *)tintColor
20
+ backgroundColor:(UIColor *)backgroundColor;
21
+
22
+ - (CGSize)resolveIconSize:(RNNButtonOptions *)buttonOptions;
23
+
24
+ @end
@@ -0,0 +1,65 @@
1
+ #import "RNNBaseIconCreator.h"
2
+ #import "UIImage+utils.h"
3
+
4
+ @implementation RNNBaseIconCreator
5
+
6
+ - (instancetype)initWithIconDrawer:(RNNIconDrawer *)iconDrawer {
7
+ self = [super init];
8
+ self.iconDrawer = iconDrawer;
9
+ return self;
10
+ }
11
+
12
+ - (UIImage *)create:(RNNButtonOptions *)buttonOptions {
13
+ if (buttonOptions.isEnabled)
14
+ return [self createEnabledIcon:buttonOptions];
15
+ else
16
+ return [self createDisabledIcon:buttonOptions];
17
+ }
18
+
19
+ - (UIImage *)createEnabledIcon:(RNNButtonOptions *)buttonOptions {
20
+ UIColor *backgroundColor = [buttonOptions.iconBackground.color withDefault:UIColor.clearColor];
21
+ UIColor *tintColor = [buttonOptions.color withDefault:nil];
22
+
23
+ return [self createIcon:buttonOptions tintColor:tintColor backgroundColor:backgroundColor];
24
+ }
25
+
26
+ - (UIImage *)createDisabledIcon:(RNNButtonOptions *)buttonOptions {
27
+ UIColor *backgroundColor = [self resolveDisabledBackgroundColor:buttonOptions];
28
+ UIColor *tintColor = [self resolveDisabledIconColor:buttonOptions];
29
+
30
+ return [self createIcon:buttonOptions tintColor:tintColor backgroundColor:backgroundColor];
31
+ }
32
+
33
+ - (UIColor *)resolveDisabledIconColor:(RNNButtonOptions *)buttonOptions {
34
+ if (![buttonOptions.enabled withDefault:YES] && buttonOptions.disabledColor.hasValue)
35
+ return buttonOptions.disabledColor.get;
36
+ else
37
+ return [buttonOptions.color withDefault:nil];
38
+ }
39
+
40
+ - (UIColor *)resolveDisabledBackgroundColor:(RNNButtonOptions *)buttonOptions {
41
+ if (![buttonOptions.enabled withDefault:YES] &&
42
+ buttonOptions.iconBackground.disabledColor.hasValue)
43
+ return buttonOptions.iconBackground.disabledColor.get;
44
+ else
45
+ return [buttonOptions.iconBackground.color withDefault:nil];
46
+ }
47
+
48
+ - (UIImage *)createIcon:(RNNButtonOptions *)buttonOptions
49
+ tintColor:(UIColor *)tintColor
50
+ backgroundColor:(UIColor *)backgroundColor {
51
+ @throw @"createIcon should be implemented by subclass";
52
+ return nil;
53
+ }
54
+
55
+ - (CGSize)resolveIconSize:(RNNButtonOptions *)buttonOptions {
56
+ CGFloat width =
57
+ [buttonOptions.iconBackground.width withDefault:@(buttonOptions.icon.get.size.width)]
58
+ .floatValue;
59
+ CGFloat height =
60
+ [buttonOptions.iconBackground.height withDefault:@(buttonOptions.icon.get.size.height)]
61
+ .floatValue;
62
+ return CGSizeMake(width, height);
63
+ }
64
+
65
+ @end
@@ -1,15 +1,21 @@
1
1
  #import "RNNButtonBuilder.h"
2
2
  #import "RNNFontAttributesCreator.h"
3
+ #import "RNNDynamicIconCreator.h"
3
4
 
4
5
  @implementation RNNButtonBuilder {
5
6
  RNNReactComponentRegistry *_componentRegistry;
6
- RNNIconCreator *_iconCreator;
7
+ RNNBaseIconCreator *_iconCreator;
7
8
  }
8
9
 
9
10
  - (instancetype)initWithComponentRegistry:(id)componentRegistry {
10
11
  self = [super init];
11
12
  _componentRegistry = componentRegistry;
12
- _iconCreator = [[RNNIconCreator alloc] initWithIconDrawer:RNNIconDrawer.new];
13
+ if (@available(iOS 13.0, *)) {
14
+ _iconCreator = [[RNNDynamicIconCreator alloc] initWithIconDrawer:RNNIconDrawer.new];
15
+ } else {
16
+ _iconCreator = [[RNNIconCreator alloc] initWithIconDrawer:RNNIconDrawer.new];
17
+ }
18
+
13
19
  return self;
14
20
  }
15
21
 
@@ -0,0 +1,6 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import "RNNBaseIconCreator.h"
3
+
4
+ @interface RNNDynamicIconCreator : RNNBaseIconCreator
5
+
6
+ @end
@@ -0,0 +1,30 @@
1
+ #import "RNNDynamicIconCreator.h"
2
+
3
+ @implementation RNNDynamicIconCreator
4
+
5
+ - (UIImage *)createIcon:(RNNButtonOptions *)buttonOptions
6
+ tintColor:(UIColor *)tintColor
7
+ backgroundColor:(UIColor *)backgroundColor API_AVAILABLE(ios(13)) {
8
+ UIImage *iconImage = buttonOptions.icon.get;
9
+ CGSize iconSize = [self resolveIconSize:buttonOptions];
10
+ CGFloat cornerRadius = [buttonOptions.iconBackground.cornerRadius withDefault:@(0)].floatValue;
11
+ UIColor *lightColor = [tintColor resolvedColorWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]];
12
+ UIColor *darkColor = [tintColor resolvedColorWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]];
13
+ UIColor *lightBackgroundColor = [backgroundColor resolvedColorWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]];
14
+ UIColor *darkBackgroundColor = [backgroundColor resolvedColorWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]];
15
+ UIImage *darkImage = [[self.iconDrawer draw:iconImage
16
+ imageColor:darkColor
17
+ backgroundColor:lightBackgroundColor
18
+ size:iconSize
19
+ cornerRadius:cornerRadius] imageWithInsets:buttonOptions.iconInsets.UIEdgeInsets];
20
+ UIImage *lightImage = [[self.iconDrawer draw:iconImage
21
+ imageColor:lightColor
22
+ backgroundColor:darkBackgroundColor
23
+ size:iconSize
24
+ cornerRadius:cornerRadius] imageWithInsets:buttonOptions.iconInsets.UIEdgeInsets];
25
+ [lightImage.imageAsset registerImage:darkImage withTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]];
26
+
27
+ return lightImage;
28
+ }
29
+
30
+ @end
@@ -1,11 +1,8 @@
1
1
  #import "RNNButtonOptions.h"
2
2
  #import "RNNIconDrawer.h"
3
3
  #import <Foundation/Foundation.h>
4
+ #import "RNNBaseIconCreator.h"
4
5
 
5
- @interface RNNIconCreator : NSObject
6
-
7
- - (instancetype)initWithIconDrawer:(RNNIconDrawer *)iconDrawer;
8
-
9
- - (UIImage *)create:(RNNButtonOptions *)buttonOptions;
6
+ @interface RNNIconCreator : RNNBaseIconCreator
10
7
 
11
8
  @end
@@ -1,51 +1,6 @@
1
1
  #import "RNNIconCreator.h"
2
- #import "UIImage+utils.h"
3
2
 
4
- @implementation RNNIconCreator {
5
- RNNIconDrawer *_iconDrawer;
6
- }
7
-
8
- - (instancetype)initWithIconDrawer:(RNNIconDrawer *)iconDrawer {
9
- self = [super init];
10
- _iconDrawer = iconDrawer;
11
- return self;
12
- }
13
-
14
- - (UIImage *)create:(RNNButtonOptions *)buttonOptions {
15
- if (buttonOptions.isEnabled)
16
- return [self createEnabledIcon:buttonOptions];
17
- else
18
- return [self createDisabledIcon:buttonOptions];
19
- }
20
-
21
- - (UIImage *)createEnabledIcon:(RNNButtonOptions *)buttonOptions {
22
- UIColor *backgroundColor = [buttonOptions.iconBackground.color withDefault:UIColor.clearColor];
23
- UIColor *tintColor = [buttonOptions.color withDefault:nil];
24
-
25
- return [self createIcon:buttonOptions tintColor:tintColor backgroundColor:backgroundColor];
26
- }
27
-
28
- - (UIImage *)createDisabledIcon:(RNNButtonOptions *)buttonOptions {
29
- UIColor *backgroundColor = [self resolveDisabledBackgroundColor:buttonOptions];
30
- UIColor *tintColor = [self resolveDisabledIconColor:buttonOptions];
31
-
32
- return [self createIcon:buttonOptions tintColor:tintColor backgroundColor:backgroundColor];
33
- }
34
-
35
- - (UIColor *)resolveDisabledIconColor:(RNNButtonOptions *)buttonOptions {
36
- if (![buttonOptions.enabled withDefault:YES] && buttonOptions.disabledColor.hasValue)
37
- return buttonOptions.disabledColor.get;
38
- else
39
- return [buttonOptions.color withDefault:nil];
40
- }
41
-
42
- - (UIColor *)resolveDisabledBackgroundColor:(RNNButtonOptions *)buttonOptions {
43
- if (![buttonOptions.enabled withDefault:YES] &&
44
- buttonOptions.iconBackground.disabledColor.hasValue)
45
- return buttonOptions.iconBackground.disabledColor.get;
46
- else
47
- return [buttonOptions.iconBackground.color withDefault:nil];
48
- }
3
+ @implementation RNNIconCreator
49
4
 
50
5
  - (UIImage *)createIcon:(RNNButtonOptions *)buttonOptions
51
6
  tintColor:(UIColor *)tintColor
@@ -53,22 +8,11 @@
53
8
  UIImage *iconImage = buttonOptions.icon.get;
54
9
  CGSize iconSize = [self resolveIconSize:buttonOptions];
55
10
  CGFloat cornerRadius = [buttonOptions.iconBackground.cornerRadius withDefault:@(0)].floatValue;
56
-
57
- return [[_iconDrawer draw:iconImage
11
+ return [[self.iconDrawer draw:iconImage
58
12
  imageColor:tintColor
59
13
  backgroundColor:backgroundColor
60
14
  size:iconSize
61
15
  cornerRadius:cornerRadius] imageWithInsets:buttonOptions.iconInsets.UIEdgeInsets];
62
16
  }
63
17
 
64
- - (CGSize)resolveIconSize:(RNNButtonOptions *)buttonOptions {
65
- CGFloat width =
66
- [buttonOptions.iconBackground.width withDefault:@(buttonOptions.icon.get.size.width)]
67
- .floatValue;
68
- CGFloat height =
69
- [buttonOptions.iconBackground.height withDefault:@(buttonOptions.icon.get.size.height)]
70
- .floatValue;
71
- return CGSizeMake(width, height);
72
- }
73
-
74
18
  @end
@@ -303,6 +303,10 @@
303
303
  50ACB2C92525FA1D00ABDBE2 /* ScreenReversedAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50ACB2C72525FA1D00ABDBE2 /* ScreenReversedAnimationController.m */; };
304
304
  50ACB2CC2525FC7400ABDBE2 /* RNNScreenTransitionsCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 50ACB2CA2525FC7400ABDBE2 /* RNNScreenTransitionsCreator.h */; };
305
305
  50ACB2CD2525FC7400ABDBE2 /* RNNScreenTransitionsCreator.m in Sources */ = {isa = PBXBuildFile; fileRef = 50ACB2CB2525FC7400ABDBE2 /* RNNScreenTransitionsCreator.m */; };
306
+ 50ACDEC62875C23D00C29069 /* RNNDynamicIconCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 50ACDEC42875C23D00C29069 /* RNNDynamicIconCreator.h */; };
307
+ 50ACDEC72875C23D00C29069 /* RNNDynamicIconCreator.m in Sources */ = {isa = PBXBuildFile; fileRef = 50ACDEC52875C23D00C29069 /* RNNDynamicIconCreator.m */; };
308
+ 50ACDECA2875C25E00C29069 /* RNNBaseIconCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 50ACDEC82875C25E00C29069 /* RNNBaseIconCreator.h */; };
309
+ 50ACDECB2875C25E00C29069 /* RNNBaseIconCreator.m in Sources */ = {isa = PBXBuildFile; fileRef = 50ACDEC92875C25E00C29069 /* RNNBaseIconCreator.m */; };
306
310
  50AD1CE023CB428400FF3134 /* TransitionOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 50AD1CDE23CB428400FF3134 /* TransitionOptions.h */; };
307
311
  50AD1CE123CB428400FF3134 /* TransitionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 50AD1CDF23CB428400FF3134 /* TransitionOptions.m */; };
308
312
  50AD288823CDB71C00FF3134 /* ElementHorizontalTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 50AD288623CDB71C00FF3134 /* ElementHorizontalTransition.h */; };
@@ -837,6 +841,10 @@
837
841
  50ACB2C72525FA1D00ABDBE2 /* ScreenReversedAnimationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScreenReversedAnimationController.m; sourceTree = "<group>"; };
838
842
  50ACB2CA2525FC7400ABDBE2 /* RNNScreenTransitionsCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNNScreenTransitionsCreator.h; sourceTree = "<group>"; };
839
843
  50ACB2CB2525FC7400ABDBE2 /* RNNScreenTransitionsCreator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNNScreenTransitionsCreator.m; sourceTree = "<group>"; };
844
+ 50ACDEC42875C23D00C29069 /* RNNDynamicIconCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNNDynamicIconCreator.h; sourceTree = "<group>"; };
845
+ 50ACDEC52875C23D00C29069 /* RNNDynamicIconCreator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNNDynamicIconCreator.m; sourceTree = "<group>"; };
846
+ 50ACDEC82875C25E00C29069 /* RNNBaseIconCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNNBaseIconCreator.h; sourceTree = "<group>"; };
847
+ 50ACDEC92875C25E00C29069 /* RNNBaseIconCreator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNNBaseIconCreator.m; sourceTree = "<group>"; };
840
848
  50AD1CDE23CB428400FF3134 /* TransitionOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TransitionOptions.h; sourceTree = "<group>"; };
841
849
  50AD1CDF23CB428400FF3134 /* TransitionOptions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TransitionOptions.m; sourceTree = "<group>"; };
842
850
  50AD288623CDB71C00FF3134 /* ElementHorizontalTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ElementHorizontalTransition.h; sourceTree = "<group>"; };
@@ -1572,8 +1580,12 @@
1572
1580
  50BAFE482399403200798674 /* Child View Controllers */,
1573
1581
  50570BE82063E09B006A1B5C /* RNNTitleViewHelper.h */,
1574
1582
  50570BE92063E09B006A1B5C /* RNNTitleViewHelper.m */,
1583
+ 50ACDEC82875C25E00C29069 /* RNNBaseIconCreator.h */,
1584
+ 50ACDEC92875C25E00C29069 /* RNNBaseIconCreator.m */,
1575
1585
  503A8FEB25DD397400BB6A74 /* RNNIconCreator.h */,
1576
1586
  503A8FEC25DD397400BB6A74 /* RNNIconCreator.m */,
1587
+ 50ACDEC42875C23D00C29069 /* RNNDynamicIconCreator.h */,
1588
+ 50ACDEC52875C23D00C29069 /* RNNDynamicIconCreator.m */,
1577
1589
  503A90BB25DD550600BB6A74 /* RNNIconDrawer.h */,
1578
1590
  503A90BC25DD550600BB6A74 /* RNNIconDrawer.m */,
1579
1591
  50C085F125939F6200B0502C /* RNNButtonBuilder.h */,
@@ -1935,6 +1947,7 @@
1935
1947
  50E5F7952240EBD6002AFEAD /* RNNAnimationsTransitionDelegate.h in Headers */,
1936
1948
  50F72E552607468C0096758A /* PathTransition.h in Headers */,
1937
1949
  7B1126A71E2D2B6C00F9B03B /* RNNEventEmitter.h in Headers */,
1950
+ 50ACDEC62875C23D00C29069 /* RNNDynamicIconCreator.h in Headers */,
1938
1951
  506BF6982600B72D00A22755 /* UIImageView+Transition.h in Headers */,
1939
1952
  E8A430111F9CB87B00B61A20 /* ElementAlphaTransition.h in Headers */,
1940
1953
  5017D9E1239D2C6C00B74047 /* BottomTabsAttachModeFactory.h in Headers */,
@@ -2010,6 +2023,7 @@
2010
2023
  5053CE7F2175FB1900D0386B /* RNNDefaultOptionsHelper.h in Headers */,
2011
2024
  2DCD9195200014A900EDC75D /* RNNBridgeManager.h in Headers */,
2012
2025
  7B1126A91E2D2B6C00F9B03B /* RNNControllerFactory.h in Headers */,
2026
+ 50ACDECA2875C25E00C29069 /* RNNBaseIconCreator.h in Headers */,
2013
2027
  B8415322251E088100467F37 /* SpringInterpolator.h in Headers */,
2014
2028
  501E0217213E7EA3003365C5 /* RNNReactView.h in Headers */,
2015
2029
  5047E4F022674AD400908DD3 /* RNNLayoutManager.h in Headers */,
@@ -2200,6 +2214,7 @@
2200
2214
  50C085F02591FC5000B0502C /* RNNIconBackgroundOptions.m in Sources */,
2201
2215
  501CD320214A5B6900A6E225 /* RNNLayoutInfo.m in Sources */,
2202
2216
  7BEF0D191E437684003E96B0 /* RNNComponentViewController.m in Sources */,
2217
+ 50ACDECB2875C25E00C29069 /* RNNBaseIconCreator.m in Sources */,
2203
2218
  50E38DD823A7A2BE009817F6 /* AnimatedViewFactory.m in Sources */,
2204
2219
  B84F6E4D252C5ECE007D78A1 /* AccelerateDecelerateInterpolator.m in Sources */,
2205
2220
  50415CBB20553B8E00BB682E /* RNNScreenTransition.m in Sources */,
@@ -2333,6 +2348,7 @@
2333
2348
  507F43C61FF4F17C00D9425B /* RNNTopTabsViewController.m in Sources */,
2334
2349
  50706E6E20CE7CA5003345C3 /* UIImage+utils.m in Sources */,
2335
2350
  50CED452239F9DFC00C42EE2 /* TopBarPresenter.m in Sources */,
2351
+ 50ACDEC72875C23D00C29069 /* RNNDynamicIconCreator.m in Sources */,
2336
2352
  50F72E562607468C0096758A /* PathTransition.m in Sources */,
2337
2353
  50FCD83823FC102200000DD0 /* DeprecationOptions.m in Sources */,
2338
2354
  50BCB29223F2C7CD00D6C8E5 /* AnchorTransition.m in Sources */,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-navigation",
3
- "version": "7.28.0",
3
+ "version": "7.28.1-snapshot.643",
4
4
  "description": "React Native Navigation - truly native navigation for iOS and Android",
5
5
  "license": "MIT",
6
6
  "nativePackage": true,