diff --git a/README.md b/README.md index e50834a06..fde9be205 100644 --- a/README.md +++ b/README.md @@ -31,32 +31,14 @@ There is a huge variety of customizable layouts, use “as is” or add new bloc ## Quick Start -Install UI Kitten and Eva Design System packages via npm: +Start a new app with UI Kitten template from a scratch: ```bash -npm i react-native-ui-kitten @eva-design/eva +react-native init --template ui-kitten ``` -Modify your application root: - -```jsx -import React from 'react'; -import { mapping, light as lightTheme } from '@eva-design/eva'; -import { ApplicationProvider, Layout } from 'react-native-ui-kitten'; - -const App = () => ( - - - -); - -export default App; -``` - -The code above will configure your application component to apply Eva Design System styling magic. -Read the [Design System guide][link:doc-theme-system] for more details. +This will setup a new React Native application configured with UI Kitten. +Refer to the [Documentation][link:doc-where-start] for more options to start. ## How can I support the developers? - Star our GitHub repo :star: @@ -83,7 +65,7 @@ We're always happy to receive your feedback! [link:travis]: https://travis-ci.com/akveo/react-native-ui-kitten [link:coveralls]: https://coveralls.io/github/akveo/react-native-ui-kitten?branch=master [link:doc-homepage]: https://akveo.github.io/react-native-ui-kitten -[link:doc-theme-system]: https://akveo.github.io/react-native-ui-kitten/docs/design-system/eva-design-system-intro +[link:doc-where-start]: https://akveo.github.io/react-native-ui-kitten/docs/getting-started/where-to-start [link:kitten-tricks]: https://github.com/akveo/kittenTricks [link:eva-icons]: https://github.com/akveo/eva-icons [link:akveo-homepage]: https://akveo.com diff --git a/babel.config.js b/babel.config.js index 43e3d5c14..5b7595b50 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,15 +1,20 @@ const path = require('path'); -const kittenPath = path.resolve('./src/framework'); - -// FIXME: Resolve `transform[stderr]: Could not resolve` command-line warnings. -// FIXME: Reproducible when starting with clearing cache (npm start -- -c) +/** + * UI Kitten modules aliases. + * Allows importing framework modules into playground + */ +const moduleAliases = { + 'react-native-ui-kitten': path.resolve(__dirname, './src/framework'), + '@kitten/theme': path.resolve(__dirname, './src/framework'), + '@kitten/ui': path.resolve(__dirname, './src/framework'), + '@ui-kitten/eva-icons': path.resolve(__dirname, './src/eva-icons'), +}; const moduleResolverConfig = { root: path.resolve('./'), alias: { - '@kitten/theme': path.resolve(kittenPath, 'theme'), - '@kitten/ui': path.resolve(kittenPath, 'ui'), + ...moduleAliases, }, }; diff --git a/config/dev.env.js b/config/dev.env.js index 40f7baeea..767db0d2b 100644 --- a/config/dev.env.js +++ b/config/dev.env.js @@ -4,7 +4,6 @@ const evaPath = path.resolve(__dirname, '../../eva'); module.exports = { ENV: 'dev', - KITTEN_PATH: path.resolve(__dirname, '../src/framework'), MAPPING_PATH: path.resolve(evaPath, 'packages/eva'), PROCESSOR_PATH: path.resolve(evaPath, 'packages/processor') }; diff --git a/config/prod.env.js b/config/prod.env.js index de606f46f..8ace1a4b3 100644 --- a/config/prod.env.js +++ b/config/prod.env.js @@ -4,7 +4,6 @@ const playgroundPath = path.resolve(__dirname, '../src/playground'); module.exports = { ENV: 'prod', - KITTEN_PATH: path.resolve(__dirname, '../src/framework'), MAPPING_PATH: path.resolve(playgroundPath, 'node_modules/@eva-design/eva'), PROCESSOR_PATH: path.resolve(__dirname, '../node_modules/@eva-design/processor') }; diff --git a/docs/src/articles/getting-started/where-to-start.md b/docs/src/articles/getting-started/where-to-start.md index c7d2766fc..47ebe4690 100644 --- a/docs/src/articles/getting-started/where-to-start.md +++ b/docs/src/articles/getting-started/where-to-start.md @@ -5,12 +5,15 @@ UI Kitten is a framework of UI components powered by Eva Design System for your ## Quick start tutorials -**[Install UI Kitten](guides/install-ui-kitten)** +- **[Start a new App](guides/start-a-new-app)** -This tutorial explains how to setup React Native app with UI Kitten. +This tutorial explains how to setup React Native app with UI Kitten from a scratch. + +- **[Install into existing App](guides/install-into-existing-app)** Please consider creating an issue on GitHub if your use case is not described above. But we kindly ask to always look through the documentation and the list of existing issues first. +
## I'm new to React Native or mobile development diff --git a/docs/src/articles/guides/install-existing.md b/docs/src/articles/guides/install-existing.md new file mode 100644 index 000000000..cd44c2af0 --- /dev/null +++ b/docs/src/articles/guides/install-existing.md @@ -0,0 +1,37 @@ +# Add into existing project + +If you already have an existing code base, you're able to give UI Kitten a try as simple as `npm install`. Please refer to [Start a new App Guide](guides/start-a-new-app) if you don't have any code yet. + +
+ +## Install UI Kitten and Eva Design System + +```bash +npm i react-native-ui-kitten @eva-design/eva +``` + +
+ +## Configure Application Root + +At this step you have everything in place, let's configure UI Kitten to be used in your app. +In your **App.js**: + +```js +import React from 'react'; +import { mapping, light as lightTheme } from '@eva-design/eva'; +import { ApplicationProvider } from 'react-native-ui-kitten'; +import { RootComponent } from '../path-to/root.component'; // <-- Import your application entry point + +const App = () => ( + + + +); + +export default App; +``` + +That's it. UI Kitten is ready now. diff --git a/docs/src/articles/guides/install-new.md b/docs/src/articles/guides/install-new.md new file mode 100644 index 000000000..6bb8613bb --- /dev/null +++ b/docs/src/articles/guides/install-new.md @@ -0,0 +1,30 @@ +# Starting a new App + +If you don't have any code yet, please consider checking React Native Getting Started documentation for help creating your app. + +
+ +## Installation + +First of all, you should have React Native CLI installed. + +```bash +npm i -g react-native-cli +``` + +
+ +## Create a New Project + +A new project can be created using React Native CLI tools ant UI Kitten template. + +```bash +react-native init --template ui-kitten +``` + +Or, if you want to init with TypeScript: +```bash +react-native init --template ui-kitten-typescript +``` + +That's it. UI Kitten is ready now. For the next steps, simply follow command line instructions. diff --git a/docs/src/articles/guides/install.md b/docs/src/articles/guides/install.md deleted file mode 100644 index 678221eb3..000000000 --- a/docs/src/articles/guides/install.md +++ /dev/null @@ -1,54 +0,0 @@ -# Install UI Kitten - -If you don't have any code yet, please consider checking React Native Getting Started documentation for help creating your app. - -
- -## Installation - -We recommend to develop React Native with expo-cli, you can install it with the following command. - -```bash -npm i -g expo-cli -``` - -
- -## Create a New Project - -A new project can be created using Expo CLI tools. - -```bash -expo init PROJECT-NAME -``` -
- -## Install UI Kitten and Eva Design System - -```bash -npm i react-native-ui-kitten @eva-design/eva -``` - -
- -## Configure Application Root - -At this step you have everything in place, let's configure UI Kitten to be used in your app. - -```js -import * as React from 'react'; -import { mapping, light as lightTheme } from '@eva-design/eva'; -import { ApplicationProvider, Layout } from 'react-native-ui-kitten'; - -const App = () => ( - - - -); - -export default App; -``` - -That's it. UI Kitten is ready now. diff --git a/docs/src/articles/guides/setup-icons-module.md b/docs/src/articles/guides/setup-icons-module.md new file mode 100644 index 000000000..ba9402c4f --- /dev/null +++ b/docs/src/articles/guides/setup-icons-module.md @@ -0,0 +1,67 @@ +# Setup Icons Module + +Starting from UI Kitten 4.2, we introduce an icons module built on top of Eva Icons. Eva Icons is a pack of beautifully crafted Open Source icons for common actions and items. + +
+
IMPORTANT
+
+ This tutorial assumes you have everything in place and [ApplicationProvider is configured](guides/install-ui-kitten). +
+
+ +
+ +## Installation + +First, ensure that `react-native-svg` library is installed: **install react-native-svg**. + +Add `@ui-kitten/eva-icons` to project dependencies. + +```bash +npm i @ui-kitten/eva-icons +``` + +
+ +## Configure Icon Registry + +```js +import * as React from 'react'; +import { mapping, light as lightTheme } from '@eva-design/eva'; +import { EvaIconsPack } from '@ui-kitten/eva-icons'; +import { ApplicationProvider, Layout, IconRegistry } from 'react-native-ui-kitten'; + +const App = () => ( + + + + +); + +export default App; +``` + +
+ +## Use it with UI Kitten components + +```js +import * as React from 'react'; +import { Button, Icon } from 'react-native-ui-kitten'; + +export const FacebookIcon = (style) => ( + +); + +export const LoginButton = () => ( + +); +``` + +That's it. UI Kitten with Eva Icons is ready now. + +As a result, you should have a Button looking similar to this: + +![image](assets/images/articles/guides/sample-icon-button.png) diff --git a/docs/src/articles/guides/setup-vector-icons.md b/docs/src/articles/guides/setup-vector-icons.md new file mode 100644 index 000000000..35f7128e0 --- /dev/null +++ b/docs/src/articles/guides/setup-vector-icons.md @@ -0,0 +1,223 @@ +# 3rd party icon libraries + +Starting from UI Kitten 4.2, we introduce an Icon component that can work with 3rd party icon packages. In this guide, we'll show how to integrate vector icons package with UI Kitten. Vector icons is a set of font-based icons library that renders a text as an icon symbol. +In case you prefer working with svg - check out Eva Icons Integration Guide. + +
+
IMPORTANT
+
+ This tutorial assumes you have everything in place and [ApplicationProvider is configured](guides/install-ui-kitten). +
+
+ +
+ +## Installation + +First, ensure that `react-native-vector-icons` library is installed: **install react-native-vector-icons**. + + +
+ +### Configure Icon Adapter + +After vector-icons is installed and you have everything in place, we need to create a mapping object, that can draw an icon by its name. +Let's create a separate file `feather-icons.js` and place there the following code. + +```js +import * as React from 'react'; +import { StyleSheet } from 'react-native'; +import Icon from 'react-native-vector-icons/Feather'; // <-- Import Feather icons + +export const FeatherIconsPack = { + name: 'feather', + icons: createIconsMap(), +}; + +function createIconsMap() { + return { + 'facebook': IconProvider('facebook'), + 'google': IconProvider('google'), + // ... + }; + + // or + + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} +``` + +And providing function + +```js +function IconProvider(name) { + return { + toReactElement: (props) => FeatherIcon({ name, ...props }), + }; +} + +function FeatherIcon({ name, style }) { + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} + +``` + +
+ +## Configure Icon Registry + +After everything is configured, we simply need to import a feather icon map and register it with UI Kitten APIs. + +```js +import * as React from 'react'; +import { mapping, light as lightTheme } from '@eva-design/eva'; +import { ApplicationProvider, Layout, IconRegistry } from 'react-native-ui-kitten'; +import { FeatherIconsPack } from './path-to/feather-icons.js'; // <-- Feather icons map + +const App = () => ( + + + + +); + +export default App; +``` + +
+ +## Use it with UI Kitten components + +```js +import * as React from 'react'; +import { Button, Icon } from 'react-native-ui-kitten'; + +export const FacebookIcon = (style) => ( + +); + +export const LoginButton = () => ( + +); +``` + +That's it. UI Kitten with Vector Icons is ready now. + +As a result, you should have a Button looking similar to this: + +![image](assets/images/articles/guides/3rd-party-icons-sample.png) + +
+ +## More Icon Libraries + +As you might notice, UI Kitten API allows you to register **multiple** icon packages with the following instruction. + +```js + +``` + +Let's also create a Material Icons provider using the same method. + +```js +// material-icons.js + +import * as React from 'react'; +import { StyleSheet } from 'react-native'; +import Icon from 'react-native-vector-icons/MaterialIcons'; // <-- Import Material icons + +export const MaterialIconsPack = { + name: 'material', + icons: createIconsMap(), +}; + +function createIconsMap() { + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} + +function IconProvider(name) { + return { + toReactElement: (props) => MaterialIcon({ name, ...props }), + }; +} + +function MaterialIcon({ name, style }) { + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} +``` + +Now all we need to do is to extend our `IconRegistry`: + +```js +import * as React from 'react'; +import { mapping, light as lightTheme } from '@eva-design/eva'; +import { ApplicationProvider, Layout, IconRegistry } from 'react-native-ui-kitten'; +import { FeatherIconsPack } from './path-to/feather-icons.js'; // <-- Feather icons map +import { MaterialIconsPack } from './path-to/material-icons.js'; // <-- Material icons map + +const App = () => ( + + + + +); + +export default App; +``` + +
+ +## Choose a pack + +Now you're able to choose an icon library with simply changing `pack` property. + +```js +import * as React from 'react'; +import { Button, Icon } from 'react-native-ui-kitten'; + +export const HomeIcon = (style) => ( + +); + +export const HomeButton = () => ( + +); +``` + +That's it. Here is a result that you might have + +**Material Icons** + +![image](assets/images/articles/guides/3rd-party-icons-material.png) + +**Feather Icons** + +![image](assets/images/articles/guides/3rd-party-icons-feather.png) diff --git a/docs/src/assets/images/articles/guides/3rd-party-icons-feather.png b/docs/src/assets/images/articles/guides/3rd-party-icons-feather.png new file mode 100644 index 000000000..493990394 Binary files /dev/null and b/docs/src/assets/images/articles/guides/3rd-party-icons-feather.png differ diff --git a/docs/src/assets/images/articles/guides/3rd-party-icons-material.png b/docs/src/assets/images/articles/guides/3rd-party-icons-material.png new file mode 100644 index 000000000..28b15e03c Binary files /dev/null and b/docs/src/assets/images/articles/guides/3rd-party-icons-material.png differ diff --git a/docs/src/assets/images/articles/guides/3rd-party-icons-sample.png b/docs/src/assets/images/articles/guides/3rd-party-icons-sample.png new file mode 100644 index 000000000..a3a79ab59 Binary files /dev/null and b/docs/src/assets/images/articles/guides/3rd-party-icons-sample.png differ diff --git a/docs/src/assets/images/articles/guides/sample-icon-button.png b/docs/src/assets/images/articles/guides/sample-icon-button.png new file mode 100644 index 000000000..1604a6ca1 Binary files /dev/null and b/docs/src/assets/images/articles/guides/sample-icon-button.png differ diff --git a/docs/src/assets/images/components/icon.svg b/docs/src/assets/images/components/icon.svg index 67fceac3f..054d8601c 100644 --- a/docs/src/assets/images/components/icon.svg +++ b/docs/src/assets/images/components/icon.svg @@ -1,196 +1,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + icon/component/ icon + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/assets/images/components/spinner.svg b/docs/src/assets/images/components/spinner.svg index 8b80395e3..7fa1fa91e 100644 --- a/docs/src/assets/images/components/spinner.svg +++ b/docs/src/assets/images/components/spinner.svg @@ -1,37 +1,26 @@ - - - 4132A270-0635-4179-BE32-E6BD0F1089CF - Created with sketchtool. + + + icon/component/spinner + Created with Sketch. - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/assets/images/overview/icon.png b/docs/src/assets/images/overview/icon.png new file mode 100644 index 000000000..4a4e735b4 Binary files /dev/null and b/docs/src/assets/images/overview/icon.png differ diff --git a/docs/src/assets/images/overview/spinner.png b/docs/src/assets/images/overview/spinner.png new file mode 100644 index 000000000..a6a181416 Binary files /dev/null and b/docs/src/assets/images/overview/spinner.png differ diff --git a/docs/src/structure.ts b/docs/src/structure.ts index 2398b7696..298469fef 100644 --- a/docs/src/structure.ts +++ b/docs/src/structure.ts @@ -33,12 +33,23 @@ export const structure = [ children: [ { type: 'page', - name: 'Install UI Kitten', + name: 'Start a new App', children: [ { type: 'block', block: 'markdown', - source: 'guides/install.md', + source: 'guides/install-new.md', + }, + ], + }, + { + type: 'page', + name: 'Install into existing App', + children: [ + { + type: 'block', + block: 'markdown', + source: 'guides/install-existing.md', }, ], }, @@ -64,6 +75,28 @@ export const structure = [ }, ], }, + { + type: 'page', + name: 'Eva Icons', + children: [ + { + type: 'block', + block: 'markdown', + source: 'guides/setup-icons-module.md', + }, + ], + }, + { + type: 'page', + name: '3rd party Icons', + children: [ + { + type: 'block', + block: 'markdown', + source: 'guides/setup-vector-icons.md', + }, + ], + }, ], }, { @@ -379,6 +412,20 @@ export const structure = [ }, ], }, + { + type: 'tabs', + name: 'Icon', + icon: 'icon.svg', + source: [ + 'Icon', + ], + overview: [ + { + name: 'Icon', + images: ['icon.png'], + }, + ], + }, { type: 'tabs', name: 'Button', @@ -393,6 +440,15 @@ export const structure = [ }, ], }, + { + type: 'tabs', + name: 'Dropdown', + icon: 'button.svg', + source: [ + 'Dropdown', + ], + overview: [], + }, { type: 'tabs', name: 'Button Group', @@ -480,6 +536,20 @@ export const structure = [ }, ], }, + { + type: 'tabs', + name: 'Spinner', + icon: 'spinner.svg', + source: [ + 'Spinner', + ], + overview: [ + { + name: 'Spinner', + images: ['spinner.png'], + }, + ], + }, ], }, { diff --git a/package-lock.json b/package-lock.json index ecc1d3b8e..fa27b0df6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,45 +5,45 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.4.tgz", - "integrity": "sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/helpers": "^7.5.4", - "@babel/parser": "^7.5.0", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.0.tgz", - "integrity": "sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", "dev": true, "requires": { - "@babel/types": "^7.5.0", + "@babel/types": "^7.5.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -89,28 +89,28 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.0.tgz", - "integrity": "sha512-EAoMc3hE5vE5LNhMqDOwB1usHvmRjCDAnH8CD4PVkX9/Yr3W/tcz8xE8QvdZxfsFBDICwZnF2UTHIqslRpvxmA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", + "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { @@ -153,12 +153,12 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.5.5" } }, "@babel/helper-module-imports": { @@ -171,17 +171,17 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { @@ -200,12 +200,12 @@ "dev": true }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { @@ -222,15 +222,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/helper-simple-access": { @@ -265,14 +265,14 @@ } }, "@babel/helpers": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.4.tgz", - "integrity": "sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", "dev": true, "requires": { "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/highlight": { @@ -287,9 +287,9 @@ } }, "@babel/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", "dev": true }, "@babel/plugin-external-helpers": { @@ -302,12 +302,12 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.0.tgz", - "integrity": "sha512-9L/JfPCT+kShiiTTzcnBJ8cOwdKVmlC1RcCf9F0F9tERVrM4iWtWnXtjWCRqNm2la2BxO1MPArWNsU9zsSJWSQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.5.0", + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0" } }, @@ -332,9 +332,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz", - "integrity": "sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -481,27 +481,27 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", + "@babel/helper-define-map": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" } @@ -603,13 +603,13 @@ } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-replace-supers": "^7.5.5" } }, "@babel/plugin-transform-parameters": { @@ -672,9 +672,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.0.tgz", - "integrity": "sha512-LmPIZOAgTLl+86gR9KjLXex6P/lRz1fWEjTz6V6QZMmKie51ja3tvzdwORqhHc4RWR8TcZ5pClpRWs0mlaA2ng==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -722,12 +722,12 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.2.tgz", - "integrity": "sha512-r4zJOMbKY5puETm8+cIpaa0RQZG/sSASW1u0pj8qYklcERgVIbxVbP2wyJA7zI1//h7lEagQmXi9IL9iI5rfsA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz", + "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.5.0", + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" } @@ -744,31 +744,31 @@ } }, "@babel/register": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz", - "integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.5.5.tgz", + "integrity": "sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==", "dev": true, "requires": { "core-js": "^3.0.0", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "mkdirp": "^0.5.1", "pirates": "^4.0.0", "source-map-support": "^0.5.9" }, "dependencies": { "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", "dev": true } } }, "@babel/runtime": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.4.tgz", - "integrity": "sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" @@ -786,30 +786,30 @@ } }, "@babel/traverse": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.0.tgz", - "integrity": "sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.5.0", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.0", - "@babel/types": "^7.5.0", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz", - "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, @@ -828,54 +828,60 @@ "resolved": "https://registry.npmjs.org/@eva-design/dss/-/dss-1.0.1.tgz", "integrity": "sha512-RSwSjZzirB8izDhDKod9kwinoB7p/Gq8JyMZeEGfHVZJH0DqmahdI2tNLQPd8igPgpP0AkHS4YFGVV1mF34RzQ==" }, + "@eva-design/eva": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@eva-design/eva/-/eva-1.0.1.tgz", + "integrity": "sha512-puz8ejPWvZMTZ0CjzCOASYdW6w9rP8CZ3C4uBqqyerdvIcTKZDoSJ71/DE3WiwSI735gIhZeVANo63lrWfqcUA==" + }, "@eva-design/processor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@eva-design/processor/-/processor-1.0.1.tgz", "integrity": "sha512-/eoR5QnqeR4eKE90jCnOABOtHsyhrpfKe34GYKe2P+GfiJhByz597QDqkG0oCUHJJud9TtauO6fNJnG+UXDEKg==" }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "dev": true, "requires": { - "@jest/source-map": "^24.3.0", + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", - "pirates": "^4.0.1", "realpath-native": "^1.1.0", "rimraf": "^2.5.4", + "slash": "^2.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { @@ -1186,38 +1192,38 @@ } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", "dev": true, "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -1225,13 +1231,13 @@ "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", + "node-notifier": "^5.4.2", "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" @@ -1259,9 +1265,9 @@ } }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "source-map": { @@ -1273,9 +1279,9 @@ } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -1298,45 +1304,46 @@ } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", "micromatch": "^3.1.10", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", "slash": "^2.0.0", "source-map": "^0.6.1", @@ -1356,11 +1363,12 @@ "dev": true }, "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", "dev": true, "requires": { + "@babel/helper-plugin-utils": "^7.0.0", "find-up": "^3.0.0", "istanbul-lib-instrument": "^3.3.0", "test-exclude": "^5.2.3" @@ -1696,9 +1704,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -1772,9 +1780,9 @@ "dev": true }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "source-map": { @@ -1804,14 +1812,14 @@ } }, "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" + "@types/yargs": "^13.0.0" } }, "@mrmlnc/readdir-enhanced": { @@ -1831,9 +1839,9 @@ "dev": true }, "@react-native-community/cli": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.10.0.tgz", - "integrity": "sha512-48tIWsMKhwbDsKhe5tYcsspsAy7aR3J/yRjdsVh+M2qkKEASe66Xbhiw5RK2nhfzd1IdOdlIxNMiC+9uad6NMQ==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.11.2.tgz", + "integrity": "sha512-5NuYd30f5PCTrGUbZLnusZKv5nfTWvTDTRa/3Q4vwdMnUQrhm9sZXWGQ5CnFoQ7cE58EAqhj6/ShXeJF3DZ9uQ==", "dev": true, "requires": { "chalk": "^1.1.1", @@ -2048,9 +2056,9 @@ } }, "@types/jest": { - "version": "24.0.15", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.15.tgz", - "integrity": "sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA==", + "version": "24.0.17", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.17.tgz", + "integrity": "sha512-1cy3xkOAfSYn78dsBWy4M3h/QF/HeWPchNFDjysVtp3GHeTdSmtluNnELfCmfNRRHo0OWEcpf+NsEJQvwQfdqQ==", "dev": true, "requires": { "@types/jest-diff": "*" @@ -2063,9 +2071,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.136", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.136.tgz", - "integrity": "sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA==", + "version": "4.14.137", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.137.tgz", + "integrity": "sha512-g4rNK5SRKloO+sUGbuO7aPtwbwzMgjK+bm9BBhLD7jGUiGR7zhwYEhSln/ihgYQBeIJ5j7xjyaYzrWTcu3UotQ==", "dev": true }, "@types/lodash.merge": { @@ -2090,9 +2098,9 @@ "dev": true }, "@types/node": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.2.tgz", - "integrity": "sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ==", + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz", + "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==", "dev": true }, "@types/orchestrator": { @@ -2118,9 +2126,9 @@ "dev": true }, "@types/react": { - "version": "16.8.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.23.tgz", - "integrity": "sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA==", + "version": "16.9.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz", + "integrity": "sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg==", "dev": true, "requires": { "@types/prop-types": "*", @@ -2138,9 +2146,9 @@ } }, "@types/react-navigation": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/react-navigation/-/react-navigation-3.0.7.tgz", - "integrity": "sha512-JFsNeCAQEQGTpObiD1QczDyCyQkFBaQA/F85Fo2W8QML1b6UNYHlUDtEYJA6jcfXqPoL15dVPBVj9NBJlHToqA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/react-navigation/-/react-navigation-3.0.8.tgz", + "integrity": "sha512-r8UQvBmOz7XjPE8AHTHh0SThGqModhQtSsntkmob7rczhueJIqDwBOgsEn54SJa25XzD/KBlelAWeVZ7+Ggm8A==", "dev": true, "requires": { "@types/react": "*", @@ -2148,9 +2156,9 @@ } }, "@types/react-test-renderer": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.8.2.tgz", - "integrity": "sha512-cm42QR9S9V3aOxLh7Fh7PUqQ8oSfSdnSni30T7TiTmlKvE6aUlo+LhQAzjnZBPriD9vYmgG8MXI8UDK4Nfb7gg==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.9.0.tgz", + "integrity": "sha512-bN5EyjtuTY35xX7N5j0KP1vg5MpUXHpFTX6tGsqkNOthjNvet4VQOYRxFh+NT5cDSJrATmAFK9NLeYZ4mp/o0Q==", "dev": true, "requires": { "@types/react": "*" @@ -2182,9 +2190,18 @@ } }, "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==", "dev": true }, "JSONStream": { @@ -2226,9 +2243,9 @@ "dev": true }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", + "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -2236,9 +2253,9 @@ }, "dependencies": { "acorn": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz", - "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true } } @@ -2256,9 +2273,9 @@ "dev": true }, "ajv": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.1.tgz", - "integrity": "sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -2830,18 +2847,18 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -3229,9 +3246,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, "basic-auth": { @@ -3529,29 +3546,29 @@ "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -3763,22 +3780,22 @@ } }, "conventional-changelog": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.8.tgz", - "integrity": "sha512-fb3/DOLLrQdNqN0yYn/lT6HcNsAa9A+VTDBqlZBMQcEPPIeJIMI+DBs3yu+eiYOLi22w9oShq3nn/zN6qm1Hmw==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.10.tgz", + "integrity": "sha512-6RDj31hL39HUkpqvPjRlOxAwJRwur8O2qu9m6R0FBNDGwCJyy4SYH9NfyshozxYSeklrauKRf3oSbyoEZVzu9Q==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.3", "conventional-changelog-atom": "^2.0.1", "conventional-changelog-codemirror": "^2.0.1", - "conventional-changelog-conventionalcommits": "^3.0.2", - "conventional-changelog-core": "^3.2.2", + "conventional-changelog-conventionalcommits": "^4.1.0", + "conventional-changelog-core": "^4.0.0", "conventional-changelog-ember": "^2.0.2", "conventional-changelog-eslint": "^3.0.2", "conventional-changelog-express": "^2.0.1", "conventional-changelog-jquery": "^3.0.4", "conventional-changelog-jshint": "^2.0.1", - "conventional-changelog-preset-loader": "^2.1.1" + "conventional-changelog-preset-loader": "^2.2.0" } }, "conventional-changelog-angular": { @@ -3801,14 +3818,14 @@ } }, "conventional-changelog-cli": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.21.tgz", - "integrity": "sha512-gMT1XvSVmo9Np1WUXz8Mvt3K+OtzR+Xu13z0jq/3qsXBbLuYc2/oaUXVr68r3fYOL8E9dN2uvX7Hc7RkeWvRVA==", + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.23.tgz", + "integrity": "sha512-a/jDZHEUpSHQMAqeDrmrFhz9CKHBKhBGpJyc38BCfNjFA1RKchpq/Qqbo1BZwRLWrW/PX7IGsUicTyhniqUH9g==", "dev": true, "requires": { "add-stream": "^1.0.0", - "conventional-changelog": "^3.1.8", - "lodash": "^4.2.1", + "conventional-changelog": "^3.1.10", + "lodash": "^4.14.14", "meow": "^4.0.0", "tempfile": "^1.1.1" } @@ -3823,9 +3840,9 @@ } }, "conventional-changelog-conventionalcommits": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-3.0.2.tgz", - "integrity": "sha512-w1+fQSDnm/7+sPKIYC5nfRVYDszt+6HdWizrigSqWFVIiiBVzkHGeqDLMSHc+Qq9qssHVAxAak5206epZyK87A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz", + "integrity": "sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ==", "dev": true, "requires": { "compare-func": "^1.3.1", @@ -3833,18 +3850,18 @@ } }, "conventional-changelog-core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz", - "integrity": "sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.0.0.tgz", + "integrity": "sha512-+bZMeBUdjKxfyX2w6EST9U7zb85wxrGS3IV4H7SqPya44osNQbm3P+vyqfLs6s57FkoEamC93ioDEiguVLWmSQ==", "dev": true, "requires": { - "conventional-changelog-writer": "^4.0.5", - "conventional-commits-parser": "^3.0.2", + "conventional-changelog-writer": "^4.0.7", + "conventional-commits-parser": "^3.0.3", "dateformat": "^3.0.0", "get-pkg-repo": "^1.0.0", "git-raw-commits": "2.0.0", "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.2", + "git-semver-tags": "^3.0.0", "lodash": "^4.2.1", "normalize-package-data": "^2.3.5", "q": "^1.5.1", @@ -3966,21 +3983,21 @@ } }, "conventional-changelog-preset-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz", - "integrity": "sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz", + "integrity": "sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ==", "dev": true }, "conventional-changelog-writer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz", - "integrity": "sha512-ou/sbrplJMM6KQpR5rKFYNVQYesFjN7WpNGdudQSWNi6X+RgyFUcSv871YBYkrUYV9EX8ijMohYVzn9RUb+4ag==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz", + "integrity": "sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw==", "dev": true, "requires": { "compare-func": "^1.3.1", "conventional-commits-filter": "^2.0.2", "dateformat": "^3.0.0", - "handlebars": "^4.1.0", + "handlebars": "^4.1.2", "json-stringify-safe": "^5.0.1", "lodash": "^4.2.1", "meow": "^4.0.0", @@ -3990,9 +4007,9 @@ }, "dependencies": { "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -4074,13 +4091,13 @@ } }, "coveralls": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.4.tgz", - "integrity": "sha512-eyqUWA/7RT0JagiL0tThVhjbIjoiEUyWCjtUJoOPcWoeofP5WK/jb2OJYoBFrR6DvplR+AxOyuBqk4JHkk5ykA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.6.tgz", + "integrity": "sha512-Pgh4v3gCI4T/9VijVrm8Ym5v0OgjvGLKj3zTUwkvsCiwqae/p6VLzpsFNjQS2i6ewV7ef+DjFJ5TSKxYt/mCrA==", "dev": true, "requires": { "growl": "~> 1.10.0", - "js-yaml": "^3.11.0", + "js-yaml": "^3.13.1", "lcov-parse": "^0.0.10", "log-driver": "^1.2.7", "minimist": "^1.2.0", @@ -4141,12 +4158,12 @@ "dev": true }, "cssstyle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.3.0.tgz", - "integrity": "sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "dev": true, "requires": { - "cssom": "~0.3.6" + "cssom": "0.3.x" } }, "csstype": { @@ -4415,9 +4432,9 @@ "dev": true }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, "dir-glob": { @@ -4552,6 +4569,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4650,9 +4673,9 @@ "dev": true }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -4684,15 +4707,15 @@ "dev": true }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { @@ -4794,17 +4817,17 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, "extend": { @@ -6423,9 +6446,9 @@ } }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-pkg-repo": { @@ -6641,13 +6664,21 @@ } }, "git-semver-tags": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz", - "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-3.0.0.tgz", + "integrity": "sha512-T4C/gJ9k2Bnxz+PubtcyiMtUUKrC+Nh9Q4zaECcnmVMwJgPhrNyP/Rf+YpdRqsJbCV/+kYrCH24Xg+IeAmbOPg==", "dev": true, "requires": { "meow": "^4.0.0", - "semver": "^5.5.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "gitconfiglocal": { @@ -6902,9 +6933,9 @@ } }, "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, "growl": { @@ -7299,9 +7330,9 @@ } }, "highlight.js": { - "version": "9.15.8", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.8.tgz", - "integrity": "sha512-RrapkKQWwE+wKdF73VsOa2RQdIoO3mxwJ4P8mhbI6KYJUraUHRKM5w5zQQKXNk0xNL4UVRdulV9SBJcmzJNzVA==", + "version": "9.15.9", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.9.tgz", + "integrity": "sha512-M0zZvfLr5p0keDMCAhNBp03XJbKBxUx5AfyfufMdFMEP4N/Xj6dh0IqC75ys7BAzceR34NgcvXjupRVaHBPPVQ==", "dev": true }, "hoist-non-react-statics": { @@ -7322,9 +7353,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", "dev": true }, "html-encoding-sniffer": { @@ -7404,9 +7435,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -7559,6 +7590,16 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7586,9 +7627,9 @@ } }, "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "is-absolute": { @@ -8035,71 +8076,71 @@ } }, "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", "dev": true, "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.8.0" + "jest-cli": "^24.9.0" }, "dependencies": { "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "dev": true, "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" } } } }, "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", + "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" }, "dependencies": { @@ -8116,48 +8157,49 @@ "dev": true }, "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "dev": true, "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", + "babel-preset-jest": "^24.9.0", "chalk": "^2.4.2", "slash": "^2.0.0" } }, "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", "dev": true, "requires": { + "@babel/helper-plugin-utils": "^7.0.0", "find-up": "^3.0.0", "istanbul-lib-instrument": "^3.3.0", "test-exclude": "^5.2.3" } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" } }, "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "dev": true, "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "babel-plugin-jest-hoist": "^24.9.0" } }, "braces": { @@ -8490,9 +8532,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -8566,9 +8608,9 @@ "dev": true }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "strip-bom": { @@ -8592,87 +8634,87 @@ } }, "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", "dev": true, "requires": { "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", "dev": true }, "jest-haste-map": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", - "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", "micromatch": "^3.1.10", "sane": "^4.0.3", "walker": "^1.0.7" @@ -8970,59 +9012,60 @@ } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^24.9.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", "throat": "^4.0.0" } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "dev": true, "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -9322,12 +9365,12 @@ } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "dev": true, "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^24.9.0" } }, "jest-pnp-resolver": { @@ -9337,18 +9380,18 @@ "dev": true }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", "dev": true }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -9356,72 +9399,72 @@ } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "jest-snapshot": "^24.9.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", + "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", + "@jest/environment": "^24.9.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" }, "dependencies": { "strip-bom": { @@ -9433,42 +9476,51 @@ } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -9493,17 +9545,17 @@ } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" }, "dependencies": { "camelcase": { @@ -9515,27 +9567,27 @@ } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.8.0", + "jest-util": "^24.9.0", "string-length": "^2.0.0" } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "dev": true, "requires": { - "merge-stream": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { @@ -9712,12 +9764,12 @@ "dev": true }, "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "^1.0.0" } }, "lcov-parse": { @@ -9733,9 +9785,9 @@ "dev": true }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { @@ -9788,9 +9840,9 @@ } }, "lodash": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash._basecopy": { @@ -10026,15 +10078,6 @@ "tmpl": "1.0.x" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -10075,14 +10118,12 @@ "dev": true }, "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "mimic-fn": "^1.0.0" } }, "meow": { @@ -10175,44 +10216,15 @@ "dev": true }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", "dev": true }, "metro": { @@ -10274,6 +10286,12 @@ "yargs": "^9.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -10348,17 +10366,6 @@ } } }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -10528,16 +10535,10 @@ } } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "is-accessor-descriptor": { @@ -10634,15 +10635,6 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -10655,23 +10647,13 @@ "strip-bom": "^3.0.0" } }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "readable-stream": "^2.0.1" } }, "metro-babel7-plugin-react-transform": { @@ -10741,46 +10723,12 @@ "mime-db": "~1.23.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - }, - "dependencies": { - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -10811,6 +10759,21 @@ "read-pkg": "^2.0.0" } }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", @@ -10858,28 +10821,87 @@ } } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "watch": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", - "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - } - }, - "wordwrap": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "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=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, "write-file-atomic": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", @@ -11624,9 +11646,9 @@ } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "min-document": { @@ -11853,9 +11875,9 @@ "dev": true }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "dev": true, "requires": { "growly": "^1.3.0", @@ -12111,14 +12133,6 @@ "dev": true, "requires": { "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } } }, "opn": { @@ -12200,14 +12214,58 @@ "dev": true }, "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } } }, "os-tmpdir": { @@ -12216,12 +12274,6 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-each-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", @@ -12237,12 +12289,6 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -12493,9 +12539,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -12528,9 +12574,9 @@ } }, "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { "semver-compare": "^1.0.0" @@ -12624,12 +12670,12 @@ "dev": true }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" @@ -12683,13 +12729,13 @@ } }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", "dev": true, "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" } }, "prop-types": { @@ -12710,9 +12756,9 @@ "dev": true }, "psl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz", - "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", "dev": true }, "pump": { @@ -12792,15 +12838,15 @@ "dev": true }, "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", + "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.13.3" } }, "react-clone-referenced-element": { @@ -12816,9 +12862,9 @@ "dev": true }, "react-devtools-core": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.1.tgz", - "integrity": "sha512-I/LSX+tpeTrGKaF1wXSfJ/kP+6iaP2JfshEjW8LtQBdz6c6HhzOJtjZXhqOUrAdysuey8M1/JgPY1flSVVt8Ig==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.3.tgz", + "integrity": "sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==", "dev": true, "requires": { "shell-quote": "^1.6.1", @@ -12845,9 +12891,9 @@ } }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" }, "react-native": { "version": "0.59.10", @@ -12937,17 +12983,6 @@ } } }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -12957,31 +12992,10 @@ "ms": "2.0.0" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "is-fullwidth-code-point": { @@ -12993,15 +13007,6 @@ "number-is-nan": "^1.0.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -13014,48 +13019,12 @@ "strip-bom": "^3.0.0" } }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -13102,12 +13071,68 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, "ws": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", @@ -13156,10 +13181,20 @@ } } }, + "react-native-eva-icons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-native-eva-icons/-/react-native-eva-icons-1.1.0.tgz", + "integrity": "sha512-0k6sbiKoHxmmbCgAZTHj6llcdcwtbyZJ1E2AK0my7QU0WRaWwqWMep5AUlMbrIiuYE9mkMZiabEXYcfn3ir2PA==" + }, + "react-native-svg": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.6.4.tgz", + "integrity": "sha512-6SlbGx0vlXHyDPQXSpX+8o6bNjxKFNJsISoboAkR7YWW6hdnkMg/HJXCgT6oJC0/ClKtSO7ZPrQcK4HR65kDNg==" + }, "react-native-testing-library": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/react-native-testing-library/-/react-native-testing-library-1.10.0.tgz", - "integrity": "sha512-+de/qkHwngp8Y8+i50QoyCi2G7qM8a7HtxE2vJPgCLfuYhg/trELN4RIKkyrfImq5Z6mFTo/kCuL6h/bU1RrfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/react-native-testing-library/-/react-native-testing-library-1.11.1.tgz", + "integrity": "sha512-PTwDn1sgegvFqqF1v9zrRUChHqFqp5rWVUjXgkk134wssVhfc2oAuS6kiOvr3w7tLmFzuspxvT5sw0gMrRnDfQ==", "dev": true, "requires": { "pretty-format": "^24.0.0" @@ -13176,15 +13211,15 @@ } }, "react-test-renderer": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz", - "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.3.tgz", + "integrity": "sha512-rjJGYebduKNZH0k1bUivVrRLX04JfIQ0FKJLPK10TAb06XWhfi4gTobooF9K/DEFNW98iGac3OSxkfIJUN9Mdg==", "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.13.6" + "react-is": "^16.8.3", + "scheduler": "^0.13.3" } }, "react-transform-hmr": { @@ -13294,15 +13329,15 @@ } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "dev": true, "requires": { "private": "^0.1.6" @@ -13328,13 +13363,13 @@ } }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", + "regenerate-unicode-properties": "^8.1.0", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -13509,9 +13544,9 @@ "dev": true }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -13565,9 +13600,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -13955,9 +13990,9 @@ } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "semver-compare": { @@ -14145,9 +14180,9 @@ } }, "sisteransi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.2.tgz", - "integrity": "sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", "dev": true }, "slash": { @@ -14305,9 +14340,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -14361,9 +14396,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "split": { @@ -14549,39 +14584,48 @@ } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "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", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, "strip-ansi": { @@ -14683,9 +14727,9 @@ "dev": true }, "textextensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.4.0.tgz", - "integrity": "sha512-qftQXnX1DzpSV8EddtHIT0eDDEiBF8ywhFYR2lI9xrGtxqKN+CvLXhACeCIGbCpQfxxERbrkZEFb8cZcDKbVZA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.5.0.tgz", + "integrity": "sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA==", "dev": true }, "throat": { @@ -15368,12 +15412,12 @@ "dev": true }, "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", + "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", "dev": true, "requires": { - "natives": "^1.1.0" + "natives": "^1.1.3" } }, "isarray": { @@ -15510,33 +15554,29 @@ "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "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": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "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": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -15645,23 +15685,21 @@ "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" }, "dependencies": { "find-up": { @@ -15684,9 +15722,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -15706,13 +15744,19 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "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==", + "dev": true } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index e849add59..8e3db6481 100644 --- a/package.json +++ b/package.json @@ -43,9 +43,12 @@ }, "dependencies": { "@eva-design/dss": "^1.0.1", + "@eva-design/eva": "^1.0.1", "@eva-design/processor": "^1.0.1", "hoist-non-react-statics": "^3.2.1", - "lodash.merge": "^4.6.1" + "lodash.merge": "^4.6.1", + "react-native-eva-icons": "^1.1.0", + "react-native-svg": "^9.5.1" }, "devDependencies": { "@babel/core": "^7.1.2", @@ -57,7 +60,7 @@ "@types/react": "^16.8.19", "@types/react-native": "^0.57.60", "@types/react-navigation": "^3.0.7", - "@types/react-test-renderer": "^16.8.1", + "@types/react-test-renderer": "^16.9.0", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^23.6.0", "babel-plugin-module-resolver": "^3.2.0", @@ -71,10 +74,10 @@ "husky": "^1.1.2", "jest": "^24.0.0-alpha.9", "metro-react-native-babel-preset": "^0.49.0", - "react": "^16.8.3", + "react": "16.8.3", "react-native": "^0.59.8", "react-native-testing-library": "^1.5.0", - "react-test-renderer": "^16.6.0", + "react-test-renderer": "16.8.3", "rimraf": "^2.6.2", "ts-jest": "^23.10.5", "ts-node": "^3.2.2", diff --git a/scripts/build/compile-ts.sh b/scripts/build/compile-ts.sh index 5fb35f518..7ba4d5716 100755 --- a/scripts/build/compile-ts.sh +++ b/scripts/build/compile-ts.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# do not transform additional modules like moment or date-fns +# because it should not contain module aliases + env=${1} -tsc -p ./tsconfig.${env}.json +tscpaths -p ./tsconfig.${env}.json -s ./src/framework -o ./dist/tsc-out/framework diff --git a/src/eva-icons/createIconsMap.ts b/src/eva-icons/createIconsMap.ts new file mode 100644 index 000000000..529a91c68 --- /dev/null +++ b/src/eva-icons/createIconsMap.ts @@ -0,0 +1,12 @@ +import { IconProvider } from 'react-native-ui-kitten'; +import { SvgProps } from 'react-native-svg'; +import { findIconByName } from 'react-native-eva-icons/icons'; +import { EvaIcon } from './evaIcon.component'; + +export const createIconsMap = (): { [key: string]: IconProvider } => { + return new Proxy({}, { + get(target: {}, name: string): IconProvider { + return new EvaIcon(findIconByName(name)); + }, + }); +}; diff --git a/src/eva-icons/evaIcon.component.tsx b/src/eva-icons/evaIcon.component.tsx new file mode 100644 index 000000000..d0eae414c --- /dev/null +++ b/src/eva-icons/evaIcon.component.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { SvgProps } from 'react-native-svg'; +import { IconProvider } from 'react-native-ui-kitten'; + +type IconElement = React.ReactElement; +type IconComponent = React.ComponentType; + +export class EvaIcon implements IconProvider { + + constructor(private content: IconComponent) { + } + + public toReactElement(props: SvgProps): IconElement { + const Icon: IconComponent = this.content; + + // @ts-ignore - Eva maps icon color to `tintColor` + const { tintColor, ...restProps } = props; + + return ( + + ); + } +} diff --git a/src/eva-icons/index.ts b/src/eva-icons/index.ts new file mode 100644 index 000000000..ec0c78ee3 --- /dev/null +++ b/src/eva-icons/index.ts @@ -0,0 +1,9 @@ +import { IconPack } from 'react-native-ui-kitten'; +import { SvgProps } from 'react-native-svg'; +import { createIconsMap } from './createIconsMap'; + +export const EvaIconsPack: IconPack = { + name: 'eva', + icons: createIconsMap(), +}; + diff --git a/src/eva-icons/package.json b/src/eva-icons/package.json new file mode 100644 index 000000000..aad398926 --- /dev/null +++ b/src/eva-icons/package.json @@ -0,0 +1,30 @@ +{ + "name": "@ui-kitten/eva-icons", + "version": "4.1.0", + "description": "@ui-kitten/eva-icons", + "author": "akveo", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/akveo/react-native-ui-kitten.git" + }, + "bugs": { + "url": "https://github.com/akveo/react-native-ui-kitten/issues" + }, + "homepage": "https://github.com/akveo/react-native-ui-kitten#readme", + "keywords": [ + "react-native", + "typescript", + "kittenTricks", + "theme", + "ui-kitten" + ], + "dependencies": { + "react-native-eva-icons": "1.1.0" + }, + "peerDependencies": { + "react-native-ui-kitten": "4.1.0", + "react-native-svg": "^9.4.0" + }, + "sideEffects": false +} diff --git a/src/framework/theme/style/type.ts b/src/framework/theme/style/type.ts index 7e6c432a9..56746e42b 100644 --- a/src/framework/theme/style/type.ts +++ b/src/framework/theme/style/type.ts @@ -6,6 +6,7 @@ export enum Interaction { ACTIVE = 'active', FOCUSED = 'focused', INDETERMINATE = 'indeterminate', + VISIBLE = 'visible', } export enum State { diff --git a/src/framework/ui/animation/animation.ts b/src/framework/ui/animation/animation.ts new file mode 100644 index 000000000..234552a52 --- /dev/null +++ b/src/framework/ui/animation/animation.ts @@ -0,0 +1,63 @@ +import { Animated } from 'react-native'; + +export const DEFAULT_CONFIG: AnimationConfig = { + cycles: 1, + useNativeDriver: true, +}; + +/** + * @property cycles - number of animation cycles. -1 for infinite + */ +export interface AnimationConfig extends Animated.AnimationConfig { + cycles?: number; +} + +export abstract class Animation { + + protected abstract animation: Animated.CompositeAnimation; + protected counter: number = 0; + protected endCallback: Animated.EndCallback; + protected running: boolean = false; + protected config: C; + + public abstract toProps(): R; + + constructor(config?: C) { + this.config = { + ...DEFAULT_CONFIG, + ...config, + }; + } + + public start(callback?: Animated.EndCallback) { + this.endCallback = callback; + this.running = true; + + this.animation.start(this.onAnimationEnd); + } + + public stop() { + this.running = false; + + this.animation.stop(); + } + + public release() { + this.stop(); + } + + protected onAnimationEnd = (result: Animated.EndResult) => { + this.counter += 1; + if (this.counter === this.config.cycles) { + this.stop(); + } + if (this.running) { + this.start(this.endCallback); + } + if (!this.running) { + this.counter = 0; + this.endCallback && this.endCallback(result); + this.endCallback = null; + } + }; +} diff --git a/src/framework/ui/animation/index.ts b/src/framework/ui/animation/index.ts new file mode 100644 index 000000000..e1548dee0 --- /dev/null +++ b/src/framework/ui/animation/index.ts @@ -0,0 +1,16 @@ +export { + Animation, + AnimationConfig, +} from './animation'; +export { + PulseAnimation, + PulseAnimationConfig, +} from './pulseAnimation'; +export { + ShakeAnimation, + ShakeAnimationConfig, +} from './shakeAnimation'; +export { + ZoomAnimation, + ZoomAnimationConfig, +} from './zoomAnimation'; diff --git a/src/framework/ui/animation/pulseAnimation.ts b/src/framework/ui/animation/pulseAnimation.ts new file mode 100644 index 000000000..0f5ba8128 --- /dev/null +++ b/src/framework/ui/animation/pulseAnimation.ts @@ -0,0 +1,61 @@ +import { + Animated, + Easing, + ViewProps, +} from 'react-native'; +import { + Animation, + AnimationConfig, +} from './animation'; + +const DEFAULT_CONFIG: PulseAnimationConfig = { + start: 1.0, + end: 1.25, + easing: Easing.linear, + duration: 500, +}; + +type TimingAnimationConfig = Omit; + +export interface PulseAnimationConfig extends AnimationConfig, TimingAnimationConfig { + start?: number; + end?: number; +} + +export class PulseAnimation extends Animation { + + private value: Animated.Value; + + protected get animation(): Animated.CompositeAnimation { + const { start, end, ...restConfig } = this.config; + + const startAnimation: Animated.CompositeAnimation = Animated.timing(this.value, { + toValue: end, + ...restConfig, + }); + + const endAnimation: Animated.CompositeAnimation = Animated.timing(this.value, { + toValue: start, + ...restConfig, + }); + + return Animated.sequence([ + startAnimation, + endAnimation, + ]); + } + + constructor(config?: PulseAnimationConfig) { + super({ ...DEFAULT_CONFIG, ...config }); + this.value = new Animated.Value(this.config.start); + } + + public toProps(): ViewProps { + return { + // @ts-ignore: Animated.Value is not assignable to a number, but it is a number + style: { + transform: [{ scale: this.value }], + }, + }; + } +} diff --git a/src/framework/ui/animation/shakeAnimation.ts b/src/framework/ui/animation/shakeAnimation.ts new file mode 100644 index 000000000..8639b79c0 --- /dev/null +++ b/src/framework/ui/animation/shakeAnimation.ts @@ -0,0 +1,62 @@ +import { + Animated, + Easing, + ViewProps, +} from 'react-native'; +import { + Animation, + AnimationConfig, +} from './animation'; + +const DEFAULT_CONFIG: ShakeAnimationConfig = { + start: 0.0, + offset: 2.5, + easing: Easing.linear, + duration: 25, + cycles: 8, +}; + +type TimingAnimationConfig = Omit; + +export interface ShakeAnimationConfig extends AnimationConfig, TimingAnimationConfig { + start?: number; + offset?: number; +} + +export class ShakeAnimation extends Animation { + + private value: Animated.Value; + + protected get animation(): Animated.CompositeAnimation { + const { start, offset, ...restConfig } = this.config; + + const startAnimation: Animated.CompositeAnimation = Animated.timing(this.value, { + toValue: this.counter % 2 !== 0 ? -offset : offset, + ...restConfig, + }); + + const endAnimation: Animated.CompositeAnimation = Animated.timing(this.value, { + toValue: this.counter % 2 !== 0 ? offset : -offset, + ...restConfig, + }); + + return Animated.sequence([ + startAnimation, + endAnimation, + ]); + } + + constructor(config?: ShakeAnimationConfig) { + super({ ...DEFAULT_CONFIG, ...config }); + this.value = new Animated.Value(this.config.start); + } + + public toProps(): ViewProps { + return { + // @ts-ignore: Animated.Value is not assignable to a number, but it is a number + style: { + transform: [{ translateX: this.value }], + }, + }; + } +} diff --git a/src/framework/ui/animation/zoomAnimation.ts b/src/framework/ui/animation/zoomAnimation.ts new file mode 100644 index 000000000..56c1a565b --- /dev/null +++ b/src/framework/ui/animation/zoomAnimation.ts @@ -0,0 +1,61 @@ +import { + Animated, + Easing, + ViewProps, +} from 'react-native'; +import { + Animation, + AnimationConfig, +} from './animation'; + +const DEFAULT_CONFIG: ZoomAnimationConfig = { + start: 1.0, + end: 0.5, + easing: Easing.linear, + duration: 500, +}; + +type TimingAnimationConfig = Omit; + +export interface ZoomAnimationConfig extends AnimationConfig, TimingAnimationConfig { + start?: number; + end?: number; +} + +export class ZoomAnimation extends Animation { + + private value: Animated.Value; + + protected get animation(): Animated.CompositeAnimation { + const { start, end, ...restConfig } = this.config; + + const startAnimation: Animated.CompositeAnimation = Animated.timing(this.value, { + toValue: end, + ...restConfig, + }); + + const endAnimation: Animated.CompositeAnimation = Animated.timing(this.value, { + toValue: start, + ...restConfig, + }); + + return Animated.sequence([ + startAnimation, + endAnimation, + ]); + } + + constructor(config?: ZoomAnimationConfig) { + super({ ...DEFAULT_CONFIG, ...config }); + this.value = new Animated.Value(this.config.start); + } + + public toProps(): ViewProps { + return { + // @ts-ignore: Animated.Value is not assignable to a number, but it is a number + style: { + transform: [{ scale: this.value }], + }, + }; + } +} diff --git a/src/framework/ui/dropdown/dropdown.component.tsx b/src/framework/ui/dropdown/dropdown.component.tsx new file mode 100644 index 000000000..6b8afce90 --- /dev/null +++ b/src/framework/ui/dropdown/dropdown.component.tsx @@ -0,0 +1,751 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import React from 'react'; +import { + GestureResponderEvent, + ImageProps, + ImageStyle, + StyleSheet, + TextStyle, + TouchableOpacity, + TouchableOpacityProps, + StyleProp, + View, + ViewStyle, + ListRenderItemInfo, + Animated, +} from 'react-native'; +import { + Interaction, + styled, + StyledComponentProps, + StyleType, +} from '@kitten/theme'; +import { + Text, + TextElement, +} from '../text/text.component'; +import { Popover } from '../popover/popover.component'; +import { + DropdownMenu, + DropdownMenuElement, +} from './dropdownMenu.component'; +import { DropdownItemType } from './droppdownItem.component'; +import { + MeasureNode, + MeasureResult, + MeasuringElementProps, +} from '../popover/measure.component'; +import { + SelectionStrategy, + MultiSelectStrategy, + SingleSelectStrategy, +} from './selection.strategy'; +import { + allWithPrefix, + isValidString, +} from '../support/services'; +import { Chevron } from '../support/components'; + +type IconElement = React.ReactElement; +type ControlElement = React.ReactElement; +type IconProp = (style: ImageStyle, visible: boolean) => IconElement; +type DropdownChildren = [DropdownMenuElement, TextElement, ControlElement]; + +export type DropdownOption = Array | DropdownItemType; + +const MEASURED_CONTROL_TAG: string = 'Control'; + +interface ComponentProps { + data: DropdownItemType[]; + multiSelect?: boolean; + selectedOption?: DropdownOption; + textStyle?: StyleProp; + placeholder?: string; + placeholderStyle?: StyleProp; + label?: string; + labelStyle?: StyleProp; + controlStyle?: StyleProp; + icon?: IconProp; + onSelect: (option: DropdownOption, event?: GestureResponderEvent) => void; + status?: string; + renderItem?: (item: ListRenderItemInfo) => React.ReactElement; +} + +export type DropdownProps = StyledComponentProps & TouchableOpacityProps & ComponentProps; +export type DropdownElement = React.ReactElement; + +interface State { + visible: boolean; + menuWidth: number; +} + +/** + * Styled Dropdown (Select) component. + * + * @extends React.Component + * + * @property {boolean} disabled - Determines whether component is disabled. + * Default is `false`. + * + * @property {string} status - Determines the status of the component. + * Can be `primary`, `success`, `info`, `warning` or `danger`. + * + * @property {boolean} multiSelect - Determines `multi-select` behavior of the Dropdown component. + * + * @property {DropdownOption} selectedOption - Determines selected option of the Dropdown. + * Can be `DropdownItemType` or `DropdownItemType[]` It depends on `multiSelect` property. + * + * @property {DropdownItemType[]} data - Determines items of the Dropdown component. + * + * @property {(option: DropdownOption, event?: GestureResponderEvent) => void} onSelect - Fires on option selection. + * Returns selected option/options. + * + * @property {(item: ListRenderItemInfo) => React.ReactElement} renderItem - Property for + * rendering custom dropdown items. + * + * @property {StyleProp} label - Determines the `label` of the component. + * + * @property {StyleProp} placeholder - Determines the `placeholder` of the component. + * By default is `Select Option`. + * + * @property {StyleProp} labelStyle - Determines the style of the `label`. + * + * @property {StyleProp} placeholderStyle - Determines the style of the `placeholder`. + * + * @property {StyleProp} textStyle - Determines the style of the selected option/options text. + * + * @property {StyleProp} controlStyle - Determines the style of `control`. + * + * @property {(style: StyleType) => React.ReactElement} icon - Determines icon of the component. + * + * @property {StyleProp} textStyle - Customizes text style. + * + * @property TouchableOpacityProps + * + * @property StyledComponentProps + * + * @overview-example Simple usage example + * + * ``` + * import React from 'react'; + * import { + * Dropdown, + * DropdownItemType, + * DropdownOption, + * } from '@kitten/ui'; + * + * interface State { + * selectedOption: DropdownOption; + * } + * + * export class DropdownContainer extends React.Component { + * + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2' }, + * { text: 'Option 3' }, + * { text: 'Option 4' }, + * { text: 'Option 5' }, + * { text: 'Option 6' }, + * { text: 'Option 8' }, + * ]; + * + * public state: State = { + * selectedOption: null, + * }; + * + * private onSelect = (selectedOption: DropdownOption): void => { + * this.setState({ selectedOption }); + * }; + * + * public render(): React.ReactNode { + * return ( + * + * ); + * } + * } + * ``` + * + * @overview-example MultiSelect Dropdown + * + * ``` + * import React from 'react'; + * import { + * Dropdown, + * DropdownItemType, + * DropdownOption, + * } from '@kitten/ui'; + * + * interface State { + * selectedOption: DropdownOption; + * } + * + * export class DropdownContainer extends React.Component { + * + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2' }, + * { text: 'Option 3' }, + * { text: 'Option 4' }, + * { text: 'Option 5' }, + * { text: 'Option 6' }, + * { text: 'Option 8' }, + * ]; + * + * public state: State = { + * selectedOption: [], + * }; + * + * private onSelect = (selectedOption: DropdownOption): void => { + * this.setState({ selectedOption }); + * }; + * + * public render(): React.ReactNode { + * return ( + * + * ); + * } + * } + * ``` + * + * @example With Eva styles + * + * ``` + * import React from 'react'; + * import { + * Dropdown, + * DropdownItemType, + * DropdownOption, + * } from '@kitten/ui'; + * + * interface State { + * selectedOption: DropdownOption; + * } + * + * export class DropdownContainer extends React.Component { + * + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2' }, + * { text: 'Option 3' }, + * { text: 'Option 4' }, + * { text: 'Option 5' }, + * { text: 'Option 6' }, + * { text: 'Option 8' }, + * ]; + * + * public state: State = { + * selectedOption: null, + * }; + * + * private onSelect = (selectedOption: DropdownOption): void => { + * this.setState({ selectedOption }); + * }; + * + * public render(): React.ReactNode { + * return ( + * + * ); + * } + * } + * ``` + * + * @example With Icon + * + * ``` + * import React from 'react'; + * import { + * ImageProps, + * Image, + * } from 'react-native'; + * import { + * Dropdown, + * DropdownItemType, + * DropdownOption, + * } from '@kitten/ui'; + * import { StyleType } from '@kitten/theme'; + * + * interface State { + * selectedOption: DropdownOption; + * } + * + * export class DropdownContainer extends React.Component { + * + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2' }, + * { text: 'Option 3' }, + * { text: 'Option 4' }, + * { text: 'Option 5' }, + * { text: 'Option 6' }, + * { text: 'Option 8' }, + * ]; + * + * public state: State = { + * selectedOption: null, + * }; + * + * private onSelect = (selectedOption: DropdownOption): void => { + * this.setState({ selectedOption }); + * }; + * + * private renderIcon = (style: StyleType, visible: boolean): React.ReactElement => { + * const uri: string = visible ? + * 'https://akveo.github.io/eva-icons/fill/png/128/arrow-ios-upward.png' : + * 'https://akveo.github.io/eva-icons/fill/png/128/arrow-ios-downward.png'; + * return ( + * + * ); + * }; + * + * public render(): React.ReactNode { + * return ( + * + * ); + * } + * } + * ``` + * + * @example Custom Styling + * + * import React from 'react'; + * import { StyleSheet } from 'react-native'; + * import { + * Dropdown, + * DropdownItemType, + * DropdownOption, + * } from '@kitten/ui'; + * + * interface State { + * selectedOption: DropdownOption; + * } + * + * export class DropdownContainer extends React.Component { + * + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2', textStyle: styles.customOptionStyle }, + * { text: 'Option 3' }, + * { text: 'Option 4' }, + * { text: 'Option 5' }, + * { text: 'Option 6' }, + * { text: 'Option 8' }, + * ]; + * + * public state: State = { + * selectedOption: null, + * }; + * + * private onSelect = (selectedOption: DropdownOption): void => { + * this.setState({ selectedOption }); + * }; + * + * public render(): React.ReactNode { + * return ( + * + * ); + * } + * } + * + * const styles = StyleSheet.create({ + * dropdown: { + * margin: 16, + * }, + * customOptionStyle: { + * color: 'red', + * }, + * labelStyle: { + * fontSize: 22, + * }, + * placeholderStyle: { + * color: 'yellow', + * }, + * controlStyle: { + * backgroundColor: 'black', + * }, + * }); + * + * @example Disabled Option + * + * ``` + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2', disabled: true }, + * { text: 'Option 3' }, + * { text: 'Option 4' }, + * ]; + * ``` + * + * @example Dropdown Groups + * + * ``` + * private items: DropdownItemType[] = [ + * { text: 'Option 1' }, + * { text: 'Option 2', disabled: true }, + * { text: 'Option 3', items: [ { text: 'Option 31' }, { text: 'Option 32' }, { text: 'Option 33' } ] }, + * { text: 'Option 4' }, + * ]; + * ``` + * + */ + +class DropdownComponent extends React.Component { + + static styledComponentName: string = 'Dropdown'; + static defaultProps: Partial = { + placeholder: 'Select Option', + multiSelect: false, + }; + + public state: State = { + visible: false, + menuWidth: 0, + }; + + private strategy: SelectionStrategy; + private iconAnimation: Animated.Value; + + constructor(props: DropdownProps) { + super(props); + const { multiSelect, selectedOption } = props; + this.strategy = multiSelect ? + new MultiSelectStrategy(selectedOption) : new SingleSelectStrategy(selectedOption); + this.iconAnimation = new Animated.Value(-180); + } + + private onItemSelect = (option: DropdownItemType, event: GestureResponderEvent): void => { + const { onSelect } = this.props; + + onSelect(this.strategy.select(option, this.setVisibility)); + }; + + private setVisibility = (): void => { + const visible: boolean = !this.state.visible; + + this.setState({ visible }, this.handleVisibleChange); + }; + + private handleVisibleChange = (): void => { + this.dispatchActive(); + this.startIconAnimation(); + }; + + private dispatchActive = (): void => { + const { visible } = this.state; + if (visible) { + this.props.dispatch([Interaction.ACTIVE]); + } else { + this.props.dispatch([]); + } + }; + + private startIconAnimation = (): void => { + const { visible } = this.state; + if (visible) { + this.animateIcon(0); + } else { + this.animateIcon(-180); + } + }; + + private animateIcon = (toValue: number): void => { + Animated.timing(this.iconAnimation, { + toValue: toValue, + duration: 200, + }).start(); + }; + + private onPress = (event: GestureResponderEvent) => { + this.props.dispatch([]); + if (this.props.onPress) { + this.props.onPress(event); + } + this.setVisibility(); + }; + + private onPressIn = (event: GestureResponderEvent) => { + this.props.dispatch([Interaction.ACTIVE]); + + if (this.props.onPressIn) { + this.props.onPressIn(event); + } + }; + + private onPressOut = (event: GestureResponderEvent) => { + this.props.dispatch([]); + + if (this.props.onPressOut) { + this.props.onPressOut(event); + } + }; + + private onControlMeasure = (result: MeasureResult): void => { + const width: number = result[MEASURED_CONTROL_TAG].size.width; + + this.setState({ menuWidth: width }); + }; + + private getComponentStyle = (source: StyleType): StyleType => { + const controlStyles: StyleType = allWithPrefix(source, 'control'); + const iconStyles: StyleType = allWithPrefix(source, 'icon'); + const textStyles: StyleType = allWithPrefix(source, 'text'); + const placeholderStyles: StyleType = allWithPrefix(source, 'placeholder'); + const menuStyles: StyleType = allWithPrefix(source, 'menu'); + const labelStyle: StyleType = allWithPrefix(source, 'label'); + const outlineStyles: StyleType = allWithPrefix(source, 'outline'); + + return { + control: { + backgroundColor: controlStyles.controlBackgroundColor, + borderColor: controlStyles.controlBorderColor, + borderWidth: controlStyles.controlBorderWidth, + minHeight: controlStyles.controlMinHeight, + minWidth: controlStyles.controlMinWidth, + paddingHorizontal: controlStyles.controlPaddingHorizontal, + paddingVertical: controlStyles.controlPaddingVertical, + borderRadius: controlStyles.controlBorderRadius, + }, + icon: { + height: iconStyles.iconHeight, + width: iconStyles.iconWidth, + marginHorizontal: iconStyles.iconMarginHorizontal, + tintColor: iconStyles.iconTintColor, + }, + text: { + color: textStyles.textColor, + fontSize: textStyles.textFontSize, + fontWeight: textStyles.textFontWeight, + lineHeight: textStyles.textLineHeight, + marginHorizontal: textStyles.textMarginHorizontal, + }, + placeholder: { + color: placeholderStyles.placeholderColor, + fontSize: placeholderStyles.placeholderFontSize, + fontWeight: placeholderStyles.placeholderFontWeight, + lineHeight: placeholderStyles.placeholderLineHeight, + marginHorizontal: placeholderStyles.placeholderMarginHorizontal, + }, + outline: { + backgroundColor: outlineStyles.outlineBackgroundColor, + padding: outlineStyles.outlinePadding, + borderRadius: outlineStyles.outlineBorderRadius, + }, + menu: { + maxHeight: menuStyles.menuMaxHeight, + borderRadius: menuStyles.menuBorderRadius, + borderColor: menuStyles.menuBorderColor, + borderWidth: menuStyles.menuBorderWidth, + }, + label: { + color: labelStyle.labelColor, + marginBottom: labelStyle.labelMarginBottom, + }, + }; + }; + + private renderLabelElement = (style: TextStyle): TextElement => { + const { label, labelStyle } = this.props; + + return ( + + {label} + + ); + }; + + private renderDefaultIconElement = (style: ImageStyle): IconElement => { + const { visible } = this.state; + + const rotateInterpolate = this.iconAnimation.interpolate({ + inputRange: [-180, 0], + outputRange: ['-180deg', '0deg'], + }); + const animatedStyle: StyleType = { transform: [{ rotate: rotateInterpolate }] }; + + return ( + + ); + }; + + private renderIconElement = (style: ImageStyle): IconElement => { + const { icon } = this.props; + const { visible } = this.state; + + if (icon) { + return icon(style, visible); + } else { + return this.renderDefaultIconElement(style); + } + }; + + private renderTextElement = (valueStyle: TextStyle, placeholderStyle: TextStyle): TextElement => { + const { placeholder, textStyle } = this.props; + const value: string = this.strategy.getPlaceholder(placeholder); + const style: TextStyle = placeholder === value ? placeholderStyle : valueStyle; + + return ( + + {value} + + ); + }; + + private renderMenuElement = (style: StyleType): DropdownMenuElement => { + const { appearance, selectedOption, ...restProps } = this.props; + const additionalMenuStyle: StyleType = { width: this.state.menuWidth }; + + return ( + + ); + }; + + private renderControlChildren = (style: StyleType): [IconElement, TextElement] => { + return [ + this.renderIconElement(style.icon), + this.renderTextElement(style.text, style.placeholder), + ]; + }; + + private renderControlElement = (): ControlElement => { + const { themedStyle, controlStyle, ...restProps } = this.props; + const { control, outline, ...childrenStyles } = this.getComponentStyle(themedStyle); + const [iconElement, textElement] = this.renderControlChildren(childrenStyles); + + const measuringProps: MeasuringElementProps = { tag: MEASURED_CONTROL_TAG }; + + return ( + + {[ + + {textElement} + {iconElement} + , + ]} + + ); + }; + + private renderComponentChildren = (style: StyleType): DropdownChildren => { + const { label } = this.props; + + return [ + this.renderMenuElement(style.menu), + isValidString(label) && this.renderLabelElement(style.label), + this.renderControlElement(), + ]; + }; + + public render(): DropdownElement { + const { themedStyle, style } = this.props; + const { visible, menuWidth } = this.state; + const componentStyle: StyleType = this.getComponentStyle(themedStyle); + const [menuElement, labelElement, controlElement] = this.renderComponentChildren(componentStyle); + const additionalMenuStyle: StyleType = { maxWidth: menuWidth }; + + return ( + + {labelElement} + + + {controlElement} + + + + ); + } +} + +const styles = StyleSheet.create({ + control: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + text: { + flex: 1, + }, + icon: {}, + label: {}, + indicator: { + width: 0, + height: 6, + }, + menu: { + flexGrow: 0, + }, + outlineContainer: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + outline: { + justifyContent: 'center', + }, +}); + +export const Dropdown = styled(DropdownComponent); diff --git a/src/framework/ui/dropdown/dropdown.spec.tsx b/src/framework/ui/dropdown/dropdown.spec.tsx new file mode 100644 index 000000000..31bb6c90a --- /dev/null +++ b/src/framework/ui/dropdown/dropdown.spec.tsx @@ -0,0 +1,288 @@ +import React from 'react'; +import { + Image, + ImageProps, + TouchableOpacity, +} from 'react-native'; +import { + render, + fireEvent, + RenderAPI, +} from 'react-native-testing-library'; +import { + ApplicationProvider, + StyleType, +} from '@kitten/theme'; +import { + Dropdown, + DropdownOption, +} from './dropdown.component'; +import { DropdownItemType } from './droppdownItem.component'; +import { CheckBox } from '../checkbox/checkbox.component'; +import { + mapping, + theme, +} from '../support/tests'; + +jest.useFakeTimers(); + +const stringify = (obj: any): string => JSON.stringify(obj); + +const iconClosedUri: string = 'https://akveo.github.io/eva-icons/fill/png/128/arrow-ios-downward.png'; +const iconOpenedUri: string = 'https://akveo.github.io/eva-icons/fill/png/128/arrow-ios-upward.png'; + +const data: DropdownItemType[] = [ + { text: 'Option 1' }, + { text: 'Option 2', disabled: true }, + { + text: 'Option 3', + items: [ + { text: 'Option 31', disabled: true }, + { text: 'Option 32' }, + { text: 'Option 33' }, + ], + }, + { text: 'Option 4' }, + { text: 'Option 5', textStyle: { color: 'red' } }, + { text: 'Option 6' }, + { text: 'Option 8' }, + { text: 'Option 9' }, +]; + +interface Props { + dropdownLabel?: string; + dropdownPlaceholder?: string; + dropdownDisabled?: boolean; + multiSelectDisabled?: boolean; + labelStyle?: StyleType; + placeholderStyle?: StyleType; + controlStyle?: StyleType; + onDropdownPress?: () => void; + onDropdownPressIn?: () => void; + onDropdownPressOut?: () => void; + onDropdownLongPress?: () => void; + onMultiSelectPress?: () => void; +} + +interface State { + dropdownSelected: DropdownOption; + dropdownMultiSelected: DropdownOption; +} + +class TestApplication extends React.Component { + + public state: State = { + dropdownSelected: null, + dropdownMultiSelected: [], + }; + + private onDropdownSelect = (dropdownSelected: DropdownOption): void => { + this.setState({ dropdownSelected }); + }; + + private onDropdownMultiSelect = (dropdownMultiSelected: DropdownOption): void => { + this.setState({ dropdownMultiSelected }); + }; + + private renderIcon = (style: StyleType, visible: boolean): React.ReactElement => { + const uri: string = visible ? iconOpenedUri : iconClosedUri; + + return ( + + ); + }; + + public render(): React.ReactNode { + const { + onDropdownPress, + onMultiSelectPress, + dropdownLabel, + dropdownPlaceholder, + dropdownDisabled, + multiSelectDisabled, + onDropdownPressIn, + onDropdownPressOut, + onDropdownLongPress, + + } = this.props; + + return ( + + + + + ); + } + +} + + +describe('@ dropdown component checks', () => { + + it('* dropdown onPress have been called', () => { + const onDropdownPress = jest.fn(); + const onMultiSelectPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent.press(application.getAllByType(Dropdown)[0]); + fireEvent.press(application.getAllByType(Dropdown)[1]); + expect(onDropdownPress).toHaveBeenCalled(); + expect(onMultiSelectPress).toHaveBeenCalled(); + }); + + it('* disabled props checks', () => { + const onDropdownPress = jest.fn(); + const onMultiSelectPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent.press(application.getAllByType(TouchableOpacity)[0]); + expect(onDropdownPress).toHaveBeenCalled(); + fireEvent.press(application.getAllByType(TouchableOpacity)[1]); + expect(onMultiSelectPress).toHaveBeenCalledTimes(0); + }); + + it('* dropdown default onSelect works properly', () => { + const expectedSelectedOption: DropdownItemType = { text: 'Option 1' }; + const onDropdownPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent.press(application.getAllByType(TouchableOpacity)[0]); + + fireEvent.press(application.getAllByText(expectedSelectedOption.text)[0].parent); + const { selectedOption } = application.getAllByType(Dropdown)[0].props; + + expect(stringify(selectedOption)).toBe(stringify(expectedSelectedOption)); + }); + + it('* dropdown multiSelect onSelect works properly', () => { + const expectedSelectedOption: DropdownItemType[] = [ + { text: 'Option 4' }, + { text: 'Option 32' }, + ]; + const onMultiSelectPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent.press(application.getAllByType(TouchableOpacity)[1]); + fireEvent(application.getAllByText(expectedSelectedOption[0].text)[0], 'onChange'); + fireEvent(application.getAllByText(expectedSelectedOption[1].text)[0], 'onChange'); + const { selectedOption } = application.getAllByType(Dropdown)[1].props; + + expect(stringify(selectedOption)).toBe(stringify(expectedSelectedOption)); + }); + + it('* multiSelect unselect works properly', () => { + const onMultiSelectPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent.press(application.getAllByType(TouchableOpacity)[1]); + fireEvent(application.getAllByType(CheckBox)[5], 'onChange'); + fireEvent(application.getAllByType(CheckBox)[5], 'onChange'); + const { selectedOption } = application.getAllByType(TouchableOpacity)[1].props; + + expect(stringify(selectedOption)).toBe(stringify([])); + }); + + it('* multiSelect group selected works properly', () => { + const expectedSelectedOption: DropdownItemType[] = [ + { text: 'Option 32' }, + { text: 'Option 33' }, + ]; + const onMultiSelectPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent.press(application.getAllByType(TouchableOpacity)[1]); + fireEvent(application.getAllByText('Option 3')[0], 'onChange'); + const { selectedOption: selected1 } = application.getAllByType(TouchableOpacity)[1].props; + + expect(stringify(selected1)).toBe(stringify(expectedSelectedOption)); + + fireEvent(application.getAllByText('Option 3')[0], 'onChange'); + const { selectedOption: selected2 } = application.getAllByType(TouchableOpacity)[1].props; + + expect(stringify(selected2)).toBe(stringify([])); + }); + + it('* dropdown onPress* handling', () => { + const onDropdownPressIn = jest.fn(); + const onDropdownPressOut = jest.fn(); + const onDropdownLongPress = jest.fn(); + const application: RenderAPI = render( + , + ); + + fireEvent(application.getAllByType(TouchableOpacity)[0], 'pressIn'); + fireEvent(application.getAllByType(TouchableOpacity)[0], 'pressOut'); + fireEvent(application.getAllByType(TouchableOpacity)[0], 'longPress'); + + expect(onDropdownPressIn).toHaveBeenCalled(); + expect(onDropdownPressOut).toHaveBeenCalled(); + expect(onDropdownLongPress).toHaveBeenCalled(); + }); + + it('* text props checks', () => { + const passedLabel: string = 'Label'; + const passedPlaceholder: string = 'Placeholder'; + const application: RenderAPI = render( + , + ); + + const label: string = application.getAllByText(passedLabel)[0].props.children; + const placeholder: string = application.getAllByText(passedPlaceholder)[0].props.children; + + expect(label).toBe(passedLabel); + expect(placeholder).toBe(passedPlaceholder); + }); + +}); diff --git a/src/framework/ui/dropdown/dropdownGroup.component.tsx b/src/framework/ui/dropdown/dropdownGroup.component.tsx new file mode 100644 index 000000000..26b58ada7 --- /dev/null +++ b/src/framework/ui/dropdown/dropdownGroup.component.tsx @@ -0,0 +1,155 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import React from 'react'; +import { + ListRenderItemInfo, + View, +} from 'react-native'; +import { + styled, + StyledComponentProps, + StyleType, +} from '@kitten/theme'; +import { + DropdownItem, + DropdownItemElement, + DropdownItemProps, + DropdownItemType, +} from './droppdownItem.component'; +import { SelectionStrategy } from './selection.strategy'; + +interface ComponentProps { + multiSelect?: boolean; + strategy: SelectionStrategy; + renderItem?: (item: ListRenderItemInfo) => React.ReactElement; +} + +interface MainItemStatus { + selected: boolean; + indeterminate: boolean; +} + +export type DropdownGroupProps = ComponentProps & Partial & StyledComponentProps; +export type DropdownGroupElement = React.ReactElement; + +export class DropdownGroupComponent extends React.Component { + + static styledComponentName: string = 'DropdownGroup'; + + private getComponentStyle = (source: StyleType): StyleType => { + const { + itemPaddingLeft, + ...containerStyles + } = source; + + return { + container: containerStyles, + item: { + paddingLeft: itemPaddingLeft, + }, + }; + }; + + private getMainItemStatus = (subItemsSelectedStatusArray: boolean[]): MainItemStatus => { + const someSelected: boolean = subItemsSelectedStatusArray + .some((item: boolean) => item === true); + const everySelected: boolean = subItemsSelectedStatusArray + .every((item: boolean) => item === true); + + switch (true) { + case (someSelected && !everySelected): + return { selected: true, indeterminate: true }; + case !someSelected: + return { selected: false, indeterminate: false }; + case everySelected: + return { selected: true, indeterminate: false }; + } + }; + + private renderSubItem = (option: DropdownItemType, index: number): DropdownItemElement => { + const { item, renderItem, strategy, ...restProps } = this.props; + const returningOption: ListRenderItemInfo = { + item: option, + index: index, + separators: null, + }; + const selected: boolean = strategy.isSelected(option); + + return renderItem ? renderItem(returningOption) : ( + + ); + }; + + private renderSubItemsElements = (): DropdownItemElement[] => { + const { item, themedStyle } = this.props; + const { item: itemStyle } = this.getComponentStyle(themedStyle); + + return item.items + .map((option: DropdownItemType, index: number) => { + const element: DropdownItemElement = this.renderSubItem(option, index); + + return React.cloneElement(element, { + ...option, + style: [element.props.style, itemStyle], + key: index, + }); + }); + }; + + private renderMultiSelectMainElement = (subItemsElements: DropdownItemElement[]): DropdownItemElement => { + const { item, ...restProps } = this.props; + const subItemsSelectedStatusArray: boolean[] = subItemsElements + .map((subItem: DropdownItemElement) => subItem.props.selected); + const itemStatus: MainItemStatus = this.getMainItemStatus(subItemsSelectedStatusArray); + + return ( + + ); + }; + + private renderDefaultMainElement = (): DropdownItemElement => { + const { item } = this.props; + + return ( + + ); + }; + + private renderMainElement = (subItemsElements: DropdownItemElement[]): DropdownItemElement => { + const { multiSelect } = this.props; + + return multiSelect ? this.renderMultiSelectMainElement(subItemsElements) : this.renderDefaultMainElement(); + }; + + public render(): DropdownGroupElement { + const { themedStyle } = this.props; + const { container } = this.getComponentStyle(themedStyle); + const subItemsElements: DropdownItemElement[] = this.renderSubItemsElements(); + const mainElement: DropdownItemElement = this.renderMainElement(subItemsElements); + + return ( + + {mainElement} + {subItemsElements} + + ); + } +} + +export const DropdownGroup = styled(DropdownGroupComponent); + diff --git a/src/framework/ui/dropdown/dropdownMenu.component.tsx b/src/framework/ui/dropdown/dropdownMenu.component.tsx new file mode 100644 index 000000000..0cd3c67d0 --- /dev/null +++ b/src/framework/ui/dropdown/dropdownMenu.component.tsx @@ -0,0 +1,98 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import React from 'react'; +import { + StyleSheet, + ListRenderItemInfo, + GestureResponderEvent, +} from 'react-native'; +import { + List, + ListProps, +} from '../list/list.component'; +import { + DropdownItem, + DropdownItemType, + DropdownItemElement, +} from './droppdownItem.component'; +import { + DropdownGroup, + DropdownGroupElement, +} from './dropdownGroup.component'; +import { SelectionStrategy } from './selection.strategy'; + +type DefaultMenuItemElement = DropdownItemElement | DropdownGroupElement; +type MenuItemElement = DefaultMenuItemElement | React.ReactElement; + +export interface ComponentProps { + data: DropdownItemType[]; + multiSelect?: boolean; + strategy: SelectionStrategy; + renderItem?: (item: ListRenderItemInfo) => React.ReactElement; + onSelect: (option: DropdownItemType, event?: GestureResponderEvent) => void; +} + +export type DropdownMenuProps = Partial & ComponentProps; +export type DropdownMenuElement = React.ReactElement; + +export class DropdownMenu extends React.Component { + + private areThereSubItems = (dropdownItem: DropdownItemType): boolean => { + const { items } = dropdownItem; + + return items && items.length !== 0; + }; + + private onSelect = (option: DropdownItemType, event?: GestureResponderEvent): void => { + this.props.onSelect(option, event); + }; + + private renderDefaultItem = (info: ListRenderItemInfo): DefaultMenuItemElement => { + const { renderItem, multiSelect, strategy } = this.props; + const selected: boolean = strategy.isSelected(info.item); + + return this.areThereSubItems(info.item) ? ( + + ) : ( + + ); + }; + + private renderItem = (info: ListRenderItemInfo): MenuItemElement => { + const { renderItem } = this.props; + + return renderItem ? renderItem(info) : this.renderDefaultItem(info); + }; + + public render(): DropdownMenuElement { + const { style, ...restProps } = this.props; + + return ( + + ); + } +} + +const styles = StyleSheet.create({ + container: {}, +}); diff --git a/src/framework/ui/dropdown/droppdownItem.component.tsx b/src/framework/ui/dropdown/droppdownItem.component.tsx new file mode 100644 index 000000000..5d1b1a3b1 --- /dev/null +++ b/src/framework/ui/dropdown/droppdownItem.component.tsx @@ -0,0 +1,196 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import React from 'react'; +import { + GestureResponderEvent, + StyleSheet, + TextStyle, + TouchableOpacity, + TouchableOpacityProps, + ViewProps, + View, +} from 'react-native'; +import { + Interaction, + styled, + StyledComponentProps, + StyleType, +} from '@kitten/theme'; +import { + Text, + TextProps, +} from '../text/text.component'; +import { CheckBox } from '../checkbox/checkbox.component'; +import { TouchableTypeReturningProps } from '../support/typings'; + +type TextElement = React.ReactElement; +type DefaultItemElement = React.ReactElement; +type MultiSelectItemElement = React.ReactElement; + +export interface DropdownItemType { + text: string; + textStyle?: TextStyle; + disabled?: boolean; + items?: DropdownItemType[]; +} + +export interface ComponentProps { + item: DropdownItemType; + selected?: boolean; + indeterminate?: boolean; + multiSelect?: boolean; +} + +export type DropdownItemProps = ComponentProps & StyledComponentProps & TouchableTypeReturningProps; +export type DropdownItemElement = React.ReactElement; + +class DropdownItemComponent extends React.Component { + + static styledComponentName: string = 'DropdownItem'; + + private onPress = (event: GestureResponderEvent) => { + const { item, onPress } = this.props; + + this.props.dispatch([]); + onPress(item, event); + }; + + private onMultiSelectItemPress = (value: boolean): void => { + this.onPress(null); + }; + + private onPressIn = (event: GestureResponderEvent) => { + this.props.dispatch([Interaction.ACTIVE]); + + if (this.props.onPressIn) { + this.props.onPressIn(this.props.item, event); + } + }; + + private onPressOut = (event: GestureResponderEvent) => { + this.props.dispatch([]); + + if (this.props.onPressOut) { + this.props.onPressOut(this.props.item, event); + } + }; + + private onLongPress = (event: GestureResponderEvent) => { + if (this.props.onLongPress) { + this.props.onLongPress(this.props.item, event); + } + }; + + private getComponentStyle = (source: StyleType): StyleType => { + const { + textColor, + textFontSize, + textFontWeight, + textLineHeight, + textMarginHorizontal, + multiSelectBackgroundColor, + multiSelectTextColor, + ...containerStyles + } = source; + + return { + container: containerStyles, + multiSelectContainer: { + ...containerStyles, + backgroundColor: multiSelectBackgroundColor, + }, + text: { + color: textColor, + fontSize: textFontSize, + fontWeight: textFontWeight, + lineHeight: textLineHeight, + marginHorizontal: textMarginHorizontal, + }, + multiSelectText: { + color: multiSelectTextColor, + fontSize: textFontSize, + fontWeight: textFontWeight, + lineHeight: textLineHeight, + marginHorizontal: textMarginHorizontal, + }, + }; + }; + + private renderTextElement = (style: TextStyle): TextElement => { + const { item } = this.props; + + return ( + + {item.text} + + ); + }; + + private renderDefaultItem = (): DefaultItemElement => { + const { themedStyle, style, item, ...restProps } = this.props; + const { container, text } = this.getComponentStyle(themedStyle); + const textElement: TextElement = this.renderTextElement(text); + + return ( + + {textElement} + + ); + }; + + private renderMultiSelectItem = (): MultiSelectItemElement => { + const { + disabled, + item, + themedStyle, + selected, + style, + indeterminate, + ...restProps + } = this.props; + const { multiSelectContainer, multiSelectText } = this.getComponentStyle(themedStyle); + + return ( + + + + ); + }; + + public render(): React.ReactNode { + const { multiSelect } = this.props; + + return multiSelect ? this.renderMultiSelectItem() : this.renderDefaultItem(); + } +} + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + }, + icon: {}, + text: {}, +}); + +export const DropdownItem = styled(DropdownItemComponent); diff --git a/src/framework/ui/dropdown/selection.strategy.ts b/src/framework/ui/dropdown/selection.strategy.ts new file mode 100644 index 000000000..39b40573a --- /dev/null +++ b/src/framework/ui/dropdown/selection.strategy.ts @@ -0,0 +1,139 @@ +import { DropdownItemType } from './droppdownItem.component'; + +export interface SelectionStrategy { + selectedOption: DropdownItemType | DropdownItemType[]; + isSelected: (item: DropdownItemType) => boolean; + select: (option: DropdownItemType, callback?: () => void) => DropdownItemType | DropdownItemType[]; + getPlaceholder: (placeholder: string) => string; +} + +export class MultiSelectStrategy implements SelectionStrategy { + + public selectedOption: DropdownItemType[]; + + constructor(options: DropdownItemType | DropdownItemType[]) { + if (Array.isArray(options)) { + this.selectedOption = options; + } + } + + public select(option: DropdownItemType, callback?: () => void): DropdownItemType[] { + const subOptionsExist: boolean = this.areThereSubOptions(option); + + if (subOptionsExist) { + this.selectOptionWithSubOptions(option); + } else { + this.selectDefaultOption(option); + } + + return this.selectedOption; + } + + private selectDefaultOption(option: DropdownItemType): void { + const optionAlreadyExist: boolean = this.selectedOption + .some((item: DropdownItemType) => { + return item === option; + }); + if (optionAlreadyExist) { + this.removeOption(option); + } else { + this.selectedOption.push(option); + } + } + + private selectOptionWithSubOptions(option: DropdownItemType): void { + const subOptionsAlreadyExist: boolean = this.selectedOption + .some((item: DropdownItemType) => { + return option.items + .some((subItem: DropdownItemType) => { + return subItem === item; + }); + }); + + if (subOptionsAlreadyExist) { + option.items.forEach((subItem: DropdownItemType) => this.removeOption(subItem)); + } else { + const enabledItems: DropdownItemType[] = option.items + .filter((item: DropdownItemType) => { + return !item.disabled; + }); + this.selectedOption = this.selectedOption.concat(enabledItems); + } + } + + public getPlaceholder(placeholder: string): string { + if (this.isSelectedOptionExist()) { + return this.selectedOption + .map((item: DropdownItemType) => { + return item && item.text; + }) + .join(', '); + } else { + return placeholder; + } + } + + public isSelected(item: DropdownItemType): boolean { + return this.selectedOption + .some((option: DropdownItemType) => { + return option === item; + }); + } + + private isSelectedOptionExist(): boolean { + return this.selectedOption && this.selectedOption.length !== 0; + } + + private removeOption(option: DropdownItemType): void { + const index: number = this.selectedOption + .findIndex((item: DropdownItemType) => { + return item === option; + }); + if (index !== -1) { + this.selectedOption.splice(index, 1); + } + } + + private areThereSubOptions(option: DropdownItemType): boolean { + return option.items && option.items.length !== 0; + } +} + +export class SingleSelectStrategy implements SelectionStrategy { + + public selectedOption: DropdownItemType; + + constructor(options: DropdownItemType | DropdownItemType[]) { + if (!Array.isArray(options)) { + this.selectedOption = options; + } + } + + public select(option: DropdownItemType, callback?: () => void): DropdownItemType { + this.selectedOption = option; + callback(); + return this.selectedOption; + } + + public getPlaceholder(placeholder: string): string { + if (this.selectedOption) { + return this.selectedOption.text; + } else { + return placeholder; + } + } + + public isSelected(item: DropdownItemType): boolean { + if (this.hasOptionSubItems(item)) { + return item.items.some((option: DropdownItemType) => { + return this.isSelected(option); + }); + } else { + return this.selectedOption === item; + } + } + + private hasOptionSubItems(option: DropdownItemType): boolean { + return option.items && option.items.length !== 0; + } +} diff --git a/src/framework/ui/icon/icon.component.tsx b/src/framework/ui/icon/icon.component.tsx new file mode 100644 index 000000000..cb38e8eb7 --- /dev/null +++ b/src/framework/ui/icon/icon.component.tsx @@ -0,0 +1,198 @@ +import React from 'react'; +import { + Animated, + StyleProp, + ViewStyle, +} from 'react-native'; +import { + IconAnimation, + IconAnimationRegistry, + IconAnimations, +} from './iconAnimation'; +import { + IconRegistryService, + RegisteredIcon, +} from './service/iconRegistry.service'; + +interface ComponentProps { + name: string; + pack?: string; + animation?: keyof IconAnimationRegistry; +} + +export type IconProps = ComponentProps & T; +export type IconElement = React.ReactElement; + +/** + * Icon component with animation support. Allows to render any ReactElement registered for a specific name. + * Starting from UI Kitten 4.2, there is `@ui-kitten/eva-icons` module + * that renders any icon from eva-icons package in `svg` format. + * + * @extends React.Component + * + * @method {(callback?: Animated.EndCallback) => void} startAnimation - Toggle animation to start. + * @method {() => void} stopAnimation - Toggle animation to stop. + * @property {string} name - Name of registered icon. + * @property {string} pack - Name of icon pack that is able to provide an icon for specified name. + * @property {string} animation - Animation name. Available `zoom`, `pulse` and `shake`. Default is `zoom`. + * + * @overview-example Register Icons + * + * ``` + * import React from 'react'; + * import { mapping, light as lightTheme } from '@eva-design/eva'; + * import { ApplicationProvider, IconRegistry } from 'react-native-ui-kitten'; + * import { EvaIconsPack } from '@ui-kitten/eva-icons'; // <-- Make sure it is installed. npm i @ui-kitten/eva-icons + * import { Application } from './path-to/root.component'; + * + * export default class App extends React.Component { + * + * public render(): React.ReactNode { + * return ( + * + * + * + * + * ); + * } + * } + * ``` + * + * @overview-example Simple Usage + * + * ``` + * import React from 'react'; + * import { Icon } from 'react-native-ui-kitten'; + * + * export const StarIcon = (props) => ( + * + * ); + * ``` + * + * @overview-example Animation Usage + * + * ``` + * import React from 'react'; + * import { Icon } from 'react-native-ui-kitten'; + * + * const iconRef = React.createRef(); + * + * export const StarIcon = (props) => ( + * + * ); + * + * iconRef.current.startAnimation(); + * ``` + * + * @example Password Input + * + * ``` + * import React from 'react'; + * import { Input, Icon } from 'react-native-ui-kitten'; + * + * export class PasswordInput extends React.Component { + * state = { + * passwordVisible: false, + * }; + * + * onPasswordIconPress = () => { + * const passwordVisible = !this.state.passwordVisible; + * this.setState({ passwordVisible }); + * }; + * + * renderPasswordIcon = (style) => ( + * + * ); + * + * render() { + * return ( + * + * ); + * } + * } + * ``` + * + * @example Like Button + * + * ``` + * import React from 'react'; + * import { Button, Icon } from 'react-native-ui-kitten'; + * + * export class LikeButton extends React.Component { + * state = { + * liked: false, + * }; + * + * onPress = () => { + * const liked = !this.state.liked; + * this.setState({ liked }); + * }; + * + * renderHeartIcon = (style) => ( + * + * ); + * + * render() { + * return ( + * + * ); + * } + * } + * ``` + */ + +export class Icon extends React.Component> { + + static defaultProps: Partial = { + animation: 'zoom', + }; + + private readonly animation: IconAnimation; + + constructor(props: IconProps) { + super(props); + this.animation = IconAnimations[props.animation]; + } + + public componentWillUnmount() { + this.animation.release(); + } + + public startAnimation = (callback?: Animated.EndCallback) => { + this.animation.start(callback); + }; + + public stopAnimation = () => { + this.animation.stop(); + }; + + private getComponentStyle = (): StyleProp => { + return this.animation.toProps(); + }; + + public render(): React.ReactElement { + const { name, pack, ...restProps } = this.props; + const registeredIcon: RegisteredIcon = IconRegistryService.getIcon(name, pack); + + return ( + + {registeredIcon.icon.toReactElement(restProps as T)} + + ); + } +} diff --git a/src/framework/ui/icon/icon.spec.tsx b/src/framework/ui/icon/icon.spec.tsx new file mode 100644 index 000000000..fc99b4352 --- /dev/null +++ b/src/framework/ui/icon/icon.spec.tsx @@ -0,0 +1,108 @@ +import React from 'react'; +import { View } from 'react-native'; +import { render } from 'react-native-testing-library'; +import { IconRegistry } from './iconRegistry.component'; +import { + Icon, + IconProps, +} from './icon.component'; +import { + IconPack, + IconProvider, +} from './service/type'; + +const DefaultIcon: IconProvider = { + toReactElement(props?: IconProps): React.ReactElement { + return ( + + ); + }, +}; + +const AdditionalIcon: IconProvider = { + toReactElement(props?: IconProps): React.ReactElement { + return ( + + ); + }, +}; + +const testIconPack1: IconPack = { + name: 'test-icon-pack', + icons: { + home: DefaultIcon, + gear: DefaultIcon, + }, +}; + +const testIconPack2: IconPack = { + name: 'additional-icon-pack', + icons: { + home: AdditionalIcon, + }, +}; + +describe('@icon: component checks', () => { + + beforeEach(() => { + render( + , + ); + }); + + it('* should render icon from default pack', () => { + const component = render( + , + ); + + expect(component.getByTestId('default')).toBeTruthy(); + }); + + it('* should render icon from additional pack', () => { + const component = render( + , + ); + + expect(component.getByTestId('additional')).toBeTruthy(); + }); + + it('* should pass props to an icon component', () => { + const component = render( + , + ); + + expect(component.getByTestId('custom-test-id')).toBeTruthy(); + }); + + it('* should throw while rendering not registered icon', () => { + expect(() => { + render( + , + ); + }).toThrowError(); + + expect(() => { + render( + , + ); + }).toThrowError(); + }); + + it('* should throw while rendering icon from not registered pack', () => { + expect(() => { + render( + , + ); + }).toThrowError(); + }); + +}); diff --git a/src/framework/ui/icon/iconAnimation.ts b/src/framework/ui/icon/iconAnimation.ts new file mode 100644 index 000000000..af22db243 --- /dev/null +++ b/src/framework/ui/icon/iconAnimation.ts @@ -0,0 +1,21 @@ +import { ViewStyle } from 'react-native'; +import { + Animation, + PulseAnimation, + ShakeAnimation, + ZoomAnimation, +} from '../animation'; + +export type IconAnimation = Animation; + +export interface IconAnimationRegistry { + zoom: IconAnimation; + pulse: IconAnimation; + shake: IconAnimation; +} + +export const IconAnimations: IconAnimationRegistry = { + zoom: new ZoomAnimation(), + pulse: new PulseAnimation(), + shake: new ShakeAnimation(), +}; diff --git a/src/framework/ui/icon/iconRegistry.component.tsx b/src/framework/ui/icon/iconRegistry.component.tsx new file mode 100644 index 000000000..c67e2d863 --- /dev/null +++ b/src/framework/ui/icon/iconRegistry.component.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import { IconRegistryService } from './service/iconRegistry.service'; +import { IconPack } from './service/type'; + +type IconsProp = IconPack | IconPack[]; + +export interface IconRegistryProps { + icons: IconsProp; + defaultIcons?: string; +} + +export type IconRegistryElement = React.ReactElement; + +/** + * Icon Registry component. Registers one or more icon packs for later usage in `` component. + * Renders nothing, but should be added as a child of an Application Root. + * + * @extends React.Component + * + * @property {IconPack | IconPack[]} icons - Icon packs to register. + * @property {string} defaultIcons - Name of an icon pack that is used by default. + * + * @overview-example Simple Usage + * + * ``` + * import React from 'react'; + * import { mapping, light as lightTheme } from '@eva-design/eva'; + * import { ApplicationProvider, IconRegistry } from 'react-native-ui-kitten'; + * import { EvaIconsPack } from '@ui-kitten/eva-icons'; // <-- Make sure it is installed. npm i @ui-kitten/eva-icons + * import { Application } from './path-to/root.component'; + * + * export default class App extends React.Component { + * + * public render(): React.ReactNode { + * return ( + * + * + * + * + * ); + * } + * } + * ``` + */ +export class IconRegistry extends React.Component { + + static defaultProps: Partial = { + icons: [], + }; + + private findDefaultIconPack = (packs: IconPack[], name: string): IconPack => { + const requestedPackIndex: number = packs.findIndex((pack: IconPack): boolean => { + return pack.name === name; + }); + + return packs[Math.max(0, requestedPackIndex)]; + }; + + private registerIcons = (source: IconsProp, defaultPack: string) => { + const packs: IconPack[] = Array.isArray(source) ? source : [source]; + const defaultIconPack: IconPack = this.findDefaultIconPack(packs, defaultPack); + + IconRegistryService.register(...packs); + IconRegistryService.setDefaultIconPack(defaultIconPack.name); + }; + + public render(): React.ReactNode { + const { icons, defaultIcons } = this.props; + this.registerIcons(icons, defaultIcons); + + return null; + } +} diff --git a/src/framework/ui/icon/service/iconRegistry.service.ts b/src/framework/ui/icon/service/iconRegistry.service.ts new file mode 100644 index 000000000..3ad227596 --- /dev/null +++ b/src/framework/ui/icon/service/iconRegistry.service.ts @@ -0,0 +1,133 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ +import { + IconPack, + IconProvider, +} from './type'; + +function throwPackNotFoundError(name: string) { + const docRoot: string = 'https://akveo.github.io/react-native-ui-kitten/docs'; + + const message: string = [ + `\nIcon: Icon Pack '${name}' is not registered`, + 'Using UI Kitten components is only possible with configuring ApplicationProvider.', + `📖 Documentation: ${docRoot}/guides/setting-up-icons`, + ].join('\n'); + + throw Error(message); +} + +function throwIconNotFoundError(name: string, pack: string) { + const docRoot: string = 'https://akveo.github.io/react-native-ui-kitten/docs'; + + const message: string = [ + `\nIcon: '${name}' icon is not registered in pack '${pack}'.`, + 'Check icon name or consider switching icon pack.', + `📖 Documentation: ${docRoot}/guides/setting-up-icons`, + ].join('\n'); + + throw Error(message); +} + +export interface RegisteredIcon { + name: string; + pack: string; + icon: IconProvider; +} + +type IconProps = any; + +/** + * This service allows to register multiple icon packs to use them later within + * `` component. + */ +class RegistryService { + + protected packs: Map> = new Map(); + protected defaultPack: string; + + /** + * Registers multiple icon packs and sets the first one as default if there is no default packs + * + * @param {IconPack[]} packs - array of icon packs + */ + public register(...packs: IconPack[]) { + packs.forEach((pack: IconPack) => { + this.registerIconPack(pack); + }); + } + + /** + * Sets pack as default + * + * @param {string} name + * @throws {Error} if pack is nor registered + */ + public setDefaultIconPack(name: string) { + if (!this.packs.has(name)) { + throwPackNotFoundError(name); + } + + this.defaultPack = name; + } + + /** + * @param {string} name + * @returns {IconPack} pack by name + */ + public getIconPack(name: string): IconPack { + return this.packs.get(name); + } + + /** + * @param {string} name - icon name + * @param {string} pack - pack name + * @throws {Error} if requested icon pack is not registered + * @returns {RegisteredIcon} - registered icon of a requested/default pack + */ + public getIcon(name: string, pack?: string): RegisteredIcon { + const iconsPack: IconPack = pack ? this.getPackOrThrow(pack) : this.getDefaultPack(); + + return { + name, + pack: iconsPack.name, + icon: this.getIconFromPack(name, iconsPack), + }; + } + + /** + * Registers single icon pack + * + * @param {IconPack} pack - icon pack to register + */ + protected registerIconPack(pack: IconPack) { + this.packs.set(pack.name, pack); + } + + protected getPackOrThrow(name: string): IconPack { + const pack: IconPack = this.packs.get(name); + + if (!pack) { + throwPackNotFoundError(name); + } + + return pack; + } + + protected getDefaultPack(): IconPack { + return this.getIconPack(this.defaultPack); + } + + protected getIconFromPack(name: string, pack: IconPack, shouldThrow = true): IconProvider { + if (shouldThrow && !pack.icons[name]) { + throwIconNotFoundError(name, pack.name); + } + + return pack.icons[name]; + } +} + +export const IconRegistryService = new RegistryService(); diff --git a/src/framework/ui/icon/service/iconRegistry.spec.tsx b/src/framework/ui/icon/service/iconRegistry.spec.tsx new file mode 100644 index 000000000..03b683c8f --- /dev/null +++ b/src/framework/ui/icon/service/iconRegistry.spec.tsx @@ -0,0 +1,90 @@ +import React from 'react'; +import { View } from 'react-native'; +import { IconRegistryService } from './iconRegistry.service'; +import { IconProvider } from './type'; + +const TestIcon: IconProvider = { + toReactElement(): React.ReactElement { + return ( + + ); + }, +}; + +describe('@icon-registry: service checks', () => { + + beforeEach(() => { + IconRegistryService.register( + { + name: 'test-icon-pack-1', + icons: { + home: TestIcon, + gear: TestIcon, + }, + }, + { + name: 'test-icon-pack-2', + icons: { + home: TestIcon, + }, + }, + ); + + IconRegistryService.setDefaultIconPack('test-icon-pack-1'); + }); + + it('* should register icon pack', () => { + IconRegistryService.register({ + name: 'additional-icon-pack', + icons: { + star: TestIcon, + }, + }, + ); + + expect(IconRegistryService.getIconPack('additional-icon-pack').name).toEqual('additional-icon-pack'); + }); + + it('* should register icon pack without overriding default', () => { + IconRegistryService.register({ + name: 'additional-icon-pack', + icons: { + home: TestIcon, + }, + }, + ); + + expect(IconRegistryService.getIcon('home').pack).toEqual('test-icon-pack-1'); + }); + + it('* should throw when setting not registered pack as default', () => { + expect(() => IconRegistryService.setDefaultIconPack('not-registered-pack')).toThrowError(); + }); + + it('* should change default icon pack', () => { + IconRegistryService.setDefaultIconPack('test-icon-pack-2'); + + expect(IconRegistryService.getIcon('home').pack).toEqual('test-icon-pack-2'); + }); + + it('* should set first pack as default', () => { + expect(IconRegistryService.getIcon('home').pack).toEqual('test-icon-pack-1'); + }); + + it('* should return icon from default pack', () => { + expect(IconRegistryService.getIcon('home').pack).toEqual('test-icon-pack-1'); + }); + + it('* should return icon from specified pack', () => { + expect(IconRegistryService.getIcon('home', 'test-icon-pack-2').pack).toEqual('test-icon-pack-2'); + }); + + it('* should throw for getting not registered icon', () => { + expect(() => IconRegistryService.getIcon('not-registered-pack')).toThrowError(); + }); + + it('* should throw for getting icon from not registered pack', () => { + expect(() => IconRegistryService.getIcon('home', 'not-registered-pack')).toThrowError(); + }); + +}); diff --git a/src/framework/ui/icon/service/type.ts b/src/framework/ui/icon/service/type.ts new file mode 100644 index 000000000..ff7ad074f --- /dev/null +++ b/src/framework/ui/icon/service/type.ts @@ -0,0 +1,14 @@ +import React from 'react'; + +export interface Icons { + [key: string]: IconProvider; +} + +export interface IconPack { + name: string; + icons: Icons; +} + +export interface IconProvider { + toReactElement(props?: T): React.ReactElement; +} diff --git a/src/framework/ui/index.ts b/src/framework/ui/index.ts index b7dc6ac14..75cc9fae2 100644 --- a/src/framework/ui/index.ts +++ b/src/framework/ui/index.ts @@ -28,6 +28,28 @@ export { CheckBoxProps, CheckBoxElement, } from './checkbox/checkbox.component'; +export { + Dropdown, + DropdownProps, + DropdownElement, + DropdownOption, +} from './dropdown/dropdown.component'; +export { DropdownItemType } from './dropdown/droppdownItem.component'; +export { + Icon, + IconProps, + IconElement, +} from './icon/icon.component'; +export { + IconRegistry, + IconRegistryProps, + IconRegistryElement, +} from './icon/iconRegistry.component'; +export { + IconPack, + IconProvider, + Icons, +} from './icon/service/type'; export { Input, InputProps, @@ -79,6 +101,11 @@ export { RadioGroupProps, RadioGroupElement, } from './radioGroup/radioGroup.component'; +export { + Spinner, + SpinnerProps, + SpinnerElement, +} from './spinner/spinner.component'; export { TabView, TabViewProps, diff --git a/src/framework/ui/input/input.component.tsx b/src/framework/ui/input/input.component.tsx index dbc5293f2..31ee32dab 100644 --- a/src/framework/ui/input/input.component.tsx +++ b/src/framework/ui/input/input.component.tsx @@ -449,9 +449,13 @@ const styles = StyleSheet.create({ }, placeholder: {}, icon: {}, - label: {}, + label: { + textAlign: 'left', + }, captionIcon: {}, - captionLabel: {}, + captionLabel: { + textAlign: 'left', + }, }); export const Input = styled(InputComponent); diff --git a/src/framework/ui/list/listItem.component.tsx b/src/framework/ui/list/listItem.component.tsx index 80f861703..269881f31 100644 --- a/src/framework/ui/list/listItem.component.tsx +++ b/src/framework/ui/list/listItem.component.tsx @@ -382,8 +382,12 @@ const styles = StyleSheet.create({ flex: 1, }, icon: {}, - title: {}, - description: {}, + title: { + textAlign: 'left', + }, + description: { + textAlign: 'left', + }, accessory: {}, }); diff --git a/src/framework/ui/popover/popoverView.component.tsx b/src/framework/ui/popover/popoverView.component.tsx index a48473b9f..016aad322 100644 --- a/src/framework/ui/popover/popoverView.component.tsx +++ b/src/framework/ui/popover/popoverView.component.tsx @@ -18,6 +18,7 @@ import { PopoverPlacements, } from './type'; import { Arrow } from '../support/components'; +import { I18nLayoutService } from '../support/services'; interface ComponentProps { placement?: string | PopoverPlacement; @@ -61,16 +62,18 @@ export class PopoverView extends React.Component { // Translate indicator by passed `indicatorOffset` // Reverse if needed + let indicatorTranslate: number = isVertical ? -this.props.indicatorOffset : this.props.indicatorOffset; indicatorTranslate = isReverse ? -indicatorTranslate : indicatorTranslate; + const i18nVerticalIndicatorTranslate = I18nLayoutService.select(indicatorTranslate, -indicatorTranslate); + indicatorTranslate = isVertical ? i18nVerticalIndicatorTranslate : indicatorTranslate; - const containerStyle: ViewStyle = { + const containerStyle: ViewStyle = I18nLayoutService.toI18nStyle({ flexDirection: direction, - alignItems: alignment, transform: [ { translateX: containerTranslate }, ], - }; + }); const contentStyle: ViewStyle = { backgroundColor: 'black', @@ -94,7 +97,10 @@ export class PopoverView extends React.Component { }; return { - container: containerStyle, + container: { + ...containerStyle, + alignItems: alignment, + }, content: contentStyle, indicator: indicatorStyle, }; diff --git a/src/framework/ui/popover/type.ts b/src/framework/ui/popover/type.ts index c4854f381..3f904b6a7 100644 --- a/src/framework/ui/popover/type.ts +++ b/src/framework/ui/popover/type.ts @@ -9,6 +9,7 @@ import { StyleProp, StyleSheet, } from 'react-native'; +import { I18nLayoutService } from '../support/services'; export class Point { @@ -291,8 +292,13 @@ export class PopoverPlacements { frame(options: PlacementOptions): Frame { const { origin, size } = options.source.leftOf(options.other).centerVerticalOf(options.other); - return new Frame( + const x: number = I18nLayoutService.select( origin.x + options.offsets.left, + options.bounds.size.width - size.width - (origin.x + options.offsets.right), + ); + + return new Frame( + x, origin.y, size.width, size.height, @@ -323,7 +329,7 @@ export class PopoverPlacements { } fits(frame: Frame, other: Frame): boolean { - return fitsLeft(frame, other) && fitsTop(frame, other) && fitsBottom(frame, other); + return fitsStart(frame, other) && fitsTop(frame, other) && fitsBottom(frame, other); } }; @@ -409,8 +415,14 @@ export class PopoverPlacements { frame(options: PlacementOptions): Frame { const { origin, size } = options.source.topOf(options.other).centerHorizontalOf(options.other); - return new Frame( + + const x: number = I18nLayoutService.select( origin.x, + options.bounds.size.width - (origin.x + size.width), + ); + + return new Frame( + x, origin.y + options.offsets.top, size.width, size.height, @@ -527,8 +539,13 @@ export class PopoverPlacements { frame(options: PlacementOptions): Frame { const { origin, size } = options.source.rightOf(options.other).centerVerticalOf(options.other); - return new Frame( + const x: number = I18nLayoutService.select( origin.x - options.offsets.right, + options.bounds.size.width - size.width - (origin.x - options.offsets.right), + ); + + return new Frame( + x, origin.y, size.width, size.height, @@ -559,7 +576,7 @@ export class PopoverPlacements { } fits(frame: Frame, other: Frame): boolean { - return fitsRight(frame, other) && fitsTop(frame, other) && fitsBottom(frame, other); + return fitsEnd(frame, other) && fitsTop(frame, other) && fitsBottom(frame, other); } }; @@ -645,8 +662,13 @@ export class PopoverPlacements { frame(options: PlacementOptions): Frame { const { origin, size } = options.source.bottomOf(options.other).centerHorizontalOf(options.other); - return new Frame( + const x: number = I18nLayoutService.select( origin.x, + options.bounds.size.width - (origin.x + size.width), + ); + + return new Frame( + x, origin.y - options.offsets.bottom, size.width, size.height, @@ -799,6 +821,14 @@ export class PopoverPlacements { } } +const fitsStart = (frame: Frame, other: Frame): boolean => { + return I18nLayoutService.select(fitsLeft, fitsRight)(frame, other); +}; + +const fitsEnd = (frame: Frame, other: Frame): boolean => { + return I18nLayoutService.select(fitsRight, fitsLeft)(frame, other); +}; + const fitsLeft = (frame: Frame, other: Frame): boolean => { return frame.origin.x >= other.origin.x; }; diff --git a/src/framework/ui/spinner/animation.ts b/src/framework/ui/spinner/animation.ts new file mode 100644 index 000000000..18f0b3da2 --- /dev/null +++ b/src/framework/ui/spinner/animation.ts @@ -0,0 +1,165 @@ +import { + Animated, + Easing, + EasingFunction, + ViewStyle, +} from 'react-native'; +import { + Animation, + AnimationConfig, +} from '../animation/animation'; + +const PI: number = 180; +const PI2: number = 360; +const OFFSET_MIN: number = PI / 12; +const OFFSET_MAX: number = PI / 6; + +const BaseBezierEasing: EasingFunction = Easing.bezier(0.4, 0.0, 0.7, 1.0); + +const StartArcEasing: EasingFunction = (progress: number): number => { + return -PI + OFFSET_MIN + (PI - OFFSET_MAX) * BaseBezierEasing(progress); +}; + +const EndArcEasing: EasingFunction = (progress: number): number => { + return PI2 - OFFSET_MIN + (-PI + OFFSET_MAX) * BaseBezierEasing(progress); +}; + +const DEFAULT_CONFIG: SpinnerAnimationConfig = { + duration: 2400, + easing: Easing.linear, + cycles: -1, +}; + +type TimingAnimationConfig = Omit; + +export interface SpinnerAnimationStyle { + container: ViewStyle; + start: ViewStyle; + end: ViewStyle; +} + +export type SpinnerAnimationConfig = AnimationConfig & TimingAnimationConfig; + +/** + * Animates a Spinner in a Material Design way. + * + * Thanks these guys for open sourcing the algorithm: https://github.com/n4kz/react-native-indicators + */ +export class SpinnerAnimation extends Animation { + + private animationValue: Animated.Value; + private animationFrames: number[]; + private arcSize: number; + + protected get animation(): Animated.CompositeAnimation { + return Animated.timing(this.animationValue, { toValue: 1.0, ...this.config }); + } + + constructor(arcSize: number, config?: SpinnerAnimationConfig) { + super({ ...DEFAULT_CONFIG, ...config }); + this.arcSize = arcSize; + this.animationValue = new Animated.Value(0); + this.animationFrames = this.createFrameRange(this.config.duration); + } + + public start(callback?: Animated.EndCallback) { + // reset animation value before the next animation cycle + this.animationValue.setValue(0); + super.start(callback); + } + + public stop() { + super.stop(); + this.animationValue.setValue(0); + } + + /** + * @returns {SpinnerAnimationStyle} - an object that contains container, start and end arcs transform styles. + */ + public toProps(): SpinnerAnimationStyle { + const containerInterpolation: Animated.AnimatedInterpolation = this.createContainerInterpolation(); + const startArcInterpolation: Animated.AnimatedInterpolation = this.createArcInterpolation(StartArcEasing); + const endArcInterpolation: Animated.AnimatedInterpolation = this.createArcInterpolation(EndArcEasing); + + return { + container: this.toStyleTransformProp(containerInterpolation), + start: this.toStyleTransformProp(startArcInterpolation), + end: this.toStyleTransformProp(endArcInterpolation, { + transform: [{ translateY: -this.arcSize / 2 }], + }), + }; + } + + /** + * @param {number} duration - animation duration. + * @returns an array of frames fitted into animation. + */ + private createFrameRange = (duration: number): number[] => { + const numberOfFrames: number = 60 * duration / 1000; + + return new Array(numberOfFrames).fill(0); + }; + + private createContainerInterpolation = (): Animated.AnimatedInterpolation => { + return this.animationValue.interpolate({ + inputRange: [0, 1], + outputRange: [ + this.toDegValue(OFFSET_MAX + OFFSET_MIN), + this.toDegValue((2 * PI2 + OFFSET_MAX + OFFSET_MIN)), + ], + }); + }; + + private createArcInterpolation = (easing: EasingFunction): Animated.AnimatedInterpolation => { + return this.animationValue.interpolate({ + inputRange: this.createArcInterpolationInputRange(), + outputRange: this.createArcInterpolationOutputRange(easing), + }); + }; + + /** + * Maps the animation frames into initial animation values specific for each frame. + * + * @returns a container interpolation input range in a numeric format. + */ + private createArcInterpolationInputRange = (): number[] => { + return this.animationFrames.map((item: number, frame: number): number => { + return frame / (this.animationFrames.length - 1); + }); + }; + + /** + * Maps the animation frames into a final animation values specific for each frame. + * + * @param {(progress: number) => number} easing - Easing function specific for the arc. + * @returns an arc interpolation end values eased with an `easing` function in a StyleSheet degree format. + */ + private createArcInterpolationOutputRange = (easing: EasingFunction): string[] => { + return this.animationFrames.map((item: number, frame: number): string => { + const progress: number = 2 * frame / (this.animationFrames.length - 1); + const boundedProgress: number = Math.min(2.0 - progress, progress); + + return this.toDegValue(easing(boundedProgress)); + }); + }; + + /** + * @param {Animated.AnimatedInterpolation} rotate - animated rotation animationValue. + * @param {ViewStyle} source - initial StyleSheet object. + * @returns a final StyleSheet object with a `rotate` animation value. + */ + private toStyleTransformProp = (rotate: Animated.AnimatedInterpolation, source: ViewStyle = {}): ViewStyle => { + const transform = [...(source.transform || []), { rotate }]; + + // @ts-ignore: AnimatedInterpolation does not fit RotateTransform type declaration + return { ...source, transform }; + }; + + /** + * @param {number} source - degrees in a numeric format. + * @returns degrees in a StyleSheet format. + */ + private toDegValue = (source: number): string => { + return `${source}deg`; + }; +} diff --git a/src/framework/ui/spinner/spinner.component.tsx b/src/framework/ui/spinner/spinner.component.tsx new file mode 100644 index 000000000..732737aea --- /dev/null +++ b/src/framework/ui/spinner/spinner.component.tsx @@ -0,0 +1,241 @@ +import React from 'react'; +import { + Animated, + StyleSheet, + View, + ViewProps, + ViewStyle, +} from 'react-native'; +import { + styled, + StyledComponentProps, +} from '@kitten/theme'; +import { + SpinnerAnimation, + SpinnerAnimationStyle, +} from './animation'; +// TODO: Frame, Point, Size types should be refactored to common types +import { Size } from '../popover/type'; + +interface ArcElementStyle { + container: ViewStyle; + arc: ViewStyle; + overflow?: ViewStyle; +} + +interface ComponentProps extends ViewProps { + animating?: boolean; + size?: string; + status?: string; +} + +export type SpinnerProps = StyledComponentProps & ComponentProps; +export type SpinnerElement = React.ReactElement; + +/** + * Styled Spinner component. Designed to be used as ActivityIndicator component + * + * @extends React.Component + * + * @property {boolean} animating - Determines whether component is animating. Default is `true`. + * + * @property {string} size - Determines the the component. + * Can be `giant`, `large`, `medium`, `small` or `tiny`. + * Default is `medium`. + * + * @property {string} status - Determines the status of the component. + * Can be `primary`, `success`, `info`, `warning` or `danger`. + * Default is `primary`. + * + * @overview-example Simple Usage + * + * ``` + * import React from 'react'; + * import { Spinner } from 'react-native-ui-kitten'; + * + * export const SpinnerShowcase = () => ( + * + * ); + * ``` + * + * @overview-example Loading Data + * + * ``` + * import React from 'react'; + * import { View, StyleSheet } from 'react-native'; + * import { Spinner, List, ListItem } from 'react-native-ui-kitten'; + * + * export class SpinnerDataLoading extends React.Component { + * + * state = { + * data: [], + * }; + * + * componentDidMount() { + * setTimeout(this.loadData, 3000); + * } + * + * loadData = () => { + * const data = [ + * { + * title: 'Item 1', + * }, + * { + * title: 'Item 2', + * }, + * { + * title: 'Item 3', + * }, + * ]; + * this.setState({ data }); + * }; + * + * private renderLoading = () => ( + * + * + * + * ); + * + * renderDataItem = ({ item }) => ( + * + * ); + * + * renderData = () => ( + * + * ); + * + * render() { + * const isLoaded: boolean = this.state.data.length > 0; + * return isLoaded ? this.renderData() : this.renderLoading(); + * } + *} + * + * const styles = StyleSheet.create({ + * loading: { + * flex: 1, + * justifyContent: 'center', + * alignItems: 'center', + * }, + *}); + *``` + * + * @example Size + * + * ``` + * import React from 'react'; + * import { Spinner } from 'react-native-ui-kitten'; + * + * export const GiantSpinner = () => ( + * + * ); + * ``` + * + * @example Status + * + * ``` + * import React from 'react'; + * import { Spinner } from 'react-native-ui-kitten'; + * + * export const DangerSpinner = () => ( + * + * ); + * ``` + */ +export class SpinnerComponent extends React.PureComponent { + + static styledComponentName: string = 'Spinner'; + + static defaultProps: Partial = { + animating: true, + }; + + private animation: SpinnerAnimation = new SpinnerAnimation(this.containerSize.height); + + private get containerSize(): Size { + const { width, height } = StyleSheet.flatten([this.props.themedStyle, this.props.style]); + // @ts-ignore: width and height are restricted to be a number + return new Size(width, height); + } + + public componentDidMount() { + if (this.props.animating) { + this.startAnimation(); + } + } + + public componentDidUpdate(prevProps: SpinnerProps) { + const animatingChanged: boolean = this.props.animating !== prevProps.animating; + + if (animatingChanged && this.props.animating) { + this.startAnimation(); + } + + if (animatingChanged && !this.props.animating) { + this.stopAnimation(); + } + } + + public componentWillUnmount() { + this.animation.release(); + } + + private startAnimation = () => { + this.animation.start(); + }; + + private stopAnimation = () => { + this.animation.stop(); + }; + + private getComponentStyle = (source: SpinnerAnimationStyle) => { + const start: ArcElementStyle = { + container: source.container, + arc: source.start, + }; + + const end: ArcElementStyle = { + container: source.container, + arc: source.end, + overflow: { top: this.containerSize.height / 2 }, + }; + + return { start, end }; + }; + + private renderArcElement = (style: ArcElementStyle, size: Size): React.ReactElement => { + const arcSize: Size = new Size(size.width, size.height / 2); + + return ( + + + + + + + + + + ); + }; + + public render(): React.ReactElement { + const containerSize: Size = this.containerSize; + const { start, end } = this.getComponentStyle(this.animation.toProps()); + + return ( + + {this.renderArcElement(start, containerSize)} + {this.renderArcElement(end, containerSize)} + + ); + } +} + +const styles = StyleSheet.create({ + absolute: StyleSheet.absoluteFillObject, + noOverflow: { + overflow: 'hidden', + }, +}); + +export const Spinner = styled(SpinnerComponent); diff --git a/src/framework/ui/support/components/checkmark/checkmark.component.tsx b/src/framework/ui/support/components/checkmark/checkmark.component.tsx index d4947aa3c..45b172765 100644 --- a/src/framework/ui/support/components/checkmark/checkmark.component.tsx +++ b/src/framework/ui/support/components/checkmark/checkmark.component.tsx @@ -6,6 +6,7 @@ import { ViewProps, } from 'react-native'; import { StyleType } from '@kitten/theme'; +import { I18nLayoutService } from '../../services'; interface ComponentProps { isAnimated?: boolean; @@ -58,24 +59,25 @@ export class CheckMark extends React.Component { return ( - - + + ); } } const styles = StyleSheet.create({ - container: { + container: I18nLayoutService.toI18nStyle({ + flexDirection: 'row', transform: [{ rotate: '-5deg' }], - }, + }), shape: { position: 'absolute', }, left: { - transform: [{ rotate: '-40deg' }, { translateY: 1 }], + transform: [{ rotate: '-40deg' }], }, right: { - transform: [{ rotate: '40deg' }, { translateY: 1 }], + transform: [{ rotate: '40deg' }], }, }); diff --git a/src/framework/ui/support/components/chevron/chevron.component.tsx b/src/framework/ui/support/components/chevron/chevron.component.tsx new file mode 100644 index 000000000..a6a332837 --- /dev/null +++ b/src/framework/ui/support/components/chevron/chevron.component.tsx @@ -0,0 +1,114 @@ +import React from 'react'; +import { + View, + Animated, + StyleSheet, + ViewProps, +} from 'react-native'; +import { StyleType } from '@kitten/theme'; + +export type ChevronDirection = 'top' | 'bottom' | 'left' | 'right'; + +interface ComponentProps { + isAnimated?: boolean; + direction?: ChevronDirection; + animationStyle?: StyleType; +} + +export type ChevronProps = ViewProps & ComponentProps; +export type ChevronElement = React.ReactElement; + +export class Chevron extends React.Component { + + static defaultProps = { + isAnimated: false, + direction: 'bottom', + }; + + private getDirectionStyle = (): StyleType => { + const { direction } = this.props; + + switch (direction) { + case 'top': + return styles.containerTopRotate; + case 'right': + return styles.containerRightRotate; + case 'left': + return styles.containerLeftRotate; + default: + return null; + } + }; + + private getComponentStyle = (source: StyleType): StyleType => { + const { + width, + height, + tintColor: backgroundColor, + marginHorizontal, + } = source; + + return { + container: { + width: width, + height: height, + marginHorizontal: marginHorizontal, + }, + // the dependence of the variables was determined experimentally. Changes may be needed later. + shape: { + top: height * 0.25, + borderWidth: width * 0.06, + borderTopLeftRadius: height * 0.5, + borderTopRightRadius: height * 0.5, + borderBottomLeftRadius: height * 0.5, + borderBottomRightRadius: height * 0.5, + borderColor: backgroundColor, + backgroundColor: backgroundColor, + }, + left: { + left: width * 0.28, + height: height * 0.45, + }, + right: { + right: width * 0.28, + height: height * 0.45, + }, + }; + }; + + public render(): React.ReactNode { + const { style, isAnimated, animationStyle } = this.props; + const { container, shape, left, right } = this.getComponentStyle(StyleSheet.flatten(style)); + const directionStyle: StyleType = this.getDirectionStyle(); + + const Component = isAnimated ? Animated.View : View; + + return ( + + + + + ); + } +} + +const styles = StyleSheet.create({ + containerTopRotate: { + transform: [{ rotate: '180deg' }], + }, + containerLeftRotate: { + transform: [{ rotate: '90deg' }], + }, + containerRightRotate: { + transform: [{ rotate: '-90deg' }], + }, + shape: { + position: 'absolute', + }, + left: { + transform: [{ rotate: '-45deg' }, { translateY: 1 }], + }, + right: { + transform: [{ rotate: '45deg' }, { translateY: 1 }], + }, +}); diff --git a/src/framework/ui/support/components/index.ts b/src/framework/ui/support/components/index.ts index 987166763..699f42211 100644 --- a/src/framework/ui/support/components/index.ts +++ b/src/framework/ui/support/components/index.ts @@ -1,12 +1,21 @@ export { Arrow, ArrowProps, + ArrowElement, } from './arrow/arrow.component'; export { CheckMark, CheckMarkProps, + CheckMarkElement, } from './checkmark/checkmark.component'; export { TabIndicator, TabIndicatorProps, + TabIndicatorElement, } from './tabIndicator/tabIndicator.component'; +export { + Chevron, + ChevronProps, + ChevronElement, + ChevronDirection, +} from './chevron/chevron.component'; diff --git a/src/framework/ui/support/components/tabIndicator/tabIndicator.component.tsx b/src/framework/ui/support/components/tabIndicator/tabIndicator.component.tsx index 74900272e..33c2f20fb 100644 --- a/src/framework/ui/support/components/tabIndicator/tabIndicator.component.tsx +++ b/src/framework/ui/support/components/tabIndicator/tabIndicator.component.tsx @@ -6,6 +6,7 @@ import { ViewProps, ViewStyle, } from 'react-native'; +import { I18nLayoutService } from '../../services'; interface ComponentProps { positions: number; @@ -23,8 +24,8 @@ export class TabIndicator extends React.Component { animationDuration: 200, }; - private contentOffset: Animated.Value = new Animated.Value(0); private indicatorWidth: number; + private contentOffset: Animated.Value = new Animated.Value(0); public componentDidMount() { this.contentOffset.addListener(this.onContentOffsetAnimationStateChanged); @@ -37,10 +38,7 @@ export class TabIndicator extends React.Component { public componentDidUpdate() { const { selectedPosition: index } = this.props; - this.scrollToIndex({ - index, - animated: true, - }); + this.scrollToIndex({ index, animated: true }); } public componentWillUnmount() { @@ -86,7 +84,7 @@ export class TabIndicator extends React.Component { const animationDuration: number = params.animated ? this.props.animationDuration : 0; return Animated.timing(this.contentOffset, { - toValue: params.offset, + toValue: I18nLayoutService.select(params.offset, -params.offset), duration: animationDuration, easing: Easing.linear, }); diff --git a/src/framework/ui/support/services/i18n/i18nLayout.service.ts b/src/framework/ui/support/services/i18n/i18nLayout.service.ts new file mode 100644 index 000000000..d3de97500 --- /dev/null +++ b/src/framework/ui/support/services/i18n/i18nLayout.service.ts @@ -0,0 +1,41 @@ +import { + I18nManager, + ViewStyle, +} from 'react-native'; +import { I18nLayoutFlexMap } from './i18nLayoutFlexMap'; +import { I18nLayoutServiceType } from './type'; + +class NativeI18nLayoutService implements I18nLayoutServiceType { + + public isRTL(): boolean { + return I18nManager.isRTL; + } + + public select(ltr: T, rtl): T { + return this.isRTL() ? rtl : ltr; + } + + /** + * Iterates through I18nLayoutFlexMap and reverses style values if needed. + * + * @param {ViewStyle} source - style to convert + * @param {boolean} rtl - is layout currently in RTL mode (Needed for tests, because unable to mock this) + * + * @returns {ViewStyle} - style reversed to fit i18n + */ + public toI18nStyle(source: ViewStyle, rtl: boolean = this.isRTL()): ViewStyle { + const i18nStyle: ViewStyle = Object.keys(I18nLayoutFlexMap).reduce((style: ViewStyle, prop: string): ViewStyle => { + const currentStyleValue = source[prop]; + if (currentStyleValue) { + const i18nStyleValue = I18nLayoutFlexMap[prop].toI18n(currentStyleValue, rtl); + return { ...style, [prop]: i18nStyleValue }; + } + + return style; + }, {}); + + return { ...source, ...i18nStyle }; + } +} + +export const I18nLayoutService = new NativeI18nLayoutService(); diff --git a/src/framework/ui/support/services/i18n/i18nLayout.spec.ts b/src/framework/ui/support/services/i18n/i18nLayout.spec.ts new file mode 100644 index 000000000..0b07f1bf6 --- /dev/null +++ b/src/framework/ui/support/services/i18n/i18nLayout.spec.ts @@ -0,0 +1,60 @@ +import { ViewStyle } from 'react-native'; +import { I18nLayoutService } from './i18nLayout.service'; + +describe('@i18n-layout: service checks', () => { + + it('* creates LTR style properly', () => { + const i18nStyle: ViewStyle = I18nLayoutService.toI18nStyle({ + alignContent: 'flex-start', + alignItems: 'flex-end', + alignSelf: 'flex-start', + justifyContent: 'flex-end', + flexDirection: 'row', + flexWrap: 'wrap-reverse', + }, false); + + expect(i18nStyle).toEqual({ + alignContent: 'flex-start', + alignItems: 'flex-end', + alignSelf: 'flex-start', + justifyContent: 'flex-end', + flexDirection: 'row', + flexWrap: 'wrap-reverse', + }); + }); + + it('* creates RTL style properly', () => { + const i18nStyle: ViewStyle = I18nLayoutService.toI18nStyle({ + alignContent: 'flex-start', + alignItems: 'flex-end', + alignSelf: 'flex-start', + justifyContent: 'flex-end', + flexDirection: 'row', + flexWrap: 'wrap-reverse', + }, true); + + expect(i18nStyle).toEqual({ + alignContent: 'flex-end', + alignItems: 'flex-start', + alignSelf: 'flex-end', + justifyContent: 'flex-start', + flexDirection: 'row-reverse', + flexWrap: 'wrap', + }); + }); + + it('* creates RTL style properly - partial', () => { + const i18nStyle: ViewStyle = I18nLayoutService.toI18nStyle({ + alignItems: 'flex-end', + justifyContent: 'flex-end', + flexDirection: 'row', + }, true); + + expect(i18nStyle).toEqual({ + alignItems: 'flex-start', + justifyContent: 'flex-start', + flexDirection: 'row-reverse', + }); + }); + +}); diff --git a/src/framework/ui/support/services/i18n/i18nLayoutFlexMap.ts b/src/framework/ui/support/services/i18n/i18nLayoutFlexMap.ts new file mode 100644 index 000000000..b1d916388 --- /dev/null +++ b/src/framework/ui/support/services/i18n/i18nLayoutFlexMap.ts @@ -0,0 +1,85 @@ +const FLEX_PREFIX: string = 'flex'; +const FLEX_ROW_PREFIX: string = 'row'; +const FLEX_WRAP_PREFIX: string = 'wrap'; +const FLEX_START_PREFIX: string = 'start'; +const FLEX_END_PREFIX: string = 'end'; +const FLEX_REVERSE_PREFIX: string = 'reverse'; + +/** + * Works with FlexBox style properties that starts with `flex` and ends with `-start` or `-end` + * + * E.g justifyContent: flex-start + */ +const FlexStartEndMapper: I18nLayoutFlexMapper = { + toI18n(value: string, rtl: boolean): string { + if (!rtl || !value.startsWith(FLEX_PREFIX)) { + return value; + } + + const isReverse: boolean = value.endsWith(FLEX_END_PREFIX); + + if (isReverse) { + return `${FLEX_PREFIX}-${FLEX_START_PREFIX}`; + } + + return `${FLEX_PREFIX}-${FLEX_END_PREFIX}`; + }, +}; + +/** + * Works with FlexBox style properties that starts with `row` and optionally ends with `-reverse` + * + * E.g flexDirection: row-reverse + */ +const FlexRowMapper: I18nLayoutFlexMapper = { + toI18n(value: string, rtl: boolean): string { + if (!rtl || !value.startsWith(FLEX_ROW_PREFIX)) { + return value; + } + + const isReverse: boolean = value.endsWith(FLEX_REVERSE_PREFIX); + + if (isReverse) { + return FLEX_ROW_PREFIX; + } + + return `${FLEX_ROW_PREFIX}-${FLEX_REVERSE_PREFIX}`; + }, +}; + +/** + * Works with FlexBox style properties that starts with `wrap` and optionally ends with `-reverse` + * + * E.g flexWrap: wrap-reverse + */ +const FlexWrapMapper: I18nLayoutFlexMapper = { + toI18n(value: string, rtl: boolean): string { + if (!rtl || !value.startsWith(FLEX_WRAP_PREFIX)) { + return value; + } + + const isReverse: boolean = value.endsWith(`-${FLEX_REVERSE_PREFIX}`); + + if (isReverse) { + return FLEX_WRAP_PREFIX; + } + + return `${FLEX_WRAP_PREFIX}-${FLEX_REVERSE_PREFIX}`; + }, +}; + +/** + * Matches FlexBox style properties that can affect on Layout depending on LTR/RTL mode corresponding Mappers + */ +export const I18nLayoutFlexMap: { [key: string]: I18nLayoutFlexMapper } = { + alignContent: FlexStartEndMapper, + alignItems: FlexStartEndMapper, + alignSelf: FlexStartEndMapper, + justifyContent: FlexStartEndMapper, + flexDirection: FlexRowMapper, + flexWrap: FlexWrapMapper, +}; + +interface I18nLayoutFlexMapper { + toI18n(value: T, rtl: boolean): T; +} diff --git a/src/framework/ui/support/services/i18n/type.ts b/src/framework/ui/support/services/i18n/type.ts new file mode 100644 index 000000000..5cdf64471 --- /dev/null +++ b/src/framework/ui/support/services/i18n/type.ts @@ -0,0 +1,20 @@ +import { ViewStyle } from 'react-native'; + +export interface I18nLayoutServiceType { + /** + * Should return true if it is Right-to-Left layout + */ + isRTL(): boolean; + + /** + * Should select a value depending on current layout mode (LTR/RTL) + */ + select(ltrValue: T, rtlValue: T): T; + + /** + * Should convert flex-box value to an RTL one, ignoring RTL, e.g flex-start to flex-end + * + * @param {ViewStyle} source - style to convert + */ + toI18nStyle(source: ViewStyle): ViewStyle; +} diff --git a/src/framework/ui/support/services/index.ts b/src/framework/ui/support/services/index.ts index 44838ad43..3e521ad6a 100644 --- a/src/framework/ui/support/services/index.ts +++ b/src/framework/ui/support/services/index.ts @@ -1,6 +1,8 @@ export { all, allWithRest, + allWithPrefix, } from './props.service'; +export { I18nLayoutService } from './i18n/i18nLayout.service'; export { isValidString } from './validation.service'; diff --git a/src/framework/ui/support/services/props.service.ts b/src/framework/ui/support/services/props.service.ts index 88d9f8961..381b85f4d 100644 --- a/src/framework/ui/support/services/props.service.ts +++ b/src/framework/ui/support/services/props.service.ts @@ -1,3 +1,5 @@ +import { StyleType } from '@kitten/theme'; + export interface Props { [key: string]: any; } @@ -46,3 +48,22 @@ export function allWithRest(source: Props | undefined, from: string[]): AllWithR return { ...allOf, rest: { ...rest, [prop]: source[prop] } }; }, {}); } + +/** + * Returns all styles with prefix + * + * @param {StyleType} source - Eva Styles + * @param {string} key - prefix + * + * @return {StyleType} - all styles with prefix + */ +export function allWithPrefix(source: StyleType, key: string): StyleType { + return Object.keys(source) + .filter((styleName: string) => styleName.includes(key)) + .reduce((obj: StyleType, styleKey: string) => { + return { + ...obj, + [styleKey]: source[styleKey], + }; + }, {}); +} diff --git a/src/framework/ui/support/tests/mapping.json b/src/framework/ui/support/tests/mapping.json index f4f6267d0..78dff736b 100644 --- a/src/framework/ui/support/tests/mapping.json +++ b/src/framework/ui/support/tests/mapping.json @@ -1144,6 +1144,356 @@ } } }, + "Dropdown": { + "meta": { + "scope": "all", + "parameters": { + "controlMinWidth": { + "type": "number" + }, + "controlMinHeight": { + "type": "number" + }, + "controlPaddingHorizontal": { + "type": "number" + }, + "controlPaddingVertical": { + "type": "number" + }, + "controlBorderRadius": { + "type": "number" + }, + "controlBorderColor": { + "type": "string" + }, + "controlBorderWidth": { + "type": "number" + }, + "controlBackgroundColor": { + "type": "string" + }, + "placeholderMarginHorizontal": { + "type": "number" + }, + "placeholderFontSize": { + "type": "number" + }, + "placeholderLineHeight": { + "type": "number" + }, + "placeholderFontWeight": { + "type": "string" + }, + "placeholderColor": { + "type": "string" + }, + "textMarginHorizontal": { + "type": "number" + }, + "textFontSize": { + "type": "number" + }, + "textLineHeight": { + "type": "number" + }, + "textFontWeight": { + "type": "string" + }, + "textColor": { + "type": "string" + }, + "iconWidth": { + "type": "number" + }, + "iconHeight": { + "type": "number" + }, + "iconTintColor": { + "type": "string" + }, + "iconMarginHorizontal": { + "type": "number" + }, + "menuMaxHeight": { + "type": "number" + }, + "menuBorderRadius": { + "type": "number" + }, + "menuBorderColor": { + "type": "string" + }, + "menuBorderWidth": { + "type": "number" + }, + "labelColor": { + "type": "string" + }, + "labelFontSize": { + "type": "number" + }, + "labelLineHeight": { + "type": "number" + }, + "labelFontWeight": { + "type": "string" + }, + "labelMarginBottom": { + "type": "number" + }, + "outlinePadding": { + "type": "number" + }, + "outlineBorderRadius": { + "type": "number" + }, + "outlineBackgroundColor": { + "type": "string" + } + }, + "appearances": { + "default": { + "default": true + } + }, + "variantGroups": { + "status": { + "primary": { + "default": true + }, + "success": { + "default": false + }, + "info": { + "default": false + }, + "warning": { + "default": false + }, + "danger": { + "default": false + } + } + }, + "states": { + "disabled": { + "default": false, + "priority": 0, + "scope": "all" + }, + "active": { + "default": false, + "priority": 1, + "scope": "all" + } + } + }, + "appearances": { + "default": { + "mapping": { + "menuMaxHeight": 220, + "menuBorderRadius": 4, + "menuBorderColor": "border-basic-color-4", + "menuBorderWidth": 1, + "controlBorderRadius": 4, + "controlBorderWidth": 1, + "controlPaddingHorizontal": 8, + "controlBorderColor": "border-basic-color-3", + "controlBackgroundColor": "background-basic-color-2", + "controlMinHeight": 48, + "controlPaddingVertical": 7, + "placeholderMarginHorizontal": 8, + "placeholderColor": "text-hint-color", + "placeholderFontWeight": "text-paragraph-1-font-weight", + "placeholderFontSize": "text-subtitle-1-font-size", + "placeholderLineHeight": "text-paragraph-1-line-height", + "textMarginHorizontal": 8, + "textColor": "border-alternative-color-1", + "textFontWeight": "text-subtitle-1-font-weight", + "textFontSize": "text-subtitle-1-font-size", + "textLineHeight": "text-subtitle-1-line-height", + "iconWidth": 24, + "iconHeight": 24, + "iconMarginHorizontal": 8, + "iconTintColor": "text-hint-color", + "labelColor": "text-hint-color", + "labelMarginBottom": 4, + "outlineBackgroundColor": "transparent", + "outlinePadding": 4, + "outlineBorderRadius": 4, + "state": { + "active": { + "outlineBackgroundColor": "outline-color", + "controlBackgroundColor": "background-basic-color-1", + "iconTintColor": "border-alternative-color-1" + }, + "disabled": { + "controlBorderColor": "border-basic-color-4", + "placeholderColor": "text-disabled-color", + "textColor": "text-disabled-color", + "iconTintColor": "icon-disabled-color" + } + } + }, + "variantGroups": { + "status": { + "primary": { + "state": { + "active": { + "controlBorderColor": "color-primary-default" + } + } + }, + "success": { + "state": { + "active": { + "controlBorderColor": "color-success-default" + } + } + }, + "info": { + "state": { + "active": { + "controlBorderColor": "color-info-default" + } + } + }, + "warning": { + "state": { + "active": { + "controlBorderColor": "color-warning-default" + } + } + }, + "danger": { + "state": { + "active": { + "controlBorderColor": "color-danger-default" + } + } + } + } + } + } + } + }, + "DropdownItem": { + "meta": { + "scope": "all", + "parameters": { + "paddingVertical": { + "type": "number" + }, + "paddingHorizontal": { + "type": "number" + }, + "backgroundColor": { + "type": "string" + }, + "multiSelectBackgroundColor": { + "type": "string" + }, + "multiSelectTextColor": { + "type": "string" + }, + "textMarginHorizontal": { + "type": "number" + }, + "textFontSize": { + "type": "number" + }, + "textLineHeight": { + "type": "number" + }, + "textFontWeight": { + "type": "string" + }, + "textColor": { + "type": "string" + } + }, + "appearances": { + "default": { + "default": true + } + }, + "variantGroups": {}, + "states": { + "disabled": { + "default": false, + "priority": 0, + "scope": "all" + }, + "active": { + "default": false, + "priority": 1, + "scope": "all" + }, + "selected": { + "default": false, + "priority": 2, + "scope": "all" + } + } + }, + "appearances": { + "default": { + "mapping": { + "paddingHorizontal": 8, + "paddingVertical": 8, + "textMarginHorizontal": 8, + "backgroundColor": "background-basic-color-1", + "multiSelectBackgroundColor": "background-basic-color-1", + "multiSelectTextColor": "background-alternative-color-1", + "textFontSize": "text-subtitle-1-font-size", + "textFontWeight": "text-subtitle-1-font-weight", + "textLineHeight": "text-subtitle-2-line-height", + "textColor": "background-alternative-color-1", + "state": { + "active": { + "backgroundColor": "background-basic-color-2" + }, + "selected": { + "textColor": "text-alternate-color", + "backgroundColor": "color-primary-default" + }, + "disabled": { + "textColor": "text-hint-color", + "multiSelectTextColor": "text-hint-color" + } + } + } + } + } + }, + "DropdownGroup": { + "meta": { + "scope": "all", + "parameters": { + "backgroundColor": { + "type": "string" + }, + "itemPaddingLeft": { + "type": "number" + } + }, + "appearances": { + "default": { + "default": true + } + }, + "variantGroups": {}, + "states": {} + }, + "appearances": { + "default": { + "mapping": { + "backgroundColor": "background-basic-color-1", + "itemPaddingLeft": 20 + } + } + } + }, "Input": { "meta": { "scope": "all", diff --git a/src/framework/ui/support/typings/index.ts b/src/framework/ui/support/typings/index.ts index 59b57c1b7..e2cab34b8 100644 --- a/src/framework/ui/support/typings/index.ts +++ b/src/framework/ui/support/typings/index.ts @@ -8,4 +8,5 @@ export { Omit, TouchableIndexedProps, ModalPresentingBased, + TouchableTypeReturningProps, } from './type'; diff --git a/src/framework/ui/support/typings/type.ts b/src/framework/ui/support/typings/type.ts index 3d2641013..c5cb3d59e 100644 --- a/src/framework/ui/support/typings/type.ts +++ b/src/framework/ui/support/typings/type.ts @@ -3,6 +3,7 @@ import { GestureResponderEvent, NativeScrollEvent, NativeSyntheticEvent, + TargetedEvent, TextInputFocusEventData, TouchableOpacityProps, } from 'react-native'; @@ -17,8 +18,16 @@ export type TouchableIndexedProps = Override void; }>; +export type TouchableTypeReturningProps = Override void; + onPressIn?: (item: T, event: GestureResponderEvent) => void; + onPressOut?: (item: T, event: GestureResponderEvent) => void; + onLongPress?: (item: T, event: GestureResponderEvent) => void; +}>; + export type ScrollEvent = NativeSyntheticEvent; export type InputFocusEvent = NativeSyntheticEvent; +export type TouchableFocusEvent = NativeSyntheticEvent; export interface ModalPresentingBased { children?: React.ReactNode; diff --git a/src/framework/ui/toggle/toggle.component.tsx b/src/framework/ui/toggle/toggle.component.tsx index dd29e43ed..4871a00ca 100644 --- a/src/framework/ui/toggle/toggle.component.tsx +++ b/src/framework/ui/toggle/toggle.component.tsx @@ -25,6 +25,7 @@ import { styled, } from '@kitten/theme'; import { CheckMark } from '../support/components'; +import { I18nLayoutService } from '../support/services'; interface ComponentProps { checked?: boolean; @@ -286,7 +287,7 @@ export class ToggleComponent extends React.Component implements Pan this.thumbTranslateAnimationActive = true; Animated.timing(this.thumbTranslateAnimation, { - toValue: value, + toValue: I18nLayoutService.select(value, -value), duration: 150, easing: Easing.linear, }).start(() => { @@ -358,7 +359,7 @@ export class ToggleComponent extends React.Component implements Pan - + implements Pan - + ; type ChildrenProp = ChildElement | ChildElement[]; @@ -160,7 +161,8 @@ export class ViewPager extends React.Component implements PanRes const isHorizontalMove: boolean = Math.abs(state.dx) > 0 && Math.abs(state.dx) > Math.abs(state.dy); if (isHorizontalMove) { - const nextSelectedIndex: number = this.props.selectedIndex - Math.sign(state.dx); + const i18nOffset: number = I18nLayoutService.select(state.dx, -state.dx); + const nextSelectedIndex: number = this.props.selectedIndex - Math.sign(i18nOffset); return nextSelectedIndex >= 0 && nextSelectedIndex < this.getChildCount(); } @@ -169,14 +171,16 @@ export class ViewPager extends React.Component implements PanRes }; public onPanResponderMove = (event: GestureResponderEvent, state: PanResponderGestureState) => { - const selectedPageOffset: number = this.props.selectedIndex * this.contentWidth; + const i18nOffset: number = I18nLayoutService.select(this.contentWidth, -this.contentWidth); + const selectedPageOffset: number = this.props.selectedIndex * i18nOffset; this.contentOffset.setValue(state.dx - selectedPageOffset); }; public onPanResponderRelease = (event: GestureResponderEvent, state: PanResponderGestureState) => { if (Math.abs(state.vx) >= 0.5 || Math.abs(state.dx) >= 0.5 * this.contentWidth) { - const index: number = state.dx > 0 ? this.props.selectedIndex - 1 : this.props.selectedIndex + 1; + const i18nOffset: number = I18nLayoutService.select(state.dx, -state.dx); + const index: number = i18nOffset > 0 ? this.props.selectedIndex - 1 : this.props.selectedIndex + 1; this.scrollToIndex({ index, animated: true }); } else { const index: number = this.props.selectedIndex; @@ -204,7 +208,7 @@ export class ViewPager extends React.Component implements PanRes }; private onContentOffsetAnimationStateChanged = (state: { value: number }) => { - this.contentOffsetValue = -state.value; + this.contentOffsetValue = I18nLayoutService.select(-state.value, state.value); if (this.props.onOffsetChange) { this.props.onOffsetChange(this.contentOffsetValue); @@ -223,7 +227,7 @@ export class ViewPager extends React.Component implements PanRes const animationDuration: number = params.animated ? 300 : 0; return Animated.timing(this.contentOffset, { - toValue: -params.offset, + toValue: I18nLayoutService.select(-params.offset, params.offset), easing: Easing.linear, duration: animationDuration, }); diff --git a/src/playground/app.json b/src/playground/app.json index 3b8677123..6e45500f5 100644 --- a/src/playground/app.json +++ b/src/playground/app.json @@ -3,7 +3,7 @@ "name": "react-native-ui-kitten-playground", "description": "react-native-ui-kitten-playground", "slug": "playground", - "sdkVersion": "33.0.0", + "sdkVersion": "34.0.0", "platforms": [ "android", "ios", diff --git a/src/playground/babel.config.js b/src/playground/babel.config.js index 597cf4eb7..13b158039 100644 --- a/src/playground/babel.config.js +++ b/src/playground/babel.config.js @@ -1,19 +1,31 @@ const path = require('path'); const Config = require('../../config'); -// FIXME: Resolve `transform[stderr]: Could not resolve` command-line warnings. -// FIXME: Reproducible when starting with clearing cache (npm start -- -c) -// -// TODO: Framework path aliasing even not needed here. Replace? -// TODO: Replace nested package.json-s with aliases +/** + * UI Kitten modules aliases. + * Allows importing framework modules into playground + */ +const moduleAliases = { + 'react-native-ui-kitten': path.resolve(__dirname, '../framework'), + '@kitten/theme': path.resolve(__dirname, '../framework/theme'), + '@kitten/ui': path.resolve(__dirname, '../framework/ui'), + '@ui-kitten/eva-icons': path.resolve(__dirname, '../eva-icons'), +}; + +/** + * Eva modules aliases. + * Allows importing Eva modules into playground depending on environment + */ +const evaAliases = { + '@eva-design/processor': path.resolve(Config.PROCESSOR_PATH), + '@eva-design/eva': path.resolve(Config.MAPPING_PATH), +}; const moduleResolverConfig = { root: path.resolve('./'), alias: { - '@kitten/theme': path.resolve(Config.KITTEN_PATH, 'theme'), - '@kitten/ui': path.resolve(Config.KITTEN_PATH, 'ui'), - '@eva-design/eva': path.resolve(Config.MAPPING_PATH), - '@eva-design/processor': path.resolve(Config.PROCESSOR_PATH), + ...evaAliases, + ...moduleAliases, }, }; diff --git a/src/playground/metro.config.js b/src/playground/metro.config.js index 79614b7c0..b6f7943ab 100644 --- a/src/playground/metro.config.js +++ b/src/playground/metro.config.js @@ -1,28 +1,55 @@ const path = require('path'); const Config = require('../../config'); +/** + * Resolves Eva modules Haste Map + */ +const evaFolders = [ + path.resolve(Config.MAPPING_PATH), + path.resolve(Config.PROCESSOR_PATH), +]; + +/** + * Resolves UI Kitten modules Haste Map + */ +const moduleFolders = [ + path.resolve(__dirname, '../framework'), + path.resolve(__dirname, '../framework/theme'), + path.resolve(__dirname, '../framework/ui'), + path.resolve(__dirname, '../eva-icons'), +]; + +/** + * Resolves Root Dependencies Haste Map + */ +const rootDependencyFolders = [ + path.resolve(__dirname, '../../node_modules/@babel'), + path.resolve(__dirname, '../../node_modules/hoist-non-react-statics'), + path.resolve(__dirname, '../../node_modules/react-is'), + path.resolve(__dirname, '../../node_modules/lodash.merge'), + path.resolve(__dirname, '../../node_modules/react-native-eva-icons'), + path.resolve(__dirname, '../../node_modules/react-native-svg'), +]; + +/** + * Resolves Playground Dependencies Haste Map + */ +const playgroundExtraModules = { + '@babel/runtime': path.resolve(__dirname, './node_modules/@babel/runtime'), + 'react': path.resolve(__dirname, './node_modules/react'), + 'react-native': path.resolve(__dirname, './node_modules/react-native'), +}; + module.exports = { resolver: { - sourceExts: [ - 'js', - 'ts', - 'tsx', - ], extraNodeModules: { - '@babel/runtime': path.resolve(__dirname, './node_modules/@babel/runtime'), - 'react': path.resolve(__dirname, './node_modules/react'), - 'react-native': path.resolve(__dirname, './node_modules/react-native'), + ...playgroundExtraModules }, }, projectRoot: path.resolve(__dirname), watchFolders: [ - path.resolve(Config.KITTEN_PATH, 'theme'), - path.resolve(Config.KITTEN_PATH, 'ui'), - path.resolve(Config.MAPPING_PATH), - path.resolve(Config.PROCESSOR_PATH), - path.resolve(__dirname, '../../node_modules/@babel'), - path.resolve(__dirname, '../../node_modules/hoist-non-react-statics'), - path.resolve(__dirname, '../../node_modules/react-is'), - path.resolve(__dirname, '../../node_modules/lodash.merge'), + ...evaFolders, + ...moduleFolders, + ...rootDependencyFolders, ], }; diff --git a/src/playground/package-lock.json b/src/playground/package-lock.json index 7cdb949d3..a220c4023 100644 --- a/src/playground/package-lock.json +++ b/src/playground/package-lock.json @@ -4,42 +4,42 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -81,26 +81,26 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", + "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { @@ -139,11 +139,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.5.5" } }, "@babel/helper-module-imports": { @@ -155,16 +155,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { @@ -181,11 +181,11 @@ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { @@ -201,14 +201,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/helper-simple-access": { @@ -240,19 +240,19 @@ } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", "requires": { "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -260,9 +260,9 @@ } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" }, "@babel/plugin-external-helpers": { "version": "7.2.0", @@ -283,11 +283,11 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz", - "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.4", + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0" } }, @@ -301,10 +301,19 @@ "@babel/plugin-syntax-decorators": "^7.2.0" } }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, "@babel/plugin-proposal-export-default-from": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.2.0.tgz", - "integrity": "sha512-NVfNe7F6nsasG1FnvcFxh2FN0l04ZNe75qTOAVOILWPam0tw9a63RtT/Dab8dPjedZa4fTQaQ83yMMywF9OSug==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz", + "integrity": "sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-export-default-from": "^7.2.0" @@ -329,9 +338,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -478,9 +487,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -496,25 +505,25 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", + "@babel/helper-define-map": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" } @@ -528,9 +537,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -546,9 +555,9 @@ } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -605,31 +614,34 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", "requires": { "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", "requires": { "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "requires": { "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { @@ -666,12 +678,12 @@ } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-replace-supers": "^7.5.5" } }, "@babel/plugin-transform-parameters": { @@ -711,9 +723,9 @@ } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", - "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", + "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.2.0" @@ -736,9 +748,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -789,10 +801,11 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz", - "integrity": "sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz", + "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==", "requires": { + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" } @@ -826,42 +839,44 @@ } }, "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", + "@babel/plugin-transform-async-to-generator": "^7.5.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", + "@babel/plugin-transform-destructuring": "^7.5.0", "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", "@babel/plugin-transform-for-of": "^7.4.4", "@babel/plugin-transform-function-name": "^7.4.4", "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", "@babel/plugin-transform-modules-umd": "^7.2.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-object-super": "^7.5.5", "@babel/plugin-transform-parameters": "^7.4.4", "@babel/plugin-transform-property-literals": "^7.2.0", "@babel/plugin-transform-regenerator": "^7.4.5", @@ -872,7 +887,7 @@ "@babel/plugin-transform-template-literals": "^7.4.4", "@babel/plugin-transform-typeof-symbol": "^7.2.0", "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.5", "browserslist": "^4.6.0", "core-js-compat": "^3.1.1", "invariant": "^2.2.2", @@ -881,29 +896,29 @@ } }, "@babel/register": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz", - "integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.5.5.tgz", + "integrity": "sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==", "requires": { "core-js": "^3.0.0", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "mkdirp": "^0.5.1", "pirates": "^4.0.0", "source-map-support": "^0.5.9" }, "dependencies": { "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" } } }, "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -919,28 +934,28 @@ } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, @@ -950,12 +965,12 @@ "integrity": "sha512-rcRCLTXEMCuflsUg8jcXWXzpGW+WmMqKit8OIY38K5EgJ9UhbdKScZz1GhtWW9PRaXcivbtYpvzFbuNfYBjTDQ==" }, "@expo/config": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-2.0.4.tgz", - "integrity": "sha512-c5uJlbmBOcPqR9wbaoIPxsqgz5j67xnwli45tuSkVyOOmJ3qqdSp3/TiV7fsstkiY+w3fN7OesbZ6lxFLSrHKA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-2.1.3.tgz", + "integrity": "sha512-h+h+YIHK1UjT2FxCbVOBzQZWKzLqLWQTMDxcg9u36UiEhKGemZOUYelMZ3DLwL2ddu9b6GWWvtPmcc1kQu9F8g==", "dev": true, "requires": { - "@expo/json-file": "^8.1.6", + "@expo/json-file": "^8.1.10", "find-yarn-workspace-root": "^1.2.1", "fs-extra": "^7.0.1", "resolve-from": "^5.0.0", @@ -982,9 +997,9 @@ } }, "@expo/image-utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.2.1.tgz", - "integrity": "sha512-cyWjMLCb4t7GXE9vDyw/wvO7buxndkGnUdD2ZdwTJW8Kh/3IVULbqHhcj10w9z/BXhXDxsSx/wAMgma6OGHrfg==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.2.5.tgz", + "integrity": "sha512-gG/3gwwOH5ETtBbRBoKOZIiEUAxy0xpGb6cmodEZycvzmiPTB+SjDbS/LqCMMAdvjWbA+9HuJhPX30PDqnas6g==", "dev": true, "requires": { "@expo/spawn-async": "1.5.0", @@ -1001,15 +1016,15 @@ } }, "@expo/json-file": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.1.6.tgz", - "integrity": "sha512-hjbLppBWzr2AgRnxCkAw5BlzIJh6bCgfdSxTKVD9mtpTir4/aFWvc0NXN2df/bUuJV+GQCuONro41NImMx1NuQ==", + "version": "8.1.10", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.1.10.tgz", + "integrity": "sha512-FIxGkM/wBq10DBLqPVDHjuonK5PryuoTnhgQ9c8CjXHaePuzlpgpMZxZFQdWAeJMbCaJi+/IWVyees8jNjZrxg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0-beta.44", "fs-extra": "^8.0.1", "json5": "^1.0.1", - "lodash": "^4.17.4", + "lodash": "^4.17.11", "util.promisify": "^1.0.0", "write-file-atomic": "^2.3.0" }, @@ -1057,9 +1072,9 @@ } }, "@expo/vector-icons": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-10.0.2.tgz", - "integrity": "sha512-ea3cNMTfSsXo1QU/drBFTw93cMbqC6MxYOisxGyzZ9UiDIqvz3PJ9CQDtbqjZX9UASxLmg0mHWLVdsygAQJYwQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-10.0.5.tgz", + "integrity": "sha512-SWdAx2Qzxp5TgT3hZEoF/KHnaDW7ajIFztrDdaDZl3nPo7ExK0YiQ03V0z0xMd+uQwl3SZO3JMwPZ7YnuxcMEg==", "requires": { "lodash": "^4.17.4" } @@ -1116,12 +1131,12 @@ } }, "@expo/webpack-pwa-manifest-plugin": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@expo/webpack-pwa-manifest-plugin/-/webpack-pwa-manifest-plugin-1.1.5.tgz", - "integrity": "sha512-yatRfixPdTJGDrXjEC+vvyMAuIG0sL39J1QoAQr+CIS2bz14StJV5MpdLVaXJfg1Q8HbDn76soObL+xvXKFZUw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@expo/webpack-pwa-manifest-plugin/-/webpack-pwa-manifest-plugin-1.2.3.tgz", + "integrity": "sha512-yaRcqWnM69Or3EY5rqP5paPD6mYtxlICPOm6/0S/lERXo6zqfcMUNaJPtnxNcpAPg2CKuZhJACIm72loHvL96g==", "dev": true, "requires": { - "@expo/image-utils": "^0.2.1", + "@expo/image-utils": "^0.2.5", "css-color-names": "^1.0.1", "mime": "^2.4.0", "tempy": "^0.3.0" @@ -1164,9 +1179,9 @@ "dev": true }, "@react-native-community/cli": { - "version": "1.9.11", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.9.11.tgz", - "integrity": "sha512-VVu/tmTTzODfW2xlqIz0pZgeELG2ppPAIgbBEKLgHCO9DMxNZIKSqmei/JqkAi0gEipqQoP6YPAemHPd43lyrA==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.11.2.tgz", + "integrity": "sha512-5NuYd30f5PCTrGUbZLnusZKv5nfTWvTDTRa/3Q4vwdMnUQrhm9sZXWGQ5CnFoQ7cE58EAqhj6/ShXeJF3DZ9uQ==", "requires": { "chalk": "^1.1.1", "commander": "^2.19.0", @@ -1243,11 +1258,6 @@ } } }, - "@react-native-community/netinfo": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-2.0.10.tgz", - "integrity": "sha512-NrIzyLe0eSbhgMnHl2QdSEhaA7yXh6p9jzMomfUa//hoTXE+xbObGDdiWWSQm2bnXnZJg8XCU3AB9qzvqcuLnA==" - }, "@react-navigation/core": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.4.2.tgz", @@ -1295,14 +1305,14 @@ "integrity": "sha1-jtIE2g9U6cjq7DGx7skeJRMtCCw=" }, "@types/invariant": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.29.tgz", - "integrity": "sha512-lRVw09gOvgviOfeUrKc/pmTiRZ7g7oDOU6OAutyuSHpm1/o2RaBQvRhgK8QEdu+FFuw/wnWb29A/iuxv9i8OpQ==" + "version": "2.2.30", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.30.tgz", + "integrity": "sha512-98fB+yo7imSD2F7PF7GIpELNgtLNgo5wjivu0W5V4jx+KVVJxo6p/qN4zdzSTBWy4/sN3pPyXwnhRSD28QX+ag==" }, "@types/lodash": { - "version": "4.14.135", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.135.tgz", - "integrity": "sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg==" + "version": "4.14.137", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.137.tgz", + "integrity": "sha512-g4rNK5SRKloO+sUGbuO7aPtwbwzMgjK+bm9BBhLD7jGUiGR7zhwYEhSln/ihgYQBeIJ5j7xjyaYzrWTcu3UotQ==" }, "@types/lodash.zipobject": { "version": "4.1.6", @@ -1340,17 +1350,17 @@ "integrity": "sha1-Yhpman8CAY58u0q6uVaiVzbCfXE=" }, "@unimodules/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-2.0.1.tgz", - "integrity": "sha512-evbJUEAf8TvIfzR2/T9npWuqyYE8042qvmE7uWF+uDAt8KclMS9g7clbNTEG1ck5ov9AYWMMgohFaPfDCkJicw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-3.0.2.tgz", + "integrity": "sha512-EMZjVp+yrtoPKpDBPvj4+hyDWALl7gvpWeUsDz2Nb9MMBPLnhag1uNk3KC98StJdnjbSXKSdKrCMMidOXnyKcg==", "requires": { "compare-versions": "^3.4.0" } }, "@unimodules/react-native-adapter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-2.0.1.tgz", - "integrity": "sha512-D9CSGLIWX0iWLv4Voq0i+xo0YZcraTN1uCdJ+EepwmBplRHDrDCoh2M9Upm4aIso5812pXOBHmGf31AhIKKhYA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-3.0.0.tgz", + "integrity": "sha512-zkFFE0HQ2Flfx/aY3hBKDgMvQ1meUm3H6vMIacY1KywexCuKW8ivBobkOsHIet4jf7km0Eklt6WtB3LqQVw5yw==", "requires": { "invariant": "^2.2.4", "lodash": "^4.5.0", @@ -1571,9 +1581,9 @@ } }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true }, "address": { @@ -1583,9 +1593,9 @@ "dev": true }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -1601,9 +1611,9 @@ "dev": true }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, "alphanum-sort": { @@ -2107,11 +2117,11 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "async-each": { @@ -2121,9 +2131,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "atob": { "version": "2.1.2", @@ -2159,6 +2169,14 @@ } } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, "babel-plugin-module-resolver": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", @@ -2172,9 +2190,9 @@ } }, "babel-plugin-react-native-web": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.11.4.tgz", - "integrity": "sha512-xREobnt2fN0AsANhvm5Vh7JKRdYj9BlXvyoBWSTAT3+gmh1mtEgeRFj4CuhyiBcgKAfR8kj8v9BLj/LfOdenow==" + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.11.7.tgz", + "integrity": "sha512-CxE7uhhqkzAFkwV2X7+Mc/UVPujQQDtja/EGxCXRJvdYRi72QTmaJYKbK1lV9qgTZuB+TDguU89coaA9Z1BNbg==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2201,6 +2219,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-5.2.0.tgz", "integrity": "sha512-yNHYwSFk7fvVCVJM3m3Vi/BVBNAeox1Iw1tHhCJGbLnpYkR94wst/I8IF9y+K01FhJ98epIK1S0Go3EmHJbbzA==", + "dev": true, "requires": { "@babel/core": "^7.1.0", "@babel/plugin-proposal-decorators": "^7.1.0", @@ -2249,6 +2268,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -2257,12 +2277,14 @@ "core-js": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true } } }, @@ -2338,9 +2360,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "basic-auth": { "version": "2.0.1", @@ -2397,9 +2419,9 @@ "dev": true }, "blueimp-md5": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.10.0.tgz", - "integrity": "sha512-EkNUOi7tpV68TqjpiUz9D9NcT8um2+qtgntmMbi5UKssVX2m/2PLqotcric0RE63pB3HPN/fjf3cKHN2ufGSUQ==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.11.1.tgz", + "integrity": "sha512-4UiOAmql2XO0Sws07OVzYdCKK0K2Va5g6AVgYXoGhEQiKrdSOefjUCm1frPk6E+xiIOHRqaFg+TUGo7cClKg5g==" }, "bn.js": { "version": "4.11.8", @@ -2464,6 +2486,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, @@ -2608,13 +2636,13 @@ } }, "browserslist": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.3.tgz", - "integrity": "sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", "requires": { - "caniuse-lite": "^1.0.30000975", - "electron-to-chromium": "^1.3.164", - "node-releases": "^1.1.23" + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" } }, "bser": { @@ -2803,11 +2831,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, - "can-use-dom": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", - "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" - }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -2821,9 +2844,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000978", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000978.tgz", - "integrity": "sha512-H6gK6kxUzG6oAwg/Jal279z8pHw0BzrpZfwo/CA9FFm/vA0l8IhDfkZtepyJNE2Y4V6Dp3P3ubz6czby1/Mgsw==" + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==" }, "capture-exit": { "version": "1.2.0", @@ -2849,11 +2872,6 @@ "supports-color": "^5.3.0" } }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" - }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", @@ -2990,9 +3008,9 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", "dev": true }, "chrome-trace-event": { @@ -3189,9 +3207,9 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, "compare-versions": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.0.tgz", - "integrity": "sha512-hX+4kt2Rcwu+x1U0SsEFCn1quURjEjPEGH/cPBlpME/IidGimAdwfMU+B+xDr7et/KTR7VH2+ZqWGerv4NGs2w==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz", + "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==" }, "component-emitter": { "version": "1.3.0", @@ -3367,12 +3385,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-PlZRs9CUMnAVylZq+vg2Juew662jWtwOXOqH4lbQD9ZFhRG9R7tVStOgHt21CBGVq7k5yIJaz8TXDLSjV+Lj8Q==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==", "dev": true, "requires": { - "cacache": "^11.3.2", + "cacache": "^11.3.3", "find-cache-dir": "^2.1.0", "glob-parent": "^3.1.0", "globby": "^7.1.1", @@ -3429,9 +3447,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -3451,27 +3469,21 @@ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, "core-js-compat": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", - "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "requires": { - "browserslist": "^4.6.2", - "core-js-pure": "3.1.4", - "semver": "^6.1.1" + "browserslist": "^4.6.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz", - "integrity": "sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "core-js-pure": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", - "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -3656,12 +3668,12 @@ "dev": true }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", "dev": true, "requires": { - "mdn-data": "~1.1.0", + "mdn-data": "2.0.4", "source-map": "^0.5.3" } }, @@ -3671,12 +3683,6 @@ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", "dev": true }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", @@ -3784,6 +3790,12 @@ "mdn-data": "~1.1.0", "source-map": "^0.5.3" } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true } } }, @@ -3831,11 +3843,6 @@ "mimic-response": "^1.0.0" } }, - "dedent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", - "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=" - }, "deep-assign": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", @@ -3858,9 +3865,9 @@ "optional": true }, "deep-scope-analyser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/deep-scope-analyser/-/deep-scope-analyser-1.6.1.tgz", - "integrity": "sha512-t4wtDt0eKygcVwi+KE+eCAOAUciHRdJ9IqSkRJdni5O2v9IwFWibkSFYc6sWGotZerj9JolsC42QnVuf10lYqA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/deep-scope-analyser/-/deep-scope-analyser-1.7.0.tgz", + "integrity": "sha512-rl5Dmt2IZkFpZo6XbEY1zG8st2Wpq8Pi/dV2gz8ZF6BDYt3fnor2JNxHwdO1WLo0k6JbmYp0x8MNy8kE4l1NtA==", "dev": true, "requires": { "esrecurse": "^4.2.1", @@ -3871,7 +3878,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -4033,13 +4039,21 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } } }, "dom-walk": { @@ -4117,9 +4131,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.176", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.176.tgz", - "integrity": "sha512-hsQ/BH6x2iCvJ7WOIbNTAlsT39vsVGIVoJJ9i6ZkGXUE2LdzWsNv0xJI2uZ5/Hkqv1oTTLxAYjbtGKVJzqYbjA==" + "version": "1.3.235", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.235.tgz", + "integrity": "sha512-xNabEDbMIKPLQd6xgv4nyyeMaWXIKSJr6G51ZhUemHhbz6kjZAYcygA8CvfEcMF+Mt5eLmDWaLmfSOWdQxzBVQ==" }, "elliptic": { "version": "6.5.0", @@ -4175,9 +4189,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", "dev": true }, "envinfo": { @@ -4281,15 +4295,15 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -4377,418 +4391,148 @@ "optional": true }, "expo": { - "version": "33.0.7", - "resolved": "https://registry.npmjs.org/expo/-/expo-33.0.7.tgz", - "integrity": "sha512-+mDBQ/KeJnDWg8bUoiuP/OpMXwUYaypgHMDPgH7+AXw8OJuedMhJlH+7UEX2OB+UePnWPcQER411sC7m819pag==", + "version": "34.0.4", + "resolved": "https://registry.npmjs.org/expo/-/expo-34.0.4.tgz", + "integrity": "sha512-sZQQoZnN5ASrkSA4qSsk7HPBewHB6b3k9VPZvchT0FBZ1fP5vpmzfIbVOqOLRXHf2VdjNnQVme617TnpPlruJg==", "requires": { "@babel/runtime": "^7.1.2", - "@expo/vector-icons": "^10.0.1", - "@react-native-community/netinfo": "2.0.10", + "@expo/vector-icons": "^10.0.2", "@types/fbemitter": "^2.0.32", "@types/invariant": "^2.2.29", "@types/lodash.zipobject": "^4.1.4", "@types/qs": "^6.5.1", "@types/uuid-js": "^0.7.1", - "@unimodules/core": "^2.0.0", - "@unimodules/react-native-adapter": "^2.0.0", - "babel-preset-expo": "^5.0.0", + "@unimodules/core": "~3.0.0", + "@unimodules/react-native-adapter": "~3.0.0", + "babel-preset-expo": "^6.0.0", "cross-spawn": "^6.0.5", - "expo-ads-admob": "~5.0.1", - "expo-ads-facebook": "~5.0.1", - "expo-analytics-amplitude": "~5.0.1", - "expo-analytics-segment": "~5.0.1", - "expo-app-auth": "~5.0.1", - "expo-app-loader-provider": "~5.0.1", - "expo-asset": "~5.0.1", - "expo-av": "~5.0.2", - "expo-background-fetch": "~5.0.1", - "expo-barcode-scanner": "~5.0.1", - "expo-blur": "~5.0.1", - "expo-brightness": "~5.0.1", - "expo-calendar": "~5.0.1", - "expo-camera": "~5.0.1", - "expo-constants": "~5.0.1", - "expo-contacts": "~5.0.2", - "expo-crypto": "~5.0.1", - "expo-document-picker": "~5.0.1", - "expo-face-detector": "~5.0.1", - "expo-facebook": "~5.0.1", - "expo-file-system": "~5.0.1", - "expo-font": "~5.0.1", - "expo-gl": "~5.0.1", - "expo-gl-cpp": "~5.0.1", - "expo-google-sign-in": "~5.0.1", - "expo-haptics": "~5.0.1", - "expo-image-manipulator": "~5.0.1", - "expo-image-picker": "~5.0.2", - "expo-intent-launcher": "~5.0.1", - "expo-keep-awake": "~5.0.1", - "expo-linear-gradient": "~5.0.1", - "expo-local-authentication": "~5.0.1", - "expo-localization": "~5.0.1", - "expo-location": "~5.0.1", - "expo-mail-composer": "~5.0.1", - "expo-media-library": "~5.0.1", - "expo-payments-stripe": "~5.0.1", - "expo-permissions": "~5.0.1", - "expo-print": "~5.0.1", - "expo-random": "~5.0.1", - "expo-secure-store": "~5.0.1", - "expo-sensors": "~5.0.1", - "expo-sharing": "~5.0.1", - "expo-sms": "~5.0.1", - "expo-speech": "~5.0.2", - "expo-sqlite": "~5.0.1", - "expo-task-manager": "~5.0.1", - "expo-web-browser": "~5.0.3", + "expo-app-loader-provider": "~6.0.0", + "expo-asset": "~6.0.0", + "expo-constants": "~6.0.0", + "expo-file-system": "~6.0.0", + "expo-font": "~6.0.1", + "expo-keep-awake": "~6.0.0", + "expo-linear-gradient": "~6.0.0", + "expo-location": "~6.0.0", + "expo-permissions": "~6.0.0", + "expo-sqlite": "~6.0.0", + "expo-web-browser": "~6.0.0", "fbemitter": "^2.1.1", "invariant": "^2.2.2", "lodash": "^4.6.0", - "lottie-react-native": "2.6.1", "md5-file": "^3.2.3", "nullthrows": "^1.1.0", "pretty-format": "^23.6.0", "prop-types": "^15.6.0", "qs": "^6.5.0", - "react-google-maps": "^9.4.5", - "react-native-branch": "2.2.5", - "react-native-gesture-handler": "1.2.1", - "react-native-maps": "0.24.2", - "react-native-reanimated": "1.0.1", - "react-native-screens": "1.0.0-alpha.22", - "react-native-svg": "9.4.0", + "react-native-branch": "~3.0.1", "react-native-view-shot": "2.6.0", - "react-native-webview": "5.8.1", "serialize-error": "^2.1.0", - "unimodules-barcode-scanner-interface": "~2.0.1", - "unimodules-camera-interface": "~2.0.1", - "unimodules-constants-interface": "~2.0.1", - "unimodules-face-detector-interface": "~2.0.1", - "unimodules-file-system-interface": "~2.0.1", - "unimodules-font-interface": "~2.0.1", - "unimodules-image-loader-interface": "~2.0.1", - "unimodules-permissions-interface": "~2.0.1", - "unimodules-sensors-interface": "~2.0.1", + "unimodules-barcode-scanner-interface": "~3.0.0", + "unimodules-camera-interface": "~3.0.0", + "unimodules-constants-interface": "~3.0.0", + "unimodules-face-detector-interface": "~3.0.0", + "unimodules-file-system-interface": "~3.0.0", + "unimodules-font-interface": "~3.0.0", + "unimodules-image-loader-interface": "~3.0.0", + "unimodules-permissions-interface": "~3.0.0", + "unimodules-sensors-interface": "~3.0.0", + "unimodules-task-manager-interface": "~3.0.0", "uuid-js": "^0.7.5" - } - }, - "expo-ads-admob": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-ads-admob/-/expo-ads-admob-5.0.1.tgz", - "integrity": "sha512-9eKifW2HQpfk4pNlUXetZHEXUFyflK/nwfMPkXYRxay6tG3OsKKKfF42pod6KohguEtwEy+RFM3lGUf4tLgG5Q==", - "requires": { - "prop-types": "^15.6.2" - } - }, - "expo-ads-facebook": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-ads-facebook/-/expo-ads-facebook-5.0.1.tgz", - "integrity": "sha512-PPPc4AwGUsmCUGwH6/7iE8nMyG7XqdAqMTo/WVN+Tfit3KVte46SLnaKCT53CAhqPuFvKTy6t9a1mqz6eglAqA==", - "requires": { - "fbemitter": "^2.1.1", - "nullthrows": "^1.1.0" - } - }, - "expo-analytics-amplitude": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-analytics-amplitude/-/expo-analytics-amplitude-5.0.1.tgz", - "integrity": "sha512-zzH82IbA/MTfpEbSQuDq4fHR1O3srNTwdOsBYSizn/mvt7+5DPHn4pHJuf9QRtm8FhmpuQQ7d26I6/2/5JCKKA==" - }, - "expo-analytics-segment": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-analytics-segment/-/expo-analytics-segment-5.0.1.tgz", - "integrity": "sha512-IfGmtzbyBOJEvDYKiXbr/L5RMtZsVqagnOXDhd5LlHYXPSsVyLZUYzi61blyy/Yoc3fPDfAzk9BTfjYR+zD3MQ==" - }, - "expo-app-auth": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-app-auth/-/expo-app-auth-5.0.1.tgz", - "integrity": "sha512-7t2UCw2Ga4t71v4LlaWTu6ikZLG8LEhv3f7dQ82FYO09cQck7PPMJZyWbw7B8pgaFuO7A3mLF1H2F3MXLMZzRw==", - "requires": { - "invariant": "^2.2.4" + }, + "dependencies": { + "babel-preset-expo": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-6.0.0.tgz", + "integrity": "sha512-MvDy86afmCt4sFYkg7yXsZyGL0yONT5JQHZSK1r8cu26Zm1No0yQyll+w78e2OkkYwVFtC1u70GyBPdERG7BZg==", + "requires": { + "@babel/core": "^7.1.0", + "@babel/plugin-proposal-decorators": "^7.1.0", + "@babel/plugin-transform-modules-commonjs": "^7.4.4", + "@babel/preset-env": "^7.3.1", + "babel-plugin-module-resolver": "^3.1.1", + "babel-plugin-react-native-web": "^0.11.2", + "metro-react-native-babel-preset": "^0.51.1" + } + } } }, "expo-app-loader-provider": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-app-loader-provider/-/expo-app-loader-provider-5.0.1.tgz", - "integrity": "sha512-RrbKXYmy980MdSgroY0fWPEFp4qqRGfE2oixPgN52poXJyrLbFeSmV/92IDsEOFv02jtrbbHJ8i3tiIF63czXA==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-app-loader-provider/-/expo-app-loader-provider-6.0.0.tgz", + "integrity": "sha512-GtpztJVxOz+vVwdLyHskpzVzFWMXZPIFC/zczHZPsTwjS+wXj6n8MVaLxX6GaTyhNEtYjp0VIQUw3b7eP+vO6w==" }, "expo-asset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-5.0.1.tgz", - "integrity": "sha512-dDu2jgFVd5UdBVfCgiznaib7R8bF3fZ0H3cLEO8q05lXV5NwFc/ftC2BXy0+tvV5u/yEtnRvQFAQQBJVhtbvpQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-6.0.0.tgz", + "integrity": "sha512-M0sJphdCQ0mq+7kg6rQmq4rU5hbsL72AZCNrga565JchCLeevJhv6j72erh2viqDAPdvjZpGwc7pwI/dxu1+zg==", "requires": { "blueimp-md5": "^2.10.0", "path-browserify": "^1.0.0", "url-parse": "^1.4.4" } }, - "expo-av": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-av/-/expo-av-5.0.2.tgz", - "integrity": "sha512-InvEYDinIv5enZR1HM6oIKFrvFoIsXuxAKcbZmgtqeuRzeJpOLJgzEJ5XlqPDfCM9/RX2Fhv4b2mSQsL20T4IQ==", - "requires": { - "lodash": "^4.17.11" - } - }, - "expo-background-fetch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-background-fetch/-/expo-background-fetch-5.0.1.tgz", - "integrity": "sha512-nisjKhpqY9B4XoFcTXtT2tjiSgt0ApuKRxGbECG3q4vq85o13cGoOYuNJv7XkKuuEpVkvuCK6yjh+WVgOoouRw==", - "requires": { - "expo-task-manager": "~5.0.1" - } - }, - "expo-barcode-scanner": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-barcode-scanner/-/expo-barcode-scanner-5.0.1.tgz", - "integrity": "sha512-9IGXvfd5w8P3swhauSXgCjR55qDvrSgQIc9AdyPZ70V5+UyBB6rmRF7NVPyNAWd3t41HhZ9mo9TKhOmggboG0Q==", - "requires": { - "lodash": "^4.6.0", - "prop-types": "^15.6.0" - } - }, - "expo-blur": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-blur/-/expo-blur-5.0.1.tgz", - "integrity": "sha512-tOrVAut04HBkGQ+CizvCXCluHYWVkBvJ4b4OJnLmVV6WzW7Q2cfWglPzGRn/ue/Yw5IZ6p6mZInEqLt/SFkGDg==", - "requires": { - "prop-types": "^15.6.0" - } - }, - "expo-brightness": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-brightness/-/expo-brightness-5.0.1.tgz", - "integrity": "sha512-jUbbucNYoBiWiQhHJG78SB4e7DVTRpcm19DKxvvtcwyDMDUch6YFtk1+pImOjkPDlD6xVFm4xPpSWdW3Y2Md3Q==" - }, - "expo-calendar": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-calendar/-/expo-calendar-5.0.1.tgz", - "integrity": "sha512-muMxE5W7itpTmsveuEQwRD6bDi5ccDBxkiFNEsqOYheVzAQA55XwIad5a7PrZ4tT4QfeEVvhR1+mE+ShdWqCmw==" - }, - "expo-camera": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-camera/-/expo-camera-5.0.1.tgz", - "integrity": "sha512-FlgTV6dubDE1IMRKiOipTl2uH1eCravcFDfUQlQaxIlz73YEilZhJT7MAentq8VLJoYXsD99F3TfGcIltMA46Q==", - "requires": { - "lodash": "^4.6.0", - "prop-types": "^15.6.0" - } - }, "expo-constants": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-5.0.1.tgz", - "integrity": "sha512-Ny3teALKaE/jFzBg6DHr2GOoHpwQ/OLs3q3VugZOoR6hXCeVcCEP9MyNvhgn/cheeBDAa6UIgarv2Yufb5RMqQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-6.0.0.tgz", + "integrity": "sha512-O0yL3Ok0YUEWpAqsWjOdgFD/lMfg8PUGH/nq31CZ1s7cuFUlksD42i5YhIRlb0Pa/btK8X9LpfY3eWhx9eTmbg==", "requires": { "ua-parser-js": "^0.7.19" } }, - "expo-contacts": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-contacts/-/expo-contacts-5.0.2.tgz", - "integrity": "sha512-mOsov0eomKsscsdRU2HQPLLZ61lzojHNgO3FVyBF/yoxKAIyMYLTjneHbiOEKAFX4yfFT4bztHgcrL26aLooXQ==", - "requires": { - "uuid-js": "^0.7.5" - } - }, - "expo-crypto": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-5.0.1.tgz", - "integrity": "sha512-Tu3d+KJ9eXBNhP5XYvBFQ2n0I0kwlbOw8iEXnbzXmasvhOqr/fPZEdXVbX7xX0/QJE5G1c+OTIV0z/cS8GdVVQ==" - }, - "expo-document-picker": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-document-picker/-/expo-document-picker-5.0.2.tgz", - "integrity": "sha512-m8oLY6zmqzbZv2ZLx4R4tpVLJfD68OSC8wlBQHcdzo9TTalsxjO62kp3mxRqfe4Jpj0h7icrl4bqNN4bxSGNNw==", - "requires": { - "uuid": "^3.3.2" - } - }, - "expo-face-detector": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-face-detector/-/expo-face-detector-5.0.1.tgz", - "integrity": "sha512-UUsbLtmENF8S86AJIeeLkj89Q1gvk69wYe1lQflNN7Wy8YLhrRq3V833Gt0Mna5tKThTnj0MkfOcmR2w2skgtg==" - }, - "expo-facebook": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-facebook/-/expo-facebook-5.0.1.tgz", - "integrity": "sha512-rm28dfPtUcdJEB+7zFgZvwl4G8liYGIfDgxECJGqQZNqFVeRQVxbqyxEBuTBuRmYL/nA5n8egTTeW62NC7v85g==" - }, "expo-file-system": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-5.0.1.tgz", - "integrity": "sha512-8AD8Tt0vR8XNIPXOg5akPUPGuf+SCiE9kY5JppUwfJtfIsiH3BZnebu1bkYCVOMojSgFA017kr8VmH57vEWdnQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-6.0.2.tgz", + "integrity": "sha512-s+6oQpLhcT7MQp7fcoj1E+zttMr0WX6c0FrddzqB4dUfhIggV+nb35nQMASIiTHAj8VPUanTFliY5rETHRMHRA==", "requires": { "uuid-js": "^0.7.5" } }, "expo-font": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-5.0.1.tgz", - "integrity": "sha512-fa/z31lLi1ut6IGTf9/Kvw9KAlwSGQaBkuunuqjrW2ephqiXlHTeOOsaqKMirtmiqgsKOJysdlYUH1Aw03Y2bg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-6.0.1.tgz", + "integrity": "sha512-zQwGFTKSrsTWmFzS0l87i6TyqM0YFDK4ui4sSzpbdQsUHXpeG7wfa67i09roLS0xtp85nrR9Vm2bUJp9njV8JQ==", "requires": { "fontfaceobserver": "^2.1.0" } }, - "expo-gl": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-gl/-/expo-gl-5.0.1.tgz", - "integrity": "sha512-S3LRjIpyedR04QeeSXOJRxPgq8s+o0W3bFlvKZS0ch54xFYJqDk/TM2YTJYY5j9aR4HY/hypnDbP231NwNm30w==", - "requires": { - "expo-gl-cpp": "~5.0.1", - "prop-types": "^15.6.2" - } - }, - "expo-gl-cpp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-gl-cpp/-/expo-gl-cpp-5.0.1.tgz", - "integrity": "sha512-4RMylFwAyakmi5Dp8Vqomq6N+Ywx81ehM3UqhFLuaEkS7dmKd8UQBKwiTiaFcDLsNkvLbTnyllAx7/qctJLQvQ==" - }, - "expo-google-sign-in": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-google-sign-in/-/expo-google-sign-in-5.0.1.tgz", - "integrity": "sha512-VwKIiG+S7uswF27RN9+WBO4dGQhmBPeqYnlBjuw3Zf8pS+tZcE5VROb1PBzyhgn4WEvGEql+40axm8fIMlensw==", - "requires": { - "invariant": "^2.2.4" - } - }, - "expo-haptics": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-5.0.1.tgz", - "integrity": "sha512-+ULs5ZNJXT81PILX+Dpp1l9AvcfZZUazg9wX7Dho//ZIaWncPpd5kkiqZpgBlIJNmr7W0rjGcaD8SqVXgesnKg==" - }, - "expo-image-manipulator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-image-manipulator/-/expo-image-manipulator-5.0.1.tgz", - "integrity": "sha512-9SOp1hAF4CghwsnO3odx1/ia7NlMrXX/6uIWx+1nxDYGhRg52YFB/Kv84vXS/a5cSGuewBPc4t3++QTo9S7qdQ==" - }, - "expo-image-picker": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-image-picker/-/expo-image-picker-5.0.2.tgz", - "integrity": "sha512-6Lf0rd21JhcOxL0ThL0VLewaR0w8SZ/49FYFsyx/XGpo6CSqu9AOZrS11BnVqlwHPaiS4OPsFSlO4IhEF72mFQ==" - }, - "expo-intent-launcher": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-intent-launcher/-/expo-intent-launcher-5.0.1.tgz", - "integrity": "sha512-fvcwkKBcDwKo6JxTGRM3112zgmPbuPtmQx6TdJWuRPJTBWmeCAG2AelohMt1+xzqpnJxnkXEXET2WoMuI+BXvw==" - }, "expo-keep-awake": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-5.0.1.tgz", - "integrity": "sha512-DPWAqgxbmLyJoCXPbDXbj+1XFjP/ulv4AYzvi1a+jsvZRU2uiFdho0w269Y++DLCQf30vbuu3zs5HiaJGU43fA==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-6.0.0.tgz", + "integrity": "sha512-MAtZknf6FtIC0ipkDS2FVa87al8YBsrpsQ2qMf+H/cI6FOd6aahaggN4x75xGnt5UzozgWfjhGNCi1XCr14rJw==" }, "expo-linear-gradient": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-5.0.1.tgz", - "integrity": "sha512-5dKn9JIXmXXHq6itC/Jpqo65Tkgjwacyw1kpD8sekoFTEVfT6ciFd2djqIcciUqIa57FF/5d2q54mUvjoqD/TA==" - }, - "expo-local-authentication": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-local-authentication/-/expo-local-authentication-5.0.1.tgz", - "integrity": "sha512-Fy4T/5N/WUIFsbuRCDWOZzKejbe90nuCbyD4I5rOmHTZRbIxDfGePUUF/fJv5JhjxEl87QdrIlNMpLLyTLiRqw==", - "requires": { - "invariant": "^2.2.4" - } - }, - "expo-localization": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-localization/-/expo-localization-5.0.1.tgz", - "integrity": "sha512-tPubS0oSO9nI3rdqnhnuhegV1REE1h3ltXNgtKX9oj9gHeZ+j7trQChF4xb1IGwaKTVm/ur1f4mkhRpQddJIUg==", - "requires": { - "rtl-detect": "^1.0.2" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-linear-gradient/-/expo-linear-gradient-6.0.0.tgz", + "integrity": "sha512-TGHSK7MsoU1wZXx9uEivMggAR/KT4wTSE0xBfhB8qsziGXoHZdoT79/tZ3HyWtCG7+JVUEFXfUOBxtOlZOu5tg==" }, "expo-location": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-location/-/expo-location-5.0.1.tgz", - "integrity": "sha512-YXMrPuYlLfqcHxKjwdc99XjCpeJYWtxu6kqaM9f++u/zjeup95YNnlzeq8uD7YhNuWk8O6boVAFTSXPn9bY+9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-location/-/expo-location-6.0.0.tgz", + "integrity": "sha512-5uSebmZos0DKJ/xpi+2e9myWVPUWk+fshFedi55wzlGqy2YpTG5MlDcCLlJlamgJ5Tm8+3ECdhbFX3g1pNRDVQ==", "requires": { "invariant": "^2.2.4" } }, - "expo-mail-composer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-mail-composer/-/expo-mail-composer-5.0.1.tgz", - "integrity": "sha512-ps927F7BY+m1BzVqDYamIgVxmcaE8USQmBXNoligDzl/VqyKhS+68FijkLRdowRo5zGdXIHiZF9EW1Cvbcm3Vw==", - "requires": { - "lodash": "^4.6.0", - "query-string": "^6.2.0" - } - }, - "expo-media-library": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-media-library/-/expo-media-library-5.0.1.tgz", - "integrity": "sha512-b5DHS+Ga8dyhw1+xQDB7Dafiea1jd91iOXbaE8LWg+awUDXTh6Ss14KMh8WI2mE3DVbBkcuLPTQ9NXlM2Oz67Q==" - }, - "expo-payments-stripe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-payments-stripe/-/expo-payments-stripe-5.0.1.tgz", - "integrity": "sha512-U1SP9QPrCUUgYURGysUsQN1VEHs88ok+vTd30vsdbKq3TkguIPc0HuL/p2VE48KpVuykLKTmD4j9Ey56qUUiLg==" - }, "expo-permissions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-5.0.1.tgz", - "integrity": "sha512-cOg9f9TaV8grORTwLSuoPfviDGcJSALjaALvxdmQD5ujPW6lxO6Ofd/s4/dV4L3lJww4HXiurjPJnT5yo+3ydw==" - }, - "expo-print": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-print/-/expo-print-5.0.1.tgz", - "integrity": "sha512-cQ7kyKoAfL52iRnXH7b0aHNmZdORURBXZLZ6z495XG/S52nox1GtuXdZSSfo9qptDwWaKbsetVzDAM58LVIoWw==" - }, - "expo-random": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-5.0.1.tgz", - "integrity": "sha512-VUPDd8Ds1adaQoaCxTvEsSdiE02LuszazkxwvDjykE+oPG9CYOcc19yvk8wivyciEkMnjD5zYkM67ystFELGXw==", - "requires": { - "base64-js": "^1.3.0" - } - }, - "expo-secure-store": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-5.0.1.tgz", - "integrity": "sha512-iA0/MJCHZk9z5OdxEXH5TYEDKq5sEIdASBr/7XkdCl+gB7+3peSeEXsXPRK+TK/Tzo9JGgfYrXha/CsVC9nD5A==" - }, - "expo-sensors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-sensors/-/expo-sensors-5.0.1.tgz", - "integrity": "sha512-mPpcPKUDeVO/vtpHnHix3yczxlYWv+cHw6w2aeVem3zaXGeg+1pHH95h/pzUgO4B7Y8lci+OnozA5YFy0yNyjA==", - "requires": { - "invariant": "^2.2.4" - } - }, - "expo-sharing": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-sharing/-/expo-sharing-5.0.1.tgz", - "integrity": "sha512-oBrRpVnhPxDb6qgC4RkcGz82JfTz7ao4uI+/DC8OJGUkRyCczVHuDG0v4R6jLMPld8dkjAxUmUkba7JVgg53FQ==" - }, - "expo-sms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-sms/-/expo-sms-5.0.1.tgz", - "integrity": "sha512-rGZkTsCLqbigUD7OKYHEt9vYBMG43ne+j8NvWbBwl1DFtkPcAZQIBN7pMFnXjRY0FLZnFePFDeYpboGquyQrgQ==" - }, - "expo-speech": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/expo-speech/-/expo-speech-5.0.2.tgz", - "integrity": "sha512-AbLIM0lPUA9X+iCq20W7KW4Z/k6CvtKdCHZXEzJXqmm45YnCqENpSmrhVwePG6Lem6MJ4Bzg4DTC0UXl57SD4Q==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-6.0.0.tgz", + "integrity": "sha512-O+RdyfGiq7i+5Vi9fE38DgKn436lNWiqhnS5/Z7CC00bmKahhjVMNDbZvNn/nrdRGyaPneJk1Co1s1sexSnv0A==" }, "expo-sqlite": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-sqlite/-/expo-sqlite-5.0.1.tgz", - "integrity": "sha512-NQXFcjSScpjCRAC+oKQ1Fn+RYSLkYHudaiJSG5wqN28pKqg3yLqjpPG2gDbq/PvgHYkjZXBnvrNgmddjFzDyIQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-sqlite/-/expo-sqlite-6.0.0.tgz", + "integrity": "sha512-M8heovLeJoq7tb4f7PipDu0dqHSklbI2EqNvDM8XLjSZdSv6CqCMHg5Kvx0L9CLYTchjzktDPClZKjgvtGOVug==", "requires": { "@expo/websql": "^1.0.1", "@types/websql": "^0.0.27", "lodash": "^4.17.11" } }, - "expo-task-manager": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/expo-task-manager/-/expo-task-manager-5.0.1.tgz", - "integrity": "sha512-ManMdoYH++K2ZaRCYc2hfi1N33XTzjn1o1O8Qkj8JH49VssOzW9TF1URw2j+qRt3iN5Iba4+ECONoi++GoCiqw==" - }, "expo-web-browser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-5.0.3.tgz", - "integrity": "sha512-Etue3QfBki4shFChsVd3Of3xvY7KsXoNINKvckiRCmcCjOC5bGiZ+Grhf70YEHVUB2bEcAUeZhC9Tg0Ip2tdEQ==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-6.0.0.tgz", + "integrity": "sha512-7XkFPd4PRlVP6FscTnn78c0tY6+yLzb2Eai/ed+l+LB+hZWuhyY3ONzYM7/IKAiPmfhZr4Qs80vIa7iiavti8A==" }, "express": { "version": "4.17.1", @@ -4848,6 +4592,12 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, @@ -5888,25 +5638,21 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": false, - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "bundled": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "resolved": false, - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "bundled": true }, "aproba": { "version": "1.2.0", - "resolved": false, - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "bundled": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": false, - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "bundled": true, "optional": true, "requires": { "delegates": "^1.0.0", @@ -5915,13 +5661,11 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": false, - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "bundled": true }, "brace-expansion": { "version": "1.1.11", - "resolved": false, - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "bundled": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5929,35 +5673,29 @@ }, "chownr": { "version": "1.1.1", - "resolved": false, - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "bundled": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "resolved": false, - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "bundled": true }, "concat-map": { "version": "0.0.1", - "resolved": false, - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "resolved": false, - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "bundled": true }, "core-util-is": { "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "bundled": true, "optional": true }, "debug": { "version": "4.1.1", - "resolved": false, - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "bundled": true, "optional": true, "requires": { "ms": "^2.1.1" @@ -5965,26 +5703,22 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": false, - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "bundled": true, "optional": true }, "delegates": { "version": "1.0.0", - "resolved": false, - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "bundled": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "resolved": false, - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bundled": true, "optional": true }, "fs-minipass": { "version": "1.2.5", - "resolved": false, - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "bundled": true, "optional": true, "requires": { "minipass": "^2.2.1" @@ -5992,14 +5726,12 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": false, - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "bundled": true, "optional": true }, "gauge": { "version": "2.7.4", - "resolved": false, - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "bundled": true, "optional": true, "requires": { "aproba": "^1.0.3", @@ -6014,8 +5746,7 @@ }, "glob": { "version": "7.1.3", - "resolved": false, - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "bundled": true, "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -6028,14 +5759,12 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": false, - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "bundled": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "resolved": false, - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "bundled": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -6043,8 +5772,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": false, - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "bundled": true, "optional": true, "requires": { "minimatch": "^3.0.4" @@ -6052,8 +5780,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": false, - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "bundled": true, "optional": true, "requires": { "once": "^1.3.0", @@ -6062,46 +5789,39 @@ }, "inherits": { "version": "2.0.3", - "resolved": false, - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "bundled": true }, "ini": { "version": "1.3.5", - "resolved": false, - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "bundled": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": false, - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "bundled": true, "requires": { "number-is-nan": "^1.0.0" } }, "isarray": { "version": "1.0.0", - "resolved": false, - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "bundled": true, "optional": true }, "minimatch": { "version": "3.0.4", - "resolved": false, - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "bundled": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "resolved": false, - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "bundled": true }, "minipass": { "version": "2.3.5", - "resolved": false, - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "bundled": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -6109,8 +5829,7 @@ }, "minizlib": { "version": "1.2.1", - "resolved": false, - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "bundled": true, "optional": true, "requires": { "minipass": "^2.2.1" @@ -6118,22 +5837,19 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": false, - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "bundled": true, "requires": { "minimist": "0.0.8" } }, "ms": { "version": "2.1.1", - "resolved": false, - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "bundled": true, "optional": true }, "needle": { "version": "2.3.0", - "resolved": false, - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "bundled": true, "optional": true, "requires": { "debug": "^4.1.0", @@ -6143,8 +5859,7 @@ }, "node-pre-gyp": { "version": "0.12.0", - "resolved": false, - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "bundled": true, "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -6161,8 +5876,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": false, - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "bundled": true, "optional": true, "requires": { "abbrev": "1", @@ -6171,14 +5885,12 @@ }, "npm-bundled": { "version": "1.0.6", - "resolved": false, - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "bundled": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "resolved": false, - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -6187,8 +5899,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": false, - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "bundled": true, "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -6199,39 +5910,33 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": false, - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "bundled": true }, "object-assign": { "version": "4.1.1", - "resolved": false, - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "bundled": true, "optional": true }, "once": { "version": "1.4.0", - "resolved": false, - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "bundled": true, "requires": { "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", - "resolved": false, - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "bundled": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": false, - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "bundled": true, "optional": true }, "osenv": { "version": "0.1.5", - "resolved": false, - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "bundled": true, "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -6240,20 +5945,17 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": false, - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "bundled": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "resolved": false, - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "bundled": true, "optional": true }, "rc": { "version": "1.2.8", - "resolved": false, - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "bundled": true, "optional": true, "requires": { "deep-extend": "^0.6.0", @@ -6264,16 +5966,14 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": false, - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "bundled": true, "optional": true } } }, "readable-stream": { "version": "2.3.6", - "resolved": false, - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "bundled": true, "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -6287,8 +5987,7 @@ }, "rimraf": { "version": "2.6.3", - "resolved": false, - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "bundled": true, "optional": true, "requires": { "glob": "^7.1.3" @@ -6296,43 +5995,36 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": false, - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "bundled": true }, "safer-buffer": { "version": "2.1.2", - "resolved": false, - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "bundled": true, "optional": true }, "sax": { "version": "1.2.4", - "resolved": false, - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "bundled": true, "optional": true }, "semver": { "version": "5.7.0", - "resolved": false, - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "bundled": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "resolved": false, - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "bundled": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "resolved": false, - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "bundled": true, "optional": true }, "string-width": { "version": "1.0.2", - "resolved": false, - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "bundled": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6341,8 +6033,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": false, - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "bundled": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -6350,22 +6041,19 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": false, - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bundled": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", - "resolved": false, - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "bundled": true, "optional": true }, "tar": { "version": "4.4.8", - "resolved": false, - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "bundled": true, "optional": true, "requires": { "chownr": "^1.1.1", @@ -6379,14 +6067,12 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": false, - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "bundled": true, "optional": true }, "wide-align": { "version": "1.1.3", - "resolved": false, - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "bundled": true, "optional": true, "requires": { "string-width": "^1.0.2 || 2" @@ -6394,21 +6080,18 @@ }, "wrappy": { "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "bundled": true }, "yallist": { "version": "3.0.3", - "resolved": false, - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "bundled": true } } }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gauge": { "version": "1.2.7", @@ -6559,15 +6242,10 @@ } } }, - "google-maps-infobox": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-2.0.0.tgz", - "integrity": "sha512-hTuWmWZZSOxf5D/z7l3/hTF1grgRvLG53BEKMdjiKOG+FcK/kH7vqseUeyIU9Zj2ZIqKTOaro0nknxpAuRq4Vw==" - }, "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "growly": { "version": "1.3.0", @@ -6624,8 +6302,7 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "has-unicode": { "version": "2.0.1", @@ -6747,9 +6424,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, "hsl-regex": { "version": "1.0.0", @@ -6858,6 +6535,12 @@ "readable-stream": "^3.1.1" }, "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, "readable-stream": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", @@ -7045,6 +6728,12 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -7410,9 +7099,9 @@ } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" }, "jest-worker": { "version": "24.0.0-alpha.6", @@ -7596,9 +7285,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -7628,22 +7317,22 @@ "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" }, "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0", + "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "^3.0.0" } }, "lodash.throttle": { @@ -7665,22 +7354,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lottie-ios": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/lottie-ios/-/lottie-ios-2.5.0.tgz", - "integrity": "sha1-VcgI54XUppM7DBCzlVMLFwmLBd4=" - }, - "lottie-react-native": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-2.6.1.tgz", - "integrity": "sha512-Z+6lARvWWhB8n8OSmW7/aHkV71ftsmO7hYXFt0D+REy/G40mpkQt1H7Cdy1HqY4cKAp7EYDWVxhu5+fkdD6o4g==", - "requires": { - "invariant": "^2.2.2", - "lottie-ios": "2.5.0", - "prop-types": "^15.5.10", - "react-native-safe-module": "^1.1.0" - } - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -7743,16 +7416,6 @@ "object-visit": "^1.0.0" } }, - "marker-clusterer-plus": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/marker-clusterer-plus/-/marker-clusterer-plus-2.1.4.tgz", - "integrity": "sha1-+O/3TVmdqzt9Dj/tUmTqDnBPXWc=" - }, - "markerwithlabel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.2.tgz", - "integrity": "sha512-C/cbm1A0h/u54gwHk5ZJNdUU3V3+1BbCpRPMsMyFA7vF4yL+aB4rWpxACz29TpQ+cTg6/iQroExh0PMSRGtQFg==" - }, "math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", @@ -7778,9 +7441,9 @@ } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, "media-typer": { @@ -7827,9 +7490,9 @@ } }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", "dev": true }, "methods": { @@ -8528,9 +8191,9 @@ } }, "node-abi": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.9.0.tgz", - "integrity": "sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz", + "integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==", "dev": true, "optional": true, "requires": { @@ -8602,9 +8265,9 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "requires": { "growly": "^1.3.0", "is-wsl": "^1.1.0", @@ -8614,9 +8277,9 @@ } }, "node-releases": { - "version": "1.1.24", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.24.tgz", - "integrity": "sha512-wym2jptfuKowMmkZsfCSTsn8qAVo8zm+UiQA6l5dNqUcpfChZSnS/vbbpOeXczf+VdPhutxh+99lWHhdd6xKzg==", + "version": "1.1.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.27.tgz", + "integrity": "sha512-9iXUqHKSGo6ph/tdXVbHFbhRVQln4ZDTIBJCzsa90HimnBYc5jw8RWYt4wBYFHehGyC3koIz5O4mb2fHrbPOuA==", "requires": { "semver": "^5.3.0" } @@ -8728,8 +8391,7 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -8750,7 +8412,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -9172,9 +8833,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "requires": { "p-try": "^2.0.0" } @@ -10023,14 +9684,14 @@ "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz", + "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w==" }, "query-string": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.1.tgz", - "integrity": "sha512-g6y0Lbq10a5pPQpjlFuojfMfV1Pd2Jw9h75ypiYPPia3Gcq2rgkKiIwbkS6JxH7c5f5u/B/sB+d13PU+g1eu4Q==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.2.tgz", + "integrity": "sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -10153,14 +9814,14 @@ } }, "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", + "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.13.3" } }, "react-clone-referenced-element": { @@ -10205,6 +9866,15 @@ "text-table": "0.2.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -10239,9 +9909,9 @@ } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -10314,9 +9984,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -10370,9 +10040,9 @@ } }, "react-devtools-core": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.1.tgz", - "integrity": "sha512-I/LSX+tpeTrGKaF1wXSfJ/kP+6iaP2JfshEjW8LtQBdz6c6HhzOJtjZXhqOUrAdysuey8M1/JgPY1flSVVt8Ig==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.3.tgz", + "integrity": "sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==", "requires": { "shell-quote": "^1.6.1", "ws": "^3.3.1" @@ -10396,14 +10066,25 @@ } }, "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.15.0" + }, + "dependencies": { + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } } }, "react-error-overlay": { @@ -10412,28 +10093,10 @@ "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==", "dev": true }, - "react-google-maps": { - "version": "9.4.5", - "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", - "integrity": "sha512-8z5nX9DxIcBCXuEiurmRT1VXVwnzx0C6+3Es6lxB2/OyY2SLax2/LcDu6Aldxnl3HegefTL7NJzGeaKAJ61pOA==", - "requires": { - "babel-runtime": "^6.11.6", - "can-use-dom": "^0.1.0", - "google-maps-infobox": "^2.0.0", - "invariant": "^2.2.1", - "lodash": "^4.16.2", - "marker-clusterer-plus": "^2.1.4", - "markerwithlabel": "^2.0.1", - "prop-types": "^15.5.8", - "recompose": "^0.26.0", - "scriptjs": "^2.5.8", - "warning": "^3.0.0" - } - }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -10556,56 +10219,41 @@ } }, "react-native-branch": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/react-native-branch/-/react-native-branch-2.2.5.tgz", - "integrity": "sha1-QHTdY7SXPmOX2c5Q6XtXx3pRjp0=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-native-branch/-/react-native-branch-3.0.1.tgz", + "integrity": "sha512-vbcYxPZlpF5f39GAEUF8kuGQqCNeD3E6zEdvtOq8oCGZunHXlWlKgAS6dgBKCvsHvXgHuMtpvs39VgOp8DaKig==" }, "react-native-gesture-handler": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.2.1.tgz", - "integrity": "sha512-c1+L72Vjc/bwHKcIJ8a2/88SW9l3/axcAIpg3zB1qTzwdCxHZJeQn6d58cQXHPepxFBbgfTCo60B7SipSfo+zw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.3.0.tgz", + "integrity": "sha512-ASRFIXBuKRvqlmwkWJhV8yP2dTpvcqVrLNpd7FKVBFHYWr6SAxjGyO9Ik8w1lAxDhMlRP2IcJ9p9eq5X2WWeLQ==", "requires": { "hoist-non-react-statics": "^2.3.1", "invariant": "^2.2.2", "prop-types": "^15.5.10" } }, - "react-native-maps": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-0.24.2.tgz", - "integrity": "sha512-1iNIDikp2dkCG+8DguaEviYZiMSYyvwqYT7pO2YTZvuFRDSc/P9jXMhTUnSh4wNDlEeQ47OJ09l0pwWVBZ7wxg==" - }, "react-native-reanimated": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.0.1.tgz", - "integrity": "sha512-RENoo6/sJc3FApP7vJ1Js7WyDuTVh97bbr5aMjJyw3kqpR2/JDHyL/dQFfOvSSAc+VjitpR9/CfPPad7tLRiIA==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.2.0.tgz", + "integrity": "sha512-vkWRHrPK5qfHP/ZawlRoo38oeYe9NZaaOH/lmFxRcsKzaSK6x3H5ZPXI8lK6MfTLveqwo1QhJje3zIKXO4nQQw==" }, "react-native-safe-area-view": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.5.tgz", - "integrity": "sha512-1NxWK1G0gzwCOuyNV/zf4n18s6FWsiqgwkzU3P9C0Iu8AErjhstK1jUqpRwzLH8+/7hGLsrQedmn+ZbQTOrJPg==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.7.tgz", + "integrity": "sha512-fmuBYpvKDJK33bimo4JXrK2BN2CGw7nof1y1LDRgzqv+FZ3eADSDGshprN8WeQqSZjQ20hJx1CiWk28Edg/v4Q==", "requires": { "hoist-non-react-statics": "^2.3.1" } }, - "react-native-safe-module": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/react-native-safe-module/-/react-native-safe-module-1.2.0.tgz", - "integrity": "sha1-ojgkyiTtwpAZE2lKdmRkdRE9Vw0=", + "react-native-screens": { + "version": "1.0.0-alpha.23", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-1.0.0-alpha.23.tgz", + "integrity": "sha512-tOxHGQUN83MTmQB4ghoQkibqOdGiX4JQEmeyEv96MKWO/x8T2PJv84ECUos9hD3blPRQwVwSpAid1PPPhrVEaw==", "requires": { - "dedent": "^0.6.0" + "debounce": "^1.2.0" } }, - "react-native-screens": { - "version": "1.0.0-alpha.22", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-1.0.0-alpha.22.tgz", - "integrity": "sha512-kSyAt0AeVU6N7ZonfV6dP6iZF8B7Bce+tk3eujXhzBGsLg0VSLnU7uE9VqJF0xdQrHR91ZjGgVMieo/8df9KTA==" - }, - "react-native-svg": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.4.0.tgz", - "integrity": "sha512-IVJlVbS2dAPerPr927fEi4uXzrPXzlra5ddgyJXZZ2IKA2ZygyYWFZDM+vsQs+Vj20CfL8nOWszQQV57vdQgFg==" - }, "react-native-tab-view": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-1.4.1.tgz", @@ -10620,9 +10268,9 @@ "integrity": "sha512-yO9vWi/11m2hEJl8FrW1SMeVzFfPtMKh20MUInGqlsL0H8Ya2JGGlFfrBzx1KiFR2hFb5OdsTLYNtcVZtJ6pLQ==" }, "react-native-web": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.11.4.tgz", - "integrity": "sha512-xuiHd9mxtOUlCY/CY8UO25a3cX5u3qsEdhl7zXLDNbJ0nu1Tf98GsplBZgdnDB0q/LpYVPQWmjnTEerncsO2vw==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.11.7.tgz", + "integrity": "sha512-w1KAxX2FYLS2GAi3w3BnEZg/IUu7FdgHnLmFKHplRnHMV3u1OPB2EVA7ndNdfu7ds4Rn2OZjSXoNh6F61g3gkA==", "requires": { "array-find-index": "^1.0.2", "create-react-class": "^15.6.2", @@ -10658,19 +10306,10 @@ } } }, - "react-native-webview": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-5.8.1.tgz", - "integrity": "sha512-b6pSvmjoiWtcz6YspggW02X+BRXJWuquHwkh37BRx1NMW1iwMZA31SnFQvTpPzWYYIb9WF/mRsy2nGtt9C6NIg==", - "requires": { - "escape-string-regexp": "1.0.5", - "invariant": "2.2.4" - } - }, "react-navigation": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.11.0.tgz", - "integrity": "sha512-wlPcDtNiIdPeYxNQ/MN4arY5Xe9EphD2QVpRuvvuPWW+BamF3AJaIy060r3Yz59DODAoWllscabat/yqnih8Tg==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.11.1.tgz", + "integrity": "sha512-n64HxLG5s5ucVFo1Gs+D9ujChhHDd98lpQ1p27wL7gq8V1PaRJMvsBEIsguhtc2rTIL/TWDynOesXQDG+Eg6FQ==", "requires": { "@react-navigation/core": "~3.4.1", "@react-navigation/native": "~3.5.0", @@ -11081,17 +10720,6 @@ } } }, - "recompose": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", - "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", - "requires": { - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "symbol-observable": "^1.0.4" - } - }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -11115,14 +10743,14 @@ } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "requires": { "private": "^0.1.6" } @@ -11145,17 +10773,17 @@ } }, "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==" + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", + "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==" }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", + "regenerate-unicode-properties": "^8.1.0", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -11237,9 +10865,9 @@ "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "requires": { "path-parse": "^1.0.6" } @@ -11281,9 +10909,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -11303,11 +10931,6 @@ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" }, - "rtl-detect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.2.tgz", - "integrity": "sha512-5X1422hvphzg2a/bo4tIDbjFjbJUOaPZwqE6dnyyxqwFqfR+tBcvfqapJr0o0VygATVCGKiODEewhZtKF+90AA==" - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -11670,15 +11293,10 @@ "ajv-keywords": "^3.1.0" } }, - "scriptjs": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", - "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" - }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "send": { "version": "0.17.1", @@ -11850,9 +11468,9 @@ } }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "optional": true }, @@ -11973,9 +11591,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "optional": true, "requires": { @@ -12304,9 +11922,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -12348,9 +11966,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "split-on-first": { "version": "1.1.0", @@ -12586,17 +12204,16 @@ } }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", "dev": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", + "css-tree": "1.0.0-alpha.33", "csso": "^3.5.1", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", @@ -12637,11 +12254,6 @@ } } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -12749,14 +12361,14 @@ } }, "terser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.2.tgz", - "integrity": "sha512-IWLuJqTvx97KP3uTYkFVn93cXO+EtlzJu8TdJylq+H0VBDlPMIfQA9MBS5Vc5t3xTEUG1q0hIfHMpAP2R+gWTw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.4.tgz", + "integrity": "sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==", "dev": true, "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -12768,28 +12380,71 @@ } }, "terser-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", "dev": true, "requires": { - "cacache": "^11.3.2", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", - "loader-utils": "^1.2.3", "schema-utils": "^1.0.0", "serialize-javascript": "^1.7.0", "source-map": "^0.6.1", - "terser": "^4.0.0", - "webpack-sources": "^1.3.0", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", "worker-farm": "^1.7.0" }, "dependencies": { + "cacache": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", + "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true } } }, @@ -12824,9 +12479,9 @@ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -13174,49 +12829,54 @@ "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" }, "unimodules-barcode-scanner-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-2.0.1.tgz", - "integrity": "sha512-Rp3428am/4vCcvVsreqaaGcJNcjtVOMDHVX0yjF2yr8QfD07UVzRYo8ZBhQHc/hYSVWwe+19Pbmk0b+sTnTgkg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-3.0.0.tgz", + "integrity": "sha512-EtJBfKU5VgZbyIfIZwyWfUo59pIgW6s7YGzlpj9jk4UWKyqqhYT/FoaZqudCJcPcfh2eYxkc9VxBGieRBpQrzg==" }, "unimodules-camera-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-2.0.1.tgz", - "integrity": "sha512-m+sYhFFahaPWYl0aVCq9VU8u6CiLVI4cSywYl9rwbIMAifi83rO5GUKKDIaMfAqMj9z77i/RF53x3nVdpclpyA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-3.0.0.tgz", + "integrity": "sha512-STjf1FAdYlN27ilJSR4kIUYyHTPrkQSR/mEg4S4pZX6tazmcuG2KzLCXCoV+xMWsrwmsMBjgLzw6yzg87N5Ydw==" }, "unimodules-constants-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-2.0.1.tgz", - "integrity": "sha512-Ue/5CpfHvc9jrVc9bvDRgMVMQznvgpJ27hQoNia0sUhsMtHDvnFhXrcNfLO4tG5zGgcda6fuKtTMz91vLz8uqw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-3.0.0.tgz", + "integrity": "sha512-S4ap11UJH7D+Y4fXC7DyMNAkqIWD8B7rNCTS30wAF9beHXMZa1Od66rkJgSHqFRURy06h+Jr7qfJm9H5mtMz8Q==" }, "unimodules-face-detector-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-2.0.1.tgz", - "integrity": "sha512-uM25vRESCRXwhmgVlkiDhxx1R0yGFjoiTYjqG7bfqzSnc964HR3Qy5KaWvJUOtFpLun50pfBw+lzutqFnshCpg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-3.0.0.tgz", + "integrity": "sha512-fMQ3ZnhdOjbQ5ZXW62s/t1bbqBaenxzVIcgVEcwvLIFek0mx/EMHFkySgFkFjU11icUvaPEXW1yJtkK4QEpLhg==" }, "unimodules-file-system-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-2.0.1.tgz", - "integrity": "sha512-1z//JY7ifBxq3e4dgjID2JgX3uTYEZqVFS1PqlVb9FEmdD+nvuGI2w+ohe+3Y20FYX1lZrffGCeT/Si3xa4tkA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-3.0.0.tgz", + "integrity": "sha512-LkLIKRE3CwsXLRFw8vx0++Cfjj+pAvvidVb7yhGWKFmNlVaWUW9Z8jkhFLBFXDsGFAOU69bUTrz25jmB2MRt0Q==" }, "unimodules-font-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-2.0.1.tgz", - "integrity": "sha512-LirIkEZyBJMakQkYwSZBBbqXWY5KFBbBF97CCAaV/uzp6UaNawExD8kYhexajM3+uNdIPlnCIfdqQbpbXBdkVg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-3.0.0.tgz", + "integrity": "sha512-DOQI0uTn7CGvA9lNUuiTWfQYuKQEM8LZKn6gNS8G+HVHVb+TZl/37qdhuoMBi5jkAZ4VOD/GpgnPv8qr0pJi1Q==" }, "unimodules-image-loader-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-2.0.1.tgz", - "integrity": "sha512-o6HHXNcWmDiT8NhBR/wRB/MTf64sQ3c9sSf13BMvmKt2nt64lkhzQC7IVDl1oxx2ejHTfwhC/XK/EafaJvvHWQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-3.0.0.tgz", + "integrity": "sha512-hC/VWdT33GkOZ4FLaqPoKGNKxhw+miFhM+7Re57snWIWYewSv0lRvCqqwc/hbGLocvd2qF3YYrBx9woqPI8NzA==" }, "unimodules-permissions-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-2.0.1.tgz", - "integrity": "sha512-eqs6Bub19RiUHxCMrrdyro+xOpab1reHjGHBBoMOndY4bKkARpKDN7x1gDxJv3HCtP8a2hAm0xae0cDZ5S38Tw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-3.0.0.tgz", + "integrity": "sha512-rfyGDBMtO8IOlk9hJN44EKz7vk6nt/PXByAumsptRdgsd+knokMlaWGYatrxKW2g/08WUbEkgKspvMxjJ0M1Tg==" }, "unimodules-sensors-interface": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-2.0.1.tgz", - "integrity": "sha512-JvR04JZHqt+EJiGL/9KWsaTpTJQ53qqNMmZAC+MX6NUgnz1bWiUw9eY9MAAIaQbmorCwKyCqfpX9twTUM8z1yA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-3.0.0.tgz", + "integrity": "sha512-1JJT/lqCfxHqUSJc3o6b0WUply/lFOJjcuzN0QcAfmdAW8d+lEXA7BJ7DV/Nn/OKpMlHriEyxkM+FoGoXKJJcg==" + }, + "unimodules-task-manager-interface": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-3.0.0.tgz", + "integrity": "sha512-og4UiUOxc7PqT8uQQqXY+pOBvdS204xmgyUG2AjM2L3kVsw/6WH4pIW084WG8/e9M5SLsSXdrjecIUBQ/zLf8w==" }, "union-value": { "version": "1.0.1", @@ -13496,14 +13156,6 @@ "makeerror": "1.0.x" } }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - }, "watch": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", @@ -13858,9 +13510,9 @@ } }, "webpack-bundle-analyzer": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", - "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.4.1.tgz", + "integrity": "sha512-Bs8D/1zF+17lhqj2OYmzi7HEVYqEVxu7lCO9Ff8BwajenOU0vAwEoV8e4ICCPNZAcqR1PCR/7o2SkW+cnCmF0A==", "dev": true, "requires": { "acorn": "^6.0.7", @@ -13872,16 +13524,16 @@ "express": "^4.16.3", "filesize": "^3.6.1", "gzip-size": "^5.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.15", "mkdirp": "^0.5.1", "opener": "^1.5.1", "ws": "^6.0.0" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true }, "ws": { @@ -13896,12 +13548,12 @@ } }, "webpack-deep-scope-plugin": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/webpack-deep-scope-plugin/-/webpack-deep-scope-plugin-1.6.1.tgz", - "integrity": "sha512-S/O7ifv0iYOc3JBvKIvt635qLT1ok7DUE/GiYjZNWX3JRIYidj8uoPW61dumCLMcwWvpsCDUZE7QECpkK2a00Q==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/webpack-deep-scope-plugin/-/webpack-deep-scope-plugin-1.6.2.tgz", + "integrity": "sha512-S5ZM1i7oTIVPIS1z/Fu41tqFzaXpy8vZnwEDC9I7NLj5XD8GGrDZbDXtG5FCGkHPGxtAzF4O21DKZZ76vpBGzw==", "dev": true, "requires": { - "deep-scope-analyser": "^1.6.1" + "deep-scope-analyser": "^1.7.0" } }, "webpack-log": { @@ -13956,9 +13608,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -14291,9 +13943,9 @@ "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "3.2.1", diff --git a/src/playground/package.json b/src/playground/package.json index 4b519a14e..7377337cd 100644 --- a/src/playground/package.json +++ b/src/playground/package.json @@ -7,12 +7,14 @@ }, "dependencies": { "@eva-design/eva": "1.0.0", - "expo": "^33.0.6", - "react": "^16.8.3", + "expo": "^34.0.3", + "react": "16.8.3", "react-dom": "^16.8.6", "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz", + "react-native-gesture-handler": "^1.3.0", + "react-native-reanimated": "^1.1.0", "react-native-web": "^0.11.4", - "react-navigation": "^3.11.0" + "react-navigation": "^3.11.1" }, "devDependencies": { "@expo/webpack-config": "^0.5.11", diff --git a/src/playground/src/app.component.tsx b/src/playground/src/app.component.tsx index 6e716ac26..861706a4d 100644 --- a/src/playground/src/app.component.tsx +++ b/src/playground/src/app.component.tsx @@ -1,14 +1,23 @@ import React from 'react'; import { mapping } from '@eva-design/eva'; +import { EvaIconsPack } from '@ui-kitten/eva-icons'; import { ApplicationProvider, ApplicationProviderElement, } from '@kitten/theme'; +import { IconRegistry } from '@kitten/ui'; +import { + AntDesignIconsPack, + FeatherIconsPack, + FontAwesomeIconsPack, + MaterialCommunityIconsPack, + MaterialIconsPack, +} from './icons'; import { Router } from './navigation'; import { + ThemeContext, ThemeKey, themes, - ThemeContext, } from './themes'; interface State { @@ -21,6 +30,15 @@ export default class App extends React.Component { theme: 'Eva Light', }; + private icons = [ + EvaIconsPack, + AntDesignIconsPack, + FeatherIconsPack, + FontAwesomeIconsPack, + MaterialIconsPack, + MaterialCommunityIconsPack, + ]; + private toggleTheme = (theme: string) => { this.setState({ theme }); }; @@ -30,8 +48,12 @@ export default class App extends React.Component { + + value={{ + name: this.state.theme, + toggleTheme: this.toggleTheme, + }}> diff --git a/src/playground/src/icons/ant.tsx b/src/playground/src/icons/ant.tsx new file mode 100644 index 000000000..46d688221 --- /dev/null +++ b/src/playground/src/icons/ant.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { AntDesign } from '@expo/vector-icons'; + +export const AntDesignIconsPack = { + name: 'ant', + icons: createIconsMap(), +}; + +function createIconsMap() { + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} + +function IconProvider(name) { + return { + toReactElement: (props) => AntDesignIcon({ name, ...props }), + }; +} + +function AntDesignIcon(props) { + const { name, style } = props; + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} diff --git a/src/playground/src/icons/feather.tsx b/src/playground/src/icons/feather.tsx new file mode 100644 index 000000000..7ec770e5f --- /dev/null +++ b/src/playground/src/icons/feather.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { Feather } from '@expo/vector-icons'; + +export const FeatherIconsPack = { + name: 'feather', + icons: createIconsMap(), +}; + +function createIconsMap() { + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} + +function IconProvider(name) { + return { + toReactElement: (props) => FeatherIcon({ name, ...props }), + }; +} + +function FeatherIcon(props) { + const { name, style } = props; + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} diff --git a/src/playground/src/icons/fontAwesome.tsx b/src/playground/src/icons/fontAwesome.tsx new file mode 100644 index 000000000..d26931fba --- /dev/null +++ b/src/playground/src/icons/fontAwesome.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { FontAwesome } from '@expo/vector-icons'; +import { StyleSheet } from 'react-native'; + +export const FontAwesomeIconsPack = { + name: 'font-awesome', + icons: createIconsMap(), +}; + +function createIconsMap() { + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} + +function IconProvider(name) { + return { + toReactElement: (props) => FontAwesomeIcon({ name, ...props }), + }; +} + +function FontAwesomeIcon(props) { + const { name, style } = props; + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} diff --git a/src/playground/src/icons/index.ts b/src/playground/src/icons/index.ts new file mode 100644 index 000000000..c4ff77376 --- /dev/null +++ b/src/playground/src/icons/index.ts @@ -0,0 +1,5 @@ +export { AntDesignIconsPack } from './ant'; +export { FeatherIconsPack } from './feather'; +export { FontAwesomeIconsPack } from './fontAwesome'; +export { MaterialIconsPack } from './material'; +export { MaterialCommunityIconsPack } from './materialCommunity'; diff --git a/src/playground/src/icons/material.tsx b/src/playground/src/icons/material.tsx new file mode 100644 index 000000000..6b0ad7bdf --- /dev/null +++ b/src/playground/src/icons/material.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { MaterialIcons } from '@expo/vector-icons'; + +export const MaterialIconsPack = { + name: 'material', + icons: createIconsMap(), +}; + +function createIconsMap() { + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} + +function IconProvider(name) { + return { + toReactElement: (props) => MaterialIcon({ name, ...props }), + }; +} + +function MaterialIcon(props) { + const { name, style } = props; + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} diff --git a/src/playground/src/icons/materialCommunity.tsx b/src/playground/src/icons/materialCommunity.tsx new file mode 100644 index 000000000..786249d6f --- /dev/null +++ b/src/playground/src/icons/materialCommunity.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { MaterialCommunityIcons } from '@expo/vector-icons'; + +export const MaterialCommunityIconsPack = { + name: 'material-community', + icons: createIconsMap(), +}; + +function createIconsMap() { + return new Proxy({}, { + get(target, name) { + return IconProvider(name); + }, + }); +} + +function IconProvider(name) { + return { + toReactElement: (props) => MaterialCommunityIcon({ name, ...props }), + }; +} + +function MaterialCommunityIcon(props) { + const { name, style } = props; + const { height, tintColor, ...iconStyle } = StyleSheet.flatten(style); + return ( + + ); +} diff --git a/src/playground/src/navigation/navigation.component.tsx b/src/playground/src/navigation/navigation.component.tsx index 95771b53a..45116ce36 100644 --- a/src/playground/src/navigation/navigation.component.tsx +++ b/src/playground/src/navigation/navigation.component.tsx @@ -24,6 +24,9 @@ import { LayoutContainer, SampleContainer, ModalContainer, + DropdownContainer, + SpinnerContainer, + IconContainer, } from '../ui/screen'; export interface RouteType { @@ -37,12 +40,15 @@ const AppNavigator = createStackNavigator({ ['Button']: ButtonContainer, ['Button Group']: ButtonGroupContainer, ['Checkbox']: CheckBoxContainer, + ['Dropdown']: DropdownContainer, + ['Icon']: IconContainer, ['Input']: InputContainer, ['Layout']: LayoutContainer, ['List']: ListContainer, ['Popover']: PopoverContainer, ['Radio']: RadioContainer, ['Radio Group']: RadioGroupContainer, + ['Spinner']: SpinnerContainer, ['Tab View']: TabViewContainer, ['Tooltip']: TooltipContainer, ['Text']: TextContainer, diff --git a/src/playground/src/ui/screen/button/type.tsx b/src/playground/src/ui/screen/button/type.tsx index 6aa4cd49d..f34b31fa7 100644 --- a/src/playground/src/ui/screen/button/type.tsx +++ b/src/playground/src/ui/screen/button/type.tsx @@ -10,12 +10,10 @@ import { ComponentShowcaseSetting, } from '../common/type'; import { StyleType } from '@kitten/theme'; +import { Icon } from '@kitten/ui'; const IconElement = (style: StyleType): React.ReactElement => ( - + ); const defaultButton: ComponentShowcaseItem = { diff --git a/src/playground/src/ui/screen/common/showcaseItem.component.tsx b/src/playground/src/ui/screen/common/showcaseItem.component.tsx index 541d849e5..3e039faa5 100644 --- a/src/playground/src/ui/screen/common/showcaseItem.component.tsx +++ b/src/playground/src/ui/screen/common/showcaseItem.component.tsx @@ -69,6 +69,7 @@ export const ShowcaseItem = withStyles(ShowcaseItemComponent, (theme: ThemeType) titleLabel: { minWidth: 128, fontSize: 13, + textAlign: 'left', }, element: {}, })); diff --git a/src/playground/src/ui/screen/common/showcaseSection.component.tsx b/src/playground/src/ui/screen/common/showcaseSection.component.tsx index 6aad7b76c..7da330fc1 100644 --- a/src/playground/src/ui/screen/common/showcaseSection.component.tsx +++ b/src/playground/src/ui/screen/common/showcaseSection.component.tsx @@ -73,6 +73,7 @@ export const ShowcaseSection = withStyles(ShowcaseSectionComponent, (theme: Them marginVertical: 8, fontSize: 20, lineHeight: 28, + textAlign: 'left', }, item: { marginVertical: 8, diff --git a/src/playground/src/ui/screen/common/showcaseSettings.component.tsx b/src/playground/src/ui/screen/common/showcaseSettings.component.tsx index 2299e5124..f8ba0a36c 100644 --- a/src/playground/src/ui/screen/common/showcaseSettings.component.tsx +++ b/src/playground/src/ui/screen/common/showcaseSettings.component.tsx @@ -1,8 +1,10 @@ import React from 'react'; import { + I18nManager, View, ViewProps, } from 'react-native'; +import { Updates } from 'expo'; import { ThemedComponentProps, ThemeType, @@ -10,6 +12,7 @@ import { } from '@kitten/theme'; import { Button, + CheckBox, OverflowMenu, OverflowMenuItemType, } from '@kitten/ui'; @@ -98,6 +101,12 @@ class ShowcaseSettingsComponent extends React.Component { + I18nManager.forceRTL(!I18nManager.isRTL); + I18nManager.allowRTL(I18nManager.isRTL); + Updates.reload(); + }; + public render(): React.ReactNode { const { style, themedStyle } = this.props; @@ -110,7 +119,7 @@ class ShowcaseSettingsComponent extends React.Component ); } @@ -145,6 +159,6 @@ export const ShowcaseSettings = withStyles(ShowcaseSettingsComponent, (theme: Th flexDirection: 'row', justifyContent: 'space-evenly', paddingVertical: 16, - backgroundColor: theme['background-basic-color-1'], + backgroundColor: theme['background-basic-color-2'], }, })); diff --git a/src/playground/src/ui/screen/dropdown/dropdown.container.tsx b/src/playground/src/ui/screen/dropdown/dropdown.container.tsx new file mode 100644 index 000000000..8072181e4 --- /dev/null +++ b/src/playground/src/ui/screen/dropdown/dropdown.container.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { + DropdownProps, + DropdownElement, +} from '@kitten/ui'; +import { ShowcaseContainer } from '../common/showcase.container'; +import { DropdownShowcase } from './dropdownShowcase.component'; +import { + dropdownShowcase, + dropdownSettings, +} from './type'; + +export class DropdownContainer extends React.Component { + + private renderItem = (props: DropdownProps): DropdownElement => { + return ( + + ); + }; + + public render(): React.ReactNode { + return ( + + + ); + } +} diff --git a/src/playground/src/ui/screen/dropdown/dropdownShowcase.component.tsx b/src/playground/src/ui/screen/dropdown/dropdownShowcase.component.tsx new file mode 100644 index 000000000..342bbfb23 --- /dev/null +++ b/src/playground/src/ui/screen/dropdown/dropdownShowcase.component.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { + Dropdown, + DropdownOption, + DropdownProps, + DropdownElement, +} from '@kitten/ui'; + +interface DropdownShowcaseComponentState { + selectedOption: DropdownOption; +} + +class DropdownShowcaseComponent extends React.Component { + + public constructor(props: DropdownProps) { + super(props); + this.state = { + selectedOption: props.multiSelect ? [] : null, + }; + } + + private setSelectedOption = (selectedOption: DropdownOption): void => { + this.setState({ selectedOption }); + }; + + public render(): DropdownElement { + return ( + + ); + } +} + +const styles = StyleSheet.create({ + dropdown: { + width: 200, + }, +}); + +export const DropdownShowcase = (props: DropdownProps): DropdownElement => { + return ( + + ); +}; diff --git a/src/playground/src/ui/screen/dropdown/type.tsx b/src/playground/src/ui/screen/dropdown/type.tsx new file mode 100644 index 000000000..de225c747 --- /dev/null +++ b/src/playground/src/ui/screen/dropdown/type.tsx @@ -0,0 +1,180 @@ +import React from 'react'; +import { + Image, + ImageProps, +} from 'react-native'; +import { DropdownItemType } from '@kitten/ui'; +import { StyleType } from '@kitten/theme'; +import { + ComponentShowcase, + ComponentShowcaseItem, + ComponentShowcaseSection, + ComponentShowcaseSetting, +} from '../common/type'; + +const iconClosedUri: string = 'https://akveo.github.io/eva-icons/fill/png/128/arrow-ios-downward.png'; +const iconOpenedUri: string = 'https://akveo.github.io/eva-icons/fill/png/128/arrow-ios-upward.png'; + +const defaultDropdownOption: DropdownItemType[] = [ + { text: 'Option 1', disabled: true }, + { text: 'Option 2' }, + { text: 'Option 3' }, + { text: 'Option 4' }, + { text: 'Option 5' }, + { text: 'Option 6' }, + { text: 'Option 7' }, + { text: 'Option 8' }, +]; + +const withGroupsDropdownOption: DropdownItemType[] = [ + { text: 'Option 1' }, + { + text: 'Option 2', + items: [ + { text: 'Option 21', disabled: true }, + { text: 'Option 22' }, + { text: 'Option 23' }, + ], + }, + { text: 'Option 3' }, + { text: 'Option 4' }, + { text: 'Option 5' }, +]; + +const renderIcon = (style: StyleType, visible: boolean): React.ReactElement => { + const uri: string = visible ? iconOpenedUri : iconClosedUri; + + return ( + + ); +}; + +const defaultDropdown: ComponentShowcaseItem = { + title: 'Default', + props: { + data: defaultDropdownOption, + }, +}; + +const defaultSection: ComponentShowcaseSection = { + title: 'Default Dropdown', + items: [ + defaultDropdown, + ], +}; + +const multiSelectDropdown: ComponentShowcaseItem = { + title: 'Multiselect', + props: { + multiSelect: true, + data: defaultDropdownOption, + }, +}; + +const multiSelectSection: ComponentShowcaseSection = { + title: 'Multiselect Dropdown', + items: [ + multiSelectDropdown, + ], +}; + +const groupDropdown: ComponentShowcaseItem = { + title: 'With Groups', + props: { + data: withGroupsDropdownOption, + }, +}; + +const groupDropdownMultiselect: ComponentShowcaseItem = { + title: 'Multiselect', + props: { + multiSelect: true, + data: withGroupsDropdownOption, + }, +}; + +const withGroupsSection: ComponentShowcaseSection = { + title: 'Groups Dropdown', + items: [ + groupDropdown, + groupDropdownMultiselect, + ], +}; + +const withIconDropdown: ComponentShowcaseItem = { + title: 'With icon', + props: { + data: defaultDropdownOption, + icon: renderIcon, + multiSelect: true, + }, +}; + +const withIconSection: ComponentShowcaseSection = { + title: 'With icon', + items: [ + withIconDropdown, + ], +}; + +const withLabelDropdown: ComponentShowcaseItem = { + title: 'Label', + props: { + data: defaultDropdownOption, + icon: renderIcon, + label: 'Label', + }, +}; + +const withCustomPlaceholderDropdown: ComponentShowcaseItem = { + title: 'Placeholder', + props: { + data: defaultDropdownOption, + icon: renderIcon, + placeholder: 'Custom Placeholder', + }, +}; + +const customTextsSection: ComponentShowcaseSection = { + title: 'Texts', + items: [ + withLabelDropdown, + withCustomPlaceholderDropdown, + ], +}; + +export const dropdownShowcase: ComponentShowcase = { + sections: [ + defaultSection, + multiSelectSection, + withGroupsSection, + withIconSection, + customTextsSection, + ], +}; + +export const dropdownSettings: ComponentShowcaseSetting[] = [ + { + propertyName: 'status', + value: 'primary', + }, + { + propertyName: 'status', + value: 'success', + }, + { + propertyName: 'status', + value: 'info', + }, + { + propertyName: 'status', + value: 'warning', + }, + { + propertyName: 'status', + value: 'danger', + }, +]; diff --git a/src/playground/src/ui/screen/home.component.tsx b/src/playground/src/ui/screen/home.component.tsx index 282295852..ae810c7a4 100644 --- a/src/playground/src/ui/screen/home.component.tsx +++ b/src/playground/src/ui/screen/home.component.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { ListRenderItemInfo } from 'react-native'; +import { ListRenderItemInfo, Button, I18nManager } from 'react-native'; import { NavigationScreenProps } from 'react-navigation'; import { ThemedComponentProps, @@ -13,6 +13,7 @@ import { ListItemElement, } from '@kitten/ui'; import { RouteType } from '../../navigation'; +import { Updates } from 'expo'; export const routes: RouteType[] = [ { name: 'Avatar' }, @@ -20,6 +21,8 @@ export const routes: RouteType[] = [ { name: 'Button' }, { name: 'Button Group' }, { name: 'Checkbox' }, + { name: 'Icon' }, + { name: 'Dropdown' }, { name: 'Input' }, { name: 'Layout' }, { name: 'List' }, @@ -27,6 +30,7 @@ export const routes: RouteType[] = [ { name: 'Popover' }, { name: 'Radio' }, { name: 'Radio Group' }, + { name: 'Spinner' }, { name: 'Tab View' }, { name: 'Tooltip' }, { name: 'Text' }, @@ -40,10 +44,6 @@ type Props = ThemedComponentProps & NavigationScreenProps; class HomeScreen extends React.Component { - static navigationOptions = { - title: 'Home', - }; - private onItemPress = (index: number) => { const { [index]: route } = routes; diff --git a/src/playground/src/ui/screen/icon/icon.container.tsx b/src/playground/src/ui/screen/icon/icon.container.tsx new file mode 100644 index 000000000..f60b09227 --- /dev/null +++ b/src/playground/src/ui/screen/icon/icon.container.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { IconProps } from '@kitten/ui'; +import { + iconSettings, + iconShowcase, +} from './type'; +import { ShowcaseContainer } from '../common/showcase.container'; +import { IconShowcase } from './iconShowcase.component'; + +export class IconContainer extends React.Component { + + private renderItem = (props: IconProps): React.ReactElement => { + return ( + + ); + }; + + public render(): React.ReactNode { + return ( + + + ); + } +} + diff --git a/src/playground/src/ui/screen/icon/iconShowcase.component.tsx b/src/playground/src/ui/screen/icon/iconShowcase.component.tsx new file mode 100644 index 000000000..d3a3c2ab3 --- /dev/null +++ b/src/playground/src/ui/screen/icon/iconShowcase.component.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { ViewProps } from 'react-native'; +import { + Icon, + IconProps, + Input, +} from '@kitten/ui'; +import { StyleType } from '@kitten/theme'; + +interface State { + iconName: string; +} + +const DEFAULT_ICON: string = 'star'; + +export class IconShowcase extends React.Component { + + private iconRef: React.RefObject> = React.createRef(); + private animationTimeout: NodeJS.Timeout; + + public state: State = { + iconName: DEFAULT_ICON, + }; + + public componentDidMount() { + this.animationTimeout = setTimeout(this.startAnimation, 500); + } + + public componentWillUnmount() { + clearTimeout(this.animationTimeout); + } + + private onInputChangeText = (text: string) => { + this.state.iconName = text.length > 0 ? text : DEFAULT_ICON; + }; + + private onInputBlur = () => { + this.iconRef.current.startAnimation(); + }; + + private startAnimation = () => { + this.iconRef.current.startAnimation(); + }; + + private renderIcon = (style: StyleType) => { + return ( + + ); + }; + + public render(): React.ReactElement { + return ( + + ); + } +} diff --git a/src/playground/src/ui/screen/icon/type.ts b/src/playground/src/ui/screen/icon/type.ts new file mode 100644 index 000000000..a7a68cccf --- /dev/null +++ b/src/playground/src/ui/screen/icon/type.ts @@ -0,0 +1,82 @@ +import { + ComponentShowcase, + ComponentShowcaseItem, + ComponentShowcaseSection, + ComponentShowcaseSetting, +} from '../common/type'; + +const defaultIcon: ComponentShowcaseItem = { + title: 'Default', + props: {}, +}; + +const zoomIcon: ComponentShowcaseItem = { + title: 'Zoom', + props: { + animation: 'zoom', + }, +}; + +const pulseIcon: ComponentShowcaseItem = { + title: 'Pulse', + props: { + animation: 'pulse', + }, +}; + +const shakeIcon: ComponentShowcaseItem = { + title: 'Shake', + props: { + animation: 'shake', + }, +}; + +const defaultSection: ComponentShowcaseSection = { + title: 'Default', + items: [ + defaultIcon, + ], +}; + +const animationSection: ComponentShowcaseSection = { + title: 'Animations', + items: [ + zoomIcon, + pulseIcon, + shakeIcon, + ], +}; + +export const iconShowcase: ComponentShowcase = { + sections: [ + defaultSection, + animationSection, + ], +}; + +export const iconSettings: ComponentShowcaseSetting[] = [ + { + propertyName: 'pack', + value: 'eva', + }, + { + propertyName: 'pack', + value: 'ant', + }, + { + propertyName: 'pack', + value: 'feather', + }, + { + propertyName: 'pack', + value: 'font-awesome', + }, + { + propertyName: 'pack', + value: 'material', + }, + { + propertyName: 'pack', + value: 'material-community', + }, +]; diff --git a/src/playground/src/ui/screen/index.ts b/src/playground/src/ui/screen/index.ts index 11d21a28a..f4cfaac3d 100644 --- a/src/playground/src/ui/screen/index.ts +++ b/src/playground/src/ui/screen/index.ts @@ -2,13 +2,15 @@ export { AvatarContainer } from './avatar/avatar.container'; export { BottomNavigationContainer } from './bottomNavigation/bottomNavigation.container'; export { ButtonContainer } from './button/button.container'; export { ButtonGroupContainer } from './buttonGroup/buttonGroup.container'; -export { CheckBoxContainer} from './checkbox/checkbox.container'; +export { CheckBoxContainer } from './checkbox/checkbox.container'; +export { IconContainer } from './icon/icon.container'; export { InputContainer } from './input/input.container'; export { LayoutContainer } from './layout/layout.container'; export { ListContainer } from './list/list.container'; export { PopoverContainer } from './popover/popover.container'; export { RadioContainer } from './radio/radio.container'; export { RadioGroupContainer } from './radioGroup/radioGroup.container'; +export { SpinnerContainer } from './spinner/spinner.container'; export { TabViewContainer } from './tabView/tabView.container'; export { TooltipContainer } from './tooltip/tooltip.container'; export { TextContainer } from './text/text.container'; @@ -17,4 +19,5 @@ export { TopNavigationContainer } from './topNavigation/topNavigation.container' export { OverflowMenuContainer } from './overflowMenu/overflowMenu.container'; export { SampleContainer } from './sample/sample.container'; export { ModalContainer } from './modal/modal.container'; +export { DropdownContainer } from './dropdown/dropdown.container'; export { default as Home } from './home.component'; diff --git a/src/playground/src/ui/screen/input/type.tsx b/src/playground/src/ui/screen/input/type.tsx index 24c301b98..bdc7d2af9 100644 --- a/src/playground/src/ui/screen/input/type.tsx +++ b/src/playground/src/ui/screen/input/type.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Image } from 'react-native'; import { StyleType } from '@kitten/theme'; +import { Icon } from '@kitten/ui'; import { ComponentShowcase, ComponentShowcaseItem, @@ -24,11 +24,9 @@ const disabledInput: ComponentShowcaseItem = { const iconInput: ComponentShowcaseItem = { title: 'Icon', props: { - icon: (style: StyleType) => - , + icon: (style: StyleType) => ( + + ), }, }; @@ -50,11 +48,9 @@ const captionIconInput: ComponentShowcaseItem = { title: 'Caption Icon', props: { caption: 'Place your text', - captionIcon: (style: StyleType) => - , + captionIcon: (style: StyleType) => ( + + ), }, }; diff --git a/src/playground/src/ui/screen/list/listItemShowcase.component.tsx b/src/playground/src/ui/screen/list/listItemShowcase.component.tsx index d539c8c7a..f1e96c8d8 100644 --- a/src/playground/src/ui/screen/list/listItemShowcase.component.tsx +++ b/src/playground/src/ui/screen/list/listItemShowcase.component.tsx @@ -7,6 +7,7 @@ import { StyleType } from '@kitten/theme'; import { CheckBox, CheckBoxProps, + Icon, ListItem, ListItemElement, ListItemProps, @@ -20,37 +21,37 @@ export const ListItemShowcase = (props?: ListItemProps): ListItemElement => { export const ListItemIconShowcase = (props?: ListItemProps): ListItemElement => { - const Icon = (style: StyleType, index: number): React.ReactElement => ( - + const IconElement = (style: StyleType, index: number): React.ReactElement => ( + ); return ( - + ); }; export const ListItemAccessoryShowcase = (props?: ListItemProps): ListItemElement => { - const Accessory = (style: StyleType, index: number): React.ReactElement => ( + const AccessoryElement = (style: StyleType, index: number): React.ReactElement => ( ); return ( - + ); }; export const ListItemIconAccessoryShowcase = (props?: ListItemProps): ListItemElement => { - const Icon = (style: StyleType, index: number): React.ReactElement => ( - + const IconElement = (style: StyleType, index: number): React.ReactElement => ( + ); - const Accessory = (style: StyleType, index: number): React.ReactElement => ( + const AccessoryElement = (style: StyleType, index: number): React.ReactElement => ( ); return ( - + ); }; diff --git a/src/playground/src/ui/screen/overflowMenu/type.tsx b/src/playground/src/ui/screen/overflowMenu/type.tsx index e158616da..915015168 100644 --- a/src/playground/src/ui/screen/overflowMenu/type.tsx +++ b/src/playground/src/ui/screen/overflowMenu/type.tsx @@ -5,19 +5,16 @@ import { ComponentShowcaseSection, ComponentShowcaseSetting, } from '../common/type'; -import { OverflowMenuItemType } from '@kitten/ui'; import { - Image, - ImageProps, -} from 'react-native'; + Icon, + OverflowMenuItemType, +} from '@kitten/ui'; +import { ImageProps } from 'react-native'; import { StyleType } from '@kitten/theme'; -const Icon = (style: StyleType): React.ReactElement => { +const IconElement = (style: StyleType): React.ReactElement => { return ( - + ); }; @@ -27,7 +24,7 @@ const items: OverflowMenuItemType[] = [ }, { text: 'Icon Item', - icon: Icon, + icon: IconElement, }, { text: 'Disabled Item', diff --git a/src/playground/src/ui/screen/sample/sample.component.tsx b/src/playground/src/ui/screen/sample/sample.component.tsx index 9a69f2d58..08786de88 100644 --- a/src/playground/src/ui/screen/sample/sample.component.tsx +++ b/src/playground/src/ui/screen/sample/sample.component.tsx @@ -1,11 +1,13 @@ import React from 'react'; import { + ImageProps, ImageSourcePropType, View, } from 'react-native'; import { Avatar, Button, + Icon, Input, Layout, LayoutElement, @@ -13,6 +15,7 @@ import { Toggle, } from '@kitten/ui'; import { + StyleType, ThemedComponentProps, ThemeType, withStyles, @@ -24,9 +27,30 @@ interface ComponentProps { setTheme: (dark: boolean) => void; } +interface State { + passwordVisible: boolean; +} + type SampleComponentProps = ComponentProps & ThemedComponentProps; -class SampleComponent extends React.Component { +class SampleComponent extends React.Component { + + public state: State = { + passwordVisible: false, + }; + + private onPasswordIconPress = () => { + const passwordVisible: boolean = !this.state.passwordVisible; + this.setState({ passwordVisible }); + }; + + private renderPasswordIcon = (style: StyleType): React.ReactElement => { + const icon: string = this.state.passwordVisible ? 'eye' : 'eye-off'; + + return ( + + ); + }; public render(): LayoutElement { const { themedStyle, profileImage, isDark, setTheme } = this.props; @@ -70,8 +94,11 @@ class SampleComponent extends React.Component { /> diff --git a/src/playground/src/ui/screen/sample/sample.component.web.tsx b/src/playground/src/ui/screen/sample/sample.component.web.tsx index cfb945621..ed3617719 100644 --- a/src/playground/src/ui/screen/sample/sample.component.web.tsx +++ b/src/playground/src/ui/screen/sample/sample.component.web.tsx @@ -1,11 +1,13 @@ import React from 'react'; import { + ImageProps, ImageSourcePropType, View, } from 'react-native'; import { Avatar, Button, + Icon, Input, Layout, LayoutElement, @@ -13,6 +15,7 @@ import { Toggle, } from '@kitten/ui'; import { + StyleType, ThemedComponentProps, ThemeType, withStyles, @@ -24,9 +27,31 @@ interface ComponentProps { setTheme: (dark: boolean) => void; } +interface State { + passwordVisible: boolean; +} + type SampleComponentProps = ComponentProps & ThemedComponentProps; -class SampleComponent extends React.Component { +class SampleComponent extends React.Component { + + + public state: State = { + passwordVisible: false, + }; + + private onPasswordIconPress = () => { + const passwordVisible: boolean = !this.state.passwordVisible; + this.setState({ passwordVisible }); + }; + + private renderPasswordIcon = (style: StyleType): React.ReactElement => { + const icon: string = this.state.passwordVisible ? 'eye' : 'eye-off'; + + return ( + + ); + }; public render(): LayoutElement { const { themedStyle, profileImage, isDark, setTheme } = this.props; @@ -72,8 +97,11 @@ class SampleComponent extends React.Component { diff --git a/src/playground/src/ui/screen/spinner/spinner.container.tsx b/src/playground/src/ui/screen/spinner/spinner.container.tsx new file mode 100644 index 000000000..e418cff38 --- /dev/null +++ b/src/playground/src/ui/screen/spinner/spinner.container.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { + SpinnerProps, + SpinnerElement, +} from '@kitten/ui'; +import { SpinnerShowcase } from './spinnerShowcase.component'; +import { + spinnerSettings, + spinnerShowcase, +} from './type'; +import { ShowcaseContainer } from '../common/showcase.container'; + +export class SpinnerContainer extends React.Component { + + private renderItem = (props: SpinnerProps): SpinnerElement => { + return ( + + ); + }; + + public render(): React.ReactNode { + return ( + + ); + } +} diff --git a/src/playground/src/ui/screen/spinner/spinnerShowcase.component.tsx b/src/playground/src/ui/screen/spinner/spinnerShowcase.component.tsx new file mode 100644 index 000000000..31fd701a6 --- /dev/null +++ b/src/playground/src/ui/screen/spinner/spinnerShowcase.component.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { + StyleSheet, + View, + ViewProps, +} from 'react-native'; +import { + Spinner, + SpinnerProps, + SpinnerElement, +} from '@kitten/ui'; + +export const SpinnerShowcase = (props?: SpinnerProps): SpinnerElement => { + if (props.status === 'white') { + return WhiteSpinner(props); + } else { + return DefaultSpinner(props); + } +}; + +const DefaultSpinner = (props?: SpinnerProps): SpinnerElement => { + return ( + + ); +}; + +const WhiteSpinner = (props?: SpinnerProps): React.ReactElement => { + return ( + + + + ); +}; + +const styles = StyleSheet.create({ + blackSpinnerContainer: { + width: 40, + height: 40, + backgroundColor: '#7f7e82', + justifyContent: 'center', + alignItems: 'center', + }, +}); diff --git a/src/playground/src/ui/screen/spinner/type.ts b/src/playground/src/ui/screen/spinner/type.ts new file mode 100644 index 000000000..d23bed760 --- /dev/null +++ b/src/playground/src/ui/screen/spinner/type.ts @@ -0,0 +1,133 @@ +import { + ComponentShowcase, + ComponentShowcaseItem, + ComponentShowcaseSection, + ComponentShowcaseSetting, +} from '../common/type'; + +const giantSpinner: ComponentShowcaseItem = { + title: 'Giant', + props: { + size: 'giant', + }, +}; + +const largeSpinner: ComponentShowcaseItem = { + title: 'Large', + props: { + size: 'large', + }, +}; + +const mediumSpinner: ComponentShowcaseItem = { + title: 'Medium', + props: { + size: 'medium', + }, +}; + +const smallSpinner: ComponentShowcaseItem = { + title: 'Small', + props: { + size: 'small', + }, +}; + +const tinySpinner: ComponentShowcaseItem = { + title: 'Tiny', + props: { + size: 'tiny', + }, +}; + +const primarySpinner: ComponentShowcaseItem = { + title: 'Primary', + props: { + status: 'primary', + }, +}; + +const successSpinner: ComponentShowcaseItem = { + title: 'Success', + props: { + status: 'success', + }, +}; + +const infoSpinner: ComponentShowcaseItem = { + title: 'Info', + props: { + status: 'info', + }, +}; + +const warningSpinner: ComponentShowcaseItem = { + title: 'Warning', + props: { + status: 'warning', + }, +}; + +const dangerSpinner: ComponentShowcaseItem = { + title: 'Danger', + props: { + status: 'danger', + }, +}; + +const blackSpinner: ComponentShowcaseItem = { + title: 'Black', + props: { + status: 'black', + }, +}; + +const whiteSpinner: ComponentShowcaseItem = { + title: 'White', + props: { + status: 'white', + }, +}; + +const sizeSection: ComponentShowcaseSection = { + title: 'Size', + items: [ + giantSpinner, + largeSpinner, + mediumSpinner, + smallSpinner, + tinySpinner, + ], +}; + +const statusSection: ComponentShowcaseSection = { + title: 'Status', + items: [ + primarySpinner, + successSpinner, + infoSpinner, + warningSpinner, + dangerSpinner, + blackSpinner, + whiteSpinner, + ], +}; + +export const spinnerShowcase: ComponentShowcase = { + sections: [ + sizeSection, + statusSection, + ], +}; + +export const spinnerSettings: ComponentShowcaseSetting[] = [ + { + propertyName: 'animating', + value: true, + }, + { + propertyName: 'animating', + value: false, + }, +]; + diff --git a/src/playground/src/ui/screen/topNavigation/type.tsx b/src/playground/src/ui/screen/topNavigation/type.tsx index caa60fc44..05940d6a7 100644 --- a/src/playground/src/ui/screen/topNavigation/type.tsx +++ b/src/playground/src/ui/screen/topNavigation/type.tsx @@ -4,7 +4,10 @@ import { ImageProps, } from 'react-native'; import { StyleType } from '@kitten/theme'; -import { TopNavigationAction } from '@kitten/ui'; +import { + Icon, + TopNavigationAction, +} from '@kitten/ui'; import { ComponentShowcase, ComponentShowcaseItem, @@ -14,10 +17,7 @@ import { const RightControlIcon = (style: StyleType): React.ReactElement => { return ( - + ); }; diff --git a/src/templates/template-ui-kitten-typescript/App.tsx b/src/templates/template-ui-kitten-typescript/App.tsx new file mode 100644 index 000000000..6c6d0ebc5 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/App.tsx @@ -0,0 +1,39 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { ApplicationProvider, Layout, Text } from 'react-native-ui-kitten'; +import { mapping, light as theme } from '@eva-design/eva'; + +const App = () => ( + + + + Welcome to UI Kitten 😻 + + + Start with editing App.tsx to configure your App + + + For example, try changing theme to Dark by simply changing an import + + + +); + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + text: { + textAlign: 'center', + }, +}); + +export default App; diff --git a/src/templates/template-ui-kitten-typescript/_tsconfig.json b/src/templates/template-ui-kitten-typescript/_tsconfig.json new file mode 100644 index 000000000..1bfc717a7 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/_tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "isolatedModules": true, + "jsx": "react", + "lib": ["es6"], + "moduleResolution": "node", + "noEmit": true, + "strict": true, + "target": "esnext" + }, + "exclude": ["node_modules", "babel.config.js", "metro.config.js", "jest.config.js"] +} diff --git a/src/templates/template-ui-kitten-typescript/dependencies.json b/src/templates/template-ui-kitten-typescript/dependencies.json new file mode 100644 index 000000000..0fbfce8a2 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/dependencies.json @@ -0,0 +1,4 @@ +{ + "@eva-design/eva": "^1.0.1", + "react-native-ui-kitten": "^4.1.0" +} diff --git a/src/templates/template-ui-kitten-typescript/devDependencies.json b/src/templates/template-ui-kitten-typescript/devDependencies.json new file mode 100644 index 000000000..4846c5445 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/devDependencies.json @@ -0,0 +1,7 @@ +{ + "@types/jest": "latest", + "@types/react-native": "latest", + "@types/react-test-renderer": "latest", + "@types/react": "latest", + "typescript": "latest" +} diff --git a/src/templates/template-ui-kitten-typescript/install.js b/src/templates/template-ui-kitten-typescript/install.js new file mode 100644 index 000000000..7b166cdc6 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/install.js @@ -0,0 +1,72 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +/** + * Additional scripts needed to correctly setup a project. + * Based on https://github.com/react-native-community/react-native-template-typescript. + * + * Runs as install script on `npm install` and replaces self after everything is done. + * + * - Replaces useless .js files + * - Adds tsconfig.json + */ + +const fs = require('fs'); +const path = require('path'); + +if (fs.existsSync(path.join(__dirname, '.travis.yml'))) { + process.exit() +} + +const projectFilesToDelete = [ + '.flowconfig', + 'App.js', + '__tests__/App-test.js', +]; + +const templateFilesToAdd = [ + '_tsconfig.json', +]; + +const templateFilesToDelete = [ + 'install.js', + '_tsconfig.json', +]; + +const deleteFile = (filePath) => { + if (!fs.existsSync(filePath)) { + return + } + + fs.unlinkSync(filePath) +}; + +const projectPath = path.join(__dirname, '..', '..'); + +const projectFilePath = (fileName) => { + return path.join(projectPath, fileName); +}; + +const templateFilePath = (fileName) => { + return path.join(__dirname, fileName); +}; + +const replaceTemplateFile = (fileName) => { + const newName = fileName.replace('_', ''); + fs.copyFileSync(templateFilePath(fileName), templateFilePath(newName)); +}; + +const deleteProjectFile = (fileName) => { + deleteFile(projectFilePath(fileName)); +}; + +const deleteTemplateFile = (fileName) => { + deleteFile(templateFilePath(fileName)); +}; + +templateFilesToAdd.forEach(replaceTemplateFile); +projectFilesToDelete.forEach(deleteProjectFile); +templateFilesToDelete.forEach(deleteTemplateFile); diff --git a/src/templates/template-ui-kitten-typescript/jest.config.js b/src/templates/template-ui-kitten-typescript/jest.config.js new file mode 100644 index 000000000..4ee5f1683 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + preset: 'react-native', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], +}; diff --git a/src/templates/template-ui-kitten-typescript/package.json b/src/templates/template-ui-kitten-typescript/package.json new file mode 100644 index 000000000..7dedf86e9 --- /dev/null +++ b/src/templates/template-ui-kitten-typescript/package.json @@ -0,0 +1,22 @@ +{ + "name": "react-native-template-ui-kitten-typescript", + "description": "React Native template with UI Kitten and TypeScript", + "version": "4.1.0", + "license": "MIT", + "author": "akveo ", + "homepage": "https://github.com/akveo/react-native-ui-kitten#readme", + "repository": "git+https://github.com/akveo/react-native-ui-kitten.git", + "bugs": { + "url": "https://github.com/akveo/react-native-ui-kitten/issues" + }, + "keywords": [ + "react-native", + "ui-kitten", + "typescript", + "template", + "boilerplate" + ], + "scripts": { + "install": "node install.js" + } +} diff --git a/src/templates/template-ui-kitten/App.js b/src/templates/template-ui-kitten/App.js new file mode 100644 index 000000000..152e0ebfb --- /dev/null +++ b/src/templates/template-ui-kitten/App.js @@ -0,0 +1,39 @@ +/** + * @license + * Copyright Akveo. All Rights Reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { ApplicationProvider, Layout, Text } from 'react-native-ui-kitten'; +import { mapping, light as theme } from '@eva-design/eva'; + +const App = () => ( + + + + Welcome to UI Kitten 😻 + + + Start with editing App.js to configure your App + + + For example, try changing theme to Dark by simply changing an import + + + +); + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + text: { + textAlign: 'center', + }, +}); + +export default App; diff --git a/src/templates/template-ui-kitten/dependencies.json b/src/templates/template-ui-kitten/dependencies.json new file mode 100644 index 000000000..0fbfce8a2 --- /dev/null +++ b/src/templates/template-ui-kitten/dependencies.json @@ -0,0 +1,4 @@ +{ + "@eva-design/eva": "^1.0.1", + "react-native-ui-kitten": "^4.1.0" +} diff --git a/src/templates/template-ui-kitten/package.json b/src/templates/template-ui-kitten/package.json new file mode 100644 index 000000000..210b72e1a --- /dev/null +++ b/src/templates/template-ui-kitten/package.json @@ -0,0 +1,18 @@ +{ + "name": "react-native-template-ui-kitten", + "description": "React Native template with UI Kitten", + "version": "4.1.0", + "license": "MIT", + "author": "akveo ", + "homepage": "https://github.com/akveo/react-native-ui-kitten#readme", + "repository": "git+https://github.com/akveo/react-native-ui-kitten.git", + "bugs": { + "url": "https://github.com/akveo/react-native-ui-kitten/issues" + }, + "keywords": [ + "react-native", + "ui-kitten", + "template", + "boilerplate" + ] +} diff --git a/tsconfig.dev.json b/tsconfig.dev.json index 7d790e923..352a2bcf5 100644 --- a/tsconfig.dev.json +++ b/tsconfig.dev.json @@ -5,7 +5,6 @@ "jsx": "react-native", "target": "es2015", "lib": [ - "dom", "es2018" ] }, diff --git a/tsconfig.json b/tsconfig.json index 4e6f3266a..37c56350c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,12 +8,19 @@ "sourceMap": true, "moduleResolution": "node", "jsx": "react-native", + "target": "es2015", "typeRoots": [ "./node_modules/@types" ], "paths": { "@kitten/*": [ "./src/framework/*" + ], + "@ui-kitten/*": [ + "./src/*" + ], + "react-native-ui-kitten": [ + "./src/framework" ] } }