From ed5ebe320352a704528c68044d2c16b5e17e19a4 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 5 Mar 2020 17:48:13 +0800 Subject: [PATCH 01/44] Create an endpoint to query all roles. Resolve #2983 --- .../Volo/Abp/Identity/IIdentityRoleAppService.cs | 2 ++ .../Volo/Abp/Identity/IdentityRoleAppService.cs | 6 ++++++ .../Volo/Abp/Identity/IdentityRoleController.cs | 8 ++++++++ .../Pages/Identity/Users/CreateModal.cshtml.cs | 4 ++-- .../Pages/Identity/Users/EditModal.cshtml.cs | 4 +--- .../Abp/Identity/IdentityRoleAppService_Tests.cs | 12 ++++++++++++ 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs index 0f573634a4..7096b44127 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs @@ -8,6 +8,8 @@ namespace Volo.Abp.Identity { public interface IIdentityRoleAppService : IApplicationService { + Task> GetAllListAsync(); + Task> GetListAsync(PagedAndSortedResultRequestDto input); Task CreateAsync(IdentityRoleCreateDto input); diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs index ffc13fdbca..a07f4d7c89 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs @@ -27,6 +27,12 @@ namespace Volo.Abp.Identity await _roleManager.GetByIdAsync(id)); } + public virtual async Task> GetAllListAsync() + { + var list = await _roleRepository.GetListAsync(); + return ObjectMapper.Map, List>(list); + } + public virtual async Task> GetListAsync(PagedAndSortedResultRequestDto input) { var list = await _roleRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount); diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs index 09760109d0..e1efff89fa 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Dtos; @@ -19,6 +20,13 @@ namespace Volo.Abp.Identity _roleAppService = roleAppService; } + [HttpGet] + [Route("all")] + public virtual Task> GetAllListAsync() + { + return _roleAppService.GetAllListAsync(); + } + [HttpGet] public virtual Task> GetListAsync(PagedAndSortedResultRequestDto input) { diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs index aad90e73cc..6a5e4f8218 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs @@ -29,9 +29,9 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users { UserInfo = new UserInfoViewModel(); - var roleDtoList = await _identityRoleAppService.GetListAsync(new PagedAndSortedResultRequestDto()); + var roleDtoList = await _identityRoleAppService.GetAllListAsync(); - Roles = ObjectMapper.Map, AssignedRoleViewModel[]>(roleDtoList.Items); + Roles = ObjectMapper.Map, AssignedRoleViewModel[]>(roleDtoList); foreach (var role in Roles) { diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs index 6c8d40c14d..b277f0b5c7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs @@ -31,9 +31,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users { UserInfo = ObjectMapper.Map(await _identityUserAppService.GetAsync(id)); - Roles = ObjectMapper.Map, AssignedRoleViewModel[]>( - (await _identityRoleAppService.GetListAsync(new PagedAndSortedResultRequestDto())).Items - ); + Roles = ObjectMapper.Map, AssignedRoleViewModel[]>((await _identityRoleAppService.GetAllListAsync())); var userRoleNames = (await _identityUserAppService.GetRolesAsync(UserInfo.Id)).Items.Select(r => r.Name).ToList(); foreach (var role in Roles) diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs index 663cc07786..4cdf590f38 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs @@ -34,6 +34,18 @@ namespace Volo.Abp.Identity result.Id.ShouldBe(moderator.Id); } + [Fact] + public async Task GetAllListAsync() + { + //Act + + var result = await _roleAppService.GetAllListAsync(); + + //Assert + + result.Count.ShouldBeGreaterThan(0); + } + [Fact] public async Task GetListAsync() { From fb3a0f6c578862a41044f3454256a673060246a4 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 8 Mar 2020 18:58:05 +0800 Subject: [PATCH 02/44] Use ListResultDto as return value. --- .../Volo/Abp/Identity/IIdentityRoleAppService.cs | 2 +- .../Volo/Abp/Identity/IdentityRoleAppService.cs | 5 +++-- .../Volo/Abp/Identity/IdentityRoleController.cs | 2 +- .../Pages/Identity/Users/CreateModal.cshtml.cs | 2 +- .../Pages/Identity/Users/EditModal.cshtml.cs | 2 +- .../Volo/Abp/Identity/IdentityRoleAppService_Tests.cs | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs index 7096b44127..9381a9b2c8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.Identity { public interface IIdentityRoleAppService : IApplicationService { - Task> GetAllListAsync(); + Task> GetAllListAsync(); Task> GetListAsync(PagedAndSortedResultRequestDto input); diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs index a07f4d7c89..b02319bc24 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs @@ -27,10 +27,11 @@ namespace Volo.Abp.Identity await _roleManager.GetByIdAsync(id)); } - public virtual async Task> GetAllListAsync() + public virtual async Task> GetAllListAsync() { var list = await _roleRepository.GetListAsync(); - return ObjectMapper.Map, List>(list); + return new ListResultDto( + ObjectMapper.Map, List>(list)); } public virtual async Task> GetListAsync(PagedAndSortedResultRequestDto input) diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs index e1efff89fa..9925d18abb 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Identity [HttpGet] [Route("all")] - public virtual Task> GetAllListAsync() + public virtual Task> GetAllListAsync() { return _roleAppService.GetAllListAsync(); } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs index 6a5e4f8218..6c1ac1ff72 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users { UserInfo = new UserInfoViewModel(); - var roleDtoList = await _identityRoleAppService.GetAllListAsync(); + var roleDtoList = (await _identityRoleAppService.GetAllListAsync()).Items; Roles = ObjectMapper.Map, AssignedRoleViewModel[]>(roleDtoList); diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs index b277f0b5c7..98a32fd1bd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users { UserInfo = ObjectMapper.Map(await _identityUserAppService.GetAsync(id)); - Roles = ObjectMapper.Map, AssignedRoleViewModel[]>((await _identityRoleAppService.GetAllListAsync())); + Roles = ObjectMapper.Map, AssignedRoleViewModel[]>((await _identityRoleAppService.GetAllListAsync()).Items); var userRoleNames = (await _identityUserAppService.GetRolesAsync(UserInfo.Id)).Items.Select(r => r.Name).ToList(); foreach (var role in Roles) diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs index 4cdf590f38..5d64bb6c78 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs @@ -43,7 +43,7 @@ namespace Volo.Abp.Identity //Assert - result.Count.ShouldBeGreaterThan(0); + result.Items.Count.ShouldBeGreaterThan(0); } [Fact] From af35d3e27921ee85e04bd69817314ef4bdc9cee1 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 11 Mar 2020 16:33:55 +0800 Subject: [PATCH 03/44] Update docs module document --- docs/en/Modules/Docs.md | 112 ++++++++---------- .../docs-module_download-new-abp-project.png | Bin 20225 -> 67742 bytes .../images/docs-module_solution-explorer.png | Bin 10828 -> 21497 bytes docs/zh-Hans/Modules/Docs.md | 89 +++++++------- .../docs-module_download-new-abp-project.png | Bin 20225 -> 67742 bytes .../images/docs-module_solution-explorer.png | Bin 10828 -> 21497 bytes 6 files changed, 93 insertions(+), 108 deletions(-) diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index afcc1a9dd7..03ab20557c 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -20,23 +20,25 @@ When you use GitHub to store your docs, Docs Module supports versioning. If you > Docs module follows the [module architecture best practices](../Best-Practices/Module-Architecture.md) guide. +## Installation +### 1- Download -## Installation +If you do not have an existing ABP project, this step shows you how to create a new project from [abp.io](https://abp.io) to add the Docs Module. If you already have an ABP project, you can skip this step. -### 1- Download +It is recommended to use ABP CLI to create new projects. Use the following command: -If you do not have an existing ABP project, this step shows you how to create a new project from [abp.io](https://abp.io) to add the Docs Module. If you already have an ABP project, you can skip this step. +`abp new Acme.MyProject` -Navigate to https://abp.io/Templates. Enter your project name as `Acme.MyProject`, select `ASP.NET Core Mvc Application` and select `Entity Framework Core` for the database provider. +You can also navigate to https://abp.io/get-started. Enter your project name as `Acme.MyProject`, other use default options. -Note that this document covers `Entity Framework Core` provider but you can also select `MongoDB` as your database provider. +Note that this document covers `Entity Framework Core` provider but you can also select `MongoDB` as your database provider. ![Create new project](../images/docs-module_download-new-abp-project.png) ### 2- Running The Empty Application -After you download the project, extract the ZIP file and open `Acme.MyProject.sln`. You will see that the solution consists of `Application`, `Domain `, `EntityFrameworkCore` and `Web` projects. Right click on `Acme.MyProject.Web` project and **Set as StartUp Project**. +After you download the project, extract the ZIP file and open `Acme.MyProject.sln`. You will see that the solution consists of `Application`, `Application.Contrawcts`, `DbMigrator`, `Domain`, `Domain.Shared`, `EntityFrameworkCore`, `EntityFrameworkCore.DbMigations`, `HttpApi`, `HttpApi.Client` and `Web` projects. Right click on `Acme.MyProject.Web` project and **Set as StartUp Project**. ![Create a new project](../images/docs-module_solution-explorer.png) @@ -45,16 +47,14 @@ The database connection string is located in `appsettings.json` of your `Acme.My ```json { "ConnectionStrings": { - "Default": "Server=localhost;Database=MyProject;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProject;Trusted_Connection=True;MultipleActiveResultSets=true" } } ``` +Run `Acme.MyProject.DbMigrator` project, it will be responsible for applying database migration and seed data. The database `MyProject` will be created in your database server. - -Open `Package Manager Console` in the Visual Studio and choose `src\Acme.MyProject.EntityFrameworkCore` as the default project. Run `Update-Database` command to create your new database. The database `MyProject` will be created in your database server. - -Now an empty ABP project has been created! You can now run your project and see the empty website. +Now an empty ABP project has been created! You can now run your project and see the empty website. To login your website enter `admin` as the username and `1q2w3E*` as the password. @@ -62,36 +62,21 @@ To login your website enter `admin` as the username and `1q2w3E*` as the passwor Docs module packages are hosted on NuGet. There are 4 packages that needs be to installed to your application. Each package has to be installed to the relevant project. -* [Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) needs to be referenced to `Acme.MyProject.Domain` project. - - * Edit `Acme.MyProject.Domain.csproj`file and add the below line to as a reference. Note that you need to change version (v0.9.0) to the latest. - - ```csharp - - ``` -* [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) needs to be referenced to `Acme.MyProject.EntityFrameworkCore` project. +Install [Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget package to `Acme.MyProject.Domain` project. - - Edit `Acme.MyProject.EntityFrameworkCore.csproj`file and add the below line to as a reference. Note that you need to change version (v0.9.0) to the latest. +`Install-Package Volo.Docs.Domain` - ```csharp - - ``` -* [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) needs to be referenced to `Acme.MyProject.Application` project. +Install [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) nuget package to `Acme.MyProject.EntityFrameworkCore` project. - * Edit `Acme.MyProject.Application.csproj`file and add the below line to as a reference. Note that you need to change version (v0.9.0) to the latest. +`Install-Package Volo.Docs.EntityFrameworkCore` - ```csharp - - ``` -* [Volo.Docs.Web ](https://www.nuget.org/packages/Volo.Docs.Web/)needs to be referenced to `Acme.MyProject.Web` project. +Install [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) nuget package to `Acme.MyProject.Application` project. - - Edit `Acme.MyProject.Web.csproj`file and add the below line to as a reference. Note that you need to change version (v0.9.0) to the latest. - - ```csharp - - ``` +`Install-Package Volo.Docs.Application` +Install [Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget package to `Acme.MyProject.Web` project. +`Install-Package Volo.Docs.Web` ### 3- Adding Module Dependencies @@ -132,7 +117,6 @@ An ABP module must declare `[DependsOn]` attribute if it has a dependency upon a } ``` - * Open `MyProjectApplicationModule.cs`and add `typeof(DocsApplicationModule)` as shown below; ```csharp @@ -157,7 +141,6 @@ An ABP module must declare `[DependsOn]` attribute if it has a dependency upon a } ``` - * Open `MyProjectWebModule.cs`and add `typeof(DocsWebModule)` as shown below; ```csharp @@ -176,43 +159,50 @@ An ABP module must declare `[DependsOn]` attribute if it has a dependency upon a } ``` - - ### 4- Database Integration #### 4.1- Entity Framework Integration -If you choose Entity Framework as your database provider, you need to configure the Docs Module in your DbContext. To do this; +If you choose Entity Framework as your database provider, you need to configure the Docs Module. To do this; -- Open `MyProjectDbContext.cs` and add `modelBuilder.ConfigureDocs()` to the `OnModelCreating()` +- Open `QaDocDbContextModelCreatingExtensions.cs` and add `modelBuilder.ConfigureDocs()` to the `ConfigureMyProject()`. ```csharp - [ConnectionStringName("Default")] - public class MyProjectDbContext : AbpDbContext + public static class QaDocDbContextModelCreatingExtensions { - public MyProjectDbContext(DbContextOptions options) - : base(options) + public static void ConfigureMyProject(this ModelBuilder builder) { - + Check.NotNull(builder, nameof(builder)); + + /* Configure your own tables/entities inside here */ + + //builder.Entity(b => + //{ + // b.ToTable(QaDocConsts.DbTablePrefix + "YourEntities", QaDocConsts.DbSchema); + + // //... + //}); + + builder.ConfigureDocs(); } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - //... - modelBuilder.ConfigureDocs(); + + public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) + where TUser: class, IUser + { + //b.Property(nameof(AppUser.MyProperty))... } } ``` -* Open `Package Manager Console` in `Visual Studio` and choose `Acme.MyProject.EntityFrameworkCore` as default project. Then write the below command to add the migration for Docs Module. +* Open `Package Manager Console` in `Visual Studio` and choose `Acme.MyProject.EntityFrameworkCore.DbMigrations` as default project. Then write the below command to add the migration for Docs Module. ```csharp add-migration Added_Docs_Module ``` - When the command successfully executes , you will see a new migration file named as `20181221111621_Added_Docs_Module` in the folder `Acme.MyProject.EntityFrameworkCore\Migrations`. + When the command successfully executes , you will see a new migration file named as `20181221111621_Added_Docs_Module` in the folder `Acme.MyProject.EntityFrameworkCore.DbMigrations\Migrations`. - Now, update the database for Docs module database changes. To do this run the below code on `Package Manager Console` in `Visual Studio`. Be sure `Acme.MyProject.EntityFrameworkCore` is still default project. + Now, update the database for Docs module database changes. To do this run the below code on `Package Manager Console` in `Visual Studio`. Be sure `Acme.MyProject.EntityFrameworkCore.DbMigrations` is still default project. ```csharp update-database @@ -220,7 +210,6 @@ If you choose Entity Framework as your database provider, you need to configure Finally, you can check your database to see the newly created tables. For example you can see `DocsProjects` table must be added to your database. - ### 5- Linking Docs Module The default route for Docs module is; @@ -250,7 +239,7 @@ To add Docs module link to your application menu; } ``` -The `Menu:Docs` keyword is a localization key. To localize the menu text, open `Localization\MyProject\en.json` in the project `Acme.MyProject.Domain`. And add the below line +The `Menu:Docs` keyword is a localization key. To localize the menu text, open `Localization\MyProject\en.json` in the project `Acme.MyProject.Domain`. And add the below line ```json "Menu:Docs": "Documents" @@ -270,7 +259,7 @@ Final look of **en.json** } ``` -The new menu item for Docs Module is added to the menu. Run your web application and browse to `http://localhost:YOUR_PORT_NUMBER/documents` URL. +The new menu item for Docs Module is added to the menu. Run your web application and browse to `http://localhost:YOUR_PORT_NUMBER/documents` URL. You will see a warning says; @@ -316,7 +305,7 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen - ExtraProperties: ```json - {"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"} + {"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***","GitHubUserAgent":""} ``` Note that `GitHubAccessToken` is masked with `***`. It's a private token that you must get it from GitHub. See https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ @@ -328,11 +317,13 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"}', N'/', N'master', N'') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***","GitHubUserAgent":""}', N'/', N'master', N'') ``` Be aware that `GitHubAccessToken` is masked. It's a private token and you must get your own token and replace the `***` string. +Now you can run the application and navigate to `/Documents`. + #### Sample Project Record for "FileSystem" You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documents to configure your GitHub document store. @@ -561,11 +552,8 @@ The upper sample `JSON` file renders the below navigation menu as `HTML`. ![Navigation menu](../images/docs-module_download-sample-navigation-menu.png) - - Finally a new Docs Module is added to your project which is feeded with GitHub. ## Next -Docs Module is also available as a standalone application. Check out [VoloDocs](../Apps/VoloDocs). - +Docs Module is also available as a standalone application. Check out [VoloDocs](../Apps/VoloDocs). \ No newline at end of file diff --git a/docs/en/images/docs-module_download-new-abp-project.png b/docs/en/images/docs-module_download-new-abp-project.png index 0da3b7a67a367c4cbd9272b0488e2e36a5bb9551..6424ad76223e7492753cce37630d84552b0e45a7 100644 GIT binary patch literal 67742 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 z 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 z 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 literal 20225 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 diff --git a/docs/en/images/docs-module_solution-explorer.png b/docs/en/images/docs-module_solution-explorer.png index cafc38f0b0064035dc23918dabe82e92c54b0713..2988ec41342e7d4528373d7559e390f6e29c41a9 100644 GIT binary patch literal 21497 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 diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index f2a92334fb..f10acf4d2f 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -26,15 +26,19 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. 如果你没有现有的ABP项目, 这个步骤向你展示如何在[abp.io](https://abp.io)创建一个新项目并添加文档模块. 如果你本地已经有了一个ABP项目, 那么你可以跳过这一步. -打开 https://abp.io/Templates. 输入项目名称为 `Acme.MyProject`, 选择 `ASP.NET Core Mvc Application` 和选择 `Entity Framework Core` 做为数据库提供者. +推荐使用ABP CLI创建新项目,使用以下命令行: -请注意,本文档包含了 `Entity Framework Core` 提供者 不过你也可以选择 `MongoDB` 做为数据库提供者. +`abp new Acme.MyProject` + +你也可以在浏览器中导航到 https://abp.io/get-started. 输入项目名称为 `Acme.MyProject`, 其它保持默认选项. + +请注意,本文档包含了 `Entity Framework Core` 提供者 不过你也可以选择 `MongoDB` 做为数据库提供者. ![创建新项目](../images/docs-module_download-new-abp-project.png) ### 2- 运行这个空项目 -下载项目后, 解压压缩文档并且打开 `Acme.MyProject.sln`. 你可以看到这个解决方案包含了 `Application`, `Domain`, `EntityFrameworkCore` 和 `Web` 项目. 右键选择 `Acme.MyProject.Web` 项目**设置为启动项目**. +下载项目后, 解压压缩文档并且打开 `Acme.MyProject.sln`. 你可以看到这个解决方案包含了 `Application`, `Application.Contrawcts`, `DbMigrator`, `Domain`, `Domain.Shared`, `EntityFrameworkCore`, `EntityFrameworkCore.DbMigations`, `HttpApi`, `HttpApi.Client` 和 `Web` 项目. 右键选择 `Acme.MyProject.Web` 项目**设置为启动项目**. ![创建新项目](../images/docs-module_solution-explorer.png) @@ -43,12 +47,12 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. ```json { "ConnectionStrings": { - "Default": "Server=localhost;Database=MyProject;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProject;Trusted_Connection=True;MultipleActiveResultSets=true" } } ``` -打开Visual Studio包管理控制台选择`src\Acme.MyProject.EntityFrameworkCore` 做为默认项目. 运行 `Update-Database` 命令创建数据库. 数据库`MyProject`将在数据库服务器中创建. +运行 `Acme.MyProject.DbMigrator` 项目,它会负责应用迁移与初始化种子数据. 数据库`MyProject`将在数据库服务器中创建. 现在一个空的ABP项目已经创建完成! 现在你可以运行项目并且查看网站. @@ -58,37 +62,19 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. 文档模块包托管在Nuget上面. 需要有四个包安装到你的应用程序中. 每个包必须安装到相关的项目. -* [Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) 需要安装到 `Acme.MyProject.Domain` 项目. - - * 修改 `Acme.MyProject.Domain.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. - - ```csharp - - ``` +安装[Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget包到 `Acme.MyProject.Domain` 项目. -* [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) 需要安装到 `Acme.MyProject.EntityFrameworkCore` 项目. +`Install-Package Volo.Docs.Domain` - * 修改 `Acme.MyProject.EntityFrameworkCore.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. +安装[Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) nuget包到 `Acme.MyProject.EntityFrameworkCore` 项目. - ```csharp - - ``` +`Install-Package Volo.Docs.EntityFrameworkCore` -* [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) 需要安装到 `Acme.MyProject.Application` 项目. +安装[Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) nuget包到 `Acme.MyProject.Application` 项目. - * 修改 `Acme.MyProject.Application.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. +`Install-Package Volo.Docs.Application` - ```csharp - - ``` - -* [Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Web/) 需要安装到 `Acme.MyProject.Web` 项目. - - * 修改 `Acme.MyProject.Web.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. - - ```csharp - - ``` +安装[Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget包到 `Acme.MyProject.Web` 项目. ### 3- 添加模块依赖 @@ -176,37 +162,46 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. #### 4.1- Entity Framework 集成 -如果你选择了Entity Framework 做为数据库供应者,你需要在DbContext中配置文档模块. 做以下操作; +如果你选择了Entity Framework 做为数据库供应者,你需要配置文档模块. 做以下操作; -* 打开 `MyProjectDbContext.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `OnModelCreating()` 方法中 +* 打开 `QaDocDbContextModelCreatingExtensions.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `ConfigureMyProject()` 方法中 ```csharp - [ConnectionStringName("Default")] - public class MyProjectDbContext : AbpDbContext + public static class QaDocDbContextModelCreatingExtensions { - public MyProjectDbContext(DbContextOptions options) - : base(options) + public static void ConfigureMyProject(this ModelBuilder builder) { - + Check.NotNull(builder, nameof(builder)); + + /* Configure your own tables/entities inside here */ + + //builder.Entity(b => + //{ + // b.ToTable(QaDocConsts.DbTablePrefix + "YourEntities", QaDocConsts.DbSchema); + + // //... + //}); + + builder.ConfigureDocs(); } - - protected override void OnModelCreating(ModelBuilder modelBuilder) + + public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) + where TUser: class, IUser { - //... - modelBuilder.ConfigureDocs(); + //b.Property(nameof(AppUser.MyProperty))... } } ``` -* 打开 `Visual Studio` 的 `包管理控制台` 选择 `Acme.MyProject.EntityFrameworkCore` 做为默认项目. 然后编写以下命令为文档模块添加迁移. +* 打开 `Visual Studio` 的 `包管理控制台` 选择 `Acme.MyProject.EntityFrameworkCore.DbMigrations` 做为默认项目. 然后编写以下命令为文档模块添加迁移. ```csharp add-migration Added_Docs_Module ``` - 当命令执行成功后 , 你会看到`Acme.MyProject.EntityFrameworkCore\Migrations` 目录下有名为 `20181221111621_Added_Docs_Module` 的迁移文件. + 当命令执行成功后 , 你会看到`Acme.MyProject.EntityFrameworkCore.DbMigrations\Migrations` 目录下有名为 `20181221111621_Added_Docs_Module` 的迁移文件. - 现在更新数据库. 在 `Visual Studio` 的 `包管理控制台` 中执行以下代码. 要确认已 `Acme.MyProject.EntityFrameworkCore` 项目设置为默认项目. + 现在更新数据库. 在 `Visual Studio` 的 `包管理控制台` 中执行以下代码. 要确认已 `Acme.MyProject.EntityFrameworkCore.DbMigrations` 项目设置为默认项目. ```csharp update-database @@ -309,7 +304,7 @@ There are no projects yet! - ExtraProperties: ```json - {"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs/zh-Hans/","GitHubAccessToken":"***"} + {"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs/zh-Hans/","GitHubAccessToken":"***","GitHubUserAgent":""} ``` 注意 `GitHubAccessToken` 用 `***` 掩盖. 这是一个私人令牌,你必须从GitHub获取它. 请参阅 https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ @@ -321,11 +316,13 @@ There are no projects yet! 对于 `SQL` 数据库,你可以使用下面的 `T-SQL` 命令将指定的示例插入到 `DocsProjects` 表中: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"}', N'/', N'master', N'') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***","GitHubUserAgent":""}', N'/', N'master', N'') ``` 请注意,`GitHubAccessToken` 被屏蔽了.它是一个私人令牌,你必须获得自己的令牌并替换 `***` 字符串. +现在你可以运行应用程序并导航到 `/Documents`. + #### "FileSystem" 项目的示例记录 你可以使用 [ABP Framework](https://github.com/abpframework/abp/) GitHub文档来配置你的文件系统存储. diff --git a/docs/zh-Hans/images/docs-module_download-new-abp-project.png b/docs/zh-Hans/images/docs-module_download-new-abp-project.png index 0da3b7a67a367c4cbd9272b0488e2e36a5bb9551..6424ad76223e7492753cce37630d84552b0e45a7 100644 GIT binary patch literal 67742 zcmY(qV_;p;)-If+JIRjiG`88;wr#7ilg5p0G`4N0ZEV}NjeXPm-S@ob`?3G5wdNRe zU=Gb^hbziUAi(0nf`Ne{NJ)w+gMobs{QPkPAwHkz+*mV!ff0d8i3+KDfS>6>cdGW^ zAE<2SWCv;4<<6R(!E>C+uDkBLj1md{i+{Mb7`j0O;b>u zB#iw-kGz+fF%}PuaUEss=gtWX`dLcpBQ5;Zq|Au$--_JI>hf}4PMcK{Md=6^&1nEv z84dXeo_Z72dDEQ>0Z_{^m;l-G)gZr56Dt6r@vHhrqhmvW5lpOClI02V_W+ zK|Bi*o!@1eUOhPGs0y;2?1oRs>3#7P@)Oy;dMc6}h6sqtb0bX;ZVHSb;~Q-igDHWS zQQQQq;fQz?%H@PY_NR_Ch!V-Cb@C3EdWXl{HzomsN@hJo%OTh-D|j=d5$J#Fz+h14 zz;05ZF)@T}Ta9>mDh2`Dn3X5cfAOHf^^b0e{*`eAbEg_^?U1Lz!&V;oYJNMp$9#nG z)%{Co1jEZq$ZFHh)()BiEctN=3t@>jTv$|WUl-&YTF{`HEpqa-isb0l_JJ5BaU8#_ z-B{$A@r;8Pl8P_+tfGnNLsT<$v+&0yyQPP+WWk)C2Vf>-W_0V}3nL$q9?%$wf}|iw zPtMOKl02EAtwvnhQ|zLNr&&s%<_1whIHE|(_A2Qy zd=GIu3du|zpAg-SP9=VsnYWR8)=5t3V-%LQB0+cmfi5p~ObNw?SnGkuP0=_8 zUszf<^iCYI`yg)+G`rgwzVy|IWe3Y2k|b3%wMZ+qBPMJ|jSqmxmOnPWI|kb?OilIK zfF`mOXo%}q5lwG2+%=tE(_311Dr$X$s;nq&`0Z5c=)f}#dRbKp{dTZfb{ zUdEiwFB$AIv7E6Qc8y;eb*%bW<-yf*DebTj0kiwS78t# zl~hiD<+NOS5u;5B{*lb z&tjugT~lN8d>b?-)L~h9>=pxbp|i5_u84b%_Yau;a24Z)DmT|U?ztbdt`zfUt5ob%SqzW%J)Fz z0sdT2;+%U(b^vGJiaC+R(6QU;TsAg#2~H@M#WWexCaE^6yzi7Gae4sOc z`Vulld1Vu4M-i0iCUCMP&Z=V93_k@|T6N$L%_Z($SwO>nXdP3(S@rEamd?VI zKT2yI)`Y0*23aykGi{whNuE*JlgX_OvjmA`cVj>_>+pRk?X{tA7WC*xEa zn6^v*CVyYS%O=F$!5wrnt-U`QBqt&kFo%n&Nyi14f#RbVF-@E)VT|9Yq(g_W`je4D zJi|J`hf1KXP6N?erQG0sLl7?hdz3HklRjjIQD@Gt4+Xi^`hrqP7o&me4zA{ih)Ee82%F&+RDJa+@9lM=^nl&b~Kn|_eK(`BK*CH{D z`8iGFGz?k5UQ)%LHMW94C6ySGVLtPc#3K?vzJI~QP6eU$m!Ua~b*SABUqFwJy9b>o zth%C34BH)xEhWr9+Mf^A>oOIc!>;8BotR!k8V$rK2ADxCnVz21NSuqN8-py&D`znH zfIOj&Nfw+XOW}kt-;_+s+ExqKrn*+2>XJoaA{}kDh#+{TMF3wTMS;sVvgA|_pPyxd zni+)$ch1WciM;JBc- zCC{nx#G?$VqU|6eMtQ?Be<%Rfh}j&4*}%irbT8;bOd>L%)69aF0W%nEWo1q-wh83_)q+66MG6f{xMskT4C zLd%WFt3oVp5D?43)WrL3&T6rk+5Gm$LxH6)`-&`@XHm(#W~C}V z$G?MRnUc)C1}ZXj2xu9&bYK(>5o*(Sk#o_=l<?&%x_+vD<)>i=FH<7~QUK zGk;T5Vj}Vju-dd+H{6+~hm^OEb%u?8rGngBG4G1Z zv}>7y^H_~0;-zg3Y;B;tptk8|WH&gDCEEJ>K9jo>U50l-RL4tMR-B{H5f~LZs~Sr+ zOoyPh?eLzy00`0q6G`V5|9~Jy#&_(g6D7Q2N|mh9TxqmG!uW)5P(%J3vVx5b(QiFlyDdXZ?;}Bl6U~{bRU?ugqJ- z{b~#8Md0wMQrcy9n~zkQ+16+_tA`)p! z!41@Q1FoYgLLXL(Syt8BK^$+6j~^u&$>9~CGA%xnRa21nKv8~^X z1)^1RP*c5*LpF;Qo_xdGxOIPBv~6-zyM)5$ayj!As5y=~#Crdzj)9aZ*T9{+3n_V(geRPP+$>qBZ2mF$yEwRH z?Ps82@Tl0~M%P}(peSZeR}E+J_LZ%YBB!s%wpNSe0!R zp>NmTO=ya&m$GN$)a#`L&r3xGxAsbkE-{9BM(tUO4kKn=qYb>Al!L@~SIVF0M!24F> zLD9IRh>nhS9FOnS1N7_H?wq-a93G?{D$vt=tWAuj^U}(npVgQe`mSbOTDg18HugPF zEm(}YwTer7xBC_)-<$rZQ}oku&|AG67J)iX5-Q}VXKAndtTQY%8y%R}bS%1Dx7x}Y z1oxFAc`~%-8}iEC3zqeD)fqQy>`q;AV^)0orZt*9ZBG zL0oTN>Sv02n9^4d2us_?Ia&Q83Z~t&>!pr+vLYQG zyq#En*$F~3A-zZ)Lks+AddMX|3MnjD0;AG1%@@T?HXQ%HSKbW&Uc7v_KgFi1RQSTS6A1@ z%^^Aa&Yj{0#%J5u>`qmV60xfuk{9-Dg7Iz~NnL$?>E*H+k$hf`7o#N`(}_S}X7;)L7?Taw#qOGd<`UKbk* zr%vr9$epK}9~NRQn!9hPXE^D|7h-T%s=5lEdukfHFX%!^)yhH3P?G&C787>9H+u25 zp4%eSPXhD0nmU=TQ_h1@h$|nnZz&cV_8>dE^C9Al8M3okvWSPtD!;V(;Hh z4WpYeY2&-_z#(orS6tOGBZr2FN%mKopf&DY>Tf?S+|v1?^?rd@p`kg|?{xV_`jMCP z6ii@ovF7nb+w-|LlC z{G@H^uz6>b%g9q2$4#65mQ84t*aj_{`TH-^jyZ|W8rO?iQaR1XZoXgjml*UOHS^f> zm=9Kwv7ZU#f>sI^VjfJF14fO*Uigj{=%?ovX z?0EBD^?$ill({90qPc1P*zQ8Xj34F-Y~j~gud(=pvdWF?_08i6VP9GzMvcSVmaJna zBIWHpFW6$OTumLk>aWxH*R}pzBv6MMo`Y2y+;^GXYo0}TJ;XrCutP%kXbNk- zNrBcuYHy_!F2O?9-8ZpMN8~to_h(F!;%EX#0r);r8+9N4#e&ZP^Ps~QBJeyutCKk-5wnHnfjqja$d=t zw{p#AMp!xm5xi~UsciTkGV^VCPG0;oU?=w1#7cjUFgxi^hmh-sqyMn;-BMfX=eB!y zBh9ycz79WN)TO_uO!EuI@ixJw)WHS7E{fDIeD}p&;<)a>@Lf=`a*t)AQEu znZhP3rRI9iA9@kAKg?0m?RhF-{|84g63wP)NJvQ6Suc}N?+avU{}*Lv^YLjv`tgTr zx#ShYJ18p+Q~F4wR8J(84U7=aYzePbO4jSzc&bW*C5|d{-l^GJh23^aCzi?qdY>a# zmBR8o0tHU`+XsVvgUL<8Ei$(y{sGC=wFupD(+TfoYq$mWy8Pob{W-GLHER?uty4j5FGY>z060C`i?3C-fq7&cMjktHB-tDW4;41v z*t~vv{v2k^r%Kqa-Vw%UbB|_*@8+@pQU57FRp$%utAfAZ zkF~iN(onmULC8_OojWynMn|p7&5c%r7>A*iNPL_ub+SU2U3Ats)iSGQfbna$>T5;U0k!==Y8b3PTcc9Y{Q&kv2XQgRQlNeKn* zID8-9^-)$84$orZWB10(62oBb+aQe(fz|!Z9UC30jH*i;LPjZyZ$dHrkF054W7y+kt!;jD3J-PqU}+qVcj zKcv)}CiVRX+v{>Q8&c37f4^(lTD{(_K5)U=ygc;6m1IiXbiJ+*hi>w4*XAImUTG>% z)>s%#c6p_5+?y;6FnGRZigAKP?2GfF8#Igv;v-e9TC&sWxV&pMJUAv7~W{UTstYMpb-rGX4RLe z_L?Kh_>340WM!)*ZD0v{l)Fgo(&DLt7eM#-l z<-f2PwekDL%AbIDZ|B`N<|L+i;~;OIDkA-&4VPP1NvS%9u*Gl0w$ijSFB=*|j`5-{ zn`U2l+p|*yY@jOW<)NOtZ|~Gv+B072@OIaW%G*$oP{}9!jUgK$O9asTs_cD^pFV>_ zL1>@OA$YFDrl{PigaKu2=uR({U385Fu>}UoDVl{W7U*8c!oI6|z>}M1!(h~za0{8n zBi`T}{tnmXa_#29{Ck!Om~D<9Qi0}K<*G6LVO~Y90Iy20#vSxLnH45KN~T!#jgJDH zond@eJ{JixH25UkuN`1qC=fXyx@8TpOiW-h$iq3wd3h&9i}d2O;^IlkyTHGQUx!H~ zOuzB&dE^*cS@(dexgxsqxTC@d>(b@Lb8DR0Gp!TL@AMnxrdT17FtV)U?3}JL-+JP# zZ3~Cj)WO-Al|YGQx$?$MVAU@2yxHUUI5jS0hm+d33uc2v@8d0TvV@o8{%RL#*5IeL zt?iefh+TNWOa2KMjSnv1))Og#MIRDYG!(!*jTu8Fz1*XGpYxH2|5q-{P3TGM_UGefM&Hs+BlHcWeO}<^^z_XM zn-5Lt{`h1EVJrE9P({iyg2+VKlxW9QrsAL96o*)8)>*bc7ZmtHW$99{c=>1U22>t< zPioYXJ7u5gQaLxK-kw(J6}okTungx_Iq+M}#z#iKtzSb};|f0L*ShWt|qJJ!hUhvAPp)pCY3GA^8?4?!w8&TJOriyzbM9}`_7LT#r%iIQh= z8^p0^jwb|>9}cN=IwO5;Td9jiu>{^bhR*Wb4|ZqWm*!8DZxbp)i9s5e2tj#bqnUpW zZQ=B{wHi)tVyt+rx>s(pLw3ckFJ%p$PVrQE(`j(5$LF zo;{jMWozlaZi@h5#uc0JHTk~A2Q;Njdbq*bOX^)!;9bE6zJTz8<@_l72Pfr@4Qy6t zI`q+h))muEN^WQRALJVTwRz^bdU)*{-Mae1a@LH)}Yb`z23gNaLG zzQg|V{u=>#>@eJyY-R4_N;Jlg!+uGU-B&(`;DDtJj{C5)6Ps%O3`QlAawFPK>IR;lL99r z&!Kt@w0_?dhS+C1ijaD?zpHV~ZKsZ3Q;Z@Hkal2Ay!Ma?eEWRCX5b#-e|*Xw}j2(Pg1(Q=3N9}!E_IQ6J0vX zkDIKf?YOO8Fk*-Jz1d0@giSYm{oD%88C?*eh6pFBnkCf^~zf4S1#zj-Y}4+tM}%x6|&n;RB&+rTsc4x!>*d{FO@Jr7Le~9-?H!=W2X!; z3X|U#Uh`5GLj$RMZ|UNTTI&p|E$A}bfcQZY`e*X*YgS+1xELH}0C;Q*DYM)wYql?f z6*ZV?-&?S4I9mRYx}ytw6%hMoCk={xD!*kR%sgN%0Is~wjn728+^(sZ3#oj-q$JYUCCo&}+*GYu=ZKSLaF^00s_CH^12MWjV> zAyCaNPGPt;y%gRy(Uu38kFW|NU-BsG@{vF1EGn`kahi(KN@*eLs9WZYg;1;bLcIBL<0w2 zoR^GoDQ{K9yyqI>gL{q-ze%8+Wdt$##$IuS=mqC3=_WLso(#eY zIqcPJtkY-A3HQE|0zypG-^voDuegi|FxEFsw`(*>6N}Onyn1zeqoDS<8$|f>OaNycx zEfSwNyn&rhy&tdi$)CYxmn6bGQ`1kH@vH_wK&5p^Y!LX^^G%RfM5Le~70%;Mi2uR}UVy(2JOX0d zXkhv%9#L~O0L2hjJ5cC2fgw1`Wx0`DQ7vH!yGO`%}G65I}oNTSCz0U5z>->re5~1Bh95nWU2f z0*APljg7Q*D3cM85M-Fi%+R;Hukd}mrMY>36z_x@6Jmo?TpJ}VEd<{38XBb-`C{?)X0Pjs5fiYaLgjjKYIzAJddmIv%ffO*~Mj4bR zy<)4_o^Cdmk-DOwXRO9iT3S_AR(;S?CVwGfrzniij9vea2VS?wkmdZt!J%#HzuWwd zuQC}T@CmYj5m<1tTuo>(MD330lNX-B40RI5c>(f3dG!3gc1HQ13v(YJUcL6H#Q+EZrxr)Clt=!(o^By<#d64&8XU6_eU}<(?Yp~>ac$fD3HVv z1gI`L*@MSRP3s|0^lQjRcpru9fZae%pFilg51XXu)xeWi%a~LDyZvQB8G-~g z%~={~Dd|Zht4faaQM`movYtSK$o!1(H{D-NK~1eGg%6kSfLFyE=*M!Qh{#9Gn*yn? z&Hyo^5cRO?9uV8N-4u3UHg{q!+|q|n3w@t)y9N=m>NZ_#tZ|(I{2XAp113|&Ps$ts zGZV{DB2M)jREQo2MOyNzZATOp4$>n-K3!(1%gU!cY+7>U6ze+j+?V9)L&27MA;*y+O}(#z{-o(?@yQ~_oD&(4KWBclv1%)I4rH2<>wHL zaa__W!uO+E;+%}0#O7Ku+?PW))OhJOEMntRSf|N@ZFUqzzzl`0FH~egt4l|z)@c$N zI|T}9q9=}eNT|4)a*xn7=29>xZ!>&NxL^p-l-tv^H2VxAT+n(1$+ojEP8JJ3f)v9s zz0@f&imZeK?cNG_beIBj%^pXkhU0S}qaZGRJCwP8w`<>2B!P`8s<4KJZsEp;ow?AO zx)kI-;nO~u@9IJp^RsxTIz$&mLWt!;`8V!UM zrOBtNNR`Gqd9y`7y?j(OUUo<^OWDY3s*p_W^6he$nbw4P38FJ5(jQGo)>V?KfK2(; zJP-{F)!hQZ&E)VQ7))*;U^=N9j3FUR&=)yuXybSJShOprQ9akbY76@@cKeu2!*{DI zeF|5tw*dOsKWJ2vBq&2ba1*LY$(S)wB2;h=F`yAE_8Qr5q7|5YEy(2XQKG)No3xB3 z09w7a71rC>H;EzFg+SsL=}3G(;d+NFIGP|Wa?v~wY}ClyUg2~(`Kfgo(u-mO3{`U# zypfv{@%@=3={f+&9tMgvex)BJY?JT}Av#V@wa97gXJP-DZt+Q%8rOa<)BgOy<4WEq zAT5O~8EE=1YRXQL*nbDi$WQ8rm_+@WjEI%{=T* zs31!4VAKMdvYCAB)N1h{OYR-&!R>3{Rp7s#rk5(Sie>}_90|gz#DYwFBr4G zU6$E2C91d(|6Ry0=37r5k^IbWWQUS2rWn9_bO-BgFl?||tK*}l6j{N5DlWwZ%I`)y zz1xI;rDguEm@8L-h1Z-;i+^gB2N%_kn~Vp}VK|aFgMXC^nnXid;)YYihbBt-)l+MscX|}M67%KJn%fE{&fJq4?11lB~*l~$Utfq-*wL((z z)x=4KP&G6he-Zimj3ac6l(ZrVh>acpLCt`t^wU7HqP3WGQ>2*zd^TK}g_JL!GL8~Q z6s?7D-nOI;%8_)rlq5S+LH(+bCc25_xkJ}*sFJ*46#<~jx;x#EcWgP@u*1v8$+eqk zHsXwdqZ`Rw6_R9VTi(#RBo()cwuwj<{g$T(g$ZUOJG>@eVj{ya1lde?Ln@;E#S~;) z;(dT`w;7=6->wt&kODaUD;#6Mlz9;#xCbR}J(rbXglRxbW?h-X8It)Ga`%86n<@&b z+`?@aGtHZ^u&?LY)KkI|7CZu-%4X9-jZ}(9lu#qEC7fFt#@y;^=WfZC@+uK#Bt$^T zN9XCV_Ak5~k+ca=<&p}zLzpXTv$6(yVAb(!z)n|klcu*kQRdFyy(wVIzGQ962CeRddcDLk}>VY1)bd&6bEiIW2 zEdYWfu20ZFkg>FV4MlPv{CM?v|85Uqqr9+OkmTg|(MdqxR$V?k-Cm48I7`Xyo;lZD`ZSVNF~lWYMU(eKQ)k(&>#kX#AhO$- zp!|qriiwZV3j(qeHMfBt?Z$6pjDf6`BQlc%)fytf&@tnefPd`*#8I-<%&)zozTUyJ zVaXp&Qnp4eWii#!Zd6#ymgDGlBw_9P1sNHL* z0*FEkb*{OB_NB-_;nAN5gkP~RMi%+%0NIKxC~dtE@LLF; zAj=AecWppyAuuFHnl5DA*6NxKGAK>yGK9ZxE8QocDV7-4FL8Mfj>UH2vueu!Jo*|+ zEM@JD_52~FIz&b6PkuS&hToLK1@r#x*z#xDrZ`cg6~E-)aml}e$O;6qt27>2^bi5y z5!rBJe@96j-7PkW2v+;){=JX`zy|rZc!#b4jh!zcP~dikC5@<9X~P7!kw1xXelO!f z59no7f%T<1m@w=Hjy}# zM}Da>U?MhC=n5a6L-cWbLCNO~OvaUJ=D`EJt#fv#AZvl>K@_D=6_dem~{{jyG zbYXQA@{rdK5>{g(>OG~dsFo%bD#VAT=tShjoDHm(7)w}(My;e=F%C%_X24MP@djjZ zwj@g8^e4!02ev^J0Q;{Qhwzt9PA4)vz)T+!qcaGmAkP=DiNtA>ILJf+W_$gaFAn!^ zC9(+g`8C!4&#nOvLR|oU5zmYC?}Fj!g!YvBUmKD*jekyz zAx|@k8Gt_4Y4{by$>(nB@XF&SXn{4IImA4Gq^ZW^U9%?IeTf z1O7d8(%+`Lgs4f_s;GQ}Q5T~@8DjiQ2)B`xP5VCuFFXZ#5pW6%xtcDm@bsA4fQODwl*M*7Irrw18|+tk>;d6>%4y%^A<>n#=(hGbM2^ zdY&3cBIicLQK(DdPG`JDp_Xv`Xk@-n&-K6w6RdtWNIqb894nx4jr~m3|1+)_!-II1 zmVQITkZ;(;r1k~mQx56ot8k8gsK*HdoFs_a2hFQ`1g#q$LIXvK;6EobMniG>G@nLD zGF=HVUKyEdsUFH1)lIXai?FJo9SG#dA`H-dF?8rlG)W^70 z`KiaqVQB6X9mk5MK4L_@czGnhb={&(akbru={KSJhb2c^?vq#Rk6N8is@AgmQc94w z^x}jALGFD20$W#_TI=AnlvHq#%E0*JV3vwKPUtVW$RIHL08Xm-lE43s<_>ticOUR6 zF~N{uc@z#joX2AGCW1yM5eMQ7l)f!?F(dxz(N=?@8$}}i&z9UjM@lv_eQ+Lc!fAC- z@xX5}!{|lDNfc*3RZD+-HPse{Y-pW;qN^9kHPJcR>K?8*Gkk^|<_u?AlCCV8i~jHY z!Ybt=K??aVO9>g$*Uqd_>J4=D66e4CCW(8cSJVWRW&!swJ{9K~oH!zl2Tnm%gqgE5 z)*9tq)}Qr31<~IIIfoA?nmhN8lr>78K)=W*sq0#KEt+7dR7VA|AP^Q_fbtQj-;VVh zB|!3158}W7NRv!e;WeaicICbuXbkYluMLv|lMFx>rs0B){|Mn{S_K1yCvptRf>i5Zw~c8tNnrKke?EW1*D7r zf8_ojnaojMO~o_|{Kxly`1xafuGi=F5c_XVis+xhU_zSX694aq zU?^84y=-%l&^7-*P7(i_kNjR)(*IEWCzk%_davs(jQ{2&sPs>M^farV|1D~7B-pGX zBLQT$wU4{kYb7M)H{tvLB6S1-oWtB4AGxl*Z<*u9oX-XD{)Cs(2Uy1g>ro~WbmM<@_cTth{LKIFna|en^5h@SGWvq{b$uMDxD^= z?(aEWidoEZK}#;9tn;*Yr>@(12%&cCRm}sHX6gT>4iq3dG5UB+wKh7hxvYP zv2$s8SrzpzzAEnO=Uw!zTTkwN*0K3&hh5uyN84>|hu1XZql=C0s59*fkG8;DyV(fk z=XmM1GX3N~h6Y)UjC|$69lmRC`Q6|JvPGyB@PqEJ9x+H(Jsk z6Vso{&*a^ua`2ts@dG^7SnONQh)R3h!G!ky6Jhy7e^0Q*MheNT-+z>wy9GqIQu$~q z(eHUBe6+L?zid37oD^^yM+nu>;PG^jkQf|e?C!d?2VFGCUSfpM)qLOAvwSr@_{0gG zIFCx*^TeE}tIez7u7c8?Pn)HDZ7p-Sytm6ZIM$y7(f)G5Ic7K6?atpevBzReEwpqW zE$md*a>u&)2();m>+3<1zexSZ-3!HXu`BYHVnCZ;6^3Rd9V}1zTDT8WHmkd?wG)B@ zmDSYPJ(`4iy59-PsL1kD7q?=Dxm3SZ#x~?|3HWT(Ok35 z=^-jzd(q9hly~{yCMux!+7);wrIe#M4Tq`bEZ1Pu9P6B*v7WH9hI}jl)L{?XuXcmRl z)c(Y;&f5yqn=AybD2d!Q4P{hlBvJn7+q+4h; zJ0Nz?1ZH6pGZA&xQrA|F{?^YIVS{qz6N$~(w#N?uYzVEW@?L*B%zhQ@l_U&LqB`$=d;m7TA%jZ9e9?Hs!)Q=2&_N+q{c)zduG*9zl z{8iX|xy$M4_~;*Iq!#yJIN92adR;7X_kBNJB--&Qdd+FQ4CI2V=6o;5A@qZs{r$Xj z4)Q(>c30Z4_`Sg?<1hT9AfI@r;g$baQ#XH=?Mp18g3Rjg2D?km#>T;PZw+#mv-17d zkYP7EYi+0T-Oq?*aCS_Kq`$Fzn=j(X)^L8R1?T6f_xgCNIRA8;^$8s&2yTwGVBoy= zD)eEmVB9>dFR1+qWBl6UjOl;-YZ>uyxPu*^7b;j5q%Gi(ZHiTPg7NallUJtE@ORU> z!5f%yO%H)q%f7Y;fz7s5qTnURGaV&@?WLvf&bip(niYSZ+PosPy|?UIiPy7lepNx4 z*|b*6ZWTmprM|1-Wkt+vL*6tnE!_N7;r5r^53g$h0z1$NrG%}X+`GCB$A{PBCkXh< z%2mU8P|b=tH*l-w_@G25+ZQQV-cQNq_gCNl$!1i}0NCu1ZyfBCFAQAcUq(X+5SUSH zZLIo5PIJ27ah{Og=D`WOAFd62pEWwCt&&~U`@ASq#I7aLvP~CBOY+@TI&wfCTLSW} zM;`dB$!1E0<%a~0AMUd~tmixF?^pysP(s!B&y@(>DF?|L9EiRAoAVfgIXK zw|RD1yOrjVm5#bs#rgdFdf$RTA#~$LHdZ=!p&fA*_uQbZa(#sPuD}4{3r^6G-`0LX z%E3X&hVAmRg3slL+$Y+04qnIcIH-mT9>Mj#!!GR6OC3qC+Utr%4&;qz|5CYWk{A+{ z`HAdUeoWoqz<{JHUWg_*xU#retTU9lbta^Hn@6Au(>*V?QN6c2d$RIZ(7&M{Vlho1XV;N~nI7qGfBN~rxZ^vmaxugh&c`D;5`Y+HT_BJEdiWjTUg~l{4b^!=5IBe5IYI?guMdhC#M#^^N<_(E5V7u#p^Dexp-O zA;#}FgZ93ecY}EB(0WEkum$cbrrVujmkRHK;mmwd_H4z%wcA4`p9qHxzoq^91L%>2 z9)US#Z=p-tSOnFXx>^`U4C#Yh&81bV_x5P@Kiv;A-X%oQf0$>3DHTp$H(Buzm)nmg zu&%MaKk+AQ0=EPS6A$+0O`UgjN4j2*qw9lqQLcRlAadvB3lk2fhwk0?@#Tk1L2=&d zz0&&+`Yu1~(?Qm8wbf!jzRQDLSN0|wglg-vjc>aW+kH4HmA@X^b{FgQPt^`|`$coj z?=e=2eJl=hsa++V@nSdfbe=y%h0F8)S4C3)RD`Z`g)orbQ{2D&Ml|)l$Sq*=?6>Q- z_8gZ5g{Y57DOZyqM!FLQ*@) z`0%pd-_wf}x`T>C|L_R%UJp_x&+&o2>pGj3seAK$2S`)n&) z(DnNGZC*Upkq-6L4=$#|{Mav1!I6Fa0bhN$ov^XUp!PYQBjdtjBX4p3?)mWABXDrp z|KiB9-3nbk)z}Ax)=yH0PVBCZ{8bKj4#^Sqo zdxkf;;?y!8S|xCH``FWaIW6MQ8}Vg;py}6MF6VOino^E}m;K1AfiK(pE=R&3=C$#g zh&+#`lOk{jrRZIL$$j65w!aavd2%BibFegD6 zPe`nB`Cys1Bw~aNKK8leioT{oa(PP0hL}mwci#btT-z4~Nlh`#P!(@Ik1%|${#{*3 zsr#;yVyBew|Jy2jmh1r}pFTRT*l3X@wF{Fq55387E+CuZJ^AGdygL~E164g(6Ct<&{wS$(y=o<){+ z7tG{Ujri(cvws;{HMq?heS-V?>PZsh>6&)XxGXP6V}DIGViLsY&sa7(>1y5)Q|Zb z#KG%wbR23aZ}qLatBUW6>jmXk)vRCcFR8|2-wyoIoIyL^PHVyH=LQk?0h3FSkeVp7 zY0rj(?L3mQ{$V95jR`tf=4kUgEz!8)`}Qs5%BY=q&+&QQm8&TEaxR%mFBDK?v)$NA z^lnSdrl$|(rZk<@PJH&ot6c~iI`0h-MV+tXvc+?CjH}851cy$%VAtvOzHnNa%^A$U z_{RHToqxOXthU~C#raa;VNB{@<<>vK^#!+47SAlq^?ysBZ4@eT+=zyR4uZPT3WZLJ zisZ#CR;%l`e&{Txt$JF-DX5*YBX!dov<$JJ#X*x|9#J4ra?=HW( z2H7#f$fkRjbahwNSJnGiMtstNOiQjec2Z<7P@2n< z%c(B_USd!|-jBqF-H0WV5mBw^Pi2R0VdRc;MV7nA)jcn_WnmEm<^rg0I`5s;_&hi{ z2x?7c=qDO`+r+V*@+W~!FCv$S73XE9_hI8ofZiss*4-lSC)8Bp`ibT^FI?{>Dx6x+0k2ry&Nv&w*;?G712*ti>r6a7w96^$X_yg5`BYZfNN&zzSD7weba z90o|pkls!}_m(}o%G@rfR)27NZy7}qU5&IbbZBK!e>C+ms6#E;`1v&;ir`v3IU}IK z+mOur_RewDZC8%ZBa970)Zpo|=RiH{MuD%9`);7=t!Xo}0*w*z<_P&)FB=|p8fewx z!$CH`Yo;HS8y(HIZ6f~XJy6OX_a%;2CMd00V6t6`FakTVpNEaIm_Emg`DBUa(1zu$2dZy{KFwFr)rX;LQo@fBLE+l&J(YtMqIptH2x)6_8@{RcHF|f!Io>_-#({KC&=DzWF*J z{_Tt5wFvM1!nayj(s3`s>k@Dm?os#r)@PEb1kNDCIrIvHPtD{HS8-Z*D!7>VLjVN!_v! zP*-oarJ}d{IjE(^P}Jg>w5WF-N6w5oUQ=Fs6^+u56wTfvHy^gL3NyTKirnai0uU;y z*X)*VN{Zu8y8ZT}pik_k+V=d*tttbp?n{p*di`&uBa}nT*`kWMcqP9*@-bD}%otFz zW{Mx)9cP{2I?Gk2FE-<~64bi%qP(x`R>Ww0d{?pbqu^CIIfJT- zfv0q>r=w1nB}@c{&!@$RVCLE|$9)>;&e`@zRWEGj%(wTfO;It623(`)2WbLr$Wi zLOlX2x2pZoiO(FjhXB2N3E|_tP=!!)w)SqA@%jqyZcCw~27H5yb=b@(P5ARlr5kDR zbSgl^8VnQn#fM8StfGo-S+%*Zp%)E$9PFwpW&YFv@EVpYo#*%86p$}M$ zI>2j=Ze*D0LgK5gmzr}UUvz^o(LqB*FulPrDjK`BjxP4m>W{;x1Q&lFPl6DnsQaUA zY}3qYYCK?E(>$&d;g#`7#C96>6J=CGM|bbvVb}i&#hZY@lH7v>XygesFIbti%lE0Zb1&xoufnZZ%w?cp_D&@sAYX~_$Ng;9l_ceXrq&t7+L|K+tA42&0l5i?gMh2O=AF5{Ue zle&1x&6y!k%@kX|b{69zz6mqI_lKx*hoIpAwAKIgk)11C8QC1ibz<91}QY4Mo1*V1c zey}qHBiy9t3$+siRxMjAZ%v#Md{di~9gFAA=eCFME5seKnz4`){O|*9Ob_-MQ9JXX z=eS&jYN6oI(ah_1R9%vB*?B*p<4PHXbHHV{Qa{V99xdzf9#%NN)oJd|ZYxbV+w-j^+H$K{7dZB@TVaWUz=+z%l@k7sc_T0d7+mPaerYC;- z!-?y{kSR%GUQ?~4=|)@_hDy_?q2?GeC(R|yuH`eZ5m3*S?qr7W!I5Ru`^^zX&PB7H zE`KN?)eXww9@-zRd@Js0TA5$p0j4;m@vhCdg4+QFy;s47;^Fc@{DaHBtUOy*@mu!tyR zQ+YS^^vcOAK~iP8-*R_>X2FCFf!~$VCJGC2b@`8jggd|@?&e#dHx_uka#x~dQ1VaX zf)vaa4d4;qYAV8oCemD{>r)qiDo%q{NE}L$|M#nvqRdSIBN+3N%BKwQLZ$ zYlWvHf8pz0)WAkG;1d!i&RVZcfY)Ib73s_)&Bd+b;mNTQUz;EpK-}lFSKjW)W~C1j z)6@?9WUu?kjWL|>TaipG@3n(@V!C)z7afYhFDEe8A7rj5MAJ!H`h5k)y1Syv`>yQ{ z!*QmZP1z&7_NNNG<6?S1yc9Gs^~nwRch!OtFi0r(CL!4j#rHNLH=RjvN&*xFleU_i za%r3e>p=h&TZJ;rf%2x?FKrp0Co;o7nfNMg#NKuX9MJP#JY`pRn|I+)y^IzI#8E67 z*ZA&2M8U4ZigaRNb6jySlLdZa8!l$g@rT_&6-+=EJ;^!@f<$r~6?h+o2k)p4-LXI- z=crcLe0k{8O(1L@TGF>{udJG{yHEXNEupBws%{J^%bR12&FvzKQO9|Hkt)k!akEcG z@a=BpZXGS1+8?Z0MGAM66rSR&^{KoFdS{{L^I6*(V3OF0nwedu%q)n|&d<=C>0rH9 zB}G@Lh6kL&Q05^Y6F}LCum|uDv(yq~ey1j{WSI+~YwU6161Y2doX{HjkaVZ(^Af45t|_+9)x+k{3lm-%mmG1TG$;Z&v&{JXz z(^vo|8o}?NVWtVVLbq7J@P@aLctKnf9!|7R#P>t}X|H=5AWhLzylz+F6FApA;j^$> zDZhyXl}1$fqY*a-#E{teaimKKHY|Ixn$ui=_3=H53ulON1MTn7b|8s5*}^ZpOn2&r znB19m01*|nYuZU_yK8?+)PwUy73sMcct?hemU2$}6|hlr-P^>*m;OB26H>7XZ^kmr zwfoc?uTVmJBMrj#VU$BFS_vmnpgH>oVEWX^HId<)HNvr5fp7o<7Ail;L) zu*7upxm`f+t=RwU*odZ{4OyQ)EXmG>&Q;gi0%03$L&%s!;Ako=W$q$K=uPVX#BhUt z1(QCDD+Gc}P(bdR(zs(n1l3rUlVpl9^)0t&bN?1myx;PnRQW*_ z@*`ZBR(2mL$_D|&zVAHxxKvj?S>NJ5atL&R)OYCFC#D#GMWB{JPGdF_S4QW+&-ly| z1%xq+i;FdDOmnc1L(GV(A?%Bc$|KY$!Hbc&pCyld1xaS56N{wdxE&GvsQlHmyHs*b z?xB$7Ov{A30=g^IO!3U4XaW%-t?ms)JGZbYb%s&DY-U@~MAQRq2X~4QkIC4GZn6Rt zELM=#hzATpzSd@cGRNbzszn7>J9S@U{HtBgaC9_{88?Xc==WylueDB4Ky4$?Ih&14y%Qct&ks_rw+JdLxvacQC!8Qyt0ugTZ6#{kL zdVaX#T(eTX7KmU+YpvWy#w$;AB7-owk;gcsiOGw8>cdQaqqlNaE=$wV41M)OIAu;D zVUXb6Q4A-rjCYcgPl0)-4B0;MV4ad6$j7WSHk)LQZIZ#V0}*i_p-{><0_;7>E?p+p zfSFO#vLP9nXKA;*v@l0%#qb0xDLs&L>xC8&hy!<4MGuti*;B`t>uSJ`aK(y#bE(9+ zbT;>nhdpLWA}RIJhy2uy=T$&Ez+k)(>5e;vPKOAns&}hyzit7PzN6~@<|;(Lx`A1y zEe{IUkzRG>3hRWw%vGHk$v##0gCJ@O*}{aWcZGaN^D9Z4RHD!{*U+~_9Hn#1%CB2@ zSTZQd2IkFnP)LQ|^Kx}?`t#YwEYL~LQ>sPmyNOg%~xLNj;;= zX^-L4a;-nBgexIb%nC)sVjC_BZsxa$6-%_s4}k;#a2^mpvRQo;gwr&i7o^i-RfIv$ zg{z@d)18A5M`uS>^HqA2wm2RAn)__A5q*5T)n*@8CmP*kN2Z9pZ>}`ft)@|8kF4jm z+Vsi>|13|Lp`oHxX-Co>z-1_hfljiB$<-d50>WnqlN2%IK%AKN1uJeta6PSWl3AZL zPeY>dup(|_;*!a3@?vB+8SRGw-TVD?H!@^>T%T+E`&10-M4;|9quV3)VGHy%O64-O zhrKz^^ReOdvK~pHs414GCz7P}JLx8)3wPcNk0_0#+&?FHsCg8yUyPN3XUY(V6wppS`VeA-OL|hpr zUt9<7q`76VIB%F{glWoy#A`u~j!qhu1FFc*M>u)lcube z-rt4$O@aU6Ixkuv_8a0I(kbz>#I8oHS~L>~?$y1KY!R2$R2w8-DIy%g?yHwIGX`)m z20+mbt}??26LObwbKKp-SZAS;J^(n`zk(kW7)=$BS~nx$B_+`xD#c35&^PXSxJDLul>EUzrB{V^4vcpK>5Da?z54>VA@Yn~E_grhG1I9G zZrI7g=tWmXGxFZ^WAsPc1W-j*j$K5*uRt?pL$sy3c#kcwOwZ+W7wotZUFx{M4bh^n zjQB$mBZms9c&dKZY!NK#&4_{fWwgdgw8vFi2Re>v#cP7EItbA^WXt2Mji@ap1b|=C z4Fd737lnZf~g4TV?sf&0tb1^^;1S_;U8i}KTj%ag24;h@}PH6X$+GYS|3JhMr}cL zGI!X52wthfx#JlT|5`T?#RWqw2wcbK zE+$Mf&VugB)lKYyb(%ZMVq?3Wudv3?>BPf!#ZV(4F*-lxfSeJf|d{EU}pTrgsu!sS(>A$w(}nh^|Qom8wzu-dsIFXF7|l zsCtfg)z=U%R-Q}h3ft{JCN(y9DIPiIoyeo>E#ZO^dzyoXknhfK89d=oLo2-FMQL-_ z1g1tqT9#D4n<#6Cei|gRDXsy2G6lHS*!yDPSVITYt?sA|Z9WpZorz1Owrk!jC^8Lh zw@uh!(1y4*OzwlR%2UyISsUpr9GZ5@0KXm$j}vCBqYBh6f7bgiI?RoPyPG5HUtz92$c^W2Ee2$Yriezs(XAXxd8 z)kuvA67Xn>d@Lb1I4hWl@L5DIb67PXi09Cw)1;oHt^pHh7hk2j=h;FYqdJ-7Cwq7z zD8M*~$yRV&QN}|p1nC{W9GsOW$!kBx27GGk(1%HZ7Pf`!KZEt&L9ODD>!lfR0xnOK!;@j0eoyS&YY@CS&MsCP5xaNdy84dYFyI>Z!6o3E5z=GmC&w6GG(RI+ zviRxnngIB)4&=|t4U5qPdYXxNz~vc=Xb~VoRES}OuU(IiQ3PkVouOIcddj(9#JEt@ zFn{pLdgJt=!#hmmlBImO{PJPsz3>g1)oaVrERD$y=Ngkm^$t9z^5>$&l1ki97W`90 zz~*I8It4>M91(J;AGM?AxaWZoh4^Elv}G{3(hz{>+kjGhRZ<({6CWBF!#eZLg}qMn zF$~9RI2n_B7Tk=%T|+P-PS!YW6-@bh87|zFXE64h$rZ9@rBYRh=6;Ls%_Cr_)DU1P z{MgzsMBn3qbykJ|Ujhc?4@`=rh^SOARO>RmZCp0%Bd`uHbmN=@O7fW>fAzD|hywVX zD8X=cD?R+YK5`FErIb%{0Kq^V2vCBSUK@{7iH55sZGzso8V$wpSj5kqN-<=a59}&z z*7pw#1p0`)YU*r6X5X`aA*j@?D!S7!`iz8(t-Z`NZYdRBopCly89>C4_%lSz-o`c& z668Sz-%cruEu0+(h5~#i-*bE{q6E{Gg9D8%L%&);n_F#e_5iKnlW;#6X=hCiBt&xY z|G-M!DC-txI4s}Le_>3&AzTa;AYl1_GgKcB4|s3;AFP!a4DwgcIcQhD#Xr+g08Bs# zHi$%o=N}L>L=f~BSSx5(l==?@`@2oqZQl)<$$OJ~{LJ2?*G=dTCn%t#D8IT%QS>k6 z`lE|aYTkq%pRgX(6ukc7V&4#E)`i*U!_Z29f6xd+8#(q?jp@Y0#Xy$Bl%VE6j3uCh zX(Q4XnpM;PJDUXtg98zf_hV?J`Ev}X_qdi|+*)MfS|>ZQ9uO!}MY$-_5Jq`goL_+w zvmo-`W>%!**ig5hv&Bm!Lhm?8TGB_|Y*vr*bMsTEgA9BP3V|}rf#W}}9htW^ z9p~LDtr1dp+@uxwNArq+UsU^aZ&w$k5u=}-vQ*_(iPp5@h3J;Erb6(%ev;ARL%a86-$v9sU(VqJuCs;{5H^>Sz`Cb$knmWtv(%eA)DO42Y zzzPC?ntw;f3)cSY~N}CiV$$=Si-M zM-qg}peXg@$nKPsSBHfOJS|@xRd8C|SF$Jg zd1AolYLsG5Br>G1sku{lKzVigg5IaITdFC~#No1w4=$sv%U{ir$uF)dA=jD?!)FszK^JKQvZ%i10{urWh9 z;BEa4X!F3={HML+mtOnf(<*yIR;(A2v-rJuTvjnnq~OYA*_b$0V+r6-8uldd9e;UX2Nq}t@7?gJl9*m{_uXh0G3$|zm&Ql;Fr9siR#qV&BmUX$0EFUE- z`ms6u&9kUI2R0f-bG5MT`3X~f2#z9Qo!Ol`36B~w&*PY1Z49v2EXBErF8}HIoT$u~ z^>LNr>-`GRc;MT|n@<1uH~Sq`(!gTZH4o$+(2;8iBlh?p0XLF_n*yp46vlt|Sw9R0 z4WgKQsPklTG3^m<_L6NA?0R|2Y7m!ksKW8rt${Fdg}y@GrS_?PdZq9=3EtaGb8^Z| zd%S9e5E0n=pNza`+DfNC!Fgo2QplO1Q3-H-Js#IvY5e$Ht%i>-6pbf7XV^EJiDRyg zU9WEk=YYN`*7YBb8!1fs51hxg`h9;WDT+7wv!cE*Di~m@z@NPkGh&J zZzIqzvta>tE}MTRcwF|ZnVPCdotV8byxhvabE{}?4eR*oV*WqnudrW+`YcR|}5|s(+ZL#{5-5lqTPY{)Y}N9FPtsrVU5ZKkh64mv8zQ3i0xrZ$XF< zK{4QGCTerL$NJI!*~lutgrtqlCi;iYcWNLVHI>E%jemqpfcsUcq(Hm&|A)^1cgh5m zCkN?XCU=|yJ+0&JC=Djefy5N5J`pv~Hk%~Gr9ViJ4Z?b3;8kAKC!iYlH(@Y<;d)37 zut+%Sqpas%hi>mL(7|(aO(B!YGZh>mJJRWO=W{wHN$ZDe4Gs2cMM#NK&?+JE%=tl( z;a+6vSH*(k%gpP`lSD0ZuJki=8V%x|$IX9>kawIu@6%11*&<^&j!^ot@<m zxT+&>EQa1r2=gwWOI`xH@im~+@9&4oS@t}#&J&MH7-0xY^E?4u-Cz1wKkV!+>}5)L z0KKvboZQnuqWaiZW|80p-ez*wF7UgRGH@=aFd*hn(Si!w1H2vM858btx9a)^Jn=Da z~o!)sax#z%^TFc?Pcv%(g~HZ4G$fBwU1GyY76YM+b%*w+=k zOcv*?w!2Gp6S=PaP&$;Njnajo8pO)Wv>7U0&o1``FV2wL-qf<#`dI7K;-_s`+}<4k5AYr@(*+h~ICRBr1%Fjg5gbw`@}GrxDP^GG9b zP5Yx_Kaf54pkREn>=%n%mv3yjl4M$_Wguv=0P>O|CVm*bu`l}SM+I6oJ>JwDUQAz8 zomQZ_$qP}tkwTi%B9uNFcO9=0`wJ_Ps!rCNe!=HIUpIah>FR)mf1gW~j)JOrBkdW3 zNL=)Bpcj$ab9Z4+HXJ8y-8!3a5bj+T@bkd;haC^5d1DmKg3#+}=I@1bYQe&B2b)dD zQYrijv)q3Giwf)=lWA(Q+2qEQl+!2x;r|4Y=IkM_<|5PlTp%;v-u8^6&Ffb6@@z11 zlsb#~>oS=9`QX})CpRduYJ-NzF0fVYmwm~4Vc_=|0%I#8A(n#}pw6%uMTxKGJO!h< z%Lr|%6bJ=$PH^?#r)`3?pqyA4NX@*(gEdsl9cA~|*sVdw+=p9xa6YZ;(qKGu#wR-4yP*6XKNRa+XO_4b)b!Fg=lqdA0Qn!OR zT^QXkC0%#XJE`@)7x)>&6(8*EjlscS1WjN~wsa1ktke>t7uR0*Lr$+w$*5wk^sEir z7a0u+4-yJu*Dt=t4WjM2k`qe2b@X&7KwlFkD6#Rz@OqWcHO%U9YsFmWb`ck^z>O%X z?ftk=TUNhdFlS(C)FbmwXyM!7PRCih1dgnAF5IG`AiY~QB9BrMZC&_CFrl}~0WB%d zn8JRrvx%?#46b%@iMQi=f=f;nQ>4rdRi#p{^jERTYY3B~kKx$?+{EeMF%f^2OV{;j zW@Rp*pGm);K>9<7y;L!bsfBac(T;x?E4e{KVERVfyU{QTsY^>-U~V3(X##Z$v^z1G z4G>FX-1kK?_4AT=OwL6eBVQWp) z2JpF0N+?9%+NOD!?wKL{7llvmjl7XQujlm9xXc+`5ZU-5nO^7(|Hv0W(VrC9N6k=U z?b25omAQ~hr7Wg{?&Y(_c3V&D$4f3y&y`yug_Cp4)<`bkP)@}8nDA}5we@0GO9%oV zC=5DL_7A_6O;KwhaEJ;B)eijgfL|XB6eXU71%@d-0ep&%$+%BB&DasP@r_w>aK(1G zjYrJDTp;H#0Cr%c9mgfSQk~+d_+x&HivGNFa)wB}y)C3#pKQiFpc~u9pzBLcvqftB zCp$uqYqx|dW!BS9a78X)x>79)upKQPu*hRFYK79d-lyUiLu~~GhoYt!1$7Js8zqy7 zn9N5_WQU&&HEq9I_3+_66P~p1mSXCKgOI=PvgT`qXa z8)|kGYPk;teBt-JP>H*+bdcOEj#YA)wnT$7S(C<#5Kxrn^B=0ssBA<~_SD46X2Y`2 zzoQ|%(=bcG$F-I?s@#TMo3!4(X5#8Y7lW`4j*lXyQm=Z^DD87>*{YZWcFMN?|A=!m51f|7HKH;lI%@2>m>fEd2~WpAyG zMU6@q?v-vQ0ce;X6m=Buv!dsxO8-JpumHP3n9xk$%+d@+!Cfj~6a~D*NQ2mS95sfq z;3?$oJ9BCpM=nz1c0fceG=O17XpA9`J3E>nNePl7cVVt3Cb(W9%n&}KE{vVwO*o3{ zaoi@bXkxQvVFBhHQT&z6d18Ea%a-ix3t|A8RjRtGY7uJzeiArK8L5Alq;+**;*Q(G z$y+lzYYF9%em^eAdeBu%QnqZ#6gOOwzWpL7RX!6|c%v-71B7sHw1!MKD3pLtt+QEA z18NG!lqW$Dt2OBRMrd-So4fbrEG4z{hEvO*Ij=rJz>~yR5O~Wgf$hwf_GY$&kTPuW z`rm#|`N>Y-Q%}PJJEWdH^ZWxMP%_m3wMrTJ#S2_j?Txb~1?~|ZK+><{Z?qt({VbKa z9Av6X$^#06rYH4M7V~f>G!j|6TS}+K6A?;9{PC!}R1eiaX1y+A6HQOaP7M>XOKq9Z zb^TS+BtSFOoRrb2~$Nyi)3_BtxvUMio&ALQ})xy70YK1evo&JsZa3+r&iB_nx}>1OT;1(V->?3228Rez@zN0O2TRpbnih5YhLC7c zdF&+nXMPC<6YpQB*)xPl7VRn>Zl+svVh%R=(vwZ6cKZ0Uj4J*4sMOg|Y&Z_lD!UJT z7bK=@gK1y185zVj-KmV|y-cEZs>CpP1Gv~{%kx2%+8x+&73_>Wjd+54lQLm-_TF6Y zPtWFMGGRf_Xn0JYdzj%xhSbjuK}Sn@W=gm*=)zeLj|`FR{Ih!(w?%CNf(gRN&QTH zUWB{QyFxpc)cuZspaUE3M49*kTfx!&@~X>1-%qN5KAj1(Sm@T`g_#8xOy^OMVt8p|0Y6U^fD zLzgeGeTFz|5-W%vXL7@t2t0YpOe+VXl=LCP_sS!XG6Vn?2LIMf~ z!xF$If`fqx4W)E1+SMNgLpp5_hTs?C$HoQ|VvQFo1ga!xMbPOR=7$iJBZ32w$P9t* zCj~=-*z}r(^w42%?tHVlm-!*nqkwb5Oa5?Hx6Wct>nZ)ErNrV)20Ktl?96lZA%k~? zj41IUwIMR~u+1pmY!bTzek12ubKb5uNLJ_-Ryrez%<36dx=Sm@7owSzNs^_u)?!d-b1;_B>a_@0;9m(cDd(5I8kU>Lre7lM{eW=AmdQG~5QeDr3}(d-fFB1sGt zBp6m_%9DDiQ{VGxaxX68>g$cCdg}QqJa>LZQ7u zyQdk2n1;cPmk=t`aehuiynqEx6Rb0ZxvCMh$DV&Dj9!>PRft#!N(I#cAm6*N&&$*J zy35*K?Myx5&~c#@*2?lOP-t+O>p}UMpzJjonP!b7Fu})pF@5ft7PF%-@M@n8O2ZT_ z>+aqu*?(xMf9kMpkIm49)*EY6@p)Qnzm~v&OhJ*vZB1GbOa~R`o7h8nGviN*VSsJz zGm7mMf*b+dRHrI{v2ppU1HtCUE>7Tw%6(R`k`!Copj_v$jbuGETB<|8FmN0r%0;Ul zN`a6I4e4gbGnH?qTcWuqOCG2)ZxwgW@s+zgJUXz2vR4o41nLgGn@;MhtMw_Llv!xk z?_6rVduG8(deDt>SaOhSlK5CGD;fvM7AkWoS7RftlkZ8jlaLiI^(9vVPgxNV^wA?l^fCob4s z<^bUi6V+hQLbdxG_lKYU=b9IFo`-5|G9mZUqYa$;2-fwD54<%4?2StG-C$qu`>*%RIno7s*++QpGPHwj!M^kWgKr#xk zA<##AcL5)7(^o_ltW)(8>#^~%fj4U1J^`*!KER?8O5b64OiA zQ9`bx;es<|h<=w4pg?`WjIgWP46l9goMRmo-e7>jn^0eG&SEC$BW&~ za5uu}ktZJ6dVOi@{vMv-o{uAvk0(+O?Vd+^{HkmNG+vpSzcA3d$ACx6kZuT> zO5m#d%y~*_JZ1wUb6MqLHs1hqaf3sSkI*nns#n<*Z6mRRv|B-pYtCcBT;+l8`DJpA zut!S&qD`(Ndpz+=AI>3*5USQ9-S}0dr@nGJRl9UH6$GBWQsxeQd%{e;K>LrDPbHhQ zgM2?dv#MP)rwminnz^srO3F2A1nZYF4-`>02sIqO&&Kac-38o2U?o$lt;Iw?Phw-+ z+Q1%4^;FBzZR9hnY3mhW=B=}ga=O8E(SquC?$C0Vwv(>SnIKS=CiHxj5$fzT{r_o>;dh?iMn(?#lAW0zVQ=Mtsh zAVK;b?T)OIR-t5w-jS~;X~9yL8yEC+e6=e<5^t5bK^_PakpTQNU4p%#$E6(aB783L?6hiYD&!6T}R@Fc(V~LjZ7o zRX<>`>uYvr8?{%8zlyjtFU<6d+0@02ayY#phxq<6DjF746yYnNp@g+&nUOGwPE%T! ziQlAkN3TyWcQcv5Q1TK3w?RDd^@evF^)4c#{#v&`u;;o3k;5Q{BXgQv59}Z>87D}S zC;W%#?OmTxuhIu==`2yw?`qKA}a9VCxtavq0Lj1QGIJV=yMWj|W=B;z0_ z6;EB?a2EqC_SLTiV`mjS(99ae9u8*&qYx2!d>cB|&&pAw;wVX22UgZ1QDoZ;L;8km z!7FqP=52LgR3=LASjm$*7SK`!YD%+^taXVyudA>rtcB?btZy5bdAvoUdOd592kt4D z?jcfTgVYw-1@4cb$_D1e1jkJ$zgT^blH{;UOAyYDYuj>NMB}sPLKj>MS@ro^NrU6k8VWbz91B=s;oFPyq$8IdZ+TiWJ14ut1HX z{c^_?lg8nfD^U{Qzn_p30}6<<5v;?^StS2Fo3wyP$SLEy0 zg@Eqn*PDRz)X0GI>TsQT|NA$PNHz@&wMd#_D#FJ<^J?*c^Ge3PZ^iza^B+d!gamOH zF=mWo{?3~N&eO6Me;56G44N4nm?g4sLPhzpr@>HlvU=;~;^CbCWQNZFk>uCAoMhH- zfL)=$8)?jW;-w#I^R%`;;mkfqyXOjJx$P?8N5A7U^f$09Gr6q8ivOHvoVu>)(Jk~tDGgQ8-*$s=6{R%ORRo~q}E2yzV{XK%T9TCcgkH} zV>9ukeeuv`lQpV;q!0wVq4bp(DVw7ROC3?X^>4<~OD?KY{!5k~)ag^(>1t6E!imc{ z-amrWk^q&2FW)SZ^hZfIRM`k+Zv;4izZww%8=mAycM1kB?*Ey4s33^@>5ZES?Dqrm z$spj$S#upAY5rM(*(_g{+E+(?h(C;GBfR z8SDKfQA-5~iq9Er*KBx>8@fN3uqn#ZCiA`dNmT#nT;Xw;;=aSW6}!fFdpYuc_(o^W z^ZC1ZjkgoMz}nk*0~Y<4jpHkZCT1lzutiz$b8=t$hND zeSPQi-Ef!WkIa*o5P0%I*JMS9SP9MY=F=o$gPajWu$NFvC=8_Ds-eEph-pVmKC1~e& zhoJTh)$}igJSTU&A{rFdIT$nS)P_Wt%+|MZVjvGySAJ%TK##$>Da~378-AONB~nbYs?s0o9M4mF3FPG;rc;86zQ6=C1vw{D zT+&m@&u>&1e4`O^0s@>p%C1Wkb52gBBAxE199Flf%}cxJ95SXwl~xNf38;BWBHOMn zw}hk*KStpP6VXoA9&1&us+`li(82uiPwlk^Dm@aj7 zezjSh+#mVQ<0LWp^sU^BbH$B7F1KZS*zb>t;~0ZQQi!0ck_)X>|0Glt45QbpBDEe9 zUD9#Csnb$eyxfoWPfs_E9-)4{tKqkeOJ+ww;7JCNcB6!U zpO{o7Aress{a#ZOpXM?6K`lW!&7qx2Hk3m2%k@tOad5C?SBvCAks>gEm3sRh$UAPYZ}_PKp17G)o^lh_0oCc zE&Bt-EcpA0mQLj6vXZ5VSl4}da!ObgQqOzWXjFwJOBF_Qc?87?9PDqjuEQO7oiD>> zv_Dh`jQU`Vl0Tn9+=S}xxww6El#r0{9<2VeVrJA}h~y#*u+nH3+vo!Eml@O(@$!5b z+lHUC%fI&*Eu1C%?gjV)pJ1J!6FMGNK2I)aMK>_>K}$@Tsfk&0$Vmaym0b*um2=;{ zX%pwYg|ga)qqaM?anw{^sPX?0g8+-HrjFhewZV!DDIG7wPrRhh^ny~?*gwn3g7MeN zM#(cT>zL%Q8uVYi%R;tdb3u5AiSXsJeiNt5uTw7kYzR5lsjehZgj{;2esQ+y zfJKsuOv#ouCC7(IDaFojt&$}jGq!BD0HRx5yx)QcJOWwL?LI4bZ#_3*d-}g5+;5y- zmS@ld`o;)bb44~bK`tC%X!2Cg5YT+aDoa6ZON6i(r&@que)~yc$ zi=f$-+M%J@S9(;vTP&7pU8Oodul8*#4ee z3k&#CR41;PU<)wc<#5N^dA}+lpqRIHn*R){0KTIp@Oz-7{yESUK?iXcDQ1?h&3Rpe zPeXeMHc5n?)RccihEd4)?IacTfX)weeS$&u)rC50TF(s+q%Z~k$EN!upNHU7cAeJ6 z1WzsXAIE4R-`SSKE@1`zhfsDbY$IoF?B{{`Kj*411k_jG@Jnz671uw*1i|=7vJp;T zDXjl@7>koH;86aLPn85F8x{;AdIH9S#i|uI7dnkvx1sQnvCto8aL(`l2=XWhVjUzbQke7O zakBMI&f;}hQP|VjWDi~@sjYQ0@u$V}-O*FD2=X5RvgKeZu@nd~5SvdYqnZ)inT*YJ zpiB$@{9h0(QZ{=x{4$c)%_#m)w1M^=8yJDK4K7vu-Px8vjn`*-Lo@zi=1>e6ZZKZn z{$+156&PET6|Qy3{0^4@Ur-f;euTHa{1FyVPYH|@j}BbV|1goQ3ye~3NNqd*J}Cp* z!P1w%S6juS2GF(SxX^;Vi%6KVd*f0QpLug_#m-EDtWRzK!*+IIHJ z<3N@)4@-)y$Jq)CdLZ9mO7A6kwrbcK7ihbn^rlWo-nD-ne?ii&wA+v> zOvk&xXzt;b=jyeDkisrX{yqVo?G6z`6c$7zp>gp>HmQ}a%_{k~Mr)AX z)^ijDUgvYp1Oo6d2tNTUClduhL`i3wy$W#bS%lgdo`>eMypNOM8r~L<_7a57veZ*C zz{asVf9|{0u^hc+&lzB8zKa8dZm924WTX3PLXJ5=OYOO8*=@PeahxY!t@kR4^Xz3^ z1X%#s%U`s%wro!|<~r~F^j)a(W9Qc_qiF8OUR)|Fnuy8Pz11gDUmQpg8Sh_N>wnb+ zaG?b9{21xeVK$x)jl_NL75d?j{sesoDaWz>i??nM$to%Ji0i=Gb&Y0Ys`qkL4&|NK zla@p@A-n6Tzgv{Z-s_QO6$z&Q%bkb%Vbxw>8Kw15zuLFYY$Q+#JDJL^3Xh5N!hA;O zLq7aA!wDI-_fyd{d0dR`+tu;>uEG$$R${F|S@aF_&*MwBCwr7XGm(X4{>Hk%b5ANL zPBFcDDYJ?niM`rkdoUJ~_12O>r6_-ee&+6X06Ip8uO>uc7?T)MgG{GM!*#(UMW;(T)0HL^?Hp5R! z_G+^QjV5xft<7>QaU!va#~r(QmS`m~iXYRyiD`bW;3r_I-ZrTcLdo*l#eG4}{^ClQ z_-AvCN$SU7?RZ2LRARH@k%ErAKOX#WYgVvx*&5E(Td#y+t-IFXaA>$)&7=vz!kDAoQ*SrO4Bx1O+g;}{OQQ$Mln53rN~ET4jU?Vl0Uj?MMT!bZMovRy z2nq^Cm72zWXwhp{CwS$$gCr_m)9* zv|XEMkPut~3GVLh8l2#e1OmZ5Sn%Kwg1ftW2tk8uu;3cp-EHHxPxC%c*nD$N)tNt2 zGxgQ{-9LhBg#uk7FXYESTl6DG#@sU#5)b$lnwXlkUaeGYu+za z30JlOkLeFCmrm;1CiN!5x04?pPAE+R&k>4jB%iVud-GPYDin1cwfDmHXf_<2tE$Mf zK)z=7I0kY<_g8aQTCY^bKIESW5itzYBnwk9Wpxg`uV&ttW#SNP6y>#`yp1PNrU;zUMk}^Cvcync@A}agds}W@8=o+4MtX zfWLo0Tqe zjjDFI8m=y9kZ?jVZ^yRg@YKlU!eX(3`pX6c~6UZ%h<#JeXXQ3F5xS)k=CteNKpe!>Z_~K+mY%K3J(!+^G zp#LCz*Sh`W9-eh*Ja;Use@~fA?T5|)D4c!qXc2Uxs<<6KgB@tw5ww~KMvbP29Gl^b zz+umIQfRU+SgpInr73^4f~m;#p|Zd?zco_^l9I@WhNgz5&gYwZW4hBXCL?vOdYXlf z>$|wpOW!A@C1UGH_HQWO^fjkBk*dVHFenNgu}88RVSs~8Qf^~M6*}7hcA{q(pl}?= zxANDCe!bA-9TYkc?J2Yzn-w;(YNhVoU#Pq3F+DxX&T9nVBMqkH#Rj_YShM*;^$UV^ zYojo%Y0?$qDpw2|tF z!@rI)(`=^sZsYy!z_aixai281^?2jk&FMrPe*cgyBQ-Z}Zm;XHIme|yK0-R zk!4ERKqwe(-m5K4#R2lm&W`wD3@Q3BvU6idjyVZxX?;c*F@rt7?hn^ITf-J(xB=JZ z*JxBC=v5A`UueCP9pAJQ322U1xH$nBCncFAkX?FWn1zHC6@CtBRC;xev@rjzI%0F} zPW6^)t(RfL@wPd}cPY=+HXE#J>se#^o(q}h(OTaOwYw|g1Y^uSJa$Tky9)ZGM~`18 zmaRq-cx;kJ=B+uD6xOpIe#nV)*C2l==3Jz`LbQLA?$RDs`J+5*{r<{`Cg{-n8L_0h zUk?GdBg1xS#tnKQJ}Pk*4AQPgzr0apvUhZ3(l~)0 z#f&Pm5J7>C{6K}YNx_3qo+bY+L>Zm;D8C0smPm$ZBQMz^g@F$PjMlitSJypqPjQG%e}0QlXN*l@e}`f>Kn#Ruw5UC5rP% zVLrCi8#=KP8nWp35)uhvl9>#K?}4~>g+F2`Ge`9b302JIWsIpJ8STYUG33d^_m=GS z>7)U4BchJLSq6r%XhMeB0<8CK9Jpoi_Q8ReDkxvrV#ynO2xSZNJ_M}Ua=~DIr9!%8 zZf+n$m{qT5=4PHC5yX{PGE)@{%-QY1gTxpUX!s~eSzop|$(YR9ps(%X_Ak}R$!ht9 z<_f-YtcGPpgv?eC9J^1;;-SdsbrQ;MYFI^6H}=d)JWapUe6#ZESwnK_ldUk2ItfxpGpKBg;x*FY&aN`@}2oUPGb}d9;-@3zpC{z0mP%8_<@jo?>v)8 zBD*mTA~060z&g8i0HVB9p!bH~%P^1Ih6?8>(;z#r(_XJZnk|0sLjVI9Wq>Sjagg^H zJRhc}vgS5xsSoIy01XWVRUbzXgmz7+)oPiwh>c`E?7gWZG^dLBT$X9O#HE$b_}@SU zJjxkU_w=+oT&NBtJW~SUSydtV6(l?xQxAQ26-!R7KZ5)QN4hva1eXZk_8)=bpSJ=B z8JejF4bJHL(Qh>9N`5cBE+Ey1v@Q#vKs@s)cYk=8p%Ad($3FNqdHjxeTck~Yvi-OW zktF$t=#K(Y;HiIcH6SI_h4d>tstLYfiU6Sf+sxSJy|j>^O#YHVqhYmUZC%`)!?zAn zY`T+pafxMS0vXWVbRJB_>1jnn+EiB#@}=z6);{Vn=e)ZrA0g3G zGC*{|cD{xz&r%*JZN^6r79TE6q!HMu9f^4l$S<0hN`6(RC;Xou7OBJxkOwZ2)jAKq z42=Uh*HZ8nRr_H9|IL z?gs$O$06bJCvcf8H|p(KLFw(Up60q8is&iN<$QRpM4n-bU7(-+IL!f^^DkMzd22!pHof8d4x8fYU=gUA$guMZs+-|E3qv)*i~W9{qE*6 zHI;sgkhKnAEs$O^eWZSL;?VDrUr+2vb(~!SpiZLkQ<>_SANB1s z?hAMC+Gl5L(ekppKeq>9++*7@Pk=%oJ*`Trq?Gcs>q>n?20M7Uec451XJ3P85JPji z(q(=1FHw*{Dw6JgHU)Ukg)~S757OMx_+I>U867n4PXx7`tc2x;P?p4CGi%%Klvu4; z-pJm8waeB$VfVL8(&U$pWt(K0v5Zqb-=tPAd?V5l>v|}rE79+j+#D_$f=)#WA%mBl z;luzIuM{8$96R=8xao=9%!K`+7%@4F)Qa=8Vas2$l_iZvBEEkd|D-CuI)WYVt3kQb zO&XPvY*{tsispj$UXgbMfeJFix?$$$1eU-Ly&FN@Ho;4|&>+XDsgiHYlEsYPd&TjujQnRoX%opR@%NQ#D~ zJP(Yx?N+pwlLc*#nQ~fXmqjA>r+(G#H$P@`h5H=5$aS7*Q1&-piO4?3p}@tvrtK}a z&`m7Q#6;=w8&H=U+TQ(IUn&P)#Y- zA$7dRv6Zk)(ih{aVD;L2HipF&LWTdRO6G(|?#vRXV|-U>XJ|2HxMJKxxbA=TK@y$} zQ7Vi8mq=YKe?jOo`L|zrBeMv1Y9-qJ-)_G=MUt}OfzAx9X)qh_&yhArO~otE`Cc4N zCXYg^8qIu?FXp`D$0fl14Hg{a-mMXthROqZO`Z5x(1;TfPej6-=@~3-y|U>ml4(qKisxu3h;NGfm;j zXZRaEZe6)R&qv^P{;itQyj54~Q42lp=*_@4mZFOwaK)eiOn(n3rzae%c(NS=5r^zy z{Ysl=?O)-SK4kd_kqS(l5DU`^b~cYkK?({`w+TPx@I7KQH`9OwUgVZ;%M~mGD&R=hm;|sZ{7B3*;p7gO3O6Ne%bEfe+A@jV~{eD#JiRH@QPGyoVaQpC=$jAr&%u=M^_^LaK`zW4pFCF zj&>SIg-_~EYM3Xw756gC6h5qi=DGUM?Vm=yYWLE?NW1)Ymbf{SSi1B6rQS|4|Hn3z zAhGkthrf;xX+&Ufwz&j2fz+BUNgrbAe=Q7zH{Mf^;dnLdkXgY`tNxFAN_MzC9!e9- z=B##CkQ;RiC>KQ&bNm2Szs=8v)FmX|~I2XI^fQKy?!9+Jz z!sP=k_nrw~lrpC}E0}EP^k4ykKMmm{*j{Vl7aa~z$hq-x`C`KnRX0OHRa+5HAKmg+ ziqbP($MK>juBp$npkQtF8q;Aw1gGanaX+{%G@hL-yH}$DVC6Blai1>2O z0Klm;OKlT3ysoReQyW?rUDRp!qWdpWPO#%J<$>^OMmc!(k?t5F5(>{@$`vzg#o^c& zm#moL(94WOPVIZyR{?TLWaHhAOal~un5*ZlNt!~ZeGMBg8B*$InBMro<$mg@Hl`Yu zX~XUEWNYl7(STS-o)>U>cgALhxD6K8M-BI>{V5brXmTDb%$5q313sTD>HaNKq!X*K zZVtaX^Jen^?4^+E*skYX$H86oHynGxYDBdF)&c%1@=khde3JweMlp;?gRZd4eywKt zhKQUTQ8A~y*KA3y@^g&X-^<7p<2dZ8qhfqr;|^3YAB9~)cmlT}s7n?kYmk_aj+H6y z^zg8EjNyVwoic(9pH0QlTCDxch4)`fNQL0_tK2$*l!_{~8VqTtR8=#5JY679<|(CD zOcI-OSAaLP^$xz`ysKER6101-wkrbwRExG_Fk+-fCifG=y^mjFQd`s=)zmo9_Q`p^ zM8Eu7<$Iq|M6hKP4v`SxY5Ccv^UL%P#Rn);&<0iXG4<(drMbpVBDf4e9Sn@7Q;4g+ z{y94fc}<7D!IF_qn-(gWa@QeKw%;z?hWUG*<8c2bm!$22N$8<|tr0I3V#Q*iu2K}B zycutu%j{YTSV#YjER_^c#~GnQmzU&)8eU-m;uxLWJCK91stIQZ3;={$W-2)xAd=hpT3){g()Oqvh$&d zhSl=C)w>LGD}U9j?YfqG<2)#an*K6YJ79D<_Y)4dp9FT# z$oH5tJU}qOD295k{ZgsNSf|LaJ%_wgWwlFHf4usF{?>uU;{@sdgVf*WkibzAWWiS z$=p6lFehI`0C0BChXRpQTRi9SpX*}W130*%YVaRL;E%4_#x;TG6TCgj{b)6zub!m( zX%xva0MYQCPc1b)io%Xh#w_lIeH5t+r2mSzba-QR3@*%HxZdq zLi>=44NE3l|FpallOH7gE0{K(&n>-lK7aOYq)nqVn_ zd$-o?Mdi(_q#1TK{9bdz&nZgB);OC zqR=VD&c#x3DOAR+YYsa^7$>PY$;e$Wy*&By$3iHzy6pk6ci3j+<=LQRe<#~aW zDXu5KqQjC^1wgIPP{@Y)*?f)X?#7Sv34aIlym0>DdEM3$1s%Np$gBi#PszxX)O8zU za~uDtdP}}fg5J75&!tYarQ@Wv4uXm$n6sSFqRCF2KVENay8u8igW+3GmlgSV&y8<@ zjEf0ZSqH$8D50WBB-G&yDMC(TL+8X%8t)+$rH@#K z6ziLOax%kJ?H;A^JlJhoF?v+wMroCZ5URvqF{s~7WhluG zGJMb^UJ0>VYnS5+d$>t;4ejoM1Loem-!uXQ-hkitYIngOmTV`LC<-cGEY6w^=Xo_- zX{cNt+cr)-j=QC3=ySE(M*Yy;Fxx5i(@0p9jcDovae31n7AjSIXm00VEZQ%e6l|wh z_qGG%9<3OkbRIp?V`E4{LT2-J=^45NrOS>mo>7%6Ms^$}>VP%U{?KE}Xwpq-xXhh5 z%U)GjL{DT)ilRFHk)>dctWb5FsVIfQdetx&#@}`J8c}eptI(-4p~n|Gik0@aJx#k4 zlMKS$lu0^@UQ(Y5sm#oqXzVLoxBp_$QU?qe-|N#{gYD<`>-Szqh3Bj{_csLm0jbAt zD7_H22rzs`kt}5Jig!@Q@ekr#DXVf9=FbLi@$elz%a@*mcTrkM=_l9~1e)jv=f>3{ z12cJ$UUQhKI$BCP#-(f;CtJp`mHQG!)|%-xehR3*MQ++1g482GX55ZL2~7?5C%6%k ze69#59~7D#SL0AvghAFI`pyqZQ+7%v5kG$>Eh|beudH-FT3b5!?nG)LT00jTmP~dY zU|Vz)W0>4?-G2;Qcc7%&&V6gDR(?1RSc0;B<<$z~4x z3*3Q+Nk^Be=%2b1pe>mjZ}^ql=mZK!BW&Kfkhb+Gav*5oCndN>6;Px}4;^21FsHxj z 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 z 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 literal 20225 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 diff --git a/docs/zh-Hans/images/docs-module_solution-explorer.png b/docs/zh-Hans/images/docs-module_solution-explorer.png index cafc38f0b0064035dc23918dabe82e92c54b0713..2988ec41342e7d4528373d7559e390f6e29c41a9 100644 GIT binary patch literal 21497 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 From 10694d96f2efc9e487de5572f11378a08ad360be Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 11 Mar 2020 20:06:13 +0800 Subject: [PATCH 04/44] Update docs.md --- docs/en/Modules/Docs.md | 88 ++++++++++++++++++++++-------------- docs/zh-Hans/Modules/Docs.md | 75 ++++++++++++++++++------------ 2 files changed, 100 insertions(+), 63 deletions(-) diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index 03ab20557c..0c0a221569 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -38,7 +38,7 @@ Note that this document covers `Entity Framework Core` provider but you can also ### 2- Running The Empty Application -After you download the project, extract the ZIP file and open `Acme.MyProject.sln`. You will see that the solution consists of `Application`, `Application.Contrawcts`, `DbMigrator`, `Domain`, `Domain.Shared`, `EntityFrameworkCore`, `EntityFrameworkCore.DbMigations`, `HttpApi`, `HttpApi.Client` and `Web` projects. Right click on `Acme.MyProject.Web` project and **Set as StartUp Project**. +After you download the project, extract the ZIP file and open `Acme.MyProject.sln`. You will see that the solution consists of `Application`, `Application.Contracts`, `DbMigrator`, `Domain`, `Domain.Shared`, `EntityFrameworkCore`, `EntityFrameworkCore.DbMigations`, `HttpApi`, `HttpApi.Client` and `Web` projects. Right click on `Acme.MyProject.Web` project and **Set as StartUp Project**. ![Create a new project](../images/docs-module_solution-explorer.png) @@ -62,21 +62,27 @@ To login your website enter `admin` as the username and `1q2w3E*` as the passwor Docs module packages are hosted on NuGet. There are 4 packages that needs be to installed to your application. Each package has to be installed to the relevant project. -Install [Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget package to `Acme.MyProject.Domain` project. +It is recommended to use the ABP CLI to install the module, open the CMD window in the solution file (`.sln`) directory, and run the following command: -`Install-Package Volo.Docs.Domain` +`abp add-module Volo.Docs` -Install [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) nuget package to `Acme.MyProject.EntityFrameworkCore` project. +Or you can also manually install nuget package to each project: -`Install-Package Volo.Docs.EntityFrameworkCore` +* Install [Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget package to `Acme.MyProject.Domain` project. -Install [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) nuget package to `Acme.MyProject.Application` project. + `Install-Package Volo.Docs.Domain` -`Install-Package Volo.Docs.Application` +* Install [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) nuget package to `Acme.MyProject.EntityFrameworkCore` project. -Install [Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget package to `Acme.MyProject.Web` project. + `Install-Package Volo.Docs.EntityFrameworkCore` -`Install-Package Volo.Docs.Web` +* Install [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) nuget package to `Acme.MyProject.Application` project. + + `Install-Package Volo.Docs.Application` + +* Install [Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget package to `Acme.MyProject.Web` project. + + `Install-Package Volo.Docs.Web` ### 3- Adding Module Dependencies @@ -165,33 +171,45 @@ An ABP module must declare `[DependsOn]` attribute if it has a dependency upon a If you choose Entity Framework as your database provider, you need to configure the Docs Module. To do this; -- Open `QaDocDbContextModelCreatingExtensions.cs` and add `modelBuilder.ConfigureDocs()` to the `ConfigureMyProject()`. +- Open `MyProjectMigrationsDbContext.cs` and add `builder.ConfigureDocs()` to the `OnModelCreating()`. ```csharp - public static class QaDocDbContextModelCreatingExtensions - { - public static void ConfigureMyProject(this ModelBuilder builder) - { - Check.NotNull(builder, nameof(builder)); - - /* Configure your own tables/entities inside here */ - - //builder.Entity(b => - //{ - // b.ToTable(QaDocConsts.DbTablePrefix + "YourEntities", QaDocConsts.DbSchema); - - // //... - //}); - - builder.ConfigureDocs(); - } - - public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) - where TUser: class, IUser - { - //b.Property(nameof(AppUser.MyProperty))... - } - } + public class MyProjectMigrationsDbContext : AbpDbContext + { + public MyProjectMigrationsDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + /* Include modules to your migration db context */ + + builder.ConfigurePermissionManagement(); + builder.ConfigureSettingManagement(); + builder.ConfigureBackgroundJobs(); + builder.ConfigureAuditLogging(); + builder.ConfigureIdentity(); + builder.ConfigureIdentityServer(); + builder.ConfigureFeatureManagement(); + builder.ConfigureTenantManagement(); + builder.ConfigureDocs(); //Add this line to configure the Docs Module + + /* Configure customizations for entities from the modules included */ + + builder.Entity(b => + { + b.ConfigureCustomUserProperties(); + }); + + /* Configure your own tables/entities inside the ConfigureQaDoc method */ + + builder.ConfigureMyProject(); + } + } ``` * Open `Package Manager Console` in `Visual Studio` and choose `Acme.MyProject.EntityFrameworkCore.DbMigrations` as default project. Then write the below command to add the migration for Docs Module. @@ -310,7 +328,7 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen Note that `GitHubAccessToken` is masked with `***`. It's a private token that you must get it from GitHub. See https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ -- MainWebsiteUrl: `/` +- MainWebsiteUrl: `/` - LatestVersionBranchName: `master` diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index f10acf4d2f..a339730f49 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -60,21 +60,28 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. ### 2- 引用文档模块包 -文档模块包托管在Nuget上面. 需要有四个包安装到你的应用程序中. 每个包必须安装到相关的项目. +文档模块包托管在Nuget上面. 需要有四个包安装到你的应用程序中. 每个包必须安装到相关的项目. -安装[Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget包到 `Acme.MyProject.Domain` 项目. +建议使用ABP CLI安装模块,在解决方案文件 (`.sln`) 目录打开 `CMD` 窗口,运行以下命令: -`Install-Package Volo.Docs.Domain` +`abp add-module Volo.Docs` -安装[Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) nuget包到 `Acme.MyProject.EntityFrameworkCore` 项目. +或者你也可以手动安装nuget包到每个项目: -`Install-Package Volo.Docs.EntityFrameworkCore` +* 安装[Volo.Docs.Domain](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget包到 `Acme.MyProject.Domain` 项目. -安装[Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) nuget包到 `Acme.MyProject.Application` 项目. + `Install-Package Volo.Docs.Domain` -`Install-Package Volo.Docs.Application` +* 安装[Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) nuget包到 `Acme.MyProject.EntityFrameworkCore` 项目. -安装[Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget包到 `Acme.MyProject.Web` 项目. + `Install-Package Volo.Docs.EntityFrameworkCore` + +* 安装[Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) nuget包到 `Acme.MyProject.Application` 项目. + + `Install-Package Volo.Docs.Application` + +* 安装[Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Domain/) nuget包到 `Acme.MyProject.Web` 项目. + `Install-Package Volo.Docs.Web` ### 3- 添加模块依赖 @@ -164,33 +171,45 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. 如果你选择了Entity Framework 做为数据库供应者,你需要配置文档模块. 做以下操作; -* 打开 `QaDocDbContextModelCreatingExtensions.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `ConfigureMyProject()` 方法中 +* 打开 `MyProjectMigrationsDbContext.cs` 并且添加 `builder.ConfigureDocs()` 到 `OnModelCreating()` 方法中 ```csharp - public static class QaDocDbContextModelCreatingExtensions - { - public static void ConfigureMyProject(this ModelBuilder builder) - { - Check.NotNull(builder, nameof(builder)); + public class MyProjectMigrationsDbContext : AbpDbContext + { + public MyProjectMigrationsDbContext(DbContextOptions options) + : base(options) + { - /* Configure your own tables/entities inside here */ + } - //builder.Entity(b => - //{ - // b.ToTable(QaDocConsts.DbTablePrefix + "YourEntities", QaDocConsts.DbSchema); + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); - // //... - //}); + /* Include modules to your migration db context */ - builder.ConfigureDocs(); - } + builder.ConfigurePermissionManagement(); + builder.ConfigureSettingManagement(); + builder.ConfigureBackgroundJobs(); + builder.ConfigureAuditLogging(); + builder.ConfigureIdentity(); + builder.ConfigureIdentityServer(); + builder.ConfigureFeatureManagement(); + builder.ConfigureTenantManagement(); + builder.ConfigureDocs(); //Add this line to configure the Docs Module - public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) - where TUser: class, IUser - { - //b.Property(nameof(AppUser.MyProperty))... - } - } + /* Configure customizations for entities from the modules included */ + + builder.Entity(b => + { + b.ConfigureCustomUserProperties(); + }); + + /* Configure your own tables/entities inside the ConfigureQaDoc method */ + + builder.ConfigureMyProject(); + } + } ``` * 打开 `Visual Studio` 的 `包管理控制台` 选择 `Acme.MyProject.EntityFrameworkCore.DbMigrations` 做为默认项目. 然后编写以下命令为文档模块添加迁移. From 47d55f33892cde143f8f0dfacd887289f73582c2 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 12 Mar 2020 10:17:02 +0800 Subject: [PATCH 05/44] (Docs module)Full-Text Search(Elastic Search) --- docs/en/Modules/Docs.md | 26 ++++++++++++++++++++++++++ docs/zh-Hans/Modules/Docs.md | 24 ++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index 0c0a221569..db752ceb74 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -572,6 +572,32 @@ The upper sample `JSON` file renders the below navigation menu as `HTML`. Finally a new Docs Module is added to your project which is feeded with GitHub. + +## Full-Text Search(Elastic Search) + +The Docs module supports full-text search using Elastic Search. It is not enabled by default. You can configure `DocsElasticSearchOptions` to enable it. + +``` +Configure(options => +{ + options.Enable = true; + options.IndexName = "your_index_name"; //default IndexName is abp_documents +}); +``` + +The `Index` is automatically created after the application starts if the `Index` does not exist. + +`DefaultElasticClientProvider` is responsible for creating `IElasticClient`. By default, it reads Elastic Search's `Url` from `IConfiguration`. +If your `IElasticClient` needs additional configuration, please use override `IElasticClientProvider` service and replace it in the [dependency injection](Dependency-Injection.md) system. + +``` +{ + "ElasticSearch": { + "Url": "http://localhost:9200" + } +} +``` + ## Next Docs Module is also available as a standalone application. Check out [VoloDocs](../Apps/VoloDocs). \ No newline at end of file diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index a339730f49..20382d24f2 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -572,6 +572,30 @@ This document assumes that you prefer to use **{{ UI_Value }}** as the UI framew 最后,为您的项目添加了一个新的Docs模块, 该模块由GitHub提供. +## 全文搜索(Elastic Search) + +文档模块支持使用Elastic Search对内容进行全文搜索. 默认没有启用, 你可以配置`DocsElasticSearchOptions`启用它. + +``` +Configure(options => +{ + options.Enable = true; + options.IndexName = "your_index_name"; //default IndexName is abp_documents +}); +``` + +应用程序启动后如果`Index`不存在则会自动创建`Index`. + +`DefaultElasticClientProvider`负责创建`IElasticClient`, 默认情况下它会从`IConfiguration`中读取Elastic Search的`Url`. +如果你的IElasticClient需要其它配置请使用重写IElasticClientProvider服务并在依赖注入系统中替换它. +``` +{ + "ElasticSearch": { + "Url": "http://localhost:9200" + } +} +``` + ## 下一步 文档模块也可以做为独立的应用程序. 查看 [VoloDocs](../Apps/VoloDocs). \ No newline at end of file From 04fcf903dfcb616864266c138b344527c2874fd5 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 13 Mar 2020 13:08:12 +0800 Subject: [PATCH 06/44] Backgroundworkerbase logger properties use concrete types as generic parameters --- .../BackgroundWorkers/BackgroundWorkerBase.cs | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs index 1ce71ca3f9..3326c4e65f 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs @@ -1,5 +1,7 @@ +using System; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; @@ -11,14 +13,34 @@ namespace Volo.Abp.BackgroundWorkers public abstract class BackgroundWorkerBase : IBackgroundWorker { //TODO: Add UOW, Localization and other useful properties..? + public IServiceProvider ServiceProvider { get; set; } + protected readonly object ServiceProviderLock = new object(); - public ILogger Logger { protected get; set; } + protected TService LazyGetRequiredService(ref TService reference) + => LazyGetRequiredService(typeof(TService), ref reference); - protected BackgroundWorkerBase() + protected TRef LazyGetRequiredService(Type serviceType, ref TRef reference) { - Logger = NullLogger.Instance; + if (reference == null) + { + lock (ServiceProviderLock) + { + if (reference == null) + { + reference = (TRef)ServiceProvider.GetRequiredService(serviceType); + } + } + } + + return reference; } - + + public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory); + private ILoggerFactory _loggerFactory; + + protected ILogger Logger => _lazyLogger.Value; + private Lazy _lazyLogger => new Lazy(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); + public virtual Task StartAsync(CancellationToken cancellationToken = default) { Logger.LogDebug("Started background worker: " + ToString()); From 185a88544e2f9cf5fe9c6cf55ad1d4c1aa0bcd2c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Mar 2020 13:01:49 +0300 Subject: [PATCH 07/44] feat: create react-native app template #2699 --- npm/ng-packs/.vscode/settings.json | 1 + templates/app/react-native/.eslintrc.json | 25 + templates/app/react-native/.gitignore | 14 + templates/app/react-native/.prettierrc | 8 + .../app/react-native/.vscode/extensions.json | 3 + templates/app/react-native/App.js | 25 + templates/app/react-native/Environment.js | 31 + templates/app/react-native/app.json | 30 + templates/app/react-native/assets/avatar.png | Bin 0 -> 255 bytes templates/app/react-native/assets/icon.png | Bin 0 -> 7329 bytes templates/app/react-native/assets/logo.png | Bin 0 -> 1386 bytes templates/app/react-native/assets/splash.png | Bin 0 -> 95246 bytes templates/app/react-native/babel.config.js | 6 + templates/app/react-native/package.json | 64 + templates/app/react-native/src/api/API.js | 10 + .../app/react-native/src/api/AccountAPI.js | 41 + .../src/api/ApplicationConfigurationAPI.js | 30 + .../app/react-native/src/api/IdentityAPI.js | 29 + .../src/api/TenantManagementAPI.js | 21 + .../components/AppContainer/AppContainer.js | 99 + .../src/components/DataList/DataList.js | 139 + .../components/DrawerContent/DrawerContent.js | 121 + .../src/components/FormButtons/FormButtons.js | 82 + .../src/components/Loading/Loading.js | 63 + .../components/LoadingButton/LoadingButton.js | 31 + .../src/components/MenuIcon/MenuIcon.js | 19 + .../src/components/TenantBox/TenantBox.js | 128 + .../ValidationMessage/ValidationMessage.js | 18 + .../src/contexts/LocalizationContext.js | 3 + .../react-native/src/hocs/PermissionHOC.js | 17 + .../react-native/src/hooks/UsePermission.js | 16 + .../src/interceptors/APIInterceptor.js | 102 + .../src/navigators/AuthNavigator.js | 22 + .../src/navigators/DrawerNavigator.js | 20 + .../src/navigators/HomeNavigator.js | 24 + .../src/navigators/SettingsNavigator.js | 41 + .../src/navigators/TenantsNavigator.js | 34 + .../src/navigators/UsersNavigator.js | 32 + .../ChangePassword/ChangePasswordForm.js | 99 + .../ChangePassword/ChangePasswordScreen.js | 33 + .../CreateUpdateTenantForm.js | 84 + .../CreateUpdateTenantScreen.js | 77 + .../CreateUpdateUser/CreateUpdateUserForm.js | 242 + .../CreateUpdateUserScreen.js | 69 + .../src/screens/CreateUpdateUser/UserRoles.js | 60 + .../src/screens/Home/HomeScreen.js | 34 + .../src/screens/Login/LoginScreen.js | 128 + .../ManageProfile/ManageProfileForm.js | 122 + .../ManageProfile/ManageProfileScreen.js | 50 + .../src/screens/Settings/SettingsScreen.js | 145 + .../src/screens/Tenants/TenantsScreen.js | 59 + .../src/screens/Users/UsersScreen.js | 61 + .../src/store/actions/AppActions.js | 19 + .../src/store/actions/LoadingActions.js | 13 + .../store/actions/PersistentStorageActions.js | 13 + templates/app/react-native/src/store/index.js | 25 + .../src/store/reducers/AppReducer.js | 12 + .../src/store/reducers/LoadingReducer.js | 23 + .../reducers/PersistentStorageReducer.js | 17 + .../react-native/src/store/reducers/index.js | 12 + .../react-native/src/store/sagas/AppSaga.js | 34 + .../app/react-native/src/store/sagas/index.js | 6 + .../src/store/selectors/AppSelectors.js | 19 + .../src/store/selectors/LoadingSelectors.js | 11 + .../selectors/PersistentStorageSelectors.js | 11 + .../src/theme/components/Badge.js | 39 + .../react-native/src/theme/components/Body.js | 11 + .../src/theme/components/Button.js | 384 + .../react-native/src/theme/components/Card.js | 37 + .../src/theme/components/CardItem.js | 198 + .../src/theme/components/CheckBox.js | 38 + .../src/theme/components/Container.js | 17 + .../src/theme/components/Content.js | 14 + .../react-native/src/theme/components/Fab.js | 25 + .../src/theme/components/Footer.js | 117 + .../src/theme/components/FooterTab.js | 78 + .../react-native/src/theme/components/Form.js | 86 + .../react-native/src/theme/components/H1.js | 13 + .../react-native/src/theme/components/H2.js | 13 + .../react-native/src/theme/components/H3.js | 13 + .../src/theme/components/Header.js | 389 + .../react-native/src/theme/components/Icon.js | 12 + .../src/theme/components/Input.js | 19 + .../src/theme/components/InputGroup.js | 132 + .../react-native/src/theme/components/Item.js | 241 + .../src/theme/components/Label.js | 15 + .../react-native/src/theme/components/Left.js | 11 + .../src/theme/components/ListItem.js | 441 ++ .../src/theme/components/Picker.android.js | 14 + .../src/theme/components/Picker.ios.js | 7 + .../src/theme/components/Picker.js | 14 + .../src/theme/components/Radio.js | 26 + .../src/theme/components/Right.js | 14 + .../src/theme/components/Segment.js | 57 + .../src/theme/components/Separator.js | 49 + .../src/theme/components/Spinner.js | 9 + .../src/theme/components/Subtitle.js | 19 + .../src/theme/components/SwipeRow.js | 46 + .../src/theme/components/Switch.js | 9 + .../react-native/src/theme/components/Tab.js | 10 + .../src/theme/components/TabBar.js | 57 + .../src/theme/components/TabContainer.js | 25 + .../src/theme/components/TabHeading.js | 40 + .../react-native/src/theme/components/Text.js | 20 + .../src/theme/components/Textarea.js | 25 + .../src/theme/components/Thumbnail.js | 40 + .../src/theme/components/Title.js | 21 + .../src/theme/components/Toast.js | 41 + .../react-native/src/theme/components/View.js | 13 + .../src/theme/components/index.js | 247 + .../src/theme/overrides/Button.js | 20 + .../src/theme/overrides/Content.js | 14 + .../react-native/src/theme/overrides/Icon.js | 35 + .../react-native/src/theme/overrides/Input.js | 21 + .../src/theme/overrides/InputGroup.js | 19 + .../react-native/src/theme/overrides/Item.js | 24 + .../react-native/src/theme/overrides/Label.js | 18 + .../react-native/src/theme/overrides/Text.js | 31 + .../react-native/src/theme/overrides/index.js | 39 + .../src/theme/variables/CommonColor.js | 304 + .../src/theme/variables/Material.js | 299 + .../src/theme/variables/Platform.js | 333 + .../react-native/src/theme/variables/index.js | 10 + .../react-native/src/utils/DateExtensions.js | 5 + .../app/react-native/src/utils/Debounce.js | 14 + .../app/react-native/src/utils/RandomColor.js | 12 + .../react-native/src/utils/ReduxConnect.js | 9 + .../app/react-native/src/utils/TokenUtils.js | 7 + templates/app/react-native/yarn.lock | 6890 +++++++++++++++++ 129 files changed, 14077 insertions(+) create mode 100644 templates/app/react-native/.eslintrc.json create mode 100644 templates/app/react-native/.gitignore create mode 100644 templates/app/react-native/.prettierrc create mode 100644 templates/app/react-native/.vscode/extensions.json create mode 100644 templates/app/react-native/App.js create mode 100644 templates/app/react-native/Environment.js create mode 100644 templates/app/react-native/app.json create mode 100644 templates/app/react-native/assets/avatar.png create mode 100644 templates/app/react-native/assets/icon.png create mode 100644 templates/app/react-native/assets/logo.png create mode 100644 templates/app/react-native/assets/splash.png create mode 100644 templates/app/react-native/babel.config.js create mode 100644 templates/app/react-native/package.json create mode 100644 templates/app/react-native/src/api/API.js create mode 100644 templates/app/react-native/src/api/AccountAPI.js create mode 100644 templates/app/react-native/src/api/ApplicationConfigurationAPI.js create mode 100644 templates/app/react-native/src/api/IdentityAPI.js create mode 100644 templates/app/react-native/src/api/TenantManagementAPI.js create mode 100644 templates/app/react-native/src/components/AppContainer/AppContainer.js create mode 100644 templates/app/react-native/src/components/DataList/DataList.js create mode 100644 templates/app/react-native/src/components/DrawerContent/DrawerContent.js create mode 100644 templates/app/react-native/src/components/FormButtons/FormButtons.js create mode 100644 templates/app/react-native/src/components/Loading/Loading.js create mode 100644 templates/app/react-native/src/components/LoadingButton/LoadingButton.js create mode 100644 templates/app/react-native/src/components/MenuIcon/MenuIcon.js create mode 100644 templates/app/react-native/src/components/TenantBox/TenantBox.js create mode 100644 templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js create mode 100644 templates/app/react-native/src/contexts/LocalizationContext.js create mode 100644 templates/app/react-native/src/hocs/PermissionHOC.js create mode 100644 templates/app/react-native/src/hooks/UsePermission.js create mode 100644 templates/app/react-native/src/interceptors/APIInterceptor.js create mode 100644 templates/app/react-native/src/navigators/AuthNavigator.js create mode 100644 templates/app/react-native/src/navigators/DrawerNavigator.js create mode 100644 templates/app/react-native/src/navigators/HomeNavigator.js create mode 100644 templates/app/react-native/src/navigators/SettingsNavigator.js create mode 100644 templates/app/react-native/src/navigators/TenantsNavigator.js create mode 100644 templates/app/react-native/src/navigators/UsersNavigator.js create mode 100644 templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js create mode 100644 templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js create mode 100644 templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js create mode 100644 templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js create mode 100644 templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js create mode 100644 templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js create mode 100644 templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js create mode 100644 templates/app/react-native/src/screens/Home/HomeScreen.js create mode 100644 templates/app/react-native/src/screens/Login/LoginScreen.js create mode 100644 templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js create mode 100644 templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js create mode 100644 templates/app/react-native/src/screens/Settings/SettingsScreen.js create mode 100644 templates/app/react-native/src/screens/Tenants/TenantsScreen.js create mode 100644 templates/app/react-native/src/screens/Users/UsersScreen.js create mode 100644 templates/app/react-native/src/store/actions/AppActions.js create mode 100644 templates/app/react-native/src/store/actions/LoadingActions.js create mode 100644 templates/app/react-native/src/store/actions/PersistentStorageActions.js create mode 100644 templates/app/react-native/src/store/index.js create mode 100644 templates/app/react-native/src/store/reducers/AppReducer.js create mode 100644 templates/app/react-native/src/store/reducers/LoadingReducer.js create mode 100644 templates/app/react-native/src/store/reducers/PersistentStorageReducer.js create mode 100644 templates/app/react-native/src/store/reducers/index.js create mode 100644 templates/app/react-native/src/store/sagas/AppSaga.js create mode 100644 templates/app/react-native/src/store/sagas/index.js create mode 100644 templates/app/react-native/src/store/selectors/AppSelectors.js create mode 100644 templates/app/react-native/src/store/selectors/LoadingSelectors.js create mode 100644 templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js create mode 100644 templates/app/react-native/src/theme/components/Badge.js create mode 100644 templates/app/react-native/src/theme/components/Body.js create mode 100644 templates/app/react-native/src/theme/components/Button.js create mode 100644 templates/app/react-native/src/theme/components/Card.js create mode 100644 templates/app/react-native/src/theme/components/CardItem.js create mode 100644 templates/app/react-native/src/theme/components/CheckBox.js create mode 100644 templates/app/react-native/src/theme/components/Container.js create mode 100644 templates/app/react-native/src/theme/components/Content.js create mode 100644 templates/app/react-native/src/theme/components/Fab.js create mode 100644 templates/app/react-native/src/theme/components/Footer.js create mode 100644 templates/app/react-native/src/theme/components/FooterTab.js create mode 100644 templates/app/react-native/src/theme/components/Form.js create mode 100644 templates/app/react-native/src/theme/components/H1.js create mode 100644 templates/app/react-native/src/theme/components/H2.js create mode 100644 templates/app/react-native/src/theme/components/H3.js create mode 100644 templates/app/react-native/src/theme/components/Header.js create mode 100644 templates/app/react-native/src/theme/components/Icon.js create mode 100644 templates/app/react-native/src/theme/components/Input.js create mode 100644 templates/app/react-native/src/theme/components/InputGroup.js create mode 100644 templates/app/react-native/src/theme/components/Item.js create mode 100644 templates/app/react-native/src/theme/components/Label.js create mode 100644 templates/app/react-native/src/theme/components/Left.js create mode 100644 templates/app/react-native/src/theme/components/ListItem.js create mode 100644 templates/app/react-native/src/theme/components/Picker.android.js create mode 100644 templates/app/react-native/src/theme/components/Picker.ios.js create mode 100644 templates/app/react-native/src/theme/components/Picker.js create mode 100644 templates/app/react-native/src/theme/components/Radio.js create mode 100644 templates/app/react-native/src/theme/components/Right.js create mode 100644 templates/app/react-native/src/theme/components/Segment.js create mode 100644 templates/app/react-native/src/theme/components/Separator.js create mode 100644 templates/app/react-native/src/theme/components/Spinner.js create mode 100644 templates/app/react-native/src/theme/components/Subtitle.js create mode 100644 templates/app/react-native/src/theme/components/SwipeRow.js create mode 100644 templates/app/react-native/src/theme/components/Switch.js create mode 100644 templates/app/react-native/src/theme/components/Tab.js create mode 100644 templates/app/react-native/src/theme/components/TabBar.js create mode 100644 templates/app/react-native/src/theme/components/TabContainer.js create mode 100644 templates/app/react-native/src/theme/components/TabHeading.js create mode 100644 templates/app/react-native/src/theme/components/Text.js create mode 100644 templates/app/react-native/src/theme/components/Textarea.js create mode 100644 templates/app/react-native/src/theme/components/Thumbnail.js create mode 100644 templates/app/react-native/src/theme/components/Title.js create mode 100644 templates/app/react-native/src/theme/components/Toast.js create mode 100644 templates/app/react-native/src/theme/components/View.js create mode 100644 templates/app/react-native/src/theme/components/index.js create mode 100644 templates/app/react-native/src/theme/overrides/Button.js create mode 100644 templates/app/react-native/src/theme/overrides/Content.js create mode 100644 templates/app/react-native/src/theme/overrides/Icon.js create mode 100644 templates/app/react-native/src/theme/overrides/Input.js create mode 100644 templates/app/react-native/src/theme/overrides/InputGroup.js create mode 100644 templates/app/react-native/src/theme/overrides/Item.js create mode 100644 templates/app/react-native/src/theme/overrides/Label.js create mode 100644 templates/app/react-native/src/theme/overrides/Text.js create mode 100644 templates/app/react-native/src/theme/overrides/index.js create mode 100644 templates/app/react-native/src/theme/variables/CommonColor.js create mode 100644 templates/app/react-native/src/theme/variables/Material.js create mode 100644 templates/app/react-native/src/theme/variables/Platform.js create mode 100644 templates/app/react-native/src/theme/variables/index.js create mode 100644 templates/app/react-native/src/utils/DateExtensions.js create mode 100644 templates/app/react-native/src/utils/Debounce.js create mode 100644 templates/app/react-native/src/utils/RandomColor.js create mode 100644 templates/app/react-native/src/utils/ReduxConnect.js create mode 100644 templates/app/react-native/src/utils/TokenUtils.js create mode 100644 templates/app/react-native/yarn.lock diff --git a/npm/ng-packs/.vscode/settings.json b/npm/ng-packs/.vscode/settings.json index 37d9a1e403..9c2678df08 100644 --- a/npm/ng-packs/.vscode/settings.json +++ b/npm/ng-packs/.vscode/settings.json @@ -6,6 +6,7 @@ "typescript.tsdk": "../node_modules/typescript/lib", "workbench.colorCustomizations": { "activityBar.background": "#258ecd", + "activityBar.activeBackground": "#258ecd", "activityBar.activeBorder": "#f0aed7", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", diff --git a/templates/app/react-native/.eslintrc.json b/templates/app/react-native/.eslintrc.json new file mode 100644 index 0000000000..6702dcefd6 --- /dev/null +++ b/templates/app/react-native/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "extends": ["airbnb", "prettier", "prettier/react"], + "parser": "babel-eslint", + "env": { + "jest": true + }, + "rules": { + "no-use-before-define": 0, + "react/jsx-filename-extension": 0, + "react/prop-types": ["error", { "ignore": ["navigation", "children"] }], + "react/require-default-props": 0, + "react/jsx-props-no-spreading": 0, + "react/forbid-prop-types": 0, + "import/prefer-default-export": 0, + "comma-dangle": 0, + "no-underscore-dangle": 1, + "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], + "no-param-reassign": 0, + "operator-linebreak": 0, + "global-require": 0 + }, + "globals": { + "fetch": false + } +} diff --git a/templates/app/react-native/.gitignore b/templates/app/react-native/.gitignore new file mode 100644 index 0000000000..c409cf6af4 --- /dev/null +++ b/templates/app/react-native/.gitignore @@ -0,0 +1,14 @@ +node_modules/**/* +.expo/* +npm-debug.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision +*.orig.* +web-build/ +web-report/ + +# macOS +.DS_Store diff --git a/templates/app/react-native/.prettierrc b/templates/app/react-native/.prettierrc new file mode 100644 index 0000000000..425031393b --- /dev/null +++ b/templates/app/react-native/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "all", + "singleQuote": true, + "jsxSingleQuote": false, + "printWidth": 100, + "semi": true, + "jsxBracketSameLine": true +} diff --git a/templates/app/react-native/.vscode/extensions.json b/templates/app/react-native/.vscode/extensions.json new file mode 100644 index 0000000000..d7df89c9cd --- /dev/null +++ b/templates/app/react-native/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] +} diff --git a/templates/app/react-native/App.js b/templates/app/react-native/App.js new file mode 100644 index 0000000000..775a7e1aa5 --- /dev/null +++ b/templates/app/react-native/App.js @@ -0,0 +1,25 @@ +import { StyleProvider } from 'native-base'; +import React from 'react'; +import { enableScreens } from 'react-native-screens'; +import { Provider } from 'react-redux'; +import { PersistGate } from 'redux-persist/integration/react'; +import AppContainer from './src/components/AppContainer/AppContainer'; +import { store, persistor } from './src/store'; +import getTheme from './src/theme/components'; +import { activeTheme } from './src/theme/variables'; +import { initAPIInterceptor } from './src/interceptors/APIInterceptor'; + +enableScreens(); +initAPIInterceptor(store); + +export default function App() { + return ( + + + + + + + + ); +} diff --git a/templates/app/react-native/Environment.js b/templates/app/react-native/Environment.js new file mode 100644 index 0000000000..4a7a730d97 --- /dev/null +++ b/templates/app/react-native/Environment.js @@ -0,0 +1,31 @@ +const ENV = { + dev: { + apiUrl: 'http://localhost:44305', + oAuthConfig: { + issuer: 'http://localhost:44305', + clientId: 'MyProjectName_App', + clientSecret: '1q2w3e*', + scope: 'MyProjectName', + }, + localization: { + defaultResourceName: 'MyProjectName', + }, + }, + prod: { + apiUrl: 'http://localhost:44305', + oAuthConfig: { + issuer: 'http://localhost:44305', + clientId: 'MyProjectName_App', + clientSecret: '1q2w3e*', + scope: 'MyProjectName', + }, + localization: { + defaultResourceName: 'MyProjectName', + }, + }, +}; + +export const getEnvVars = () => { + // eslint-disable-next-line no-undef + return __DEV__ ? ENV.dev : ENV.prod; +}; diff --git a/templates/app/react-native/app.json b/templates/app/react-native/app.json new file mode 100644 index 0000000000..370089879c --- /dev/null +++ b/templates/app/react-native/app.json @@ -0,0 +1,30 @@ +{ + "expo": { + "name": "MyProjectName", + "slug": "MyProjectName", + "privacy": "public", + "sdkVersion": "36.0.0", + "platforms": ["ios", "android", "web"], + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/icon.png", + "splash": { + "image": "./assets/splash.png", + "resizeMode": "cover", + "backgroundColor": "#38003c" + }, + "updates": { + "fallbackToCacheTimeout": 0 + }, + "assetBundlePatterns": ["**/*"], + "ios": { + "supportsTablet": true, + "bundleIdentifier": "com.MyCompanyName.MyProjectName", + "buildNumber": "1.0.0" + }, + "android": { + "package": "com.MyCompanyName.MyProjectName", + "versionCode": 1 + } + } +} diff --git a/templates/app/react-native/assets/avatar.png b/templates/app/react-native/assets/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1daa0121d524256c1d1b45ff5e7ed771784c52 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DImVS)*E46%Oq(`s&YU^>_U&7| zc=6GrN4Ia^zG~H~jT<-Ko_$0QsEo6~BeIx*f$sR&2=kJHM z&5N9@w|=XzipNCbb|s-xrJeH)f2E%im~OIrio1Qy&Sj1+>x<+1)+oPni}kGd6Ohy! z>6x1RttNZTv!7LG>?+Ii&zjEnadB}e3778<6P>u`Anzuis~9|8{an^LB{Ts5qZeh6 literal 0 HcmV?d00001 diff --git a/templates/app/react-native/assets/icon.png b/templates/app/react-native/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ff94e3054eaea3e0adcadf69b37acd92585649 GIT binary patch literal 7329 zcmV;S9A4vzP)Hg1+lHrgWSWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6 zwD^Ni=!>T7nL9I?X}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8re zhoBb*p;u8ID_yBf0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J z`jH<$>RKN5V(7OqK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYv zwjAKwmYb0gKL(K8-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z> z!FI&AHCpoWI|RUqx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVT zrI(b06~u#xf1yS}_UGdMvD``!0~u->P=lA4?YN`hilQ z|3tHka)7T{2CGqwjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^ z7T9R1gAN8V6s;5)ieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2b zW$~+pTw@bIek?ZvKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L z_AC5qq~L$#SMj%U$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6= zb6>{xYV#Ue-+LB$7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re z4r3qYr~6#KE>;1F`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+ z5K}u-6REM(K@W$srgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5 zh^QEb$V`rCQ-|7ZS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX z2i^rZ^Mu;6+rb@?NPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV z0id6JRRdfL?*IS*IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa4 z0RR91z@P&F1ONa40RR91zyJUM0B-Xe@Bjc8|4BqaRCodHU0ui?#T8z~t5$2I6lz3_ zR|>r_f{I|FNu*LQYCaXbsI`998-Iw#f(d!J62MN~KAJ3StD~ zMM0rpM50Kc#>N)ug*MNt=X2h9cXrR2IrF!>1K+p%?#`T_XU>_Ko!_IrJ`$QKObCn= zfn!FhcNDcB-28B} z5mVg%%)QOh^2Uf9hDmyI07kw(vE}#8llMHuh*?gQjaOdOJh1(~as(<=lF0#DGUnV> z=QW2v|Dxqh-H-nM^}BT|5JCFM0lo$GCr6zT0p4;+PR{U6-i+D-HZ5&#cJJC#u9YT` z?6~8PZQeZeMgmS{vKXBMOh)fE#4$RdnCqs3FqkRFH(v1rN6edF~P$mZ$mmLRdJ2Xd_93a>v#z_E#GC|c~IYXH~u1#an*x&}y*;c$*kOE*?EU7MR< zIXtCU2k0_hE}&gBLczZ7?rWOsw_F=aMkW2u?Yo*guDVNwRxBdiJd4HOMYl)?=rdd{ zn0<6yptL=&X{O{QYcFfwfA{@1HL^bA=37c3i*kV5m+x$LJ^MOzufVr$*{895{yqDg2aW?U8Q7gYEDNE>7PB1xu!xmDP zdJZwv9%~uY(41iK-vAN|I(XpYmG*Uxo)C$w(zq~O{9)o;NPr`0Ia8k;DV%Mp0lv+J z6kzvdc*^%0y<({_i|KHquK|#WsWLL9f%oykBBM~fV;ZI@KPE}W3Zr!ZfEsE5u`(qk zU0{Ik9p3;aSbfTgzR6kXVos7AT@z?|-PP4EH)L6jXQYr)J$8W-BAW}2QPlv*pxW2k zx-wGhd596mFi=yk5ZO#R=KUxf0839#BtGYq~7G#P%Fx%e7% zOx%5CYC}S;28gL}o8X*hCCbE+yQDb45ToJJplPHwZ_RvFae%+>+-=L4_4m}|(S;vf zraoPfF`Xc!=gLG!r3pkH$yJ!*n}SI0yZDs4BLe37U$Ob}-i@NLZUE;Jm-?~Zg}o~e zL-X53*GCqcRj}-e5 zL+!#=Du+qSy9Q`u%2lu}ttnLBJ@E;p)5nM2Ys{P^S}Cuo@S*(R>J~#T-#qfF0b(e? z1&`vTkl`;M{CQTY##m2Gdc?fKFr~)nBabvMV#wsXg}#>q_<*FDCdJ`w$fT3jtkx7e z8!hO9y^vxCsT0IlaF6a|X%IJox)kMlb{7q)0^0GpI%xAvMK31y(v5Fp$Rf=@(Frj= zqk*Y1Hk41Q{dOQHM$R!>jX^I2Y=VVm7EV)%UF(p6#4tW=d<(s}UBQq=TMp189cSS7 z{1epxeZq1X_tEK*S^c%|2UMRRS_|v(EfT{qV&wzZ4uBsDgBvcssSirgdkOz4zX3#O z^h5?&S|7Psa1NuQKdpuJ7o2+G3Qf)KXNjToz&Q6>;#e`x5X0sM+`z5@I7)E=<``p(#5Qebsq+!sR4Y9pSC}@4WyReFeaZx z{0J_9#4nA#I9|NfkBj_mI<^)qQG=iiDO>@7|uJ0h{ zH-L{Za7zmx+R_Z*%0hHg$V9wKxaPtKU7g$a^3ER9%oCTs&KjVEO!Ae%rL2pdCeSV( zr9GGGEXCBNucQ`m(a?O}>Hxk2DVl=$(vp5aNe#hQt`gHpb=PtN?xt2+{D8en*H#C3 z=%zS@n%NPg$YA_o^cBxyui9!8IR^%k9-%gwHJ^zV#Aq^( zK`X{GyHGhf^K&o-0e{zTxpt0StXZ0KOpg4(M=`hHfWvAy4Hg4oAy8kyE*Coghz9Q48bbs^E8}@7VZ;W0OoyT6@%1$SZC|yvlQB!e8 zhi}_0dt$*sA>Q$5XpGa;?^0aBTbsWGBaK=h1x{T&<{Y53gD$!Rr+3;0 zKy>@A;LGhf>7y0;J{JZdANZtmYMZmiAm$uEdwU8}vV^N<@0QOzqu3Z|wv)M&)--hD z+ML#!WqS-_&H*$ODwPJe+pSN2RQn-oiu>sMzQ;Jity^#QO+J^dwCM^E4vTbRgsL5Y zJ4=z<+t3Fvj9;VLCq7>t`l9*Y{(sQV;OlQT|60unxIIF-nqR?SeM?}j7fA8})FuEI zj8HzryHtK8pMCxCs15d`*54<6@Q3D@H9u~B$9Y&AzBuXT@txaxRnyW7ofq`|wo(IV zwvl@^sW1Z9+1gZt;d6~2=?|Xzt66;15I!M9Rv&($X}EhUVZM|`Fl)CJ2heIGYY51p z!JQh=HvG+@uMtOT_%_dvPPoY15j46exg~BYhqLEO*?4h(o8LGq4!})ZN<8kKlJCD8 zzOqf4!C&s(FDmi-Foh%hbLq~$Xmjs1zg6Z459~*^4p4GFe7gR3>f-%(*BgzrNu*H= zs4G$!!9hEKbnRnX`A<{M}&!Yl@7q^G9v{;u96Yol!htc6>6AV{6Y`#cw!5012(Om zAkwQ!2O!~NUrQYEmFgU7m{NYe@wuH9T0KEj3>5#e*wPsQ-qE!ErnFIX$$gTiWm`C7> zBNNL?5C7Wy1WUwNGbvfj3y(B&0PY7!;ku}b$Nkv)be--IpAsbwKl+j+x_8_mw-9Cy z;El|bu=(IULBkIsWb|StM%S?VF`wK%~h50>I0i zbk!D~1Ju0RcWjJj4v^!3;@FB!^d|&32+SN{^_tb3xKo@7fx#g#a{%lqlQImg#yREd z-6`Rl@#6A~wHa`7g(ESXIl#qAn+|bD47sDMk#vqi_UPlkABAox(M!*~ER;l&^r;I) zT2wW20NNuZR8yQR&k5XaH4d#(;+%ZwPsv2#mi`(7aTlP_{CZ!Wng?NUWWXk32rC<7 zaks$eBhFnz8^W(79yT7a=jls~KLlgaD+Siz#pQ#zntIJ@01%ym4gwMbm2!+pTPn*? z;!h3`Atz7%>=kvYKYT`ZR+dI7sjftU1P66WWGVO_z3SKorS(Uve%XBW`G11N%2o1n zn6eyTI4*QsfG=a3bp}6adr6;-6xL%L^_nV3wx7|KX{8qk114I1#@wpYx1@?qA0TsiXlFHkZIR{vM z%88P+&bT#ah*K%Yi=4WGw^p-<)RVNwHFVG2^qzBo*ABc&I3&9cp&6uM2vWdf@Z`?> zk;+<9e7kpRr5A{V)B-kUNy4QaqKhvNZaTtSdJWO3kC#Mt4LQui>iT3e--qzFb)2gK zOeWL49|Fi6`!sStO7p31U%oSHTi-T}dG2w3Y0W|okuKUuFbp9Fs3BlzrN!|p1g;5DvFG{EOxHaKgYoxw{E?8 z0i3Ac01`*qzUP~v=>-X=2hk9a8o!nxTJz4N^3W@5D#%5+%OP^Ka2bI%YAk-fCEnBP-^@#pIKL4I_d zk+v`n5Gw0h4E`HtwfIGSYslwgw7fuh62)B zKqF%%fJozZ^)N_jN#mni5%_3egzZ$cjbB49DJEuo4*y;U071+U)ePKi)QM-wE0xg0 zKt`zf%|yD}S2PQWpH{ab3Z>n<_Smd~erwxIkT4yI7gmJ1;z~y76dAq1l?o>KfE2R98zW-hJXZ-6c( zL*8LG1Ib4=6yhizB9nGne1N$=!t7cw$7H}*cyf(T8*d+aYzNRbKh2l~t$obK!se3M3+Qw$;fgL_1wK~$qkVhf| z>m!(ylz0}U>AOn%ox6s$`*@A{Jq#^|v6+~bu+f>c!-V}2Op3+;QCbU-EPdAyS!2o6 zC$si@?A@PY`*I(=?EK-V5E)X8K3=VT?McS5Ua=<;j4Rd79zI4_(%Hr0CJ-4`DIQGnv|U4F^vT#Z z8B#q9(bZQ*UyNL`a_P0D=ccuF^{N3tMEbE|Gj99crdV6NlAh(18OPZ!~i6jfkBnfe&rC^d@@6#Uu|(Q0O>mh!<}aBgE=>i3vcfx5D^R&faus)loroz zd)|IL{my^@^4Qn-(Mr&sW=#-i*j}&$Ko|`{NGbFB&`pmt_|WqWkSpW^$(Qet(uL$L zHbv7u!G^Hanw6m903=k5D?ao>`i;?M4avk9I@LfEd$oq*CfO8Ciiu>tPZw=92M7hL zOGunw9O49^9aFw8*=u|UtXv=JTzx{mzxsG+=4J3luq|v%#lcHMd5(-+J{(#$My3Ad z>f9wir?oHoyre~0w#n|h&^?(6C_*rj4ff3yv{OIB`a;SRw z2tQ-%nUN`amYlDefCr3TaNrn>Hs;M z0J~e4vO_Vxhv-yzVDaAm_hxH%>GTvd7jb%gt`BJDXw{O$z`aKE<$N?;Yo&#Xw zUDGvna~0TV4sJ@Yj{XtcCXCju#%;8_o}ns_v0Sl>XHD<0hY&EzvDDIcrCBJx$(ul? zz^U4nCQrH#S>Z%9hH_1{d6o;WoHcV+2LK>Bs#`N7aGqAkkwPY|8t-!!LclAh@q>SM z2Y?V*`iRwExkK*ENTq-7LI--r7@hXPuLuW#;4y~QeE>lkoGj?t*WZ_B?sV8~LhHo$ zP+dxDeiq{Z1ZwUondG1=)}CrDzayF{uchHxS}j|g1Hd>+%QQ0BTD})b#jiBuN4^&6 z01ynDkr5m&K z(YNWyefH8jFE*#IJ&hYZdA#Bs0EpD+1j%!28DwjItYag!w$F>_FiECmxgp!kAQY00000NkvXX Hu0mjfe{}7I literal 0 HcmV?d00001 diff --git a/templates/app/react-native/assets/logo.png b/templates/app/react-native/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b672828003dacf42c9cab1f254ef3536a6edf0e1 GIT binary patch literal 1386 zcmV-w1(o`VP)2Rm(*Ft`meI3_=ghFR4o~~UTZ%R|k(%DQ z60cUwjX^Xq4=nxHmA1Wrwwh3H6kAiJos5fvctM<2UagoLfrsnyDgsk2OgOh>D{d_d zHEBbOeYK3mMJ!%fmWA+YQFFYGK(D8K=gKV16v0XxnwT|vHt}&LA~vrg_)J6{#r}69 zO0g(i6457%%?@njxI{mRArWn(T`FvoWo&{&m|4c=K1X8w10w3<{|h3Th~Lj_Pl_#x zIruFLa5OPTeQLW7s}i#-S9|NRp@~_uci~AN#^zN96ZF}{-<4m?ae$q^`1c#7ZVv*R zK@?lK$kO)2=(i}qKM(b~xRFxWKY)#8Kz}*@8v1{Lh*PDF#&Icbo=yDSIj^s_0b__+ zi;Xp5xZo3w%cDLgFCSQ3Yq*euKrwgmc?ltOgow8A`9oa%+>@EML&njth4ClC#sWfm ztIQHM$njImCR>JpeH^(y=kw9H$)6xb%xuf=mO;!IH72jBNKv$@RYM=*y+fV6h+Wt+ zy;!JiA2v`w7wu*k(F z#olGWPGD~IO#}IBU|VHx2Ik}x^>c{1DzwcJiQO7<9zu|&Ks0RPyE|OGREe8IuxGT9 zQ+mg;$nv4Am~C)zBvH?y)g?L5L@_rhT_y#Si}GhcAC8w<_zQS6%_F-oH0q>Kmc~pp zh#006fs13us9*S;K@-K?B=BPAugDDe&_}y%v}14B_jx7*TG~uP3MX`Z5yHO+TpVTk za0oAb;L2viSO6A9ofc*itKc<8nG_K68p=?FCnP?#xG~R^lnEO&u*Wvz+fD^Bv#pRY zO9MLv=K?Z@m}4%SLTn|XRJBz%aBMt=*E$m3iR(CX(G}ct@fXP>yP#!IY>UEBu&uk2 z{Ta?sC`Oo}ZA28!&vO3PwyCibuzkHsUaNw+0OA<&T70*JP&v!NJC*Ozt^+ZfH?L`X z5qN`hZhHv3so0eH6)=Wb$D1ZgB}^*IQAG?fYZqMGuwZC{k~Z#@{w{m}i&t!z3mnE$ z@v^@mW{#W3h^dDVSw0P$yJ@EFNdcjpB0l9T0&i!V3s7wgt!^&1^2>7M8L97@A*!C5 z)6O27$2ujnujq1zVUAQdsc5$CI?s;qmb#<=4=j5Xn4`O=;m#C0^~5CXIpjNs}UCrpOPpjw*06 z(LT`n^6_vzV(tJQVd{?Ys)2LZ^KAs2B8+f_M1^_zUNs=l3c5ycy*DESyUHRd=1X9D s2o(l~VCBs)HR^1eDeX&OUNVU2AB?X3R_NE8K>z>%07*qoM6N<$g0SM01^@s6 literal 0 HcmV?d00001 diff --git a/templates/app/react-native/assets/splash.png b/templates/app/react-native/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..884bfd7ef1c8d6bf8d064a3f15c7aacfbd59d2f2 GIT binary patch literal 95246 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 { + // eslint-disable-next-line no-undef + const formData = new FormData(); + formData.append('username', username); + formData.append('password', password); + formData.append('grant_type', 'password'); + formData.append('scope', `${oAuthConfig.scope} offline_access`); + formData.append('client_id', oAuthConfig.clientId); + formData.append('client_secret', oAuthConfig.clientSecret); + + return api({ + method: 'POST', + url: '/connect/token', + headers: { 'Content-Type': 'multipart/form-data' }, + data: formData, + baseURL: oAuthConfig.issuer, + }).then(({ data }) => data); +}; + +export const Logout = () => + api({ + method: 'GET', + url: '/api/account/logout', + }).then(({ data }) => data); + +export const getTenant = tenantName => + api({ + method: 'GET', + url: `/api/abp/multi-tenancy/tenants/by-name/${tenantName}`, + }).then(({ data }) => data); + +export const getTenantById = tenantId => + api({ + method: 'GET', + url: `/api/abp/multi-tenancy/tenants/by-id/${tenantId}`, + }).then(({ data }) => data); diff --git a/templates/app/react-native/src/api/ApplicationConfigurationAPI.js b/templates/app/react-native/src/api/ApplicationConfigurationAPI.js new file mode 100644 index 0000000000..96fcbea5cd --- /dev/null +++ b/templates/app/react-native/src/api/ApplicationConfigurationAPI.js @@ -0,0 +1,30 @@ +import i18n from 'i18n-js'; +import api from './API'; + +export const getApplicationConfiguration = () => + api + .get('/api/abp/application-configuration') + .then(({ data }) => data) + .then(async config => { + const { cultureName } = config.localization.currentCulture; + i18n.locale = cultureName; + + Object.keys(config.localization.values).forEach(key => { + const resource = config.localization.values[key]; + + if (typeof resource !== 'object') return; + + Object.keys(resource).forEach(key2 => { + if (/'{|{/g.test(resource[key2])) { + resource[key2] = resource[key2].replace(/'{|{/g, '{{').replace(/}'|}/g, '}}'); + } + }); + }); + + i18n.translations[cultureName] = { + ...config.localization.values, + ...(i18n.translations[cultureName] || {}), + }; + + return config; + }); diff --git a/templates/app/react-native/src/api/IdentityAPI.js b/templates/app/react-native/src/api/IdentityAPI.js new file mode 100644 index 0000000000..0445057995 --- /dev/null +++ b/templates/app/react-native/src/api/IdentityAPI.js @@ -0,0 +1,29 @@ +import api from './API'; + +const maxMaxResultCount = 1000; + +export const getProfileDetail = () => api.get('/api/identity/my-profile').then(({ data }) => data); + +export const getRoles = (params = { maxResultCount: maxMaxResultCount, skipCount: 0 }) => + api.get('/api/identity/roles', { params }).then(({ data }) => data.items); + +export const getUserRoles = id => + api.get(`/api/identity/users/${id}/roles`).then(({ data }) => data.items); + +export const getUsers = (params = { maxResultCount: 10, skipCount: 0 }) => + api.get('/api/identity/users', { params }).then(({ data }) => data); + +export const getUserById = id => api.get(`/api/identity/users/${id}`).then(({ data }) => data); + +export const createUser = body => api.post('/api/identity/users', body).then(({ data }) => data); + +export const updateUser = (body, id) => + api.put(`/api/identity/users/${id}`, body).then(({ data }) => data); + +export const removeUser = id => api.delete(`/api/identity/users/${id}`); + +export const updateProfileDetail = body => + api.put('/api/identity/my-profile', body).then(({ data }) => data); + +export const changePassword = body => + api.post('/api/identity/my-profile/change-password', body).then(({ data }) => data); diff --git a/templates/app/react-native/src/api/TenantManagementAPI.js b/templates/app/react-native/src/api/TenantManagementAPI.js new file mode 100644 index 0000000000..f60ed96450 --- /dev/null +++ b/templates/app/react-native/src/api/TenantManagementAPI.js @@ -0,0 +1,21 @@ +import api from './API'; + +export function getTenants(params = {}) { + return api.get('/api/multi-tenancy/tenants', { params }).then(({ data }) => data); +} + +export function createTenant(body) { + return api.post('/api/multi-tenancy/tenants', body).then(({ data }) => data); +} + +export function getTenantById(id) { + return api.get(`/api/multi-tenancy/tenants/${id}`).then(({ data }) => data); +} + +export function updateTenant(body, id) { + return api.put(`/api/multi-tenancy/tenants/${id}`, body).then(({ data }) => data); +} + +export function removeTenant(id) { + return api.delete(`/api/multi-tenancy/tenants/${id}`).then(({ data }) => data); +} diff --git a/templates/app/react-native/src/components/AppContainer/AppContainer.js b/templates/app/react-native/src/components/AppContainer/AppContainer.js new file mode 100644 index 0000000000..d07b692466 --- /dev/null +++ b/templates/app/react-native/src/components/AppContainer/AppContainer.js @@ -0,0 +1,99 @@ +import { Ionicons } from '@expo/vector-icons'; +import * as Font from 'expo-font'; +import i18n from 'i18n-js'; +import PropTypes from 'prop-types'; +import React, { useEffect, useState, useMemo } from 'react'; +import { Platform, StatusBar } from 'react-native'; +import { NavigationContainer } from '@react-navigation/native'; +import { Root } from 'native-base'; +import Loading from '../Loading/Loading'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import { createLanguageSelector } from '../../store/selectors/AppSelectors'; +import { createTokenSelector } from '../../store/selectors/PersistentStorageSelectors'; +import AppActions from '../../store/actions/AppActions'; +import PersistentStorageActions from '../../store/actions/PersistentStorageActions'; +import { LocalizationContext } from '../../contexts/LocalizationContext'; +import { isTokenValid } from '../../utils/TokenUtils'; +import DrawerNavigator from '../../navigators/DrawerNavigator'; +import AuthNavigator from '../../navigators/AuthNavigator'; +import { getEnvVars } from '../../../Environment'; + +const { localization } = getEnvVars(); + +i18n.defaultSeparator = '::'; + +const cloneT = i18n.t; +i18n.t = (key, ...args) => { + if (key.slice(0, 2) === '::') { + key = localization.defaultResourceName + key; + } + return cloneT(key, ...args); +}; + +function AppContainer({ language, fetchAppConfig, token, setToken }) { + const platform = Platform.OS; + const [isReady, setIsReady] = useState(false); + + const localizationContext = useMemo( + () => ({ + t: i18n.t, + locale: (language || {}).cultureName, + }), + [language], + ); + + const isValid = useMemo(() => isTokenValid(token), [token]); + + useEffect(() => { + if (!isValid && token && token.access_token) { + setToken({}); + } + }, [isValid]); + + useEffect(() => { + fetchAppConfig(); + + Promise.all([ + Font.loadAsync({ + Roboto: require('native-base/Fonts/Roboto.ttf'), + Roboto_medium: require('native-base/Fonts/Roboto_medium.ttf'), + ...Ionicons.font, + }), + ]).then(() => setIsReady(true)); + }, []); + + return ( + <> + + + {isReady && language ? ( + + + {isValid ? : } + + + ) : null} + + + + ); +} + +AppContainer.propTypes = { + language: PropTypes.object, + token: PropTypes.object.isRequired, + fetchAppConfig: PropTypes.func.isRequired, + setToken: PropTypes.func.isRequired, +}; + +export default connectToRedux({ + component: AppContainer, + stateProps: state => ({ + language: createLanguageSelector()(state), + token: createTokenSelector()(state), + }), + dispatchProps: { + fetchAppConfig: AppActions.fetchAppConfigAsync, + setToken: PersistentStorageActions.setToken, + }, +}); diff --git a/templates/app/react-native/src/components/DataList/DataList.js b/templates/app/react-native/src/components/DataList/DataList.js new file mode 100644 index 0000000000..7c837ec83f --- /dev/null +++ b/templates/app/react-native/src/components/DataList/DataList.js @@ -0,0 +1,139 @@ +import { useFocusEffect } from '@react-navigation/native'; +import i18n from 'i18n-js'; +import { connectStyle, Icon, Input, InputGroup, Item, List, Spinner, Text } from 'native-base'; +import PropTypes from 'prop-types'; +import React, { forwardRef, useCallback, useEffect, useState } from 'react'; +import { RefreshControl, StyleSheet, View } from 'react-native'; +import LoadingActions from '../../store/actions/LoadingActions'; +import { activeTheme } from '../../theme/variables'; +import { debounce } from '../../utils/Debounce'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import LoadingButton from '../LoadingButton/LoadingButton'; + +function DataList({ + style, + navigation, + fetchFn, + render, + maxResultCount = 15, + debounceTime = 350, + ...props +}) { + const [records, setRecords] = useState([]); + const [totalCount, setTotalCount] = useState(0); + const [loading, setLoading] = useState(false); + const [searchLoading, setSearchLoading] = useState(false); + const [buttonLoading, setButtonLoading] = useState(false); + const [skipCount, setSkipCount] = useState(0); + const [filter, setFilter] = useState(''); + + const fetch = (skip = 0, isRefreshingActive = true) => { + if (isRefreshingActive) setLoading(true); + return fetchFn({ filter, maxResultCount, skipCount: skip }) + .then(({ items, totalCount: total }) => { + setTotalCount(total); + setRecords(skip ? [...records, ...items] : items); + setSkipCount(skip); + }) + .finally(() => { + if (isRefreshingActive) setLoading(false); + }); + }; + + const fetchPartial = () => { + if (loading || records.length === totalCount) return; + + setButtonLoading(true); + fetch(skipCount + maxResultCount, false).finally(() => setButtonLoading(false)); + }; + + useFocusEffect( + useCallback(() => { + setSkipCount(0); + fetch(0, false); + }, []), + ); + + useEffect(() => { + function searchFetch() { + setSearchLoading(true); + return fetch(0, false).finally(() => setTimeout(() => setSearchLoading(false), 150)); + } + debounce(searchFetch, debounceTime)(); + }, [filter]); + + return ( + <> + + + + {searchLoading ? ( + + + + ) : ( + + )} + + + + } + dataArray={records} + renderRow={(data, sectionID, rowId, ...args) => ( + <> + {render(data, sectionID, rowId, ...args)} + {rowId + 1 === skipCount + maxResultCount && totalCount > records.length ? ( + + fetchPartial()}> + {i18n.t('AbpUi::LoadMore')} + + + ) : null} + + )} + {...props} + /> + + + ); +} + +DataList.propTypes = { + ...List.propTypes, + style: PropTypes.any.isRequired, + fetchFn: PropTypes.func.isRequired, + render: PropTypes.func.isRequired, + maxResultCount: PropTypes.number, + debounceTime: PropTypes.number, +}; + +const styles = StyleSheet.create({ + container: { flex: 1 }, + list: {}, + spinner: { + transform: [{ scale: 0.5 }], + position: 'absolute', + right: 8, + top: -40, + color: activeTheme.brandInfo, + }, +}); + +const Forwarded = forwardRef((props, ref) => ); + +export default connectToRedux({ + component: connectStyle('ABP.DataList', styles)(Forwarded), + dispatchProps: { + startLoading: LoadingActions.start, + stopLoading: LoadingActions.stop, + }, +}); diff --git a/templates/app/react-native/src/components/DrawerContent/DrawerContent.js b/templates/app/react-native/src/components/DrawerContent/DrawerContent.js new file mode 100644 index 0000000000..1725abaee3 --- /dev/null +++ b/templates/app/react-native/src/components/DrawerContent/DrawerContent.js @@ -0,0 +1,121 @@ +import { Text, View, List, ListItem, Left, Icon, Body } from 'native-base'; +import React from 'react'; +import { Image, StyleSheet } from 'react-native'; +import SafeAreaView from 'react-native-safe-area-view'; +import i18n from 'i18n-js'; +import PropTypes from 'prop-types'; +import Constants from 'expo-constants'; +import { withPermission } from '../../hocs/PermissionHOC'; + +const screens = { + Home: { label: '::Menu:Home', iconName: 'home' }, + Users: { + label: 'AbpIdentity::Users', + iconName: 'contacts', + requiredPolicy: 'AbpIdentity.Users', + }, + Tenants: { + label: 'AbpTenantManagement::Tenants', + iconName: 'people', + requiredPolicy: 'AbpTenantManagement.Tenants', + }, + Settings: { label: 'AbpSettingManagement::Settings', iconName: 'cog' }, +}; + +const ListItemWithPermission = withPermission(ListItem); + +function DrawerContent({ navigation, state: { routeNames, index: currentScreenIndex } }) { + const navigate = screen => { + navigation.navigate(screen); + navigation.closeDrawer(); + }; + + return ( + + + + + + item} + renderRow={name => ( + navigate(name)} + style={{ + ...styles.navItem, + backgroundColor: name === routeNames[currentScreenIndex] ? '#38003c' : '#f2f2f2', + }}> + + + + + + {i18n.t(screens[name].label)} + + + + )} + /> + + + + © MyProjectName + + + v{Constants.manifest.version} + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flexGrow: 1, + }, + logo: { + marginTop: 20, + marginBottom: 15, + }, + headerView: { + borderBottomWidth: 1, + borderColor: '#eee', + alignItems: 'center', + }, + navItem: { + marginLeft: 0, + marginBottom: 3, + paddingLeft: 10, + width: '100%', + backgroundColor: '#f2f2f2', + }, + footer: { + backgroundColor: '#eee', + flexDirection: 'row', + justifyContent: 'space-between', + }, + copyRight: { + margin: 15, + }, + version: { + margin: 15, + }, +}); + +DrawerContent.propTypes = { + state: PropTypes.object.isRequired, +}; + +export default DrawerContent; diff --git a/templates/app/react-native/src/components/FormButtons/FormButtons.js b/templates/app/react-native/src/components/FormButtons/FormButtons.js new file mode 100644 index 0000000000..5bbdb388f8 --- /dev/null +++ b/templates/app/react-native/src/components/FormButtons/FormButtons.js @@ -0,0 +1,82 @@ +import React, { forwardRef } from 'react'; +import PropTypes from 'prop-types'; +import { Button, Text, connectStyle } from 'native-base'; +import { View, StyleSheet, Alert } from 'react-native'; +import i18n from 'i18n-js'; + +function FormButtons({ + style, + submit, + remove, + removeMessage, + isRemoveDisabled, + isSubmitDisabled, + isShowRemove = false, + isShowSubmit = true, +}) { + const confirmation = () => { + Alert.alert( + i18n.t('AbpUi::AreYouSure'), + removeMessage, + [ + { + text: i18n.t('AbpUi::Cancel'), + style: 'cancel', + }, + { text: i18n.t('AbpUi::Yes'), onPress: () => remove() }, + ], + { cancelable: true }, + ); + }; + + return ( + + {isShowRemove ? ( + + ) : null} + {isShowSubmit ? ( + + ) : null} + + ); +} + +FormButtons.propTypes = { + submit: PropTypes.func.isRequired, + remove: PropTypes.func, + removeMessage: PropTypes.string, + style: PropTypes.any, + isRemoveDisabled: PropTypes.bool, + isSubmitDisabled: PropTypes.bool, + isShowRemove: PropTypes.bool, + isShowSubmit: PropTypes.bool, +}; + +const styles = StyleSheet.create({ + container: { + width: '100%', + justifyContent: 'center', + alignItems: 'center', + position: 'absolute', + bottom: 0, + flexDirection: 'row', + }, +}); + +const Forwarded = forwardRef((props, ref) => ); + +export default connectStyle('ABP.FormButtons', styles)(Forwarded); diff --git a/templates/app/react-native/src/components/Loading/Loading.js b/templates/app/react-native/src/components/Loading/Loading.js new file mode 100644 index 0000000000..41f0f0693e --- /dev/null +++ b/templates/app/react-native/src/components/Loading/Loading.js @@ -0,0 +1,63 @@ +import React, { forwardRef } from 'react'; +import { Spinner, View, connectStyle } from 'native-base'; +import { StyleSheet } from 'react-native'; +import PropTypes from 'prop-types'; +import { activeTheme } from '../../theme/variables'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import { + createLoadingSelector, + createOpacitySelector, +} from '../../store/selectors/LoadingSelectors'; + +function Loading({ style, loading, opacity }) { + return loading ? ( + + + + + ) : null; +} +const Forwarded = forwardRef((props, ref) => ); + +const backdropStyle = { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + backgroundColor: '#fff', +}; + +export const styles = StyleSheet.create({ + container: { + ...backdropStyle, + backgroundColor: 'transparent', + zIndex: activeTheme.zIndex.indicator, + alignItems: 'center', + justifyContent: 'center', + }, + backdrop: backdropStyle, + spinner: { + color: activeTheme.brandPrimary, + fontSize: 100, + }, +}); + +Loading.propTypes = { + style: PropTypes.objectOf(PropTypes.any), + loading: PropTypes.bool, + opacity: PropTypes.number, +}; + +export default connectToRedux({ + component: connectStyle('ABP.Loading', styles)(Forwarded), + stateProps: state => ({ + loading: createLoadingSelector()(state), + opacity: createOpacitySelector()(state), + }), +}); diff --git a/templates/app/react-native/src/components/LoadingButton/LoadingButton.js b/templates/app/react-native/src/components/LoadingButton/LoadingButton.js new file mode 100644 index 0000000000..14de6d840a --- /dev/null +++ b/templates/app/react-native/src/components/LoadingButton/LoadingButton.js @@ -0,0 +1,31 @@ +import { Button, connectStyle, Spinner } from 'native-base'; +import PropTypes from 'prop-types'; +import React, { forwardRef } from 'react'; +import { StyleSheet } from 'react-native'; + +function LoadingButton({ loading = false, style, children, ...props }) { + return ( + + ); +} + +LoadingButton.propTypes = { + ...Button.propTypes, + loading: PropTypes.bool.isRequired, +}; + +const styles = StyleSheet.create({ + button: { marginTop: 20, marginBottom: 30, height: 30 }, + spinner: { + transform: [{ scale: 0.5 }], + color: 'white', + marginRight: 5, + }, +}); + +const Forwarded = forwardRef((props, ref) => ); + +export default connectStyle('ABP.LoadingButton', styles)(Forwarded); diff --git a/templates/app/react-native/src/components/MenuIcon/MenuIcon.js b/templates/app/react-native/src/components/MenuIcon/MenuIcon.js new file mode 100644 index 0000000000..c820d30a7f --- /dev/null +++ b/templates/app/react-native/src/components/MenuIcon/MenuIcon.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { TouchableOpacity } from 'react-native'; +import { Icon } from 'native-base'; +import PropTypes from 'prop-types'; + +function MenuIcon({ onPress, iconName = 'menu' }) { + return ( + + + + ); +} + +MenuIcon.propTypes = { + onPress: PropTypes.func.isRequired, + iconName: PropTypes.string, +}; + +export default MenuIcon; diff --git a/templates/app/react-native/src/components/TenantBox/TenantBox.js b/templates/app/react-native/src/components/TenantBox/TenantBox.js new file mode 100644 index 0000000000..a944d80dd5 --- /dev/null +++ b/templates/app/react-native/src/components/TenantBox/TenantBox.js @@ -0,0 +1,128 @@ +import i18n from 'i18n-js'; +import { + Button, + connectStyle, + Content, + Input, + InputGroup, + Label, + Segment, + Text, +} from 'native-base'; +import PropTypes from 'prop-types'; +import React, { forwardRef, useState } from 'react'; +import { StyleSheet, View, Alert } from 'react-native'; +import { getTenant } from '../../api/AccountAPI'; +import PersistentStorageActions from '../../store/actions/PersistentStorageActions'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import { createTenantSelector } from '../../store/selectors/PersistentStorageSelectors'; + +function TenantBox({ style, tenant = {}, setTenant, showTenantSelection, toggleTenantSelection }) { + const [tenantName, setTenantName] = useState(tenant.name); + + const findTenant = () => { + if (!tenantName) { + setTenant({}); + toggleTenantSelection(); + return; + } + + getTenant(tenantName).then(({ success, ...data }) => { + if (!success) { + Alert.alert( + i18n.t('AbpUi::Error'), + i18n.t('AbpUiMultiTenancy::GivenTenantIsNotAvailable', { + 0: tenantName, + }), + [{ text: i18n.t('AbpUi::Ok') }], + ); + return; + } + setTenant(data); + toggleTenantSelection(); + }); + }; + + return ( + <> + + + {i18n.t('AbpUiMultiTenancy::Tenant')} + + {tenant.name ? tenant.name : i18n.t('AbpUiMultiTenancy::NotSelected')} + + + + + {showTenantSelection ? ( + + + + + + {i18n.t('AbpUiMultiTenancy::SwitchTenantHint')} + + + + + + ) : null} + + ); +} + +TenantBox.propTypes = { + style: PropTypes.any.isRequired, + setTenant: PropTypes.func.isRequired, + showTenantSelection: PropTypes.bool.isRequired, + toggleTenantSelection: PropTypes.func.isRequired, + tenant: PropTypes.object.isRequired, +}; + +const styles = StyleSheet.create({ + container: { + paddingHorizontal: 20, + alignItems: 'center', + justifyContent: 'space-between', + height: 70, + }, + button: { marginTop: 20, width: '49%' }, + switchButton: { + borderTopWidth: 0, + borderRightWidth: 0, + borderBottomWidth: 0, + borderLeftWidth: 0, + borderRadius: 10, + backgroundColor: '#38003c', + height: 35, + }, + tenant: { color: '#777' }, + title: { + marginRight: 10, + color: '#777', + fontSize: 13, + fontWeight: '600', + textTransform: 'uppercase', + }, + hint: { color: '#bbb', textAlign: 'left' }, +}); + +const Forwarded = forwardRef((props, ref) => ); + +export default connectToRedux({ + component: connectStyle('ABP.TenantBox', styles)(Forwarded), + dispatchProps: { + setTenant: PersistentStorageActions.setTenant, + }, + stateProps: state => ({ + tenant: createTenantSelector()(state), + }), +}); diff --git a/templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js b/templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js new file mode 100644 index 0000000000..30e7087762 --- /dev/null +++ b/templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js @@ -0,0 +1,18 @@ +import i18n from 'i18n-js'; +import { connectStyle } from 'native-base'; +import React, { forwardRef } from 'react'; +import { Text } from 'react-native'; + +const ValidationMessage = ({ children, ...props }) => + children ? {i18n.t(children)} : null; + +const styles = { + fontSize: 12, + marginHorizontal: 10, + marginTop: -5, + color: '#ed2f2f', +}; + +const Forwarded = forwardRef((props, ref) => ); + +export default connectStyle('ABP.ValidationMessage', styles)(Forwarded); diff --git a/templates/app/react-native/src/contexts/LocalizationContext.js b/templates/app/react-native/src/contexts/LocalizationContext.js new file mode 100644 index 0000000000..83c68ba2bc --- /dev/null +++ b/templates/app/react-native/src/contexts/LocalizationContext.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export const LocalizationContext = React.createContext(); diff --git a/templates/app/react-native/src/hocs/PermissionHOC.js b/templates/app/react-native/src/hocs/PermissionHOC.js new file mode 100644 index 0000000000..6cf8025428 --- /dev/null +++ b/templates/app/react-native/src/hocs/PermissionHOC.js @@ -0,0 +1,17 @@ +import React, { forwardRef } from 'react'; +import PropTypes from 'prop-types'; +import { usePermission } from '../hooks/UsePermission'; + +export function withPermission(Component, policyKey) { + const Forwarded = forwardRef((props, ref) => { + const isGranted = + policyKey || props.policyKey ? usePermission(policyKey || props.policyKey) : true; + return isGranted ? : null; + }); + + Forwarded.propTypes = { + policyKey: PropTypes.string, + }; + + return Forwarded; +} diff --git a/templates/app/react-native/src/hooks/UsePermission.js b/templates/app/react-native/src/hooks/UsePermission.js new file mode 100644 index 0000000000..a50d8f7fa1 --- /dev/null +++ b/templates/app/react-native/src/hooks/UsePermission.js @@ -0,0 +1,16 @@ +import { useEffect, useState } from 'react'; +import { store } from '../store'; +import { createGrantedPolicySelector } from '../store/selectors/AppSelectors'; + +export function usePermission(key) { + const [permission, setPermission] = useState(false); + + const state = store.getState(); + const policy = createGrantedPolicySelector(key)(state); + + useEffect(() => { + setPermission(policy); + }, [policy]); + + return permission; +} diff --git a/templates/app/react-native/src/interceptors/APIInterceptor.js b/templates/app/react-native/src/interceptors/APIInterceptor.js new file mode 100644 index 0000000000..6060dca2b3 --- /dev/null +++ b/templates/app/react-native/src/interceptors/APIInterceptor.js @@ -0,0 +1,102 @@ +import { Toast } from 'native-base'; +import i18n from 'i18n-js'; +import api from '../api/API'; +import PersistentStorageActions from '../store/actions/PersistentStorageActions'; +import LoadingActions from '../store/actions/LoadingActions'; + +export function initAPIInterceptor(store) { + api.interceptors.request.use( + async request => { + const { + persistentStorage: { token, language, tenant }, + } = store.getState(); + + if (!request.headers.Authorization && token && token.access_token) { + request.headers.Authorization = `${token.token_type} ${token.access_token}`; + } + + if (!request.headers['Content-Type']) { + request.headers['Content-Type'] = 'application/json'; + } + + if (!request.headers['Accept-Language'] && language) { + request.headers['Accept-Language'] = language; + } + + if (!request.headers.__tenant && tenant && tenant.tenantId) { + request.headers.__tenant = tenant.tenantId; + } + + return request; + }, + error => console.error(error), + ); + + api.interceptors.response.use( + response => response, + error => { + store.dispatch(LoadingActions.clear()); + const errorRes = error.response; + if (errorRes) { + if (errorRes.headers._abperrorformat && errorRes.status === 401) { + store.dispatch(PersistentStorageActions.setToken({})); + } + + showError({ error: errorRes.data.error || {}, status: errorRes.status }); + } else { + Toast.show({ + text: 'An unexpected error has occurred', + buttonText: 'x', + duration: 10000, + type: 'danger', + textStyle: { textAlign: 'center' }, + }); + } + + return Promise.reject(error); + }, + ); +} + +function showError({ error = {}, status }) { + let message = ''; + let title = i18n.t('AbpAccount::DefaultErrorMessage'); + + if (typeof error === 'string') { + message = error; + } else if (error.details) { + message = error.details; + title = error.message; + } else if (error.message) { + message = error.message; + } else { + switch (status) { + case 401: + title = i18n.t('AbpAccount::DefaultErrorMessage401'); + message = i18n.t('AbpAccount::DefaultErrorMessage401Detail'); + break; + case 403: + title = i18n.t('AbpAccount::DefaultErrorMessage403'); + message = i18n.t('AbpAccount::DefaultErrorMessage403Detail'); + break; + case 404: + title = i18n.t('AbpAccount::DefaultErrorMessage404'); + message = i18n.t('AbpAccount::DefaultErrorMessage404Detail'); + break; + case 500: + title = i18n.t('AbpAccount::500Message'); + message = i18n.t('AbpAccount::InternalServerErrorMessage'); + break; + default: + break; + } + } + + Toast.show({ + text: `${title}\n${message}`, + buttonText: 'x', + duration: 10000, + type: 'danger', + textStyle: { textAlign: 'center' }, + }); +} diff --git a/templates/app/react-native/src/navigators/AuthNavigator.js b/templates/app/react-native/src/navigators/AuthNavigator.js new file mode 100644 index 0000000000..b6b06d11b5 --- /dev/null +++ b/templates/app/react-native/src/navigators/AuthNavigator.js @@ -0,0 +1,22 @@ +import { createStackNavigator } from '@react-navigation/stack'; +import React from 'react'; +import { LocalizationContext } from '../contexts/LocalizationContext'; +import LoginScreen from '../screens/Login/LoginScreen'; + +const Stack = createStackNavigator(); + +export default function AuthStackNavigator() { + const { t } = React.useContext(LocalizationContext); + + return ( + + ({ + title: t('AbpAccount::Login'), + })} + /> + + ); +} diff --git a/templates/app/react-native/src/navigators/DrawerNavigator.js b/templates/app/react-native/src/navigators/DrawerNavigator.js new file mode 100644 index 0000000000..9b0fde4afc --- /dev/null +++ b/templates/app/react-native/src/navigators/DrawerNavigator.js @@ -0,0 +1,20 @@ +import React from 'react'; +import { createDrawerNavigator } from '@react-navigation/drawer'; +import HomeStackNavigator from './HomeNavigator'; +import SettingsStackNavigator from './SettingsNavigator'; +import UsersStackNavigator from './UsersNavigator'; +import TenantsStackNavigator from './TenantsNavigator'; +import DrawerContent from '../components/DrawerContent/DrawerContent'; + +const Drawer = createDrawerNavigator(); + +export default function DrawerNavigator() { + return ( + + + + + + + ); +} diff --git a/templates/app/react-native/src/navigators/HomeNavigator.js b/templates/app/react-native/src/navigators/HomeNavigator.js new file mode 100644 index 0000000000..7ba440f510 --- /dev/null +++ b/templates/app/react-native/src/navigators/HomeNavigator.js @@ -0,0 +1,24 @@ +import React from 'react'; +import { createStackNavigator } from '@react-navigation/stack'; +import HomeScreen from '../screens/Home/HomeScreen'; +import MenuIcon from '../components/MenuIcon/MenuIcon'; +import { LocalizationContext } from '../contexts/LocalizationContext'; + +const Stack = createStackNavigator(); + +export default function HomeStackNavigator() { + const { t } = React.useContext(LocalizationContext); + + return ( + + ({ + headerLeft: () => navigation.openDrawer()} />, + title: t('::Menu:Home'), + })} + /> + + ); +} diff --git a/templates/app/react-native/src/navigators/SettingsNavigator.js b/templates/app/react-native/src/navigators/SettingsNavigator.js new file mode 100644 index 0000000000..84d3220473 --- /dev/null +++ b/templates/app/react-native/src/navigators/SettingsNavigator.js @@ -0,0 +1,41 @@ +import React from 'react'; +import { createStackNavigator } from '@react-navigation/stack'; +import i18n from 'i18n-js'; +import SettingsScreen from '../screens/Settings/SettingsScreen'; +import ChangePasswordScreen from '../screens/ChangePassword/ChangePasswordScreen'; +import ManageProfileScreen from '../screens/ManageProfile/ManageProfileScreen'; +import MenuIcon from '../components/MenuIcon/MenuIcon'; +import { LocalizationContext } from '../contexts/LocalizationContext'; + +const Stack = createStackNavigator(); + +export default function SettingsStackNavigator() { + const { t } = React.useContext(LocalizationContext); + + return ( + + ({ + headerLeft: () => navigation.openDrawer()} />, + title: t('AbpSettingManagement::Settings'), + })} + /> + + + + ); +} diff --git a/templates/app/react-native/src/navigators/TenantsNavigator.js b/templates/app/react-native/src/navigators/TenantsNavigator.js new file mode 100644 index 0000000000..7e38b82674 --- /dev/null +++ b/templates/app/react-native/src/navigators/TenantsNavigator.js @@ -0,0 +1,34 @@ +import React from 'react'; +import { createStackNavigator } from '@react-navigation/stack'; +import TenantsScreen from '../screens/Tenants/TenantsScreen'; +import CreateUpdateTenantScreen from '../screens/CreateUpdateTenant/CreateUpdateTenantScreen'; +import MenuIcon from '../components/MenuIcon/MenuIcon'; +import { LocalizationContext } from '../contexts/LocalizationContext'; + +const Stack = createStackNavigator(); + +export default function TenantsStackNavigator() { + const { t } = React.useContext(LocalizationContext); + + return ( + + ({ + headerLeft: () => navigation.openDrawer()} />, + title: t('AbpTenantManagement::Tenants'), + })} + /> + ({ + title: t( + route.params?.tenantId ? 'AbpTenantManagement::Edit' : 'AbpTenantManagement::NewTenant', + ), + })} + /> + + ); +} diff --git a/templates/app/react-native/src/navigators/UsersNavigator.js b/templates/app/react-native/src/navigators/UsersNavigator.js new file mode 100644 index 0000000000..222dfe1550 --- /dev/null +++ b/templates/app/react-native/src/navigators/UsersNavigator.js @@ -0,0 +1,32 @@ +import React from 'react'; +import { createStackNavigator } from '@react-navigation/stack'; +import UsersScreen from '../screens/Users/UsersScreen'; +import CreateUpdateUserScreen from '../screens/CreateUpdateUser/CreateUpdateUserScreen'; +import MenuIcon from '../components/MenuIcon/MenuIcon'; +import { LocalizationContext } from '../contexts/LocalizationContext'; + +const Stack = createStackNavigator(); + +export default function UsersStackNavigator() { + const { t } = React.useContext(LocalizationContext); + + return ( + + ({ + headerLeft: () => navigation.openDrawer()} />, + title: t('AbpIdentity::Users'), + })} + /> + ({ + title: t(route.params?.userId ? 'AbpIdentity::Edit' : 'AbpIdentity::NewUser'), + })} + /> + + ); +} diff --git a/templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js b/templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js new file mode 100644 index 0000000000..03c988c8bf --- /dev/null +++ b/templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js @@ -0,0 +1,99 @@ +import { Formik } from 'formik'; +import i18n from 'i18n-js'; +import { Container, Content, Form, Input, InputGroup, Item, Icon, Label } from 'native-base'; +import PropTypes from 'prop-types'; +import React, { useRef, useState } from 'react'; +import * as Yup from 'yup'; +import FormButtons from '../../components/FormButtons/FormButtons'; +import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; + +const ValidationSchema = Yup.object().shape({ + currentPassword: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), + newPassword: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), +}); + +function ChangePasswordForm({ submit, cancel }) { + const [showCurrentPassword, setShowCurrentPassword] = useState(false); + const [showNewPassword, setShowNewPassword] = useState(false); + + const currentPasswordRef = useRef(); + const newPasswordRef = useRef(); + + const onSubmit = values => { + submit({ + ...values, + newPasswordConfirm: values.newPassword, + }); + }; + + return ( + onSubmit(values)}> + {({ handleChange, handleBlur, handleSubmit, values, errors, isValid }) => ( + <> + + +
+ + + + newPasswordRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('currentPassword')} + onBlur={handleBlur('currentPassword')} + value={values.currentPassword} + textContentType="password" + secureTextEntry={!showCurrentPassword} + /> + setShowCurrentPassword(!showCurrentPassword)} + /> + + + {errors.currentPassword} + + + + + setShowNewPassword(!showNewPassword)} + /> + + + {errors.newPassword} +
+
+
+ + + )} +
+ ); +} + +ChangePasswordForm.propTypes = { + submit: PropTypes.func.isRequired, + cancel: PropTypes.func.isRequired, +}; + +export default ChangePasswordForm; diff --git a/templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js b/templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js new file mode 100644 index 0000000000..196c762a38 --- /dev/null +++ b/templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js @@ -0,0 +1,33 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { changePassword } from '../../api/IdentityAPI'; +import LoadingActions from '../../store/actions/LoadingActions'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import ChangePasswordForm from './ChangePasswordForm'; + +function ChangePasswordScreen({ navigation, startLoading, stopLoading }) { + const submit = data => { + startLoading({ key: 'changePassword' }); + + changePassword(data) + .then(() => { + navigation.goBack(); + }) + .finally(() => stopLoading({ key: 'changePassword' })); + }; + + return navigation.goBack()} />; +} + +ChangePasswordScreen.propTypes = { + startLoading: PropTypes.func.isRequired, + stopLoading: PropTypes.func.isRequired, +}; + +export default connectToRedux({ + component: ChangePasswordScreen, + dispatchProps: { + startLoading: LoadingActions.start, + stopLoading: LoadingActions.stop, + }, +}); diff --git a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js new file mode 100644 index 0000000000..ff5801f914 --- /dev/null +++ b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js @@ -0,0 +1,84 @@ +import { Formik } from 'formik'; +import i18n from 'i18n-js'; +import { Container, Content, Input, InputGroup, Label } from 'native-base'; +import PropTypes from 'prop-types'; +import React, { useRef } from 'react'; +import { StyleSheet } from 'react-native'; +import * as Yup from 'yup'; +import FormButtons from '../../components/FormButtons/FormButtons'; +import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; +import { usePermission } from '../../hooks/UsePermission'; + +const validations = { + name: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), +}; + +function CreateUpdateTenantForm({ editingTenant = {}, submit, remove }) { + const tenantNameRef = useRef(); + + const hasRemovePermission = usePermission('AbpTenantManagement.Tenants.Delete'); + + const onSubmit = values => { + submit({ + ...editingTenant, + ...values, + }); + }; + + return ( + onSubmit(values)}> + {({ handleChange, handleBlur, handleSubmit, values, errors, isValid }) => ( + <> + + + + + + + {errors.name} + + + + + )} + + ); +} + +CreateUpdateTenantForm.propTypes = { + editingTenant: PropTypes.object, + submit: PropTypes.func.isRequired, + remove: PropTypes.func.isRequired, +}; + +const styles = StyleSheet.create({ + container: { + marginBottom: 50, + }, +}); + +export default CreateUpdateTenantForm; diff --git a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js new file mode 100644 index 0000000000..eacbb98a2c --- /dev/null +++ b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js @@ -0,0 +1,77 @@ +import PropTypes from 'prop-types'; +import React, { useState, useCallback } from 'react'; +import { useFocusEffect } from '@react-navigation/native'; +import { + createTenant, + getTenantById, + removeTenant, + updateTenant, +} from '../../api/TenantManagementAPI'; +import LoadingActions from '../../store/actions/LoadingActions'; +import { createLoadingSelector } from '../../store/selectors/LoadingSelectors'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import CreateUpdateTenantForm from './CreateUpdateTenantForm'; + +function CreateUpdateTenantScreen({ navigation, route, startLoading, stopLoading }) { + const [tenant, setTenant] = useState(); + const tenantId = route.params?.tenantId; + + const remove = () => { + startLoading({ key: 'removeTenant' }); + removeTenant(tenantId) + .then(() => navigation.goBack()) + .finally(() => stopLoading({ key: 'removeTenant' })); + }; + + useFocusEffect( + useCallback(() => { + if (tenantId) { + getTenantById(tenantId).then((data = {}) => setTenant(data)); + } + }, []), + ); + + const submit = data => { + startLoading({ key: 'saveTenant' }); + let request; + if (data.id) { + request = updateTenant(data, tenantId); + } else { + request = createTenant(data); + } + + request + .then(() => { + navigation.goBack(); + }) + .finally(() => stopLoading({ key: 'saveTenant' })); + }; + + const renderForm = () => ( + + ); + + if (tenantId && tenant) { + return renderForm(); + } + + if (!tenantId) { + return renderForm(); + } + + return null; +} + +CreateUpdateTenantScreen.propTypes = { + startLoading: PropTypes.func.isRequired, + stopLoading: PropTypes.func.isRequired, +}; + +export default connectToRedux({ + component: CreateUpdateTenantScreen, + stateProps: state => ({ loading: createLoadingSelector()(state) }), + dispatchProps: { + startLoading: LoadingActions.start, + stopLoading: LoadingActions.stop, + }, +}); diff --git a/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js b/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js new file mode 100644 index 0000000000..6757801c38 --- /dev/null +++ b/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js @@ -0,0 +1,242 @@ +import { Formik } from 'formik'; +import i18n from 'i18n-js'; +import { + Body, + Button, + CheckBox, + Container, + Content, + Input, + InputGroup, + Item, + Icon, + Label, + ListItem, + Segment, + Text, +} from 'native-base'; +import PropTypes from 'prop-types'; +import React, { useRef, useState } from 'react'; +import { StyleSheet, TouchableOpacity, View } from 'react-native'; +import * as Yup from 'yup'; +import FormButtons from '../../components/FormButtons/FormButtons'; +import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; +import { usePermission } from '../../hooks/UsePermission'; +import UserRoles from './UserRoles'; + +const validations = { + userName: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), + email: Yup.string() + .email('AbpAccount::ThisFieldIsNotAValidEmailAddress.') + .required('AbpAccount::ThisFieldIsRequired.'), +}; + +let roleNames = []; + +function onChangeRoles(roles) { + roleNames = roles; +} + +function CreateUpdateUserForm({ editingUser = {}, submit, remove }) { + const [selectedTab, setSelectedTab] = useState(0); + const [showPassword, setShowPassword] = useState(false); + + const usernameRef = useRef(); + const nameRef = useRef(); + const surnameRef = useRef(); + const emailRef = useRef(); + const phoneNumberRef = useRef(); + const passwordRef = useRef(); + + const hasRemovePermission = usePermission('AbpIdentity.Users.Delete'); + + const onSubmit = values => { + submit({ + ...editingUser, + ...values, + roleNames, + }); + }; + + const passwordValidation = Yup.lazy(() => { + if (editingUser.id) { + return Yup.string(); + } + return Yup.string().required('AbpAccount::ThisFieldIsRequired.'); + }); + + return ( + onSubmit(values)}> + {({ handleChange, handleBlur, handleSubmit, values, errors, isValid, setFieldValue }) => ( + <> + + + + + + + + + + + nameRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('userName')} + onBlur={handleBlur('userName')} + value={values.userName} + /> + + {errors.userName} + + + surnameRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('name')} + onBlur={handleBlur('name')} + value={values.name} + /> + + + + emailRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('surname')} + onBlur={handleBlur('surname')} + value={values.surname} + /> + + + + phoneNumberRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('email')} + onBlur={handleBlur('email')} + value={values.email} + /> + + {errors.email} + + + + + {!editingUser.id ? ( + <> + + + + + setShowPassword(!showPassword)} + /> + + + {errors.password} + + ) : null} + + setFieldValue('lockoutEnabled', !values.lockoutEnabled)} + /> + + setFieldValue('lockoutEnabled', !values.lockoutEnabled)}> + {i18n.t('AbpIdentity::DisplayName:LockoutEnabled')} + + + + + setFieldValue('twoFactorEnabled', !values.twoFactorEnabled)} + /> + + setFieldValue('twoFactorEnabled', !values.twoFactorEnabled)}> + {i18n.t('AbpIdentity::DisplayName:TwoFactorEnabled')} + + + + + + + + + + + + )} + + ); +} + +CreateUpdateUserForm.propTypes = { + editingUser: PropTypes.object, + submit: PropTypes.func.isRequired, + remove: PropTypes.func.isRequired, +}; + +const styles = StyleSheet.create({ + container: { + marginBottom: 50, + }, +}); + +export default CreateUpdateUserForm; diff --git a/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js b/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js new file mode 100644 index 0000000000..e900fde8fc --- /dev/null +++ b/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js @@ -0,0 +1,69 @@ +import PropTypes from 'prop-types'; +import React, { useEffect, useState } from 'react'; +import { createUser, getUserById, removeUser, updateUser } from '../../api/IdentityAPI'; +import LoadingActions from '../../store/actions/LoadingActions'; +import { createLoadingSelector } from '../../store/selectors/LoadingSelectors'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import CreateUpdateUserForm from './CreateUpdateUserForm'; + +function CreateUpdateUserScreen({ navigation, route, startLoading, stopLoading }) { + const [user, setUser] = useState(); + const userId = route.params?.userId; + + const remove = () => { + startLoading({ key: 'remove user' }); + removeUser(userId) + .then(() => navigation.goBack()) + .finally(() => stopLoading({ key: 'remove user' })); + }; + + useEffect(() => { + if (userId) { + getUserById(userId).then((data = {}) => setUser(data)); + } + }, []); + + const submit = data => { + startLoading({ key: 'saveUser' }); + let request; + if (data.id) { + request = updateUser(data, userId); + } else { + request = createUser(data); + } + + request + .then(() => { + navigation.goBack(); + }) + .finally(() => stopLoading({ key: 'saveUser' })); + }; + + const renderForm = () => ( + + ); + + if (userId && user) { + return renderForm(); + } + + if (!userId) { + return renderForm(); + } + + return null; +} + +CreateUpdateUserScreen.propTypes = { + startLoading: PropTypes.func.isRequired, + stopLoading: PropTypes.func.isRequired, +}; + +export default connectToRedux({ + component: CreateUpdateUserScreen, + stateProps: state => ({ loading: createLoadingSelector()(state) }), + dispatchProps: { + startLoading: LoadingActions.start, + stopLoading: LoadingActions.stop, + }, +}); diff --git a/templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js b/templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js new file mode 100644 index 0000000000..9e7b45ebf0 --- /dev/null +++ b/templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js @@ -0,0 +1,60 @@ +import React, { useEffect, useState } from 'react'; +import PropTypes from 'prop-types'; +import { List, ListItem, CheckBox, Body, Text } from 'native-base'; +import { TouchableOpacity } from 'react-native'; +import { getRoles, getUserRoles } from '../../api/IdentityAPI'; + +function UserRoles({ editingUser = {}, onChangeRoles }) { + const [roles, setRoles] = useState([]); + + const onPress = index => { + setRoles( + roles.map((role, i) => ({ + ...role, + isSelected: index === i ? !role.isSelected : role.isSelected, + })), + ); + }; + + useEffect(() => { + const requests = [getRoles()]; + if (editingUser.id) requests.push(getUserRoles(editingUser.id)); + + Promise.all(requests).then(([allRoles = [], userRoles = []]) => { + setRoles( + allRoles.map(role => ({ + ...role, + isSelected: editingUser.id + ? !!userRoles?.find(userRole => userRole?.id === role?.id) + : role.isDefault, + })), + ); + }); + }, []); + + useEffect(() => { + onChangeRoles(roles.filter(role => role.isSelected).map(role => role.name)); + }, [roles]); + + return ( + + {roles.map((role, index) => ( + + onPress(index)} /> + + onPress(index)}> + {role.name} + + + + ))} + + ); +} + +UserRoles.propTypes = { + editingUser: PropTypes.objectOf(PropTypes.any).isRequired, + onChangeRoles: PropTypes.func.isRequired, +}; + +export default UserRoles; diff --git a/templates/app/react-native/src/screens/Home/HomeScreen.js b/templates/app/react-native/src/screens/Home/HomeScreen.js new file mode 100644 index 0000000000..63140d9a8a --- /dev/null +++ b/templates/app/react-native/src/screens/Home/HomeScreen.js @@ -0,0 +1,34 @@ +import i18n from 'i18n-js'; +import { Text } from 'native-base'; +import React from 'react'; +import { StyleSheet, View } from 'react-native'; + +function HomeScreen() { + return ( + + {i18n.t('::Welcome')} + {i18n.t('::LongWelcomeMessage')} + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + paddingHorizontal: 20, + backgroundColor: '#fff', + }, + centeredText: { + textAlign: 'center', + }, + title: { + marginBottom: 30, + fontSize: 32, + fontWeight: '300', + textAlign: 'center', + }, +}); + +export default HomeScreen; diff --git a/templates/app/react-native/src/screens/Login/LoginScreen.js b/templates/app/react-native/src/screens/Login/LoginScreen.js new file mode 100644 index 0000000000..9a010a4484 --- /dev/null +++ b/templates/app/react-native/src/screens/Login/LoginScreen.js @@ -0,0 +1,128 @@ +import { Formik } from 'formik'; +import i18n from 'i18n-js'; +import { + Button, + Container, + Content, + Form, + Input, + InputGroup, + Item, + Label, + Text, + Icon, +} from 'native-base'; +import PropTypes from 'prop-types'; +import React, { useState } from 'react'; +import { View } from 'react-native'; +import * as Yup from 'yup'; +import { login } from '../../api/AccountAPI'; +import TenantBox from '../../components/TenantBox/TenantBox'; +import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; +import AppActions from '../../store/actions/AppActions'; +import LoadingActions from '../../store/actions/LoadingActions'; +import PersistentStorageActions from '../../store/actions/PersistentStorageActions'; +import { connectToRedux } from '../../utils/ReduxConnect'; + +const ValidationSchema = Yup.object().shape({ + username: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), + password: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), +}); + +function LoginScreen({ startLoading, stopLoading, setToken, fetchAppConfig }) { + const [showTenantSelection, setShowTenantSelection] = useState(false); + const [showPassword, setShowPassword] = useState(false); + + const toggleTenantSelection = () => { + setShowTenantSelection(!showTenantSelection); + }; + + const submit = ({ username, password }) => { + startLoading({ key: 'login' }); + login({ username, password }) + .then(data => + setToken({ + ...data, + expire_time: new Date().valueOf() + data.expires_in, + scope: undefined, + }), + ) + .then( + () => + new Promise(resolve => + fetchAppConfig({ showLoading: false, callback: () => resolve(true) }), + ), + ) + .finally(() => stopLoading({ key: 'login' })); + }; + + return ( + + + {!showTenantSelection ? ( + + + {({ handleChange, handleBlur, handleSubmit, values, errors }) => ( +
+ + + + + {errors.username} + + + + + setShowPassword(!showPassword)} + /> + + + {errors.password} + + + +
+ )} +
+
+ ) : null} +
+ ); +} + +LoginScreen.propTypes = { + startLoading: PropTypes.func.isRequired, + stopLoading: PropTypes.func.isRequired, + setToken: PropTypes.func.isRequired, + fetchAppConfig: PropTypes.func.isRequired, +}; + +export default connectToRedux({ + component: LoginScreen, + dispatchProps: { + startLoading: LoadingActions.start, + stopLoading: LoadingActions.stop, + fetchAppConfig: AppActions.fetchAppConfigAsync, + setToken: PersistentStorageActions.setToken, + }, +}); diff --git a/templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js b/templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js new file mode 100644 index 0000000000..9135df2ade --- /dev/null +++ b/templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js @@ -0,0 +1,122 @@ +import { Formik } from 'formik'; +import i18n from 'i18n-js'; +import { Container, Content, Form, Input, InputGroup, Label } from 'native-base'; +import PropTypes from 'prop-types'; +import React, { useRef } from 'react'; +import * as Yup from 'yup'; +import FormButtons from '../../components/FormButtons/FormButtons'; +import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; + +const ValidationSchema = Yup.object().shape({ + userName: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), + email: Yup.string() + .required('AbpAccount::ThisFieldIsRequired.') + .email('AbpAccount::ThisFieldIsNotAValidEmailAddress.'), +}); + +function ManageProfileForm({ editingUser = {}, submit, cancel }) { + const usernameRef = useRef(); + const nameRef = useRef(); + const surnameRef = useRef(); + const emailRef = useRef(); + const phoneNumberRef = useRef(); + + const onSubmit = values => { + submit({ + ...editingUser, + ...values, + }); + }; + + return ( + onSubmit(values)}> + {({ handleChange, handleBlur, handleSubmit, values, errors, isValid }) => ( + <> + + +
+ + + nameRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('userName')} + onBlur={handleBlur('userName')} + value={values.userName} + abpInput + /> + + {errors.userName} + + + surnameRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('name')} + onBlur={handleBlur('name')} + value={values.name} + /> + + + + phoneNumberRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('surname')} + onBlur={handleBlur('surname')} + value={values.surname} + /> + + + + emailRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('phoneNumber')} + onBlur={handleBlur('phoneNumber')} + value={values.phoneNumber} + /> + + + + + + {errors.email} +
+
+
+ + + )} +
+ ); +} + +ManageProfileForm.propTypes = { + editingUser: PropTypes.object.isRequired, + submit: PropTypes.func.isRequired, + cancel: PropTypes.func.isRequired, +}; + +export default ManageProfileForm; diff --git a/templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js b/templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js new file mode 100644 index 0000000000..1f2e577a37 --- /dev/null +++ b/templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js @@ -0,0 +1,50 @@ +import React, { useState, useEffect } from 'react'; +import PropTypes from 'prop-types'; +import { updateProfileDetail, getProfileDetail } from '../../api/IdentityAPI'; +import ManageProfileForm from './ManageProfileForm'; +import LoadingActions from '../../store/actions/LoadingActions'; +import { connectToRedux } from '../../utils/ReduxConnect'; + +function ManageProfileScreen({ navigation, startLoading, stopLoading }) { + const [user, setUser] = useState(); + + useEffect(() => { + if (!user) { + startLoading({ key: 'manageProfile' }); + getProfileDetail() + .then((data = {}) => setUser(data)) + .finally(() => stopLoading({ key: 'manageProfile' })); + } + }); + + const submit = data => { + startLoading({ key: 'manageProfile' }); + + updateProfileDetail(data) + .then(() => { + navigation.goBack(); + }) + .finally(() => stopLoading({ key: 'manageProfile' })); + }; + + return ( + <> + {user ? ( + navigation.goBack()} /> + ) : null} + + ); +} + +ManageProfileScreen.propTypes = { + startLoading: PropTypes.func.isRequired, + stopLoading: PropTypes.func.isRequired, +}; + +export default connectToRedux({ + component: ManageProfileScreen, + dispatchProps: { + startLoading: LoadingActions.start, + stopLoading: LoadingActions.stop, + }, +}); diff --git a/templates/app/react-native/src/screens/Settings/SettingsScreen.js b/templates/app/react-native/src/screens/Settings/SettingsScreen.js new file mode 100644 index 0000000000..80fc93e0b4 --- /dev/null +++ b/templates/app/react-native/src/screens/Settings/SettingsScreen.js @@ -0,0 +1,145 @@ +import i18n from 'i18n-js'; +import { + Body, + Button, + Icon, + Label, + Left, + List, + ListItem, + Picker, + Right, + Text, + Thumbnail, +} from 'native-base'; +import PropTypes from 'prop-types'; +import React, { useCallback, useState } from 'react'; +import { View } from 'react-native'; +import { useFocusEffect } from '@react-navigation/native'; +import { getProfileDetail } from '../../api/IdentityAPI'; +import AppActions from '../../store/actions/AppActions'; +import { + createLanguageSelector, + createLanguagesSelector, +} from '../../store/selectors/AppSelectors'; +import { connectToRedux } from '../../utils/ReduxConnect'; +import { createTenantSelector } from '../../store/selectors/PersistentStorageSelectors'; + +function SettingsScreen({ + navigation, + language, + languages, + setLanguageAsync, + logoutAsync, + tenant = {}, +}) { + const [user, setUser] = useState({}); + + const fetchUser = () => { + getProfileDetail().then(data => { + setUser(data || {}); + }); + }; + + useFocusEffect( + useCallback(() => { + fetchUser(); + }, []), + ); + + return ( + + + + navigation.navigate('ManageProfile')}> + + + + + {tenant.name ? `${tenant.name} / ` : ''} + {user.userName ? `${user.userName}` : ''} + + {user.email} + + + + + + + + + navigation.navigate('ChangePassword')}> + + {i18n.t('AbpUi::ChangePassword')} + + + + + + + + + + + + } + onValueChange={value => setLanguageAsync(value)} + selectedValue={language.cultureName} + textStyle={{ paddingLeft: 0 }}> + {languages.map(lang => ( + + ))} + + + + + + + + ); +} + +SettingsScreen.propTypes = { + setLanguageAsync: PropTypes.func.isRequired, + logoutAsync: PropTypes.func.isRequired, + language: PropTypes.object.isRequired, + languages: PropTypes.array.isRequired, + tenant: PropTypes.object.isRequired, +}; + +export default connectToRedux({ + component: SettingsScreen, + stateProps: state => ({ + languages: createLanguagesSelector()(state), + language: createLanguageSelector()(state), + tenant: createTenantSelector()(state), + }), + dispatchProps: { + setLanguageAsync: AppActions.setLanguageAsync, + logoutAsync: AppActions.logoutAsync, + }, +}); diff --git a/templates/app/react-native/src/screens/Tenants/TenantsScreen.js b/templates/app/react-native/src/screens/Tenants/TenantsScreen.js new file mode 100644 index 0000000000..e937175dfa --- /dev/null +++ b/templates/app/react-native/src/screens/Tenants/TenantsScreen.js @@ -0,0 +1,59 @@ +import React from 'react'; +import i18n from 'i18n-js'; +import { ListItem, Text, Icon, Left, Body, Fab } from 'native-base'; +import { StyleSheet } from 'react-native'; +import { getTenants } from '../../api/TenantManagementAPI'; +import { activeTheme } from '../../theme/variables'; +import DataList from '../../components/DataList/DataList'; +import { withPermission } from '../../hocs/PermissionHOC'; + +const CreateTenantButtonWithPermission = withPermission(Fab, 'AbpTenantManagement.Tenants.Create'); + +function TenantsScreen({ navigation }) { + return ( + <> + ( + navigateToCreateUpdateTenantScreen(navigation, tenant)}> + + + {tenant.name} + + + + )} + /> + + navigation.navigate('CreateUpdateTenant')}> + + + + ); +} + +const navigateToCreateUpdateTenantScreen = (navigation, tenant = {}) => { + navigation.navigate('CreateUpdateTenant', { + tenantId: tenant.id, + }); +}; + +const styles = StyleSheet.create({ + listItem: { + alignItems: 'center', + marginVertical: 3, + marginLeft: -15, + paddingTop: 5, + paddingBottom: 5, + paddingLeft: 15, + backgroundColor: '#f9f9f9', + width: '110%', + minHeight: 50, + }, +}); + +export default TenantsScreen; diff --git a/templates/app/react-native/src/screens/Users/UsersScreen.js b/templates/app/react-native/src/screens/Users/UsersScreen.js new file mode 100644 index 0000000000..4dc25dc646 --- /dev/null +++ b/templates/app/react-native/src/screens/Users/UsersScreen.js @@ -0,0 +1,61 @@ +import React from 'react'; +import { ListItem, Text, Icon, Left, Thumbnail, Body, Fab } from 'native-base'; +import { StyleSheet } from 'react-native'; +import { getUsers } from '../../api/IdentityAPI'; +import { activeTheme } from '../../theme/variables'; +import DataList from '../../components/DataList/DataList'; +import { withPermission } from '../../hocs/PermissionHOC'; + +const CreateUserButtonWithPermission = withPermission(Fab, 'AbpIdentity.Users.Create'); + +function UsersScreen({ navigation }) { + return ( + <> + ( + navigateToCreateUpdateUserScreen(navigation, user)}> + + + + {user.userName} + {user.email} + + + + )} + /> + + navigation.navigate('CreateUpdateUser')}> + + + + ); +} + +const navigateToCreateUpdateUserScreen = (navigation, user = {}) => { + navigation.navigate('CreateUpdateUser', { + userId: user.id, + }); +}; + +const styles = StyleSheet.create({ + container: { flex: 1 }, + listItem: { + alignItems: 'center', + marginVertical: 3, + marginLeft: -15, + paddingTop: 5, + paddingBottom: 5, + paddingLeft: 15, + backgroundColor: '#f9f9f9', + width: '110%', + }, +}); + +export default UsersScreen; diff --git a/templates/app/react-native/src/store/actions/AppActions.js b/templates/app/react-native/src/store/actions/AppActions.js new file mode 100644 index 0000000000..caefb017ea --- /dev/null +++ b/templates/app/react-native/src/store/actions/AppActions.js @@ -0,0 +1,19 @@ +import { createAction } from '@reduxjs/toolkit'; + +const fetchAppConfigAsync = createAction( + 'app/fetchAppConfigAsync', + ({ callback = () => {}, showLoading = true } = {}) => ({ payload: { callback, showLoading } }), +); + +const setAppConfig = createAction('app/setAppConfig'); + +const setLanguageAsync = createAction('app/setLanguageAsync'); + +const logoutAsync = createAction('app/logoutAsync'); + +export default { + fetchAppConfigAsync, + setAppConfig, + setLanguageAsync, + logoutAsync, +}; diff --git a/templates/app/react-native/src/store/actions/LoadingActions.js b/templates/app/react-native/src/store/actions/LoadingActions.js new file mode 100644 index 0000000000..9705dc4e0f --- /dev/null +++ b/templates/app/react-native/src/store/actions/LoadingActions.js @@ -0,0 +1,13 @@ +import { createAction } from '@reduxjs/toolkit'; + +const start = createAction('loading/start'); + +const stop = createAction('loading/stop'); + +const clear = createAction('loading/clear'); + +export default { + start, + stop, + clear, +}; diff --git a/templates/app/react-native/src/store/actions/PersistentStorageActions.js b/templates/app/react-native/src/store/actions/PersistentStorageActions.js new file mode 100644 index 0000000000..4b32d9ff31 --- /dev/null +++ b/templates/app/react-native/src/store/actions/PersistentStorageActions.js @@ -0,0 +1,13 @@ +import { createAction } from '@reduxjs/toolkit'; + +const setToken = createAction('persistentStorage/setToken'); + +const setLanguage = createAction('persistentStorage/setLanguage'); + +const setTenant = createAction('persistentStorage/setTenant'); + +export default { + setToken, + setLanguage, + setTenant, +}; diff --git a/templates/app/react-native/src/store/index.js b/templates/app/react-native/src/store/index.js new file mode 100644 index 0000000000..6333bc7ded --- /dev/null +++ b/templates/app/react-native/src/store/index.js @@ -0,0 +1,25 @@ +import { configureStore } from '@reduxjs/toolkit'; +import createSagaMiddleware from 'redux-saga'; +import { persistStore, persistReducer } from 'redux-persist'; +import { AsyncStorage } from 'react-native'; +import { rootSaga } from './sagas'; +import rootReducer from './reducers'; + +const sagaMiddleware = createSagaMiddleware(); + +const persistConfig = { + key: 'root', + storage: AsyncStorage, + whitelist: ['persistentStorage'], +}; + +const persistedReducer = persistReducer(persistConfig, rootReducer); + +export const store = configureStore({ + reducer: persistedReducer, + middleware: [sagaMiddleware], +}); + +export const persistor = persistStore(store); + +sagaMiddleware.run(rootSaga); diff --git a/templates/app/react-native/src/store/reducers/AppReducer.js b/templates/app/react-native/src/store/reducers/AppReducer.js new file mode 100644 index 0000000000..a628f7f802 --- /dev/null +++ b/templates/app/react-native/src/store/reducers/AppReducer.js @@ -0,0 +1,12 @@ +import { createReducer } from '@reduxjs/toolkit'; +import AppActions from '../actions/AppActions'; + +const initialState = { + appConfig: {}, +}; + +export default createReducer(initialState, builder => + builder.addCase(AppActions.setAppConfig, (state, action) => { + state.appConfig = action.payload; + }), +); diff --git a/templates/app/react-native/src/store/reducers/LoadingReducer.js b/templates/app/react-native/src/store/reducers/LoadingReducer.js new file mode 100644 index 0000000000..99ccb14149 --- /dev/null +++ b/templates/app/react-native/src/store/reducers/LoadingReducer.js @@ -0,0 +1,23 @@ +import { createReducer } from '@reduxjs/toolkit'; +import LoadingActions from '../actions/LoadingActions'; + +const initialState = { activeLoadings: {}, loading: false }; + +export default createReducer(initialState, builder => + builder + .addCase(LoadingActions.start, (state, action) => { + const { key, opacity } = action.payload; + return { + ...state, + actives: { ...state.activeLoadings, [key]: action }, + loading: true, + opacity, + }; + }) + .addCase(LoadingActions.stop, (state, action) => { + delete state.activeLoadings[action.payload.key]; + + state.loading = !!Object.keys(state.activeLoadings).length; + }) + .addCase(LoadingActions.clear, () => ({})), +); diff --git a/templates/app/react-native/src/store/reducers/PersistentStorageReducer.js b/templates/app/react-native/src/store/reducers/PersistentStorageReducer.js new file mode 100644 index 0000000000..d4d8f9a32b --- /dev/null +++ b/templates/app/react-native/src/store/reducers/PersistentStorageReducer.js @@ -0,0 +1,17 @@ +import { createReducer } from '@reduxjs/toolkit'; +import PersistentStorageActions from '../actions/PersistentStorageActions'; + +const initialState = { token: {}, language: null, tenant: {} }; + +export default createReducer(initialState, builder => + builder + .addCase(PersistentStorageActions.setToken, (state, action) => { + state.token = action.payload; + }) + .addCase(PersistentStorageActions.setLanguage, (state, action) => { + state.language = action.payload; + }) + .addCase(PersistentStorageActions.setTenant, (state, action) => { + state.tenant = action.payload; + }), +); diff --git a/templates/app/react-native/src/store/reducers/index.js b/templates/app/react-native/src/store/reducers/index.js new file mode 100644 index 0000000000..8784be3042 --- /dev/null +++ b/templates/app/react-native/src/store/reducers/index.js @@ -0,0 +1,12 @@ +import { combineReducers } from '@reduxjs/toolkit'; +import LoadingReducer from './LoadingReducer'; +import AppReducer from './AppReducer'; +import PersistentStorageReducer from './PersistentStorageReducer'; + +const rootReducer = combineReducers({ + loading: LoadingReducer, + app: AppReducer, + persistentStorage: PersistentStorageReducer, +}); + +export default rootReducer; diff --git a/templates/app/react-native/src/store/sagas/AppSaga.js b/templates/app/react-native/src/store/sagas/AppSaga.js new file mode 100644 index 0000000000..7bcf4822ee --- /dev/null +++ b/templates/app/react-native/src/store/sagas/AppSaga.js @@ -0,0 +1,34 @@ +import { call, put, takeLatest, all } from 'redux-saga/effects'; +import { getApplicationConfiguration } from '../../api/ApplicationConfigurationAPI'; +import { Logout } from '../../api/AccountAPI'; +import AppActions from '../actions/AppActions'; +import LoadingActions from '../actions/LoadingActions'; +import PersistentStorageActions from '../actions/PersistentStorageActions'; + +function* fetchAppConfig({ payload: { showLoading, callback } }) { + if (showLoading) yield put(LoadingActions.start({ key: 'appConfig', opacity: 1 })); + const data = yield call(getApplicationConfiguration); + yield put(AppActions.setAppConfig(data)); + yield put(PersistentStorageActions.setLanguage(data.localization.currentCulture.cultureName)); + if (showLoading) yield put(LoadingActions.stop({ key: 'appConfig' })); + callback(); +} + +function* setLanguage(action) { + yield put(PersistentStorageActions.setLanguage(action.payload)); + yield put(AppActions.fetchAppConfigAsync()); +} + +function* logout() { + yield call(Logout); + yield put(PersistentStorageActions.setToken({})); + yield put(AppActions.fetchAppConfigAsync()); +} + +export default function*() { + yield all([ + takeLatest(AppActions.setLanguageAsync.type, setLanguage), + takeLatest(AppActions.fetchAppConfigAsync.type, fetchAppConfig), + takeLatest(AppActions.logoutAsync.type, logout), + ]); +} diff --git a/templates/app/react-native/src/store/sagas/index.js b/templates/app/react-native/src/store/sagas/index.js new file mode 100644 index 0000000000..1b56c35c2c --- /dev/null +++ b/templates/app/react-native/src/store/sagas/index.js @@ -0,0 +1,6 @@ +import { all, fork } from 'redux-saga/effects'; +import AppSaga from './AppSaga'; + +export function* rootSaga() { + yield all([fork(AppSaga)]); +} diff --git a/templates/app/react-native/src/store/selectors/AppSelectors.js b/templates/app/react-native/src/store/selectors/AppSelectors.js new file mode 100644 index 0000000000..82e0000b71 --- /dev/null +++ b/templates/app/react-native/src/store/selectors/AppSelectors.js @@ -0,0 +1,19 @@ +import { createSelector } from 'reselect'; + +const getApp = state => state.app; + +export function createAppConfigSelector() { + return createSelector([getApp], state => state.appConfig); +} + +export function createLanguageSelector() { + return createSelector([getApp], state => state?.appConfig?.localization?.currentCulture); +} + +export function createLanguagesSelector() { + return createSelector([getApp], state => state?.appConfig?.localization?.languages); +} + +export function createGrantedPolicySelector(key) { + return createSelector([getApp], state => state?.appConfig?.auth?.grantedPolicies[key] ?? false); +} diff --git a/templates/app/react-native/src/store/selectors/LoadingSelectors.js b/templates/app/react-native/src/store/selectors/LoadingSelectors.js new file mode 100644 index 0000000000..47a798fe2c --- /dev/null +++ b/templates/app/react-native/src/store/selectors/LoadingSelectors.js @@ -0,0 +1,11 @@ +import { createSelector } from 'reselect'; + +const getLoading = state => state.loading; + +export function createLoadingSelector() { + return createSelector([getLoading], loading => loading.loading); +} + +export function createOpacitySelector() { + return createSelector([getLoading], loading => loading.opacity); +} diff --git a/templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js b/templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js new file mode 100644 index 0000000000..d5d86f8b7d --- /dev/null +++ b/templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js @@ -0,0 +1,11 @@ +import { createSelector } from 'reselect'; + +const getPersistentStorage = state => state.persistentStorage; + +export function createTokenSelector() { + return createSelector([getPersistentStorage], persistentStorage => persistentStorage.token); +} + +export function createTenantSelector() { + return createSelector([getPersistentStorage], persistentStorage => persistentStorage.tenant); +} diff --git a/templates/app/react-native/src/theme/components/Badge.js b/templates/app/react-native/src/theme/components/Badge.js new file mode 100644 index 0000000000..7db8c886ec --- /dev/null +++ b/templates/app/react-native/src/theme/components/Badge.js @@ -0,0 +1,39 @@ +// @flow + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const badgeTheme = { + '.primary': { + backgroundColor: variables.buttonPrimaryBg, + }, + '.warning': { + backgroundColor: variables.buttonWarningBg, + }, + '.info': { + backgroundColor: variables.buttonInfoBg, + }, + '.success': { + backgroundColor: variables.buttonSuccessBg, + }, + '.danger': { + backgroundColor: variables.buttonDangerBg, + }, + 'NativeBase.Text': { + color: variables.badgeColor, + fontSize: variables.fontSizeBase, + lineHeight: variables.lineHeight - 1, + textAlign: 'center', + paddingHorizontal: 3, + }, + backgroundColor: variables.badgeBg, + padding: variables.badgePadding, + paddingHorizontal: 6, + alignSelf: 'flex-start', + justifyContent: variables.platform === PLATFORM.IOS ? 'center' : undefined, + borderRadius: 13.5, + height: 27, + }; + return badgeTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Body.js b/templates/app/react-native/src/theme/components/Body.js new file mode 100644 index 0000000000..9bf2b99268 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Body.js @@ -0,0 +1,11 @@ +// @flow + +export default () => { + const bodyTheme = { + flex: 1, + alignItems: 'center', + alignSelf: 'center', + }; + + return bodyTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Button.js b/templates/app/react-native/src/theme/components/Button.js new file mode 100644 index 0000000000..e1f106b18b --- /dev/null +++ b/templates/app/react-native/src/theme/components/Button.js @@ -0,0 +1,384 @@ +// @flow + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platformStyle } = variables; + const { platform } = variables; + const darkCommon = { + 'NativeBase.Text': { + color: variables.brandDark, + }, + 'NativeBase.Icon': { + color: variables.brandDark, + }, + 'NativeBase.IconNB': { + color: variables.brandDark, + }, + }; + const lightCommon = { + 'NativeBase.Text': { + color: variables.brandLight, + }, + 'NativeBase.Icon': { + color: variables.brandLight, + }, + 'NativeBase.IconNB': { + color: variables.brandLight, + }, + }; + const primaryCommon = { + 'NativeBase.Text': { + color: variables.buttonPrimaryBg, + }, + 'NativeBase.Icon': { + color: variables.buttonPrimaryBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonPrimaryBg, + }, + }; + const successCommon = { + 'NativeBase.Text': { + color: variables.buttonSuccessBg, + }, + 'NativeBase.Icon': { + color: variables.buttonSuccessBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonSuccessBg, + }, + }; + const infoCommon = { + 'NativeBase.Text': { + color: variables.buttonInfoBg, + }, + 'NativeBase.Icon': { + color: variables.buttonInfoBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonInfoBg, + }, + }; + const warningCommon = { + 'NativeBase.Text': { + color: variables.buttonWarningBg, + }, + 'NativeBase.Icon': { + color: variables.buttonWarningBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonWarningBg, + }, + }; + const dangerCommon = { + 'NativeBase.Text': { + color: variables.buttonDangerBg, + }, + 'NativeBase.Icon': { + color: variables.buttonDangerBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonDangerBg, + }, + }; + const buttonTheme = { + '.disabled': { + '.transparent': { + backgroundColor: 'transparent', + 'NativeBase.Text': { + color: variables.buttonDisabledBg, + }, + 'NativeBase.Icon': { + color: variables.buttonDisabledBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonDisabledBg, + }, + }, + 'NativeBase.Icon': { + color: variables.brandLight, + }, + 'NativeBase.IconNB': { + color: variables.brandLight, + }, + backgroundColor: variables.buttonDisabledBg, + }, + '.bordered': { + '.dark': { + ...darkCommon, + backgroundColor: 'transparent', + borderColor: variables.brandDark, + borderWidth: variables.borderWidth * 2, + }, + '.light': { + ...lightCommon, + backgroundColor: 'transparent', + borderColor: variables.brandLight, + borderWidth: variables.borderWidth * 2, + }, + '.primary': { + ...primaryCommon, + backgroundColor: 'transparent', + borderColor: variables.buttonPrimaryBg, + borderWidth: variables.borderWidth * 2, + }, + '.success': { + ...successCommon, + backgroundColor: 'transparent', + borderColor: variables.buttonSuccessBg, + borderWidth: variables.borderWidth * 2, + }, + '.info': { + ...infoCommon, + backgroundColor: 'transparent', + borderColor: variables.buttonInfoBg, + borderWidth: variables.borderWidth * 2, + }, + '.warning': { + ...warningCommon, + backgroundColor: 'transparent', + borderColor: variables.buttonWarningBg, + borderWidth: variables.borderWidth * 2, + }, + '.danger': { + ...dangerCommon, + backgroundColor: 'transparent', + borderColor: variables.buttonDangerBg, + borderWidth: variables.borderWidth * 2, + }, + '.disabled': { + backgroundColor: 'transparent', + borderColor: variables.buttonDisabledBg, + borderWidth: variables.borderWidth * 2, + 'NativeBase.Text': { + color: variables.buttonDisabledBg, + }, + }, + ...primaryCommon, + borderWidth: variables.borderWidth * 2, + elevation: null, + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + shadowRadius: null, + backgroundColor: 'transparent', + }, + + '.dark': { + '.bordered': { + ...darkCommon, + }, + backgroundColor: variables.brandDark, + }, + '.light': { + '.transparent': { + ...lightCommon, + backgroundColor: 'transparent', + }, + '.bordered': { + ...lightCommon, + }, + ...darkCommon, + backgroundColor: variables.brandLight, + }, + + '.primary': { + '.bordered': { + ...primaryCommon, + }, + backgroundColor: variables.buttonPrimaryBg, + }, + + '.success': { + '.bordered': { + ...successCommon, + }, + backgroundColor: variables.buttonSuccessBg, + }, + + '.info': { + '.bordered': { + ...infoCommon, + }, + backgroundColor: variables.buttonInfoBg, + }, + + '.warning': { + '.bordered': { + ...warningCommon, + }, + backgroundColor: variables.buttonWarningBg, + }, + + '.danger': { + '.bordered': { + ...dangerCommon, + }, + backgroundColor: variables.buttonDangerBg, + }, + + '.block': { + justifyContent: 'center', + alignSelf: 'stretch', + }, + + '.full': { + justifyContent: 'center', + alignSelf: 'stretch', + borderRadius: 0, + }, + + '.rounded': { + borderRadius: variables.borderRadiusLarge, + }, + + '.transparent': { + backgroundColor: 'transparent', + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...primaryCommon, + '.dark': { + ...darkCommon, + }, + '.danger': { + ...dangerCommon, + }, + '.warning': { + ...warningCommon, + }, + '.info': { + ...infoCommon, + }, + '.primary': { + ...primaryCommon, + }, + '.success': { + ...successCommon, + }, + '.light': { + ...lightCommon, + }, + '.disabled': { + backgroundColor: 'transparent', + borderColor: variables.buttonDisabledBg, + borderWidth: variables.borderWidth * 2, + 'NativeBase.Text': { + color: variables.buttonDisabledBg, + }, + 'NativeBase.Icon': { + color: variables.buttonDisabledBg, + }, + 'NativeBase.IconNB': { + color: variables.buttonDisabledBg, + }, + }, + }, + + '.small': { + height: 30, + 'NativeBase.Text': { + fontSize: 14, + }, + 'NativeBase.Icon': { + fontSize: 20, + paddingTop: 0, + }, + 'NativeBase.IconNB': { + fontSize: 20, + paddingTop: 0, + }, + }, + + '.large': { + height: 60, + 'NativeBase.Text': { + fontSize: 22, + }, + }, + + '.capitalize': {}, + + '.vertical': { + flexDirection: 'column', + height: null, + }, + + 'NativeBase.Text': { + fontFamily: variables.buttonFontFamily, + marginLeft: 0, + marginRight: 0, + color: variables.inverseTextColor, + fontSize: variables.buttonTextSize, + paddingHorizontal: 16, + backgroundColor: 'transparent', + }, + + 'NativeBase.Icon': { + color: variables.inverseTextColor, + fontSize: 24, + marginHorizontal: 16, + paddingTop: platform === PLATFORM.IOS ? 2 : undefined, + }, + 'NativeBase.IconNB': { + color: variables.inverseTextColor, + fontSize: 24, + marginHorizontal: 16, + paddingTop: platform === PLATFORM.IOS ? 2 : undefined, + }, + + '.iconLeft': { + 'NativeBase.Text': { + marginLeft: 0, + }, + 'NativeBase.IconNB': { + marginRight: 0, + marginLeft: 16, + }, + 'NativeBase.Icon': { + marginRight: 0, + marginLeft: 16, + }, + }, + '.iconRight': { + 'NativeBase.Text': { + marginRight: 0, + }, + 'NativeBase.IconNB': { + marginLeft: 0, + marginRight: 16, + }, + 'NativeBase.Icon': { + marginLeft: 0, + marginRight: 16, + }, + }, + '.picker': { + 'NativeBase.Text': { + '.note': { + fontSize: 16, + lineHeight: null, + }, + }, + }, + paddingVertical: variables.buttonPadding, + backgroundColor: variables.buttonPrimaryBg, + borderRadius: variables.borderRadiusBase, + borderColor: variables.buttonPrimaryBg, + borderWidth: null, + height: 45, + flexDirection: 'row', + elevation: 2, + shadowColor: platformStyle === PLATFORM.MATERIAL ? variables.brandDark : undefined, + shadowOffset: platformStyle === PLATFORM.MATERIAL ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === PLATFORM.MATERIAL ? 0.2 : undefined, + shadowRadius: platformStyle === PLATFORM.MATERIAL ? 1.2 : undefined, + alignItems: 'center', + justifyContent: 'space-between', + }; + return buttonTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Card.js b/templates/app/react-native/src/theme/components/Card.js new file mode 100644 index 0000000000..c8e726336f --- /dev/null +++ b/templates/app/react-native/src/theme/components/Card.js @@ -0,0 +1,37 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const cardTheme = { + '.transparent': { + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + shadowRadius: null, + elevation: null, + backgroundColor: 'transparent', + borderWidth: 0, + }, + '.noShadow': { + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + elevation: null, + }, + marginVertical: 5, + marginHorizontal: 2, + borderWidth: variables.borderWidth, + borderRadius: variables.cardBorderRadius, + borderColor: variables.cardBorderColor, + flexWrap: 'nowrap', + backgroundColor: variables.cardDefaultBg, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 1.5, + elevation: 3, + }; + + return cardTheme; +}; diff --git a/templates/app/react-native/src/theme/components/CardItem.js b/templates/app/react-native/src/theme/components/CardItem.js new file mode 100644 index 0000000000..745714bb03 --- /dev/null +++ b/templates/app/react-native/src/theme/components/CardItem.js @@ -0,0 +1,198 @@ +// @flow + +import { StyleSheet } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platform } = variables; + const transparentBtnCommon = { + 'NativeBase.Text': { + fontSize: variables.DefaultFontSize - 3, + color: variables.sTabBarActiveTextColor, + }, + 'NativeBase.Icon': { + fontSize: variables.iconFontSize - 10, + color: variables.sTabBarActiveTextColor, + marginHorizontal: null, + }, + 'NativeBase.IconNB': { + fontSize: variables.iconFontSize - 10, + color: variables.sTabBarActiveTextColor, + }, + paddingVertical: null, + paddingHorizontal: null, + }; + + const cardItemTheme = { + 'NativeBase.Left': { + 'NativeBase.Body': { + 'NativeBase.Text': { + '.note': { + color: variables.listNoteColor, + fontWeight: '400', + marginRight: 20, + }, + }, + flex: 1, + marginLeft: 10, + alignItems: null, + }, + 'NativeBase.Icon': { + fontSize: variables.iconFontSize, + }, + 'NativeBase.IconNB': { + fontSize: variables.iconFontSize, + }, + 'NativeBase.Text': { + marginLeft: 10, + alignSelf: 'center', + }, + 'NativeBase.Button': { + '.transparent': { + ...transparentBtnCommon, + paddingRight: variables.cardItemPadding + 5, + }, + }, + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + '.content': { + 'NativeBase.Text': { + color: platform === PLATFORM.IOS ? '#555' : '#222', + fontSize: variables.DefaultFontSize - 2, + }, + }, + '.cardBody': { + padding: -5, + 'NativeBase.Text': { + marginTop: 5, + }, + }, + 'NativeBase.Body': { + 'NativeBase.Text': { + '.note': { + color: variables.listNoteColor, + fontWeight: '200', + marginRight: 20, + }, + }, + 'NativeBase.Button': { + '.transparent': { + ...transparentBtnCommon, + paddingRight: variables.cardItemPadding + 5, + alignSelf: 'stretch', + }, + }, + flex: 1, + alignSelf: 'stretch', + alignItems: 'flex-start', + }, + 'NativeBase.Right': { + 'NativeBase.Badge': { + alignSelf: null, + }, + 'NativeBase.Button': { + '.transparent': { + ...transparentBtnCommon, + }, + alignSelf: null, + }, + 'NativeBase.Icon': { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: variables.cardBorderColor, + }, + 'NativeBase.IconNB': { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: variables.cardBorderColor, + }, + 'NativeBase.Text': { + fontSize: variables.DefaultFontSize - 1, + alignSelf: null, + }, + 'NativeBase.Thumbnail': { + alignSelf: null, + }, + 'NativeBase.Image': { + alignSelf: null, + }, + 'NativeBase.Radio': { + alignSelf: null, + }, + 'NativeBase.Checkbox': { + alignSelf: null, + }, + 'NativeBase.Switch': { + alignSelf: null, + }, + flex: 0.8, + }, + '.header': { + 'NativeBase.Text': { + fontSize: 16, + fontWeight: platform === PLATFORM.IOS ? '600' : '500', + }, + '.bordered': { + 'NativeBase.Text': { + color: variables.brandPrimary, + fontWeight: platform === PLATFORM.IOS ? '600' : '500', + }, + borderBottomWidth: variables.borderWidth, + }, + borderBottomWidth: null, + paddingVertical: variables.cardItemPadding + 5, + }, + '.footer': { + 'NativeBase.Text': { + fontSize: 16, + fontWeight: platform === PLATFORM.IOS ? '600' : '500', + }, + '.bordered': { + 'NativeBase.Text': { + color: variables.brandPrimary, + fontWeight: platform === PLATFORM.IOS ? '600' : '500', + }, + borderTopWidth: variables.borderWidth, + }, + borderBottomWidth: null, + }, + 'NativeBase.Text': { + '.note': { + color: variables.listNoteColor, + fontWeight: '200', + }, + }, + 'NativeBase.Icon': { + width: variables.iconFontSize + 5, + fontSize: variables.iconFontSize - 2, + }, + 'NativeBase.IconNB': { + width: variables.iconFontSize + 5, + fontSize: variables.iconFontSize - 2, + }, + '.bordered': { + borderBottomWidth: StyleSheet.hairlineWidth, + borderColor: variables.cardBorderColor, + }, + '.first': { + borderTopLeftRadius: variables.cardBorderRadius, + borderTopRightRadius: variables.cardBorderRadius, + }, + '.last': { + borderBottomLeftRadius: variables.cardBorderRadius, + borderBottomRightRadius: variables.cardBorderRadius, + }, + flexDirection: 'row', + alignItems: 'center', + borderRadius: variables.cardBorderRadius, + padding: variables.cardItemPadding + 5, + paddingVertical: variables.cardItemPadding, + backgroundColor: variables.cardDefaultBg, + }; + + return cardItemTheme; +}; diff --git a/templates/app/react-native/src/theme/components/CheckBox.js b/templates/app/react-native/src/theme/components/CheckBox.js new file mode 100644 index 0000000000..ac280de985 --- /dev/null +++ b/templates/app/react-native/src/theme/components/CheckBox.js @@ -0,0 +1,38 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const checkBoxTheme = { + '.checked': { + 'NativeBase.Icon': { + color: variables.checkboxTickColor, + }, + 'NativeBase.IconNB': { + color: variables.checkboxTickColor, + }, + }, + 'NativeBase.Icon': { + color: 'transparent', + lineHeight: variables.CheckboxIconSize, + marginTop: variables.CheckboxIconMarginTop, + fontSize: variables.CheckboxFontSize, + }, + 'NativeBase.IconNB': { + color: 'transparent', + lineHeight: variables.CheckboxIconSize, + marginTop: variables.CheckboxIconMarginTop, + fontSize: variables.CheckboxFontSize, + }, + borderRadius: variables.CheckboxRadius, + overflow: 'hidden', + width: variables.checkboxSize, + height: variables.checkboxSize, + borderWidth: variables.CheckboxBorderWidth, + paddingLeft: variables.CheckboxPaddingLeft - 1, + paddingBottom: variables.CheckboxPaddingBottom, + left: 10, + }; + + return checkBoxTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Container.js b/templates/app/react-native/src/theme/components/Container.js new file mode 100644 index 0000000000..f2f57afa41 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Container.js @@ -0,0 +1,17 @@ +// @flow + +import { Platform, Dimensions } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +const deviceHeight = Dimensions.get('window').height; +export default (variables /* : * */ = variable) => { + const theme = { + flex: 1, + height: Platform.OS === PLATFORM.IOS ? deviceHeight : deviceHeight - 20, + backgroundColor: variables.containerBgColor, + }; + + return theme; +}; diff --git a/templates/app/react-native/src/theme/components/Content.js b/templates/app/react-native/src/theme/components/Content.js new file mode 100644 index 0000000000..e09a22a8a5 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Content.js @@ -0,0 +1,14 @@ +// @flow + +export default () => { + const contentTheme = { + flex: 1, + backgroundColor: 'transparent', + 'NativeBase.Segment': { + borderWidth: 0, + backgroundColor: 'transparent', + }, + }; + + return contentTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Fab.js b/templates/app/react-native/src/theme/components/Fab.js new file mode 100644 index 0000000000..87520a690b --- /dev/null +++ b/templates/app/react-native/src/theme/components/Fab.js @@ -0,0 +1,25 @@ +// @flow + +export default () => { + const fabTheme = { + 'NativeBase.Button': { + alignItems: 'center', + padding: null, + justifyContent: 'center', + 'NativeBase.Icon': { + alignSelf: 'center', + fontSize: 20, + marginLeft: 0, + marginRight: 0, + }, + 'NativeBase.IconNB': { + alignSelf: 'center', + fontSize: 20, + marginLeft: 0, + marginRight: 0, + }, + }, + }; + + return fabTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Footer.js b/templates/app/react-native/src/theme/components/Footer.js new file mode 100644 index 0000000000..49101fc0d9 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Footer.js @@ -0,0 +1,117 @@ +// @flow + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platformStyle } = variables; + const { platform } = variables; + + const iconCommon = { + 'NativeBase.Icon': { + color: variables.tabBarActiveTextColor, + }, + }; + const iconNBCommon = { + 'NativeBase.IconNB': { + color: variables.tabBarActiveTextColor, + }, + }; + const textCommon = { + 'NativeBase.Text': { + color: variables.tabBarActiveTextColor, + }, + }; + const footerTheme = { + 'NativeBase.Left': { + 'NativeBase.Button': { + '.transparent': { + backgroundColor: 'transparent', + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon, + }, + alignSelf: null, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + flex: 1, + alignSelf: 'center', + alignItems: 'flex-start', + }, + 'NativeBase.Body': { + flex: 1, + alignItems: 'center', + alignSelf: 'center', + flexDirection: 'row', + 'NativeBase.Button': { + alignSelf: 'center', + '.transparent': { + backgroundColor: 'transparent', + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon, + }, + '.full': { + height: variables.footerHeight, + paddingBottom: variables.footerPaddingBottom, + flex: 1, + }, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + }, + 'NativeBase.Right': { + 'NativeBase.Button': { + '.transparent': { + backgroundColor: 'transparent', + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon, + }, + alignSelf: null, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + flex: 1, + alignSelf: 'center', + alignItems: 'flex-end', + }, + backgroundColor: variables.footerDefaultBg, + flexDirection: 'row', + justifyContent: 'center', + borderTopWidth: + platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL + ? variables.borderWidth + : undefined, + borderColor: + platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? '#cbcbcb' : undefined, + height: variables.footerHeight, + paddingBottom: variables.footerPaddingBottom, + elevation: 3, + left: 0, + right: 0, + }; + return footerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/FooterTab.js b/templates/app/react-native/src/theme/components/FooterTab.js new file mode 100644 index 0000000000..39e50fa891 --- /dev/null +++ b/templates/app/react-native/src/theme/components/FooterTab.js @@ -0,0 +1,78 @@ +// @flow + +import { Platform } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platform } = variables; + + const footerTabTheme = { + 'NativeBase.Button': { + '.active': { + 'NativeBase.Text': { + color: variables.tabBarActiveTextColor, + fontSize: variables.tabBarTextSize, + lineHeight: 16, + }, + 'NativeBase.Icon': { + color: variables.tabBarActiveTextColor, + }, + 'NativeBase.IconNB': { + color: variables.tabBarActiveTextColor, + }, + backgroundColor: variables.tabActiveBgColor, + }, + flexDirection: null, + backgroundColor: 'transparent', + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + alignSelf: 'center', + flex: 1, + height: variables.footerHeight, + justifyContent: 'center', + '.badge': { + 'NativeBase.Badge': { + 'NativeBase.Text': { + fontSize: 11, + fontWeight: platform === PLATFORM.IOS ? '600' : undefined, + lineHeight: 14, + }, + top: -3, + alignSelf: 'center', + left: 10, + zIndex: 99, + height: 18, + padding: 1.7, + paddingHorizontal: 3, + }, + 'NativeBase.Icon': { + marginTop: -18, + }, + }, + 'NativeBase.Icon': { + color: variables.tabBarTextColor, + }, + 'NativeBase.IconNB': { + color: variables.tabBarTextColor, + }, + 'NativeBase.Text': { + color: variables.tabBarTextColor, + fontSize: variables.tabBarTextSize, + lineHeight: 16, + }, + }, + backgroundColor: Platform.OS === PLATFORM.ANDROID ? variables.footerDefaultBg : undefined, + flexDirection: 'row', + justifyContent: 'space-between', + flex: 1, + alignSelf: 'stretch', + }; + + return footerTabTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Form.js b/templates/app/react-native/src/theme/components/Form.js new file mode 100644 index 0000000000..48a638fff4 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Form.js @@ -0,0 +1,86 @@ +// @flow + +export default () => { + const theme = { + 'NativeBase.Item': { + '.fixedLabel': { + 'NativeBase.Label': { + paddingLeft: null, + }, + marginLeft: 15, + }, + '.inlineLabel': { + 'NativeBase.Label': { + paddingLeft: null, + }, + marginLeft: 15, + }, + '.placeholderLabel': { + 'NativeBase.Input': {}, + }, + '.stackedLabel': { + 'NativeBase.Label': { + top: 5, + paddingLeft: null, + }, + 'NativeBase.Input': { + paddingLeft: null, + marginLeft: null, + }, + 'NativeBase.Icon': { + marginTop: 36, + }, + marginLeft: 15, + }, + '.floatingLabel': { + 'NativeBase.Input': { + paddingLeft: null, + top: 10, + marginLeft: null, + }, + 'NativeBase.Label': { + left: 0, + top: 6, + }, + 'NativeBase.Icon': { + top: 6, + }, + marginTop: 15, + marginLeft: 15, + }, + '.regular': { + 'NativeBase.Label': { + left: 0, + }, + marginLeft: 0, + }, + '.rounded': { + 'NativeBase.Label': { + left: 0, + }, + marginLeft: 0, + }, + '.underline': { + 'NativeBase.Label': { + left: 0, + top: 0, + position: 'relative', + }, + 'NativeBase.Input': { + left: -15, + }, + marginLeft: 15, + }, + '.last': { + marginLeft: 0, + paddingLeft: 15, + }, + 'NativeBase.Label': { + paddingRight: 5, + }, + marginLeft: 15, + }, + }; + + return theme; +}; diff --git a/templates/app/react-native/src/theme/components/H1.js b/templates/app/react-native/src/theme/components/H1.js new file mode 100644 index 0000000000..0f45abc872 --- /dev/null +++ b/templates/app/react-native/src/theme/components/H1.js @@ -0,0 +1,13 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const h1Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH1, + lineHeight: variables.lineHeightH1, + }; + + return h1Theme; +}; diff --git a/templates/app/react-native/src/theme/components/H2.js b/templates/app/react-native/src/theme/components/H2.js new file mode 100644 index 0000000000..4763fdf92d --- /dev/null +++ b/templates/app/react-native/src/theme/components/H2.js @@ -0,0 +1,13 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const h2Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH2, + lineHeight: variables.lineHeightH2, + }; + + return h2Theme; +}; diff --git a/templates/app/react-native/src/theme/components/H3.js b/templates/app/react-native/src/theme/components/H3.js new file mode 100644 index 0000000000..0765853f15 --- /dev/null +++ b/templates/app/react-native/src/theme/components/H3.js @@ -0,0 +1,13 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const h3Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH3, + lineHeight: variables.lineHeightH3, + }; + + return h3Theme; +}; diff --git a/templates/app/react-native/src/theme/components/Header.js b/templates/app/react-native/src/theme/components/Header.js new file mode 100644 index 0000000000..ebb9f5b331 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Header.js @@ -0,0 +1,389 @@ +// @flow + +import { PixelRatio, StatusBar } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platformStyle } = variables; + const { platform } = variables; + + const headerTheme = { + '.span': { + height: 128, + 'NativeBase.Left': { + alignSelf: 'flex-start', + }, + 'NativeBase.Body': { + alignSelf: 'flex-end', + alignItems: 'flex-start', + justifyContent: 'center', + paddingBottom: 26, + }, + 'NativeBase.Right': { + alignSelf: 'flex-start', + }, + }, + '.hasSubtitle': { + 'NativeBase.Body': { + 'NativeBase.Title': { + fontSize: variables.titleFontSize - 2, + fontFamily: variables.titleFontfamily, + textAlign: 'center', + fontWeight: '500', + paddingBottom: 3, + }, + 'NativeBase.Subtitle': { + fontSize: variables.subTitleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.subtitleColor, + textAlign: 'center', + }, + }, + }, + '.transparent': { + backgroundColor: 'transparent', + borderBottomColor: 'transparent', + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + paddingTop: platform === PLATFORM.ANDROID ? StatusBar.currentHeight : undefined, + height: + platform === PLATFORM.ANDROID + ? variables.toolbarHeight + StatusBar.currentHeight + : variables.toolbarHeight, + }, + '.noShadow': { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + }, + '.hasTabs': { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + borderBottomWidth: null, + }, + '.hasSegment': { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + borderBottomWidth: null, + 'NativeBase.Left': { + flex: 0.3, + }, + 'NativeBase.Right': { + flex: 0.3, + }, + 'NativeBase.Body': { + flex: 1, + 'NativeBase.Segment': { + marginRight: 0, + alignSelf: 'center', + 'NativeBase.Button': { + paddingLeft: 0, + paddingRight: 0, + }, + }, + }, + }, + '.noLeft': { + 'NativeBase.Left': { + width: platform === PLATFORM.IOS ? undefined : 0, + flex: platform === PLATFORM.IOS ? 1 : 0, + }, + 'NativeBase.Body': { + 'NativeBase.Title': { + paddingLeft: platform === PLATFORM.IOS ? undefined : 10, + }, + 'NativeBase.Subtitle': { + paddingLeft: platform === PLATFORM.IOS ? undefined : 10, + }, + }, + }, + 'NativeBase.Button': { + justifyContent: 'center', + alignSelf: 'center', + alignItems: 'center', + '.transparent': { + 'NativeBase.Text': { + color: variables.toolbarBtnTextColor, + fontWeight: '600', + }, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + }, + paddingHorizontal: variables.buttonPadding, + }, + paddingHorizontal: 15, + }, + '.searchBar': { + 'NativeBase.Item': { + 'NativeBase.Icon': { + backgroundColor: 'transparent', + color: variables.dropdownLinkColor, + fontSize: variables.toolbarSearchIconSize, + alignItems: 'center', + marginTop: 2, + paddingRight: 10, + paddingLeft: 10, + }, + 'NativeBase.IconNB': { + backgroundColor: 'transparent', + color: null, + alignSelf: 'center', + }, + 'NativeBase.Input': { + alignSelf: 'center', + lineHeight: null, + height: variables.searchBarInputHeight, + }, + alignSelf: 'center', + alignItems: 'center', + justifyContent: 'flex-start', + flex: 1, + height: variables.searchBarHeight, + borderColor: 'transparent', + backgroundColor: variables.toolbarInputColor, + }, + 'NativeBase.Button': { + '.transparent': { + 'NativeBase.Text': { + fontWeight: '500', + }, + paddingHorizontal: null, + paddingLeft: platform === PLATFORM.IOS ? 10 : null, + }, + paddingHorizontal: platform === PLATFORM.IOS ? undefined : null, + width: platform === PLATFORM.IOS ? undefined : 0, + height: platform === PLATFORM.IOS ? undefined : 0, + }, + }, + '.rounded': { + 'NativeBase.Item': { + borderRadius: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 25 : 3, + }, + }, + 'NativeBase.Left': { + 'NativeBase.Button': { + '.hasText': { + marginLeft: -10, + height: 30, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize, + marginTop: 2, + marginRight: 5, + marginLeft: 2, + }, + 'NativeBase.Text': { + color: variables.toolbarBtnTextColor, + fontSize: platform === PLATFORM.IOS ? 17 : 0, + marginLeft: 7, + lineHeight: 19.5, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize, + marginTop: 2, + marginRight: 5, + marginLeft: 2, + }, + }, + '.transparent': { + marginLeft: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? -3 : 0, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + fontSize: + platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL + ? variables.iconHeaderSize + 1 + : variables.iconHeaderSize, + marginTop: 0, + marginRight: 2, + marginLeft: 1, + paddingTop: 1, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + fontSize: + platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL + ? variables.iconHeaderSize + 1 + : variables.iconHeaderSize - 2, + marginTop: 0, + marginRight: 2, + marginLeft: 1, + paddingTop: 1, + }, + 'NativeBase.Text': { + color: variables.toolbarBtnTextColor, + fontSize: platform === PLATFORM.IOS ? 17 : 0, + top: platform === PLATFORM.IOS ? 1 : -1.5, + paddingLeft: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 2 : 5, + paddingRight: + platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? undefined : 10, + }, + backgroundColor: 'transparent', + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + }, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + }, + alignSelf: null, + paddingRight: variables.buttonPadding, + paddingLeft: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 4 : 8, + }, + flex: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 1 : 0.4, + alignSelf: 'center', + alignItems: 'flex-start', + }, + 'NativeBase.Body': { + flex: 1, + alignItems: + platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 'center' : 'flex-start', + alignSelf: 'center', + 'NativeBase.Segment': { + borderWidth: 0, + alignSelf: 'flex-end', + marginRight: platform === PLATFORM.IOS ? -40 : -55, + }, + 'NativeBase.Button': { + alignSelf: 'center', + '.transparent': { + backgroundColor: 'transparent', + }, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + }, + 'NativeBase.Text': { + color: variables.inverseTextColor, + backgroundColor: 'transparent', + }, + }, + }, + 'NativeBase.Right': { + 'NativeBase.Button': { + '.hasText': { + height: 30, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 2, + marginRight: 2, + marginLeft: 5, + }, + 'NativeBase.Text': { + color: variables.toolbarBtnTextColor, + fontSize: platform === PLATFORM.IOS ? 17 : 14, + lineHeight: 19.5, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 2, + marginRight: 2, + marginLeft: 5, + }, + }, + '.transparent': { + marginRight: platform === PLATFORM.IOS ? -9 : -5, + paddingLeft: 15, + paddingRight: 12, + paddingHorizontal: 15, + borderRadius: 50, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 0, + marginLeft: 2, + marginRight: 0, + // paddingTop: 0 + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 0, + marginLeft: 2, + marginRight: 0, + // paddingTop: 0 + }, + 'NativeBase.Text': { + color: variables.toolbarBtnTextColor, + fontSize: platform === PLATFORM.IOS ? 17 : 14, + top: platform === PLATFORM.IOS ? 1 : -1.5, + paddingRight: + platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL + ? 0 + : undefined, + }, + backgroundColor: 'transparent', + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + }, + 'NativeBase.Icon': { + color: variables.toolbarBtnColor, + }, + 'NativeBase.IconNB': { + color: variables.toolbarBtnColor, + }, + alignSelf: null, + paddingHorizontal: variables.buttonPadding, + }, + flex: 1, + alignSelf: 'center', + alignItems: 'flex-end', + flexDirection: 'row', + justifyContent: 'flex-end', + }, + backgroundColor: variables.toolbarDefaultBg, + flexDirection: 'row', + // paddingHorizontal: 10, + paddingLeft: + platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL ? 6 : 10, + paddingRight: 10, + justifyContent: 'center', + paddingTop: platform === PLATFORM.IOS ? 18 : 0, + borderBottomWidth: platform === PLATFORM.IOS ? 1 / PixelRatio.getPixelSizeForLayoutSize(1) : 0, + borderBottomColor: variables.toolbarDefaultBorder, + height: + variables.platform === PLATFORM.IOS && variables.platformStyle === PLATFORM.MATERIAL + ? variables.toolbarHeight + 10 + : variables.toolbarHeight, + elevation: 3, + shadowColor: platformStyle === PLATFORM.MATERIAL ? '#000' : undefined, + shadowOffset: platformStyle === PLATFORM.MATERIAL ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === PLATFORM.MATERIAL ? 0.2 : undefined, + shadowRadius: platformStyle === PLATFORM.MATERIAL ? 1.2 : undefined, + top: 0, + left: 0, + right: 0, + }; + + return headerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Icon.js b/templates/app/react-native/src/theme/components/Icon.js new file mode 100644 index 0000000000..d233562deb --- /dev/null +++ b/templates/app/react-native/src/theme/components/Icon.js @@ -0,0 +1,12 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const iconTheme = { + fontSize: variables.iconFontSize, + color: variable.textColor, + }; + + return iconTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Input.js b/templates/app/react-native/src/theme/components/Input.js new file mode 100644 index 0000000000..bc5b5b7da2 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Input.js @@ -0,0 +1,19 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const inputTheme = { + '.multiline': { + height: null, + }, + height: variables.inputHeightBase, + color: variables.inputColor, + paddingLeft: 5, + paddingRight: 5, + flex: 1, + fontSize: variables.inputFontSize, + }; + + return inputTheme; +}; diff --git a/templates/app/react-native/src/theme/components/InputGroup.js b/templates/app/react-native/src/theme/components/InputGroup.js new file mode 100644 index 0000000000..9638ad20b2 --- /dev/null +++ b/templates/app/react-native/src/theme/components/InputGroup.js @@ -0,0 +1,132 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const inputGroupTheme = { + 'NativeBase.Icon': { + fontSize: 24, + color: variables.sTabBarActiveTextColor, + paddingHorizontal: 5, + }, + 'NativeBase.IconNB': { + fontSize: 24, + color: variables.sTabBarActiveTextColor, + paddingHorizontal: 5, + }, + 'NativeBase.Input': { + height: variables.inputHeightBase, + color: variables.inputColor, + paddingLeft: 5, + paddingRight: 5, + flex: 1, + fontSize: variables.inputFontSize, + lineHeight: variables.inputLineHeight, + }, + '.underline': { + '.success': { + borderColor: variables.inputSuccessBorderColor, + }, + '.error': { + borderColor: variables.inputErrorBorderColor, + }, + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + }, + '.regular': { + '.success': { + borderColor: variables.inputSuccessBorderColor, + }, + '.error': { + borderColor: variables.inputErrorBorderColor, + }, + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderColor: variables.inputBorderColor, + }, + '.rounded': { + '.success': { + borderColor: variables.inputSuccessBorderColor, + }, + '.error': { + borderColor: variables.inputErrorBorderColor, + }, + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderRadius: variables.inputGroupRoundedBorderRadius, + borderColor: variables.inputBorderColor, + }, + + '.success': { + 'NativeBase.Icon': { + color: variables.inputSuccessBorderColor, + }, + 'NativeBase.IconNB': { + color: variables.inputSuccessBorderColor, + }, + '.rounded': { + borderRadius: 30, + borderColor: variables.inputSuccessBorderColor, + }, + '.regular': { + borderColor: variables.inputSuccessBorderColor, + }, + '.underline': { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputSuccessBorderColor, + }, + borderColor: variables.inputSuccessBorderColor, + }, + + '.error': { + 'NativeBase.Icon': { + color: variables.inputErrorBorderColor, + }, + 'NativeBase.IconNB': { + color: variables.inputErrorBorderColor, + }, + '.rounded': { + borderRadius: 30, + borderColor: variables.inputErrorBorderColor, + }, + '.regular': { + borderColor: variables.inputErrorBorderColor, + }, + '.underline': { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputErrorBorderColor, + }, + borderColor: variables.inputErrorBorderColor, + }, + '.disabled': { + 'NativeBase.Icon': { + color: '#384850', + }, + 'NativeBase.IconNB': { + color: '#384850', + }, + }, + + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + backgroundColor: 'transparent', + flexDirection: 'row', + alignItems: 'center', + }; + + return inputGroupTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Item.js b/templates/app/react-native/src/theme/components/Item.js new file mode 100644 index 0000000000..997504a084 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Item.js @@ -0,0 +1,241 @@ +// @flow + +import { Platform } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const itemTheme = { + '.floatingLabel': { + 'NativeBase.Input': { + height: 50, + top: 8, + paddingTop: 3, + paddingBottom: 7, + '.multiline': { + minHeight: variables.inputHeightBase, + paddingTop: Platform.OS === PLATFORM.IOS ? 10 : 3, + paddingBottom: Platform.OS === PLATFORM.IOS ? 14 : 10, + }, + }, + 'NativeBase.Label': { + paddingTop: 5, + }, + 'NativeBase.Icon': { + top: 6, + paddingTop: 8, + }, + 'NativeBase.IconNB': { + top: 6, + paddingTop: 8, + }, + }, + '.fixedLabel': { + 'NativeBase.Label': { + position: null, + top: null, + left: null, + right: null, + flex: 1, + height: null, + width: null, + fontSize: variables.inputFontSize, + }, + 'NativeBase.Input': { + flex: 2, + fontSize: variables.inputFontSize, + }, + }, + '.stackedLabel': { + 'NativeBase.Label': { + position: null, + top: null, + left: null, + right: null, + paddingTop: 5, + alignSelf: 'flex-start', + fontSize: variables.inputFontSize - 2, + }, + 'NativeBase.Icon': { + marginTop: 36, + }, + 'NativeBase.Input': { + alignSelf: Platform.OS === PLATFORM.IOS ? 'stretch' : 'flex-start', + flex: 1, + width: Platform.OS === PLATFORM.IOS ? null : variables.deviceWidth - 25, + fontSize: variables.inputFontSize, + lineHeight: variables.inputLineHeight - 6, + '.secureTextEntry': { + fontSize: variables.inputFontSize, + }, + '.multiline': { + paddingTop: Platform.OS === PLATFORM.IOS ? 9 : undefined, + paddingBottom: Platform.OS === PLATFORM.IOS ? 9 : undefined, + }, + }, + flexDirection: null, + minHeight: variables.inputHeightBase + 15, + }, + '.inlineLabel': { + 'NativeBase.Label': { + position: null, + top: null, + left: null, + right: null, + paddingRight: 20, + height: null, + width: null, + fontSize: variables.inputFontSize, + }, + 'NativeBase.Input': { + paddingLeft: 5, + fontSize: variables.inputFontSize, + }, + flexDirection: 'row', + }, + 'NativeBase.Label': { + fontSize: variables.inputFontSize, + color: variables.inputColorPlaceholder, + paddingRight: 5, + }, + 'NativeBase.Icon': { + fontSize: 24, + paddingRight: 8, + }, + 'NativeBase.IconNB': { + fontSize: 24, + paddingRight: 8, + }, + 'NativeBase.Input': { + '.multiline': { + height: null, + }, + height: variables.inputHeightBase, + color: variables.inputColor, + flex: 1, + top: Platform.OS === PLATFORM.IOS ? 1.5 : undefined, + fontSize: variables.inputFontSize, + }, + '.underline': { + 'NativeBase.Input': { + paddingLeft: 15, + }, + '.success': { + borderColor: variables.inputSuccessBorderColor, + }, + '.error': { + borderColor: variables.inputErrorBorderColor, + }, + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + }, + '.regular': { + 'NativeBase.Input': { + paddingLeft: 8, + }, + 'NativeBase.Icon': { + paddingLeft: 10, + }, + '.success': { + borderColor: variables.inputSuccessBorderColor, + }, + '.error': { + borderColor: variables.inputErrorBorderColor, + }, + borderWidth: variables.borderWidth * 2, + borderColor: variables.inputBorderColor, + }, + '.rounded': { + 'NativeBase.Input': { + paddingLeft: 8, + }, + 'NativeBase.Icon': { + paddingLeft: 10, + }, + '.success': { + borderColor: variables.inputSuccessBorderColor, + }, + '.error': { + borderColor: variables.inputErrorBorderColor, + }, + borderWidth: variables.borderWidth * 2, + borderRadius: 30, + borderColor: variables.inputBorderColor, + }, + + '.success': { + 'NativeBase.Icon': { + color: variables.inputSuccessBorderColor, + }, + 'NativeBase.IconNB': { + color: variables.inputSuccessBorderColor, + }, + '.rounded': { + borderRadius: 30, + borderColor: variables.inputSuccessBorderColor, + }, + '.regular': { + borderColor: variables.inputSuccessBorderColor, + }, + '.underline': { + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputSuccessBorderColor, + }, + borderColor: variables.inputSuccessBorderColor, + }, + + '.error': { + 'NativeBase.Icon': { + color: variables.inputErrorBorderColor, + }, + 'NativeBase.IconNB': { + color: variables.inputErrorBorderColor, + }, + '.rounded': { + borderRadius: 30, + borderColor: variables.inputErrorBorderColor, + }, + '.regular': { + borderColor: variables.inputErrorBorderColor, + }, + '.underline': { + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputErrorBorderColor, + }, + borderColor: variables.inputErrorBorderColor, + }, + '.disabled': { + 'NativeBase.Icon': { + color: '#384850', + }, + 'NativeBase.IconNB': { + color: '#384850', + }, + }, + '.picker': { + marginLeft: 0, + }, + + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + backgroundColor: 'transparent', + flexDirection: 'row', + alignItems: 'center', + marginLeft: 2, + }; + + return itemTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Label.js b/templates/app/react-native/src/theme/components/Label.js new file mode 100644 index 0000000000..cbefe9d449 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Label.js @@ -0,0 +1,15 @@ +// @flow + +export default () => { + const labelTheme = { + '.focused': { + width: 0, + }, + '.textPrimary': { + color: 'gray', + }, + fontSize: 17, + }; + + return labelTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Left.js b/templates/app/react-native/src/theme/components/Left.js new file mode 100644 index 0000000000..5a1b8b09b6 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Left.js @@ -0,0 +1,11 @@ +// @flow + +export default () => { + const leftTheme = { + flex: 1, + alignSelf: 'center', + alignItems: 'flex-start', + }; + + return leftTheme; +}; diff --git a/templates/app/react-native/src/theme/components/ListItem.js b/templates/app/react-native/src/theme/components/ListItem.js new file mode 100644 index 0000000000..ab1e38002a --- /dev/null +++ b/templates/app/react-native/src/theme/components/ListItem.js @@ -0,0 +1,441 @@ +// @flow + +import { Platform, PixelRatio } from 'react-native'; + +import pickerTheme from './Picker'; +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platform } = variables; + const selectedStyle = { + 'NativeBase.Text': { + color: variables.listItemSelected, + }, + 'NativeBase.Icon': { + color: variables.listItemSelected, + }, + }; + + const listItemTheme = { + 'NativeBase.InputGroup': { + 'NativeBase.Icon': { + paddingRight: 5, + }, + 'NativeBase.IconNB': { + paddingRight: 5, + }, + 'NativeBase.Input': { + paddingHorizontal: 5, + }, + flex: 1, + borderWidth: null, + margin: -10, + borderBottomColor: 'transparent', + }, + '.searchBar': { + 'NativeBase.Item': { + 'NativeBase.Icon': { + backgroundColor: 'transparent', + color: variables.dropdownLinkColor, + fontSize: + platform === PLATFORM.IOS ? variables.iconFontSize - 10 : variables.iconFontSize - 5, + alignItems: 'center', + marginTop: 2, + paddingRight: 8, + }, + 'NativeBase.IconNB': { + backgroundColor: 'transparent', + color: null, + alignSelf: 'center', + }, + 'NativeBase.Input': { + alignSelf: 'center', + }, + alignSelf: 'center', + alignItems: 'center', + justifyContent: 'flex-start', + flex: 1, + height: platform === PLATFORM.IOS ? 30 : 40, + borderColor: 'transparent', + backgroundColor: '#fff', + borderRadius: 5, + }, + 'NativeBase.Button': { + '.transparent': { + 'NativeBase.Text': { + fontWeight: '500', + }, + paddingHorizontal: null, + paddingLeft: platform === PLATFORM.IOS ? 10 : null, + }, + paddingHorizontal: platform === PLATFORM.IOS ? undefined : null, + width: platform === PLATFORM.IOS ? undefined : 0, + height: platform === PLATFORM.IOS ? undefined : 0, + }, + backgroundColor: variables.toolbarInputColor, + padding: 10, + marginLeft: null, + }, + 'NativeBase.CheckBox': { + marginLeft: -10, + marginRight: 10, + }, + '.first': { + '.itemHeader': { + paddingTop: variables.listItemPadding + 3, + }, + }, + '.itemHeader': { + '.first': { + paddingTop: variables.listItemPadding + 3, + }, + borderBottomWidth: platform === PLATFORM.IOS ? variables.borderWidth : null, + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 5, + paddingTop: platform === PLATFORM.IOS ? variables.listItemPadding + 25 : undefined, + paddingBottom: platform === PLATFORM.ANDROID ? variables.listItemPadding + 20 : undefined, + flexDirection: 'row', + borderColor: variables.listBorderColor, + 'NativeBase.Text': { + fontSize: 14, + color: platform === PLATFORM.IOS ? undefined : variables.listNoteColor, + }, + }, + '.itemDivider': { + borderBottomWidth: null, + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 5, + backgroundColor: variables.listDividerBg, + flexDirection: 'row', + borderColor: variables.listBorderColor, + }, + '.selected': { + 'NativeBase.Left': { + ...selectedStyle, + }, + 'NativeBase.Body': { + ...selectedStyle, + }, + 'NativeBase.Right': { + ...selectedStyle, + }, + ...selectedStyle, + }, + 'NativeBase.Left': { + 'NativeBase.Body': { + 'NativeBase.Text': { + '.note': { + color: variables.listNoteColor, + fontWeight: '200', + }, + fontWeight: '600', + }, + marginLeft: 10, + alignItems: null, + alignSelf: null, + }, + 'NativeBase.Icon': { + width: variables.iconFontSize - 10, + fontSize: variables.iconFontSize - 10, + }, + 'NativeBase.IconNB': { + width: variables.iconFontSize - 10, + fontSize: variables.iconFontSize - 10, + }, + 'NativeBase.Text': { + alignSelf: 'center', + }, + flexDirection: 'row', + }, + 'NativeBase.Body': { + 'NativeBase.Text': { + marginHorizontal: variables.listItemPadding, + '.note': { + color: variables.listNoteColor, + fontWeight: '200', + }, + }, + alignSelf: null, + alignItems: null, + }, + 'NativeBase.Right': { + 'NativeBase.Badge': { + alignSelf: null, + }, + 'NativeBase.PickerNB': { + 'NativeBase.Button': { + marginRight: -15, + 'NativeBase.Text': { + color: variables.topTabBarActiveTextColor, + }, + }, + }, + 'NativeBase.Button': { + alignSelf: null, + '.transparent': { + 'NativeBase.Text': { + color: variables.topTabBarActiveTextColor, + }, + }, + }, + 'NativeBase.Icon': { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: '#c9c8cd', + }, + 'NativeBase.IconNB': { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: '#c9c8cd', + }, + 'NativeBase.Text': { + '.note': { + color: variables.listNoteColor, + fontWeight: '200', + }, + alignSelf: null, + }, + 'NativeBase.Thumbnail': { + alignSelf: null, + }, + 'NativeBase.Image': { + alignSelf: null, + }, + 'NativeBase.Radio': { + alignSelf: null, + }, + 'NativeBase.Checkbox': { + alignSelf: null, + }, + 'NativeBase.Switch': { + alignSelf: null, + }, + padding: null, + flex: 0.28, + }, + 'NativeBase.Text': { + '.note': { + color: variables.listNoteColor, + fontWeight: '200', + }, + alignSelf: 'center', + }, + '.last': { + marginLeft: -(variables.listItemPadding + 5), + paddingLeft: (variables.listItemPadding + 5) * 2, + top: 1, + }, + '.avatar': { + 'NativeBase.Left': { + flex: 0, + alignSelf: 'flex-start', + paddingTop: 14, + }, + 'NativeBase.Body': { + 'NativeBase.Text': { + marginLeft: null, + }, + flex: 1, + paddingVertical: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + marginLeft: variables.listItemPadding + 5, + }, + 'NativeBase.Right': { + 'NativeBase.Text': { + '.note': { + fontSize: variables.noteFontSize - 2, + }, + }, + flex: 0, + paddingRight: variables.listItemPadding + 5, + alignSelf: 'stretch', + paddingVertical: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + }, + '.noBorder': { + 'NativeBase.Body': { + borderBottomWidth: null, + }, + 'NativeBase.Right': { + borderBottomWidth: null, + }, + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null, + }, + '.thumbnail': { + 'NativeBase.Left': { + flex: 0, + }, + 'NativeBase.Body': { + 'NativeBase.Text': { + marginLeft: null, + }, + flex: 1, + paddingVertical: variables.listItemPadding + 8, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + marginLeft: variables.listItemPadding + 5, + }, + 'NativeBase.Right': { + 'NativeBase.Button': { + '.transparent': { + 'NativeBase.Text': { + fontSize: variables.listNoteSize, + color: variables.sTabBarActiveTextColor, + }, + }, + height: null, + }, + flex: 0, + justifyContent: 'center', + alignSelf: 'stretch', + paddingRight: variables.listItemPadding + 5, + paddingVertical: variables.listItemPadding + 5, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + }, + '.noBorder': { + 'NativeBase.Body': { + borderBottomWidth: null, + }, + 'NativeBase.Right': { + borderBottomWidth: null, + }, + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null, + }, + '.icon': { + '.last': { + 'NativeBase.Body': { + borderBottomWidth: null, + }, + 'NativeBase.Right': { + borderBottomWidth: null, + }, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + }, + 'NativeBase.Left': { + 'NativeBase.Button': { + 'NativeBase.IconNB': { + marginHorizontal: null, + fontSize: variables.iconFontSize - 5, + }, + 'NativeBase.Icon': { + marginHorizontal: null, + fontSize: variables.iconFontSize - 8, + }, + alignSelf: 'center', + height: 29, + width: 29, + borderRadius: 6, + paddingVertical: null, + paddingHorizontal: null, + alignItems: 'center', + justifyContent: 'center', + }, + 'NativeBase.Icon': { + width: variables.iconFontSize - 5, + fontSize: variables.iconFontSize - 2, + }, + 'NativeBase.IconNB': { + width: variables.iconFontSize - 5, + fontSize: variables.iconFontSize - 2, + }, + paddingRight: variables.listItemPadding + 5, + flex: 0, + height: 44, + justifyContent: 'center', + alignItems: 'center', + }, + 'NativeBase.Body': { + 'NativeBase.Text': { + marginLeft: null, + fontSize: 17, + }, + flex: 1, + height: 44, + justifyContent: 'center', + borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + borderColor: variables.listBorderColor, + }, + 'NativeBase.Right': { + 'NativeBase.Text': { + textAlign: 'center', + color: '#8F8E95', + fontSize: 17, + }, + 'NativeBase.IconNB': { + color: '#C8C7CC', + fontSize: variables.iconFontSize - 10, + alignSelf: 'center', + paddingLeft: 10, + paddingTop: 3, + }, + 'NativeBase.Icon': { + color: '#C8C7CC', + fontSize: variables.iconFontSize - 10, + alignSelf: 'center', + paddingLeft: 10, + paddingTop: 3, + }, + 'NativeBase.Switch': { + marginRight: Platform.OS === PLATFORM.IOS ? undefined : -5, + alignSelf: null, + }, + 'NativeBase.PickerNB': { + ...pickerTheme(), + }, + flexDirection: 'row', + alignItems: 'center', + flex: 0, + alignSelf: 'stretch', + height: 44, + justifyContent: 'flex-end', + borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + borderColor: variables.listBorderColor, + paddingRight: variables.listItemPadding + 5, + }, + '.noBorder': { + 'NativeBase.Body': { + borderBottomWidth: null, + }, + 'NativeBase.Right': { + borderBottomWidth: null, + }, + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null, + height: 44, + justifyContent: 'center', + }, + '.noBorder': { + borderBottomWidth: null, + }, + '.noIndent': { + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 6, + }, + alignItems: 'center', + flexDirection: 'row', + paddingRight: variables.listItemPadding + 6, + paddingVertical: variables.listItemPadding + 3, + marginLeft: variables.listItemPadding + 6, + borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + backgroundColor: variables.listBg, + borderColor: variables.listBorderColor, + }; + + return listItemTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Picker.android.js b/templates/app/react-native/src/theme/components/Picker.android.js new file mode 100644 index 0000000000..0b499a6537 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Picker.android.js @@ -0,0 +1,14 @@ +// @flow + +export default () => { + const pickerTheme = { + '.note': { + color: '#8F8E95', + }, + // width: 90, + marginRight: -4, + flexGrow: 1, + }; + + return pickerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Picker.ios.js b/templates/app/react-native/src/theme/components/Picker.ios.js new file mode 100644 index 0000000000..b81b0568e2 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Picker.ios.js @@ -0,0 +1,7 @@ +// @flow + +export default () => { + const pickerTheme = {}; + + return pickerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Picker.js b/templates/app/react-native/src/theme/components/Picker.js new file mode 100644 index 0000000000..0b499a6537 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Picker.js @@ -0,0 +1,14 @@ +// @flow + +export default () => { + const pickerTheme = { + '.note': { + color: '#8F8E95', + }, + // width: 90, + marginRight: -4, + flexGrow: 1, + }; + + return pickerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Radio.js b/templates/app/react-native/src/theme/components/Radio.js new file mode 100644 index 0000000000..a50e70deb7 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Radio.js @@ -0,0 +1,26 @@ +// @flow + +import { Platform } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const radioTheme = { + '.selected': { + 'NativeBase.IconNB': { + color: + Platform.OS === PLATFORM.IOS ? variables.radioColor : variables.radioSelectedColorAndroid, + lineHeight: Platform.OS === PLATFORM.IOS ? 25 : variables.radioBtnLineHeight, + height: Platform.OS === PLATFORM.IOS ? 20 : undefined, + }, + }, + 'NativeBase.IconNB': { + color: Platform.OS === PLATFORM.IOS ? 'transparent' : undefined, + lineHeight: Platform.OS === PLATFORM.IOS ? undefined : variables.radioBtnLineHeight, + fontSize: Platform.OS === PLATFORM.IOS ? undefined : variables.radioBtnSize, + }, + }; + + return radioTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Right.js b/templates/app/react-native/src/theme/components/Right.js new file mode 100644 index 0000000000..25b4c604f3 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Right.js @@ -0,0 +1,14 @@ +// @flow + +export default () => { + const rightTheme = { + 'NativeBase.Button': { + alignSelf: null, + }, + flex: 1, + alignSelf: 'center', + alignItems: 'flex-end', + }; + + return rightTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Segment.js b/templates/app/react-native/src/theme/components/Segment.js new file mode 100644 index 0000000000..b78c0f391d --- /dev/null +++ b/templates/app/react-native/src/theme/components/Segment.js @@ -0,0 +1,57 @@ +// @flow + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platform } = variables; + + const segmentTheme = { + height: 45, + borderColor: variables.segmentBorderColorMain, + flexDirection: 'row', + justifyContent: 'center', + backgroundColor: variables.segmentBackgroundColor, + 'NativeBase.Button': { + alignSelf: 'center', + borderRadius: 0, + paddingTop: 3, + paddingBottom: 3, + height: 30, + backgroundColor: 'transparent', + borderWidth: 1, + borderLeftWidth: 0, + borderColor: variables.segmentBorderColor, + elevation: 0, + '.active': { + backgroundColor: variables.segmentActiveBackgroundColor, + 'NativeBase.Text': { + color: variables.segmentActiveTextColor, + }, + 'NativeBase.Icon': { + color: variables.segmentActiveTextColor, + }, + }, + '.first': { + borderTopLeftRadius: platform === PLATFORM.IOS ? 5 : undefined, + borderBottomLeftRadius: platform === PLATFORM.IOS ? 5 : undefined, + borderLeftWidth: 1, + }, + '.last': { + borderTopRightRadius: platform === PLATFORM.IOS ? 5 : undefined, + borderBottomRightRadius: platform === PLATFORM.IOS ? 5 : undefined, + }, + 'NativeBase.Text': { + color: variables.segmentTextColor, + fontSize: 14, + }, + 'NativeBase.Icon': { + fontSize: 22, + paddingTop: 0, + color: variables.segmentTextColor, + }, + }, + }; + + return segmentTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Separator.js b/templates/app/react-native/src/theme/components/Separator.js new file mode 100644 index 0000000000..8892181faf --- /dev/null +++ b/templates/app/react-native/src/theme/components/Separator.js @@ -0,0 +1,49 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const theme = { + '.group': { + height: 50, + paddingVertical: variables.listItemPadding - 8, + paddingTop: variables.listItemPadding + 12, + '.bordered': { + height: 50, + paddingVertical: variables.listItemPadding - 8, + paddingTop: variables.listItemPadding + 12, + }, + }, + '.bordered': { + '.noTopBorder': { + borderTopWidth: 0, + }, + '.noBottomBorder': { + borderBottomWidth: 0, + }, + height: 35, + paddingTop: variables.listItemPadding + 2, + paddingBottom: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderTopWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + }, + 'NativeBase.Text': { + fontSize: variables.tabBarTextSize - 2, + color: '#777', + }, + '.noTopBorder': { + borderTopWidth: 0, + }, + '.noBottomBorder': { + borderBottomWidth: 0, + }, + height: 38, + backgroundColor: '#F0EFF5', + flex: 1, + justifyContent: 'center', + paddingLeft: variables.listItemPadding + 5, + }; + + return theme; +}; diff --git a/templates/app/react-native/src/theme/components/Spinner.js b/templates/app/react-native/src/theme/components/Spinner.js new file mode 100644 index 0000000000..f52a4d0aef --- /dev/null +++ b/templates/app/react-native/src/theme/components/Spinner.js @@ -0,0 +1,9 @@ +// @flow + +export default () => { + const spinnerTheme = { + height: 80, + }; + + return spinnerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Subtitle.js b/templates/app/react-native/src/theme/components/Subtitle.js new file mode 100644 index 0000000000..9d6ec5022c --- /dev/null +++ b/templates/app/react-native/src/theme/components/Subtitle.js @@ -0,0 +1,19 @@ +// @flow + +import { Platform } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const subtitleTheme = { + fontSize: variables.subTitleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.subtitleColor, + textAlign: 'center', + paddingLeft: Platform.OS === PLATFORM.IOS ? 4 : 0, + marginLeft: Platform.OS === PLATFORM.IOS ? undefined : -3, + }; + + return subtitleTheme; +}; diff --git a/templates/app/react-native/src/theme/components/SwipeRow.js b/templates/app/react-native/src/theme/components/SwipeRow.js new file mode 100644 index 0000000000..16de874ecf --- /dev/null +++ b/templates/app/react-native/src/theme/components/SwipeRow.js @@ -0,0 +1,46 @@ +// @flow + +export default () => { + const swipeRowTheme = { + 'NativeBase.ListItem': { + '.list': { + backgroundColor: '#FFF', + }, + marginLeft: 0, + }, + 'NativeBase.Left': { + flex: 0, + alignSelf: null, + alignItems: null, + 'NativeBase.Button': { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + alignSelf: 'stretch', + borderRadius: 0, + }, + }, + 'NativeBase.Right': { + flex: 0, + alignSelf: null, + alignItems: null, + 'NativeBase.Button': { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + alignSelf: 'stretch', + borderRadius: 0, + }, + }, + 'NativeBase.Button': { + flex: 1, + height: null, + alignItems: 'center', + justifyContent: 'center', + alignSelf: 'stretch', + borderRadius: 0, + }, + }; + + return swipeRowTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Switch.js b/templates/app/react-native/src/theme/components/Switch.js new file mode 100644 index 0000000000..d4edad8cc7 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Switch.js @@ -0,0 +1,9 @@ +// @flow + +export default () => { + const switchTheme = { + marginVertical: -5, + }; + + return switchTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Tab.js b/templates/app/react-native/src/theme/components/Tab.js new file mode 100644 index 0000000000..0498253251 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Tab.js @@ -0,0 +1,10 @@ +// @flow + +export default () => { + const tabTheme = { + flex: 1, + backgroundColor: '#FFF', + }; + + return tabTheme; +}; diff --git a/templates/app/react-native/src/theme/components/TabBar.js b/templates/app/react-native/src/theme/components/TabBar.js new file mode 100644 index 0000000000..0c2b51da4f --- /dev/null +++ b/templates/app/react-native/src/theme/components/TabBar.js @@ -0,0 +1,57 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const tabBarTheme = { + '.tabIcon': { + height: undefined, + }, + '.vertical': { + height: 60, + }, + 'NativeBase.Button': { + '.transparent': { + 'NativeBase.Text': { + fontSize: variables.tabFontSize, + color: variables.sTabBarActiveTextColor, + fontWeight: '400', + }, + 'NativeBase.IconNB': { + color: variables.sTabBarActiveTextColor, + }, + }, + 'NativeBase.IconNB': { + color: variables.sTabBarActiveTextColor, + }, + 'NativeBase.Text': { + fontSize: variables.tabFontSize, + color: variables.sTabBarActiveTextColor, + fontWeight: '400', + }, + '.isTabActive': { + 'NativeBase.Text': { + fontWeight: '900', + }, + }, + flex: 1, + alignSelf: 'stretch', + alignItems: 'center', + justifyContent: 'center', + borderRadius: null, + borderBottomColor: 'transparent', + backgroundColor: variables.tabBgColor, + }, + height: 45, + flexDirection: 'row', + justifyContent: 'space-around', + borderWidth: 1, + borderTopWidth: 0, + borderLeftWidth: 0, + borderRightWidth: 0, + borderBottomColor: '#ccc', + backgroundColor: variables.tabBgColor, + }; + + return tabBarTheme; +}; diff --git a/templates/app/react-native/src/theme/components/TabContainer.js b/templates/app/react-native/src/theme/components/TabContainer.js new file mode 100644 index 0000000000..1b42d58a0e --- /dev/null +++ b/templates/app/react-native/src/theme/components/TabContainer.js @@ -0,0 +1,25 @@ +// @flow + +import { Platform } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platformStyle } = variables; + + const tabContainerTheme = { + elevation: 3, + height: 50, + flexDirection: 'row', + shadowColor: platformStyle === PLATFORM.MATERIAL ? '#000' : undefined, + shadowOffset: platformStyle === PLATFORM.MATERIAL ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === PLATFORM.MATERIAL ? 0.2 : undefined, + shadowRadius: platformStyle === PLATFORM.MATERIAL ? 1.2 : undefined, + justifyContent: 'space-around', + borderBottomWidth: Platform.OS === PLATFORM.IOS ? variables.borderWidth : 0, + borderColor: variables.topTabBarBorderColor, + }; + + return tabContainerTheme; +}; diff --git a/templates/app/react-native/src/theme/components/TabHeading.js b/templates/app/react-native/src/theme/components/TabHeading.js new file mode 100644 index 0000000000..37bb15350a --- /dev/null +++ b/templates/app/react-native/src/theme/components/TabHeading.js @@ -0,0 +1,40 @@ +// @flow + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platform } = variables; + + const tabHeadingTheme = { + flexDirection: 'row', + backgroundColor: variables.tabDefaultBg, + flex: 1, + alignItems: 'center', + justifyContent: 'center', + '.scrollable': { + paddingHorizontal: 20, + flex: platform === PLATFORM.ANDROID ? 0 : 1, + minWidth: platform === PLATFORM.ANDROID ? undefined : 60, + }, + 'NativeBase.Text': { + color: variables.topTabBarTextColor, + marginHorizontal: 7, + }, + 'NativeBase.Icon': { + color: variables.topTabBarTextColor, + fontSize: platform === PLATFORM.IOS ? 26 : undefined, + }, + '.active': { + 'NativeBase.Text': { + color: variables.topTabBarActiveTextColor, + fontWeight: '600', + }, + 'NativeBase.Icon': { + color: variables.topTabBarActiveTextColor, + }, + }, + }; + + return tabHeadingTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Text.js b/templates/app/react-native/src/theme/components/Text.js new file mode 100644 index 0000000000..2e6bea0e06 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Text.js @@ -0,0 +1,20 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const textTheme = { + fontSize: variables.DefaultFontSize, + fontFamily: variables.fontFamily, + color: variables.textColor, + '.note': { + color: '#a7a7a7', + fontSize: variables.noteFontSize, + }, + '.textPrimary': { + color: '#333', + }, + }; + + return textTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Textarea.js b/templates/app/react-native/src/theme/components/Textarea.js new file mode 100644 index 0000000000..8022d3093b --- /dev/null +++ b/templates/app/react-native/src/theme/components/Textarea.js @@ -0,0 +1,25 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const textAreaTheme = { + '.underline': { + borderBottomWidth: variables.borderWidth, + marginTop: 5, + borderColor: variables.inputBorderColor, + }, + '.bordered': { + borderWidth: 1, + marginTop: 5, + borderColor: variables.inputBorderColor, + }, + color: variables.textColor, + paddingLeft: 10, + paddingRight: 5, + fontSize: 15, + textAlignVertical: 'top', + }; + + return textAreaTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Thumbnail.js b/templates/app/react-native/src/theme/components/Thumbnail.js new file mode 100644 index 0000000000..b3152fdcbb --- /dev/null +++ b/templates/app/react-native/src/theme/components/Thumbnail.js @@ -0,0 +1,40 @@ +// @flow + +export default () => { + const thumbnailTheme = { + '.square': { + borderRadius: 0, + '.small': { + width: 36, + height: 36, + borderRadius: 0, + }, + '.large': { + width: 80, + height: 80, + borderRadius: 0, + }, + }, + '.small': { + width: 36, + height: 36, + borderRadius: 18, + '.square': { + borderRadius: 0, + }, + }, + '.large': { + width: 80, + height: 80, + borderRadius: 40, + '.square': { + borderRadius: 0, + }, + }, + width: 56, + height: 56, + borderRadius: 28, + }; + + return thumbnailTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Title.js b/templates/app/react-native/src/theme/components/Title.js new file mode 100644 index 0000000000..02d28aafaa --- /dev/null +++ b/templates/app/react-native/src/theme/components/Title.js @@ -0,0 +1,21 @@ +// @flow + +import { Platform } from 'react-native'; + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const titleTheme = { + fontSize: variables.titleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.titleFontColor, + fontWeight: Platform.OS === PLATFORM.IOS ? '700' : undefined, + textAlign: 'center', + paddingLeft: Platform.OS === PLATFORM.IOS ? 4 : 0, + marginLeft: Platform.OS === PLATFORM.IOS ? undefined : -3, + paddingTop: 1, + }; + + return titleTheme; +}; diff --git a/templates/app/react-native/src/theme/components/Toast.js b/templates/app/react-native/src/theme/components/Toast.js new file mode 100644 index 0000000000..6246a049f0 --- /dev/null +++ b/templates/app/react-native/src/theme/components/Toast.js @@ -0,0 +1,41 @@ +// @flow + +import variable from '../variables/Platform'; +import { PLATFORM } from '../variables/CommonColor'; + +export default (variables /* : * */ = variable) => { + const { platform } = variables; + + const toastTheme = { + '.danger': { + backgroundColor: variables.brandDanger, + }, + '.warning': { + backgroundColor: variables.brandWarning, + }, + '.success': { + backgroundColor: variables.brandSuccess, + }, + backgroundColor: 'rgba(0,0,0,0.8)', + borderRadius: platform === PLATFORM.IOS ? 5 : 0, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + padding: 10, + minHeight: 50, + 'NativeBase.Text': { + color: '#fff', + flex: 1, + }, + 'NativeBase.Button': { + backgroundColor: 'transparent', + height: 30, + elevation: 0, + 'NativeBase.Text': { + fontSize: 14, + }, + }, + }; + + return toastTheme; +}; diff --git a/templates/app/react-native/src/theme/components/View.js b/templates/app/react-native/src/theme/components/View.js new file mode 100644 index 0000000000..a01a86939e --- /dev/null +++ b/templates/app/react-native/src/theme/components/View.js @@ -0,0 +1,13 @@ +// @flow + +import variable from '../variables/Platform'; + +export default (variables /* : * */ = variable) => { + const viewTheme = { + '.padder': { + padding: variables.contentPadding, + }, + }; + + return viewTheme; +}; diff --git a/templates/app/react-native/src/theme/components/index.js b/templates/app/react-native/src/theme/components/index.js new file mode 100644 index 0000000000..921980bb8a --- /dev/null +++ b/templates/app/react-native/src/theme/components/index.js @@ -0,0 +1,247 @@ +/* eslint-disable no-param-reassign */ +// @flow + +import _ from 'lodash'; + +import bodyTheme from './Body'; +import leftTheme from './Left'; +import rightTheme from './Right'; +import headerTheme from './Header'; +import switchTheme from './Switch'; +import thumbnailTheme from './Thumbnail'; +import containerTheme from './Container'; +import contentTheme from './Content'; +import buttonTheme from './Button'; +import titleTheme from './Title'; +import subtitleTheme from './Subtitle'; +import inputGroupTheme from './InputGroup'; +import badgeTheme from './Badge'; +import checkBoxTheme from './CheckBox'; +import cardTheme from './Card'; +import radioTheme from './Radio'; +import h3Theme from './H3'; +import h2Theme from './H2'; +import h1Theme from './H1'; +import footerTheme from './Footer'; +import footerTabTheme from './FooterTab'; +import fabTheme from './Fab'; +import itemTheme from './Item'; +import labelTheme from './Label'; +import textAreaTheme from './Textarea'; +import textTheme from './Text'; +import toastTheme from './Toast'; +import tabTheme from './Tab'; +import tabBarTheme from './TabBar'; +import tabContainerTheme from './TabContainer'; +import viewTheme from './View'; +import tabHeadingTheme from './TabHeading'; +import iconTheme from './Icon'; +import inputTheme from './Input'; +import swipeRowTheme from './SwipeRow'; +import segmentTheme from './Segment'; +import spinnerTheme from './Spinner'; +import cardItemTheme from './CardItem'; +import listItemTheme from './ListItem'; +import formTheme from './Form'; +import separatorTheme from './Separator'; +import pickerTheme from './Picker'; +import variable from '../variables/Platform'; +import getOverrides from '../overrides'; + +export default (variables /* : * */ = variable) => { + const theme = { + variables, + 'NativeBase.Left': { + ...leftTheme(variables), + }, + 'NativeBase.Right': { + ...rightTheme(variables), + }, + 'NativeBase.Body': { + ...bodyTheme(variables), + }, + + 'NativeBase.Header': { + ...headerTheme(variables), + }, + + 'NativeBase.Button': { + ...buttonTheme(variables), + }, + + 'NativeBase.Title': { + ...titleTheme(variables), + }, + 'NativeBase.Subtitle': { + ...subtitleTheme(variables), + }, + + 'NativeBase.InputGroup': { + ...inputGroupTheme(variables), + }, + + 'NativeBase.Input': { + ...inputTheme(variables), + }, + + 'NativeBase.Badge': { + ...badgeTheme(variables), + }, + + 'NativeBase.CheckBox': { + ...checkBoxTheme(variables), + }, + + 'NativeBase.Radio': { + ...radioTheme(variables), + }, + + 'NativeBase.Card': { + ...cardTheme(variables), + }, + + 'NativeBase.CardItem': { + ...cardItemTheme(variables), + }, + + 'NativeBase.Toast': { + ...toastTheme(variables), + }, + + 'NativeBase.H1': { + ...h1Theme(variables), + }, + 'NativeBase.H2': { + ...h2Theme(variables), + }, + 'NativeBase.H3': { + ...h3Theme(variables), + }, + 'NativeBase.Form': { + ...formTheme(variables), + }, + + 'NativeBase.Container': { + ...containerTheme(variables), + }, + 'NativeBase.Content': { + ...contentTheme(variables), + }, + + 'NativeBase.Footer': { + ...footerTheme(variables), + }, + + 'NativeBase.Tabs': { + flex: 1, + }, + + 'NativeBase.FooterTab': { + ...footerTabTheme(variables), + }, + + 'NativeBase.ListItem': { + ...listItemTheme(variables), + }, + + 'NativeBase.ListItem1': { + ...listItemTheme(variables), + }, + + 'NativeBase.Icon': { + ...iconTheme(variables), + }, + 'NativeBase.IconNB': { + ...iconTheme(variables), + }, + 'NativeBase.Text': { + ...textTheme(variables), + }, + 'NativeBase.Spinner': { + ...spinnerTheme(variables), + }, + + 'NativeBase.Fab': { + ...fabTheme(variables), + }, + + 'NativeBase.Item': { + ...itemTheme(variables), + }, + + 'NativeBase.Label': { + ...labelTheme(variables), + }, + + 'NativeBase.Textarea': { + ...textAreaTheme(variables), + }, + + 'NativeBase.PickerNB': { + ...pickerTheme(variables), + 'NativeBase.Button': { + 'NativeBase.Text': {}, + }, + }, + + 'NativeBase.Tab': { + ...tabTheme(variables), + }, + + 'NativeBase.Segment': { + ...segmentTheme(variables), + }, + + 'NativeBase.TabBar': { + ...tabBarTheme(variables), + }, + 'NativeBase.ViewNB': { + ...viewTheme(variables), + }, + 'NativeBase.TabHeading': { + ...tabHeadingTheme(variables), + }, + 'NativeBase.TabContainer': { + ...tabContainerTheme(variables), + }, + 'NativeBase.Switch': { + ...switchTheme(variables), + }, + 'NativeBase.Separator': { + ...separatorTheme(variables), + }, + 'NativeBase.SwipeRow': { + ...swipeRowTheme(variables), + }, + 'NativeBase.Thumbnail': { + ...thumbnailTheme(variables), + }, + ...getOverrides(variables), + }; + + const cssifyTheme = (grandparent, parent, parentKey) => { + _.forEach(parent, (style, styleName) => { + if (styleName.indexOf('.') === 0 && parentKey && parentKey.indexOf('.') === 0) { + if (grandparent) { + if (!grandparent[styleName]) { + grandparent[styleName] = {}; + } else { + grandparent[styleName][parentKey] = style; + } + } + } + if ( + style && + typeof style === 'object' && + styleName !== 'fontVariant' && + styleName !== 'transform' + ) { + cssifyTheme(parent, style, styleName); + } + }); + }; + + cssifyTheme(null, theme, null); + + return theme; +}; diff --git a/templates/app/react-native/src/theme/overrides/Button.js b/templates/app/react-native/src/theme/overrides/Button.js new file mode 100644 index 0000000000..9597871ba2 --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Button.js @@ -0,0 +1,20 @@ +// @flow +import buttonTheme from '../components/Button'; + +export default variables => { + const buttonOverrides = { + ...buttonTheme(variables), + '.abpButton': { + display: 'flex', + justifyContent: 'center', + borderRadius: 15, + width: '100%', + 'NativeBase.Text': { + fontWeight: '600', + textTransform: 'uppercase', + }, + }, + }; + + return buttonOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/Content.js b/templates/app/react-native/src/theme/overrides/Content.js new file mode 100644 index 0000000000..a3baf45b2c --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Content.js @@ -0,0 +1,14 @@ +// @flow +import contentTheme from '../components/Content'; + +export default variables => { + const override = { + ...contentTheme(variables), + backgroundColor: '#f8f8f8', + '.px20': { + paddingHorizontal: 20, + }, + }; + + return override; +}; diff --git a/templates/app/react-native/src/theme/overrides/Icon.js b/templates/app/react-native/src/theme/overrides/Icon.js new file mode 100644 index 0000000000..ee602f9049 --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Icon.js @@ -0,0 +1,35 @@ +// @flow +import iconTheme from '../components/Icon'; + +export default variables => { + const iconOverrides = { + ...iconTheme(variables), + '.primary': { + color: variables.brandPrimary, + }, + '.success': { + color: variables.brandSuccess, + }, + '.info': { + color: variables.brandInfo, + }, + '.danger': { + color: variables.brandDanger, + }, + '.warning': { + color: variables.brandWarning, + }, + '.dark': { + color: variables.brandDark, + }, + '.light': { + color: variables.brandLight, + }, + '.navElement': { + marginHorizontal: 15, + fontSize: 35, + }, + }; + + return iconOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/Input.js b/templates/app/react-native/src/theme/overrides/Input.js new file mode 100644 index 0000000000..5ff4b86a9d --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Input.js @@ -0,0 +1,21 @@ +import inputTheme from '../components/Input'; + +export default variables => { + const inputOverrides = { + ...inputTheme(variables), + '.abpInput': { + paddingVertical: 0, + paddingHorizontal: 20, + borderWidth: 1, + borderColor: '#e6e6e6', + borderRadius: 15, + width: '100%', + height: 40, + backgroundColor: '#fff', + color: '#000', + lineHeight: 22, + }, + }; + + return inputOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/InputGroup.js b/templates/app/react-native/src/theme/overrides/InputGroup.js new file mode 100644 index 0000000000..e673b7e052 --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/InputGroup.js @@ -0,0 +1,19 @@ +// @flow +import inputGroupTheme from '../components/InputGroup'; + +export default variables => { + const inputGroupOverrides = { + ...inputGroupTheme(variables), + '.abpInputGroup': { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + padding: 0, + marginVertical: 10, + borderBottomWidth: 0, + height: 60, + }, + }; + + return inputGroupOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/Item.js b/templates/app/react-native/src/theme/overrides/Item.js new file mode 100644 index 0000000000..c5fd1d2397 --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Item.js @@ -0,0 +1,24 @@ +import itemTheme from '../components/Item'; + +export default variables => { + const itemOverrides = { + ...itemTheme(variables), + '.abpInput': { + paddingVertical: 0, + paddingHorizontal: 5, + borderTopWidth: 1, + borderRightWidth: 1, + borderBottomWidth: 1, + borderLeftWidth: 1, + borderWidth: 1, + borderColor: '#e6e6e6', + borderRadius: 15, + width: '100%', + height: 40, + backgroundColor: '#fff', + color: '#000', + }, + }; + + return itemOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/Label.js b/templates/app/react-native/src/theme/overrides/Label.js new file mode 100644 index 0000000000..fbc68c661d --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Label.js @@ -0,0 +1,18 @@ +// @flow +import labelTheme from '../components/Label'; + +export default variables => { + const labelOverrides = { + ...labelTheme(variables), + '.abpLabel': { + alignSelf: 'flex-start', + marginBottom: 5, + color: '#8F8F8F', + fontWeight: '600', + fontSize: 13, + textTransform: 'uppercase', + }, + }; + + return labelOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/Text.js b/templates/app/react-native/src/theme/overrides/Text.js new file mode 100644 index 0000000000..811c694011 --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/Text.js @@ -0,0 +1,31 @@ +// @flow +import textTheme from '../components/Text'; + +export default variables => { + const textOverrides = { + ...textTheme(variables), + '.primary': { + color: variables.brandPrimary, + }, + '.success': { + color: variables.brandSuccess, + }, + '.info': { + color: variables.brandInfo, + }, + '.danger': { + color: variables.brandDanger, + }, + '.warning': { + color: variables.brandWarning, + }, + '.dark': { + color: variables.brandDark, + }, + '.light': { + color: variables.brandLight, + }, + }; + + return textOverrides; +}; diff --git a/templates/app/react-native/src/theme/overrides/index.js b/templates/app/react-native/src/theme/overrides/index.js new file mode 100644 index 0000000000..e44c56805d --- /dev/null +++ b/templates/app/react-native/src/theme/overrides/index.js @@ -0,0 +1,39 @@ +import textTheme from './Text'; +import iconTheme from './Icon'; +import inputTheme from './Input'; +import inputGroupTheme from './InputGroup'; +import labelTheme from './Label'; +import buttonTheme from './Button'; +import contentTheme from './Content'; +import itemTheme from './Item'; + +export default variables => { + const theme = { + 'NativeBase.Text': { + ...textTheme(variables), + }, + 'NativeBase.Icon': { + ...iconTheme(variables), + }, + 'NativeBase.Input': { + ...inputTheme(variables), + }, + 'NativeBase.InputGroup': { + ...inputGroupTheme(variables), + }, + 'NativeBase.Label': { + ...labelTheme(variables), + }, + 'NativeBase.Button': { + ...buttonTheme(variables), + }, + 'NativeBase.Content': { + ...contentTheme(variables), + }, + 'NativeBase.Item': { + ...itemTheme(variables), + }, + }; + + return theme; +}; diff --git a/templates/app/react-native/src/theme/variables/CommonColor.js b/templates/app/react-native/src/theme/variables/CommonColor.js new file mode 100644 index 0000000000..dd28eb1531 --- /dev/null +++ b/templates/app/react-native/src/theme/variables/CommonColor.js @@ -0,0 +1,304 @@ +import color from 'color'; +import { Platform, Dimensions, PixelRatio } from 'react-native'; + +export const PLATFORM = { + ANDROID: 'android', + IOS: 'ios', + MATERIAL: 'material', + WEB: 'web', +}; + +const deviceHeight = Dimensions.get('window').height; +const deviceWidth = Dimensions.get('window').width; +const platform = Platform.OS; +const platformStyle = undefined; +const isIphoneX = + platform === PLATFORM.IOS && + (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + // Accordion + headerStyle: '#edebed', + iconStyle: '#000', + contentStyle: '#f5f4f5', + expandedIconStyle: '#000', + accordionBorderColor: '#d3d3d3', + + // ActionSheet + elevation: 4, + containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', + innerTouchableBackgroundColor: '#fff', + listItemHeight: 50, + listItemBorderColor: 'transparent', + marginHorizontal: -15, + marginLeft: 14, + marginTop: 15, + minHeight: 56, + padding: 15, + touchableTextColor: '#757575', + + // Android + androidRipple: true, + androidRippleColor: 'rgba(256, 256, 256, 0.3)', + androidRippleColorDark: 'rgba(0, 0, 0, 0.15)', + buttonUppercaseAndroidText: true, + + // Badge + badgeBg: '#ED1727', + badgeColor: '#fff', + badgePadding: platform === PLATFORM.IOS ? 3 : 0, + + // Button + buttonFontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', + buttonDisabledBg: '#b5b5b5', + buttonPadding: 6, + get buttonPrimaryBg() { + return this.brandPrimary; + }, + get buttonPrimaryColor() { + return this.inverseTextColor; + }, + get buttonInfoBg() { + return this.brandInfo; + }, + get buttonInfoColor() { + return this.inverseTextColor; + }, + get buttonSuccessBg() { + return this.brandSuccess; + }, + get buttonSuccessColor() { + return this.inverseTextColor; + }, + get buttonDangerBg() { + return this.brandDanger; + }, + get buttonDangerColor() { + return this.inverseTextColor; + }, + get buttonWarningBg() { + return this.brandWarning; + }, + get buttonWarningColor() { + return this.inverseTextColor; + }, + get buttonTextSize() { + return platform === PLATFORM.IOS ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; + }, + get buttonTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get buttonTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: '#fff', + cardBorderColor: '#ccc', + cardBorderRadius: 2, + cardItemPadding: platform === PLATFORM.IOS ? 10 : 12, + + // CheckBox + CheckboxRadius: platform === PLATFORM.IOS ? 13 : 0, + CheckboxBorderWidth: platform === PLATFORM.IOS ? 1 : 2, + CheckboxPaddingLeft: platform === PLATFORM.IOS ? 4 : 2, + CheckboxPaddingBottom: platform === PLATFORM.IOS ? 0 : 5, + CheckboxIconSize: platform === PLATFORM.IOS ? 21 : 16, + CheckboxIconMarginTop: platform === PLATFORM.IOS ? undefined : 1, + CheckboxFontSize: platform === PLATFORM.IOS ? 23 / 0.9 : 17, + checkboxBgColor: '#039BE5', + checkboxSize: 20, + checkboxTickColor: '#fff', + + // Color + brandPrimary: platform === PLATFORM.IOS ? '#007aff' : '#3F51B5', + brandInfo: '#62B1F6', + brandSuccess: '#5cb85c', + brandDanger: '#d9534f', + brandWarning: '#f0ad4e', + brandDark: '#000', + brandLight: '#f4f4f4', + + // Container + containerBgColor: '#fff', + + // Date Picker + datePickerTextColor: '#000', + datePickerBg: 'transparent', + + // FAB + fabWidth: 56, + + // Font + DefaultFontSize: 16, + fontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto', + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: platform === PLATFORM.IOS ? '#737373' : '#bfc6ea', + tabBarTextSize: platform === PLATFORM.IOS ? 14 : 11, + activeTab: platform === PLATFORM.IOS ? '#007aff' : '#fff', + sTabBarActiveTextColor: '#007aff', + tabBarActiveTextColor: platform === PLATFORM.IOS ? '#2874F0' : '#fff', + tabActiveBgColor: platform === PLATFORM.IOS ? '#cde1f9' : '#3F51B5', + + // Header + toolbarBtnColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + toolbarDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + toolbarHeight: platform === PLATFORM.IOS ? 64 : 56, + toolbarSearchIconSize: platform === PLATFORM.IOS ? 20 : 23, + toolbarInputColor: platform === PLATFORM.IOS ? '#CECDD2' : '#fff', + searchBarHeight: platform === PLATFORM.IOS ? 30 : 40, + searchBarInputHeight: platform === PLATFORM.IOS ? 30 : 50, + toolbarBtnTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + iosStatusbar: 'dark-content', + toolbarDefaultBorder: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: 'Ionicons', + iconFontSize: platform === PLATFORM.IOS ? 30 : 28, + iconHeaderSize: platform === PLATFORM.IOS ? 33 : 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: '#D9D5DC', + inputSuccessBorderColor: '#2b8339', + inputErrorBorderColor: '#ed2f2f', + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return '#575757'; + }, + + // Line Height + buttonLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: platform === PLATFORM.IOS ? 20 : 24, + + // List + listBg: 'transparent', + listBorderColor: '#c9c9c9', + listDividerBg: '#f4f4f4', + listBtnUnderlayColor: '#DDD', + listItemPadding: platform === PLATFORM.IOS ? 10 : 12, + listNoteColor: '#808080', + listNoteSize: 13, + listItemSelected: platform === PLATFORM.IOS ? '#007aff' : '#3F51B5', + + // Progress Bar + defaultProgressColor: '#E4202D', + inverseProgressColor: '#1A191B', + + // Radio Button + radioBtnSize: platform === PLATFORM.IOS ? 25 : 23, + radioSelectedColorAndroid: '#3F51B5', + radioBtnLineHeight: platform === PLATFORM.IOS ? 29 : 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + segmentActiveBackgroundColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + segmentTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + segmentActiveTextColor: platform === PLATFORM.IOS ? '#fff' : '#3F51B5', + segmentBorderColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + segmentBorderColorMain: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', + + // Spinner + defaultSpinnerColor: '#45D56E', + inverseSpinnerColor: '#1A191B', + + // Tab + tabDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + topTabBarTextColor: platform === PLATFORM.IOS ? '#6b6b6b' : '#b3c7f9', + topTabBarActiveTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + topTabBarBorderColor: platform === PLATFORM.IOS ? '#a7a6ab' : '#fff', + topTabBarActiveBorderColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + + // Tabs + tabBgColor: '#F8F8F8', + tabFontSize: 15, + + // Text + textColor: '#000', + inverseTextColor: '#fff', + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', + titleFontSize: platform === PLATFORM.IOS ? 17 : 19, + subTitleFontSize: platform === PLATFORM.IOS ? 11 : 14, + subtitleColor: platform === PLATFORM.IOS ? '#000' : '#fff', + titleFontColor: platform === PLATFORM.IOS ? '#000' : '#fff', + + // Other + borderRadiusBase: platform === PLATFORM.IOS ? 5 : 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: '#414142', + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + // iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34, + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21, + }, + }, +}; diff --git a/templates/app/react-native/src/theme/variables/Material.js b/templates/app/react-native/src/theme/variables/Material.js new file mode 100644 index 0000000000..8382482c96 --- /dev/null +++ b/templates/app/react-native/src/theme/variables/Material.js @@ -0,0 +1,299 @@ +import color from 'color'; +import { Platform, Dimensions, PixelRatio } from 'react-native'; + +import { PLATFORM } from './CommonColor'; + +const deviceHeight = Dimensions.get('window').height; +const deviceWidth = Dimensions.get('window').width; +const platform = Platform.OS; +const platformStyle = PLATFORM.MATERIAL; +const isIphoneX = + platform === PLATFORM.IOS && + (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + // Accordion + headerStyle: '#edebed', + iconStyle: '#000', + contentStyle: '#f5f4f5', + expandedIconStyle: '#000', + accordionBorderColor: '#d3d3d3', + + // ActionSheet + elevation: 4, + containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', + innerTouchableBackgroundColor: '#fff', + listItemHeight: 50, + listItemBorderColor: 'transparent', + marginHorizontal: -15, + marginLeft: 14, + marginTop: 15, + minHeight: 56, + padding: 15, + touchableTextColor: '#757575', + + // Android + androidRipple: true, + androidRippleColor: 'rgba(256, 256, 256, 0.3)', + androidRippleColorDark: 'rgba(0, 0, 0, 0.15)', + buttonUppercaseAndroidText: true, + + // Badge + badgeBg: '#ED1727', + badgeColor: '#fff', + badgePadding: 0, + + // Button + buttonFontFamily: 'Roboto', + buttonDisabledBg: '#b5b5b5', + buttonPadding: 6, + get buttonPrimaryBg() { + return this.brandPrimary; + }, + get buttonPrimaryColor() { + return this.inverseTextColor; + }, + get buttonInfoBg() { + return this.brandInfo; + }, + get buttonInfoColor() { + return this.inverseTextColor; + }, + get buttonSuccessBg() { + return this.brandSuccess; + }, + get buttonSuccessColor() { + return this.inverseTextColor; + }, + get buttonDangerBg() { + return this.brandDanger; + }, + get buttonDangerColor() { + return this.inverseTextColor; + }, + get buttonWarningBg() { + return this.brandWarning; + }, + get buttonWarningColor() { + return this.inverseTextColor; + }, + get buttonTextSize() { + return this.fontSizeBase - 1; + }, + get buttonTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get buttonTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: '#fff', + cardBorderColor: '#ccc', + cardBorderRadius: 2, + cardItemPadding: platform === PLATFORM.IOS ? 10 : 12, + + // CheckBox + CheckboxRadius: 0, + CheckboxBorderWidth: 2, + CheckboxPaddingLeft: 2, + CheckboxPaddingBottom: 5, + CheckboxIconSize: 16, + CheckboxIconMarginTop: 1, + CheckboxFontSize: 17, + checkboxBgColor: '#039BE5', + checkboxSize: 20, + checkboxTickColor: '#fff', + + // Color + brandPrimary: '#3F51B5', + brandInfo: '#62B1F6', + brandSuccess: '#5cb85c', + brandDanger: '#d9534f', + brandWarning: '#f0ad4e', + brandDark: '#000', + brandLight: '#f4f4f4', + + // Container + containerBgColor: '#fff', + + // Date Picker + datePickerTextColor: '#000', + datePickerBg: 'transparent', + + // FAB + fabWidth: 56, + + // Font + DefaultFontSize: 16, + fontFamily: 'Roboto', + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: '#3F51B5', + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: '#bfc6ea', + tabBarTextSize: 11, + activeTab: '#fff', + sTabBarActiveTextColor: '#007aff', + tabBarActiveTextColor: '#fff', + tabActiveBgColor: '#3F51B5', + + // Header + toolbarBtnColor: '#fff', + toolbarDefaultBg: '#3F51B5', + toolbarHeight: 56, + toolbarSearchIconSize: 23, + toolbarInputColor: '#fff', + searchBarHeight: platform === PLATFORM.IOS ? 30 : 40, + searchBarInputHeight: platform === PLATFORM.IOS ? 40 : 50, + toolbarBtnTextColor: '#fff', + toolbarDefaultBorder: '#3F51B5', + iosStatusbar: 'light-content', + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: 'Ionicons', + iconFontSize: 28, + iconHeaderSize: 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: '#D9D5DC', + inputSuccessBorderColor: '#2b8339', + inputErrorBorderColor: '#ed2f2f', + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return '#575757'; + }, + + // Line Height + buttonLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: 24, + + // List + listBg: 'transparent', + listBorderColor: '#c9c9c9', + listDividerBg: '#f4f4f4', + listBtnUnderlayColor: '#DDD', + listItemPadding: 12, + listNoteColor: '#808080', + listNoteSize: 13, + listItemSelected: '#3F51B5', + + // Progress Bar + defaultProgressColor: '#E4202D', + inverseProgressColor: '#1A191B', + + // Radio Button + radioBtnSize: 23, + radioSelectedColorAndroid: '#3F51B5', + radioBtnLineHeight: 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: '#3F51B5', + segmentActiveBackgroundColor: '#fff', + segmentTextColor: '#fff', + segmentActiveTextColor: '#3F51B5', + segmentBorderColor: '#fff', + segmentBorderColorMain: '#3F51B5', + + // Spinner + defaultSpinnerColor: '#45D56E', + inverseSpinnerColor: '#1A191B', + + // Tab + tabDefaultBg: '#3F51B5', + topTabBarTextColor: '#b3c7f9', + topTabBarActiveTextColor: '#fff', + topTabBarBorderColor: '#fff', + topTabBarActiveBorderColor: '#fff', + + // Tabs + tabBgColor: '#F8F8F8', + tabFontSize: 15, + + // Text + textColor: '#000', + inverseTextColor: '#fff', + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: 'Roboto', + titleFontSize: 19, + subTitleFontSize: 14, + subtitleColor: '#FFF', + titleFontColor: '#FFF', + + // Other + borderRadiusBase: 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: '#414142', + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + // iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34, + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21, + }, + }, +}; diff --git a/templates/app/react-native/src/theme/variables/Platform.js b/templates/app/react-native/src/theme/variables/Platform.js new file mode 100644 index 0000000000..db8fccab92 --- /dev/null +++ b/templates/app/react-native/src/theme/variables/Platform.js @@ -0,0 +1,333 @@ +// @flow + +import color from 'color'; +import { Platform, Dimensions, PixelRatio } from 'react-native'; + +import { PLATFORM } from './CommonColor'; + +const deviceHeight = Dimensions.get('window').height; +const deviceWidth = Dimensions.get('window').width; +const platform = Platform.OS; +const platformStyle = undefined; +const isIphoneX = + platform === PLATFORM.IOS && + (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + // Accordion + accordionBorderColor: '#d3d3d3', + accordionContentPadding: 10, + accordionIconFontSize: 18, + contentStyle: '#f5f4f5', + expandedIconStyle: '#000', + headerStyle: '#edebed', + iconStyle: '#000', + + // ActionSheet + elevation: 4, + containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', + innerTouchableBackgroundColor: '#fff', + listItemHeight: 50, + listItemBorderColor: 'transparent', + marginHorizontal: -15, + marginLeft: 14, + marginTop: 15, + minHeight: 56, + padding: 15, + touchableTextColor: '#757575', + + // Android + androidRipple: true, + androidRippleColor: 'rgba(256, 256, 256, 0.3)', + androidRippleColorDark: 'rgba(0, 0, 0, 0.15)', + buttonUppercaseAndroidText: true, + + // Badge + badgeBg: '#ED1727', + badgeColor: '#fff', + badgePadding: platform === PLATFORM.IOS ? 3 : 0, + + // Button + buttonFontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', + buttonDisabledBg: '#b5b5b5', + buttonPadding: 6, + buttonDefaultActiveOpacity: 0.5, + buttonDefaultFlex: 1, + buttonDefaultBorderRadius: 2, + buttonDefaultBorderWidth: 1, + get buttonPrimaryBg() { + return this.brandPrimary; + }, + get buttonPrimaryColor() { + return this.inverseTextColor; + }, + get buttonInfoBg() { + return this.brandInfo; + }, + get buttonInfoColor() { + return this.inverseTextColor; + }, + get buttonSuccessBg() { + return this.brandSuccess; + }, + get buttonSuccessColor() { + return this.inverseTextColor; + }, + get buttonDangerBg() { + return this.brandDanger; + }, + get buttonDangerColor() { + return this.inverseTextColor; + }, + get buttonWarningBg() { + return this.brandWarning; + }, + get buttonWarningColor() { + return this.inverseTextColor; + }, + get buttonTextSize() { + return platform === PLATFORM.IOS ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; + }, + get buttonTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get buttonTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: '#fff', + cardBorderColor: '#ccc', + cardBorderRadius: 2, + cardItemPadding: platform === PLATFORM.IOS ? 10 : 12, + + // CheckBox + CheckboxRadius: platform === PLATFORM.IOS ? 13 : 0, + CheckboxBorderWidth: platform === PLATFORM.IOS ? 1 : 2, + CheckboxPaddingLeft: platform === PLATFORM.IOS ? 4 : 2, + CheckboxPaddingBottom: platform === PLATFORM.IOS ? 0 : 5, + CheckboxIconSize: platform === PLATFORM.IOS ? 21 : 16, + CheckboxIconMarginTop: platform === PLATFORM.IOS ? undefined : 1, + CheckboxFontSize: platform === PLATFORM.IOS ? 23 / 0.9 : 17, + get checkboxBgColor() { + return this.brandPrimary; + }, + checkboxSize: 20, + checkboxTickColor: '#fff', + checkboxDefaultColor: 'transparent', + checkboxTextShadowRadius: 0, + + // Color + brandPrimary: '#38003c', + brandInfo: '#54B9F1', + brandSuccess: '#42B87F', + brandDanger: '#A83232', + brandWarning: '#FFC42E', + brandDark: '#2A2A2A', + brandLight: '#E8E8E8', + + // Container + containerBgColor: '#fff', + + // Date Picker + datePickerFlex: 1, + datePickerPadding: 10, + datePickerTextColor: '#000', + datePickerBg: 'transparent', + + // FAB + fabBackgroundColor: 'blue', + fabBorderRadius: 28, + fabBottom: 0, + fabButtonBorderRadius: 20, + fabButtonHeight: 40, + fabButtonLeft: 7, + fabButtonMarginBottom: 10, + fabContainerBottom: 20, + fabDefaultPosition: 20, + fabElevation: 4, + fabIconColor: '#fff', + fabIconSize: 24, + fabShadowColor: '#000', + fabShadowOffsetHeight: 2, + fabShadowOffsetWidth: 0, + fabShadowOpacity: 0.4, + fabShadowRadius: 2, + fabWidth: 56, + + // Font + DefaultFontSize: 16, + fontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto', + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: platform === PLATFORM.IOS ? '#6b6b6b' : '#b3c7f9', + tabBarTextSize: platform === PLATFORM.IOS ? 14 : 11, + activeTab: platform === PLATFORM.IOS ? '#007aff' : '#fff', + sTabBarActiveTextColor: '#007aff', + tabBarActiveTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + tabActiveBgColor: platform === PLATFORM.IOS ? '#cde1f9' : '#3F51B5', + + // Header + toolbarBtnColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + toolbarDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + toolbarHeight: platform === PLATFORM.IOS ? 64 : 56, + toolbarSearchIconSize: platform === PLATFORM.IOS ? 20 : 23, + toolbarInputColor: platform === PLATFORM.IOS ? '#CECDD2' : '#fff', + searchBarHeight: platform === PLATFORM.IOS ? 30 : 40, + searchBarInputHeight: platform === PLATFORM.IOS ? 30 : 50, + toolbarBtnTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + toolbarDefaultBorder: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', + iosStatusbar: 'light-content', + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: 'Ionicons', + iconFontSize: platform === PLATFORM.IOS ? 30 : 28, + iconHeaderSize: platform === PLATFORM.IOS ? 33 : 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: '#D9D5DC', + inputSuccessBorderColor: '#2b8339', + inputErrorBorderColor: '#ed2f2f', + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return '#575757'; + }, + + // Line Height + buttonLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: platform === PLATFORM.IOS ? 20 : 24, + listItemSelected: platform === PLATFORM.IOS ? '#007aff' : '#3F51B5', + + // List + listBg: 'transparent', + listBorderColor: '#c9c9c9', + listDividerBg: '#f4f4f4', + listBtnUnderlayColor: '#DDD', + listItemPadding: platform === PLATFORM.IOS ? 10 : 12, + listNoteColor: '#808080', + listNoteSize: 13, + + // Progress Bar + defaultProgressColor: '#E4202D', + inverseProgressColor: '#1A191B', + + // Radio Button + radioBtnSize: platform === PLATFORM.IOS ? 25 : 23, + radioSelectedColorAndroid: '#3F51B5', + radioBtnLineHeight: platform === PLATFORM.IOS ? 29 : 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: '#f8f8f8', + segmentActiveBackgroundColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + segmentTextColor: '#333', + segmentActiveTextColor: '#fff', + get segmentBorderColor() { + return this.brandPrimary; + }, + segmentBorderColorMain: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', + + // Spinner + defaultSpinnerColor: '#45D56E', + inverseSpinnerColor: '#1A191B', + + // Tab + tabBarDisabledTextColor: '#BDBDBD', + tabDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', + topTabBarTextColor: platform === PLATFORM.IOS ? '#6b6b6b' : '#b3c7f9', + topTabBarActiveTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + topTabBarBorderColor: platform === PLATFORM.IOS ? '#a7a6ab' : '#fff', + topTabBarActiveBorderColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', + + // Tabs + tabBgColor: '#F8F8F8', + tabFontSize: 15, + + // Text + textColor: '#000', + inverseTextColor: '#fff', + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', + titleFontSize: platform === PLATFORM.IOS ? 17 : 19, + subTitleFontSize: platform === PLATFORM.IOS ? 11 : 14, + subtitleColor: platform === PLATFORM.IOS ? '#8e8e93' : '#FFF', + titleFontColor: platform === PLATFORM.IOS ? '#000' : '#FFF', + + // Other + borderRadiusBase: platform === PLATFORM.IOS ? 5 : 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: '#414142', + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + // iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34, + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21, + }, + }, +}; diff --git a/templates/app/react-native/src/theme/variables/index.js b/templates/app/react-native/src/theme/variables/index.js new file mode 100644 index 0000000000..d200bbdb83 --- /dev/null +++ b/templates/app/react-native/src/theme/variables/index.js @@ -0,0 +1,10 @@ +import platform from './Platform'; + +export const customVariables = { + zIndex: { + overlay: 50, + loaders: 150, + }, +}; + +export const activeTheme = { ...platform, ...customVariables }; diff --git a/templates/app/react-native/src/utils/DateExtensions.js b/templates/app/react-native/src/utils/DateExtensions.js new file mode 100644 index 0000000000..890a6fdfc5 --- /dev/null +++ b/templates/app/react-native/src/utils/DateExtensions.js @@ -0,0 +1,5 @@ +export function toLocalISOString(date) { + const timezoneOffset = date.getTimezoneOffset(); + + return new Date(date.getTime() - timezoneOffset * 60000).toISOString(); +} diff --git a/templates/app/react-native/src/utils/Debounce.js b/templates/app/react-native/src/utils/Debounce.js new file mode 100644 index 0000000000..34588c63d4 --- /dev/null +++ b/templates/app/react-native/src/utils/Debounce.js @@ -0,0 +1,14 @@ +export function debounce(func, wait, immediate) { + let timeout; + return (...args) => { + const context = this; + const later = () => { + timeout = null; + if (!immediate) func.apply(context, args); + }; + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; +} diff --git a/templates/app/react-native/src/utils/RandomColor.js b/templates/app/react-native/src/utils/RandomColor.js new file mode 100644 index 0000000000..a925d77763 --- /dev/null +++ b/templates/app/react-native/src/utils/RandomColor.js @@ -0,0 +1,12 @@ +export function getRandomColors(count) { + const colors = []; + + for (let i = 0; i < count; i++) { + const r = ((i + 5) * (i + 5) * 474) % 255; + const g = ((i + 5) * (i + 5) * 1600) % 255; + const b = ((i + 5) * (i + 5) * 84065) % 255; + colors.push(`rgba(${r}, ${g}, ${b})`); + } + + return colors; +} diff --git a/templates/app/react-native/src/utils/ReduxConnect.js b/templates/app/react-native/src/utils/ReduxConnect.js new file mode 100644 index 0000000000..be68b186af --- /dev/null +++ b/templates/app/react-native/src/utils/ReduxConnect.js @@ -0,0 +1,9 @@ +import { connect } from 'react-redux'; + +export function connectToRedux({ component, stateProps = () => ({}), dispatchProps = () => ({}) }) { + const mapStateToProps = () => stateProps; + + const mapDispatchToProps = dispatchProps; + + return connect(mapStateToProps, mapDispatchToProps)(component); +} diff --git a/templates/app/react-native/src/utils/TokenUtils.js b/templates/app/react-native/src/utils/TokenUtils.js new file mode 100644 index 0000000000..ab1925061b --- /dev/null +++ b/templates/app/react-native/src/utils/TokenUtils.js @@ -0,0 +1,7 @@ +export function isTokenValid(token) { + if (!token || typeof token !== 'object' || !token.expire_time) return false; + + const now = new Date().valueOf(); + + return now < token.expire_time; +} diff --git a/templates/app/react-native/yarn.lock b/templates/app/react-native/yarn.lock new file mode 100644 index 0000000000..fb96d4e051 --- /dev/null +++ b/templates/app/react-native/yarn.lock @@ -0,0 +1,6890 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/compat-data@^7.8.4": + version "7.8.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" + integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== + dependencies: + browserslist "^4.8.5" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.0.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" + integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.4" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0", "@babel/generator@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" + integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== + dependencies: + "@babel/types" "^7.8.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-builder-react-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" + integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== + dependencies: + "@babel/types" "^7.8.3" + esutils "^2.0.0" + +"@babel/helper-call-delegate@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" + integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-compilation-targets@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" + integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== + dependencies: + "@babel/compat-data" "^7.8.4" + browserslist "^4.8.5" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" + integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + +"@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" + integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + dependencies: + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== + dependencies: + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" + integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" + integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" + integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== + +"@babel/plugin-external-helpers@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz#5a94164d9af393b2820a3cdc407e28ebf237de4b" + integrity sha512-mx0WXDDiIl5DwzMtzWGRSPugXi9BxROS05GQrhLNbEamhBiicgn994ibwkyiBH+6png7bm/yA7AUsvHyCXi4Vw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-proposal-decorators@^7.6.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" + integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-decorators" "^7.8.3" + +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" + integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-export-default-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" + integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" + integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" + integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" + integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-decorators@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" + integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" + integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0", "@babel/plugin-syntax-flow@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" + integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" + integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" + integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" + integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" + integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz#da705a655466b2a9b36046b57bf0cbcd53551bd4" + integrity sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" + integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-modules-amd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" + integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" + integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" + integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" + integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-object-assign@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.8.3.tgz#dc3b8dd50ef03837868a37b7df791f64f288538e" + integrity sha512-i3LuN8tPDqUCRFu3dkzF2r1Nx0jp4scxtm7JxtIqI9he9Vk20YD+/zshdzR9JLsoBMlJlNR82a62vQExNEVx/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" + integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== + dependencies: + "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" + integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0" + integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" + integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== + dependencies: + "@babel/helper-builder-react-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" + integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-runtime@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" + integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typescript@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" + integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-typescript" "^7.8.3" + +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/preset-env@^7.6.3": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" + integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== + dependencies: + "@babel/compat-data" "^7.8.4" + "@babel/helper-compilation-targets" "^7.8.4" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.8.4" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.8.3" + "@babel/plugin-transform-modules-commonjs" "^7.8.3" + "@babel/plugin-transform-modules-systemjs" "^7.8.3" + "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.4" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/types" "^7.8.3" + browserslist "^4.8.5" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/register@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.3.tgz#5d5d30cfcc918437535d724b8ac1e4a60c5db1f8" + integrity sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg== + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" + integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@^7.0.0", "@babel/template@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" + integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.4" + "@babel/types" "^7.8.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@egjs/hammerjs@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124" + integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A== + dependencies: + "@types/hammerjs" "^2.0.36" + +"@expo/vector-icons@^10.0.2", "@expo/vector-icons@^10.0.6": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-10.0.6.tgz#5718953ff0b97827d11dae5787976fa8ce5caaed" + integrity sha512-qNlKPNdf073LpeEpyClxAh0D3mmIK4TGAQzeKR0HVwf14RIEe17+mLW5Z6Ka5Ho/lUtKMRPDHumSllFyKvpeGg== + dependencies: + lodash "^4.17.4" + +"@expo/websql@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@expo/websql/-/websql-1.0.1.tgz#fff0cf9c1baa1f70f9e1d658b7c39a420d9b10a9" + integrity sha1-//DPnBuqH3D54dZYt8OaQg2bEKk= + dependencies: + argsarray "^0.0.1" + immediate "^3.2.2" + noop-fn "^1.0.0" + pouchdb-collections "^1.0.1" + tiny-queue "^0.2.1" + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.0.3": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@jest/types@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395" + integrity sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@react-native-community/cli-debugger-ui@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz#d01d08d1e5ddc1633d82c7d84d48fff07bd39416" + integrity sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g== + dependencies: + serve-static "^1.13.1" + +"@react-native-community/cli-platform-android@^3.0.0-alpha.1": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-3.1.4.tgz#61f964dc311623e60b0fb29c5f3732cc8a6f076f" + integrity sha512-ClSdY20F0gzWVLTqCv7vHjnUqOcuq10jd9GgHX6lGSc2GI+Ql3/aQg3tmG4uY3KXNNwAv3U8QCoYgg1WGfwiHA== + dependencies: + "@react-native-community/cli-tools" "^3.0.0" + chalk "^2.4.2" + execa "^1.0.0" + jetifier "^1.6.2" + logkitty "^0.6.0" + slash "^3.0.0" + xmldoc "^1.1.2" + +"@react-native-community/cli-platform-ios@^3.0.0-alpha.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.2.0.tgz#c469444f5993c9e6737a4b16d78cf033e3702f00" + integrity sha512-pzEnx68H6+mHBq5jsMrr3UmAmkrLSMlC9BZ4yoUdfUXCQq6/R70zNYvH4hjUw8h2Al7Kgq53UzHUsM0ph8TSWQ== + dependencies: + "@react-native-community/cli-tools" "^3.0.0" + chalk "^2.4.2" + js-yaml "^3.13.1" + xcode "^2.0.0" + +"@react-native-community/cli-tools@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-3.0.0.tgz#fe48b80822ed7e49b8af051f9fe41e22a2a710b1" + integrity sha512-8IhQKZdf3E4CR8T7HhkPGgorot/cLkRDgneJFDSWk/wCYZAuUh4NEAdumQV7N0jLSMWX7xxiWUPi94lOBxVY9g== + dependencies: + chalk "^2.4.2" + lodash "^4.17.5" + mime "^2.4.1" + node-fetch "^2.5.0" + +"@react-native-community/cli-types@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-3.0.0.tgz#488d46605cb05e88537e030f38da236eeda74652" + integrity sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg== + +"@react-native-community/cli@^3.0.0-alpha.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.2.0.tgz#f4b04b94bf96810c4a7f57379a69ebd11fd9c933" + integrity sha512-k8GmNQH/EbIIVd4VlVbFP99IRNhovWV6hhnJ3y2+FfZq18H/U6yV/t1bpI3A3QqPuAyWxk/1jBdXvP6BY/7kbw== + dependencies: + "@hapi/joi" "^15.0.3" + "@react-native-community/cli-debugger-ui" "^3.0.0" + "@react-native-community/cli-tools" "^3.0.0" + "@react-native-community/cli-types" "^3.0.0" + chalk "^2.4.2" + command-exists "^1.2.8" + commander "^2.19.0" + compression "^1.7.1" + connect "^3.6.5" + cosmiconfig "^5.1.0" + deepmerge "^3.2.0" + didyoumean "^1.2.1" + envinfo "^7.1.0" + errorhandler "^1.5.0" + execa "^1.0.0" + find-up "^4.1.0" + fs-extra "^7.0.1" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + lodash "^4.17.5" + metro "^0.56.0" + metro-config "^0.56.0" + metro-core "^0.56.0" + metro-react-native-babel-transformer "^0.56.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + morgan "^1.9.0" + node-notifier "^5.2.1" + open "^6.2.0" + ora "^3.4.0" + plist "^3.0.0" + pretty-format "^25.1.0" + semver "^6.3.0" + serve-static "^1.13.1" + shell-quote "1.6.1" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" + ws "^1.1.0" + +"@react-native-community/masked-view@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.5.tgz#25421be6cd943a4b1660b62cfbcd45be8891462c" + integrity sha512-Lj1DzfCmW0f4HnmHtEuX8Yy2f7cnUA8r5KGGUuDDGtQt1so6QJkKeUmsnLo2zYDtsF8due6hvIL06Vdo5xxuLQ== + +"@react-navigation/core@^5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-5.1.6.tgz#cefaad9618e17ff743d9a26aeee4da53c4a96b92" + integrity sha512-YsYICOZ+a1HmvfSULtR9BTRYJVB0vO9ZCFlSI5OZTcqlMH1oyV4Zt7Dxk6slPg0qa9n0agJB6L0ZWI2+gjmO0w== + dependencies: + "@react-navigation/routers" "^5.0.2" + escape-string-regexp "^2.0.0" + query-string "^6.10.1" + react-is "^16.12.0" + shortid "^2.2.15" + use-subscription "^1.3.0" + +"@react-navigation/drawer@^5.0.3": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@react-navigation/drawer/-/drawer-5.0.7.tgz#677a7ab3b1f022ba7ad962c7e05259dc51335096" + integrity sha512-1BwYqGoiveH2k3KIwfCE0w8pCU/jhwgUNPIAwPM/f/TpgNjz2h13YAu0G77gwDgH5lz+oeRwiz3TFDZ6AJr+Dg== + dependencies: + color "^3.1.2" + react-native-iphone-x-helper "^1.2.1" + +"@react-navigation/native@^5.0.3": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-5.0.7.tgz#621c4820ab751d09b13e39619439bd775a26f606" + integrity sha512-WDqhjyGSFsoMHD2436lvL6Z9Lmn3vJhY3Ltm8T2PNNtnR/3/Z7mNAKU373zritAUVSk0lJppAQluJYITtbdXcQ== + dependencies: + "@react-navigation/core" "^5.1.6" + +"@react-navigation/routers@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-5.0.2.tgz#c528a5c1f5f697fbb7ed7a8c8df87db4f4308b79" + integrity sha512-vHzXuhS9bkr/GnBkFVVmduHDTXRQAxKDBU77BRqL7Qg0D6gVlIHZTa68HsuoOoz1UH07ZaxYo1br0btXM322SQ== + dependencies: + shortid "^2.2.15" + +"@react-navigation/stack@^5.0.3": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-5.0.9.tgz#f6b0a17bf3658d406c4f8b594924c2b79b8b930d" + integrity sha512-6cgOCvvX4N35d2y+NX36qN25w8bjsJXVoo213cXB23X6SVRSRqbAPOWE98rsHyX6REYPyJx200k7U09xiwCImg== + dependencies: + color "^3.1.2" + react-native-iphone-x-helper "^1.2.1" + +"@redux-saga/core@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" + integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== + dependencies: + "@babel/runtime" "^7.6.3" + "@redux-saga/deferred" "^1.1.2" + "@redux-saga/delay-p" "^1.1.2" + "@redux-saga/is" "^1.1.2" + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + redux "^4.0.4" + typescript-tuple "^2.2.1" + +"@redux-saga/deferred@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" + integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== + +"@redux-saga/delay-p@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" + integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== + dependencies: + "@redux-saga/symbols" "^1.1.2" + +"@redux-saga/is@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" + integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== + dependencies: + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + +"@redux-saga/symbols@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" + integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== + +"@redux-saga/types@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" + integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== + +"@reduxjs/toolkit@^1.2.3": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.2.5.tgz#149aa62da12a18a67a30495cb63fd897003f2272" + integrity sha512-/OWoW5mniUXAomw4+3ZhhWodcs1/SRvK2HKyxLXdW6vKgmJhiBiSHe/huHARlKWujEmGaJrkafx548GE494bCQ== + dependencies: + immer "^4.0.1" + redux "^4.0.0" + redux-devtools-extension "^2.13.8" + redux-immutable-state-invariant "^2.1.0" + redux-thunk "^2.3.0" + reselect "^4.0.0" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/fbemitter@^2.0.32": + version "2.0.32" + resolved "https://registry.yarnpkg.com/@types/fbemitter/-/fbemitter-2.0.32.tgz#8ed204da0f54e9c8eaec31b1eec91e25132d082c" + integrity sha1-jtIE2g9U6cjq7DGx7skeJRMtCCw= + +"@types/hammerjs@^2.0.36": + version "2.0.36" + resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.36.tgz#17ce0a235e9ffbcdcdf5095646b374c2bf615a4c" + integrity sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ== + +"@types/hoist-non-react-statics@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/i18n-js@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/i18n-js/-/i18n-js-3.0.1.tgz#e027d35513b2703e5d48b82771e7fcb3b664e2fb" + integrity sha512-m7tWPh9zKpQoYenIpkmeREb2oMaZiZB8qfGv+2ucDg1LgFnETAxYIXkT8dASGyVRWZyEhNEPlfODP4+QfXI3KQ== + +"@types/invariant@^2.2.29": + version "2.2.31" + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.31.tgz#4444c03004f215289dbca3856538434317dd28b2" + integrity sha512-jMlgg9pIURvy9jgBHCjQp/CyBjYHUwj91etVcDdXkFl2CwTFiQlB+8tcsMeXpXf2PFE5X2pjk4Gm43hQSMHAdA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/lodash.zipobject@^4.1.4": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/lodash.zipobject/-/lodash.zipobject-4.1.6.tgz#75e140f44ac7d7682a18d3aae8ee4594fad094d7" + integrity sha512-30khEHqHWaLgMZR35wtkg07OmHiNiDQyor0SK7oj8Sy05tg6jDjPmJybeZ64WKeFZUEgs1tdJwdT0xUl+2qUgQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/qs@^6.5.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.1.tgz#937fab3194766256ee09fcd40b781740758617e7" + integrity sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw== + +"@types/react-native@~0.60.23": + version "0.60.31" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.31.tgz#a7af12197f884ad8dd22cda2df9862ed72973ded" + integrity sha512-Y0Q+nv50KHnLL+jM0UH68gQQv7Wt6v2KuNepiHKwK1DoWGVd1oYun/GJCnvUje+/V8pMQQWW6QuBvHZz1pV7tQ== + dependencies: + "@types/prop-types" "*" + "@types/react" "*" + +"@types/react-redux@^7.1.7": + version "7.1.7" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.7.tgz#12a0c529aba660696947384a059c5c6e08185c7a" + integrity sha512-U+WrzeFfI83+evZE2dkZ/oF/1vjIYgqrb5dGgedkqVV8HEfDFujNgWCwHL89TDuWKb47U0nTBT6PLGq4IIogWg== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react@*", "@types/react@~16.9.0": + version "16.9.22" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.22.tgz#f0288c92d94e93c4b43e3f5633edf788b2c040ae" + integrity sha512-7OSt4EGiLvy0h5R7X+r0c7S739TCU/LvWbkNOrm10lUwNHe7XPz5OLhLOSZeCkqO9JSCly1NkYJ7ODTUqVnHJQ== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/uuid-js@^0.7.1": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@types/uuid-js/-/uuid-js-0.7.2.tgz#5b5552fcbaaf4acf026fb6dc66f7e5bd6b4be92f" + integrity sha512-9R+mA6mMXkFVQnXEeX5fMQDR2SYND7cafJTqbeMpLhgsL7qr7MF4ZBxWpLexml3lZsBsyAmqVWbOiB0N10m15w== + +"@types/websql@^0.0.27": + version "0.0.27" + resolved "https://registry.yarnpkg.com/@types/websql/-/websql-0.0.27.tgz#621a666a7f02018e7cbb4abab956a25736c27d71" + integrity sha1-Yhpman8CAY58u0q6uVaiVzbCfXE= + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^13.0.0": + version "13.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" + integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^15.0.0": + version "15.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.3.tgz#41453a0bc7ab393e995d1f5451455638edbd2baf" + integrity sha512-XCMQRK6kfpNBixHLyHUsGmXrpEmFFxzMrcnSXFMziHd8CoNJo8l16FkHyQq4x+xbM7E2XL83/O78OD8u+iZTdQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yup@^0.26.29": + version "0.26.32" + resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.26.32.tgz#bd356fb405f3d641eff963854edf7ad854a8e829" + integrity sha512-55WFAq8lNYXdRzSP1cenMFFXtPRe7PWsqn5y9ibqKHOQZ/cSLErkcnB1LE89M7W2TSXVDFtx+T7eFePkGoB+xw== + +"@unimodules/core@~5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-5.0.0.tgz#e1e3ca3f91f3d27dbc93c6eebc03a40c711da755" + integrity sha512-PswccfzFIviX61Lm8h6/QyC94bWe+6cARwhzgzTCKa6aR6azmi4732ExhX4VxfQjJNHB0szYVXGXVEDsFkj+tQ== + dependencies: + compare-versions "^3.4.0" + +"@unimodules/react-native-adapter@~5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-5.0.0.tgz#af9835821a2bf38390b9f09f3231c0b7546ee510" + integrity sha512-qb5p5wUQoi3TRa/33aLLHSnS7sewV99oBxIo9gnzNI3VFzbOm3rsbTjOJNcR2hx0raUolTtnQT75VbgagVQx4w== + dependencies: + invariant "^2.2.4" + lodash "^4.5.0" + prop-types "^15.6.1" + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +absolute-path@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= + +accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== + +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + +ajv@^6.10.0, ajv@^6.10.2: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + +ansi-cyan@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= + dependencies: + ansi-wrap "0.1.0" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + dependencies: + type-fest "^0.8.1" + +ansi-fragments@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" + integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== + dependencies: + colorette "^1.0.7" + slice-ansi "^2.0.0" + strip-ansi "^5.0.0" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + +ansi-red@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argsarray@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" + integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs= + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arr-diff@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" + integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= + dependencies: + arr-flatten "^1.0.1" + array-slice "^0.2.3" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" + integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + +array-find-index@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-includes@^3.0.3, array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +art@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2" + integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.4.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +axobject-query@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799" + integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ== + +babel-eslint@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" + integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-module-resolver@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" + integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== + dependencies: + find-babel-config "^1.1.0" + glob "^7.1.2" + pkg-up "^2.0.0" + reselect "^3.0.1" + resolve "^1.4.0" + +babel-plugin-react-native-web@^0.11.7: + version "0.11.7" + resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.11.7.tgz#15b578c0731bd7d65d334f9c759d95e8e4a602e2" + integrity sha512-CxE7uhhqkzAFkwV2X7+Mc/UVPujQQDtja/EGxCXRJvdYRi72QTmaJYKbK1lV9qgTZuB+TDguU89coaA9Z1BNbg== + +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== + +babel-preset-expo@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-8.0.0.tgz#08c042363189f2d871381f0d0dbf9644e9f67aea" + integrity sha512-40UCIE4E+9Xx5K+oEidFHML2+j/WE/ikcC7+3ndWx74MtdmRAtnGecboKRiGUK/vMrHzXIcWPP6/SOnE7zQVgQ== + dependencies: + "@babel/plugin-proposal-decorators" "^7.6.0" + "@babel/preset-env" "^7.6.3" + babel-plugin-module-resolver "^3.2.0" + babel-plugin-react-native-web "^0.11.7" + metro-react-native-babel-preset "^0.56.0" + +babel-preset-fbjs@^3.1.2, babel-preset-fbjs@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" + integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.1.2, base64-js@^1.2.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +basic-auth@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +big-integer@^1.6.44: + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +blueimp-md5@^2.10.0, blueimp-md5@^2.5.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.12.0.tgz#be7367938a889dec3ffbb71138617c117e9c130a" + integrity sha512-zo+HIdIhzojv6F1siQPqPFROyVy7C50KzHv/k/Iz+BtvtVzSHXiMXOpq2wCfNkeBqdCv+V8XOV96tsEt2W/3rQ== + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bplist-creator@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" + integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== + dependencies: + stream-buffers "~2.2.0" + +bplist-parser@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browserslist@^4.8.3, browserslist@^4.8.5: + version "4.8.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" + integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== + dependencies: + caniuse-lite "^1.0.30001027" + electron-to-chromium "^1.3.349" + node-releases "^1.1.49" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001027: + version "1.0.30001030" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz#78076c4c6d67d3e41d6eb9399853fb27fe6e44ee" + integrity sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +chalk@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.1.tgz#509afb67066e7499f7eb3535c77445772ae2d019" + integrity sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk= + dependencies: + ansi-styles "^2.1.0" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +clamp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" + integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ= + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^3.1.2, color@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" + integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== + +command-exists@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" + integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw== + +commander@^2.11.0, commander@^2.19.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-versions@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" + integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== + +connect@^3.6.5: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + dependencies: + browserslist "^4.8.3" + semver "7.0.0" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.2.2, core-js@^2.4.1: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-react-class@^15.6.2, create-react-class@^15.6.3: + version "15.6.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +css-in-js-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== + dependencies: + hyphenate-style-name "^1.0.2" + isobject "^3.0.1" + +css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@^1.0.0-alpha.37: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + +csstype@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" + integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== + +damerau-levenshtein@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + +dayjs@^1.8.15: + version "1.8.20" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.20.tgz#724a5cb6ad1f6fc066b0bd9a800dedcc7886f19e" + integrity sha512-mH0MCDxw6UCGJYxVN78h8ugWycZAO8thkj3bW6vApL5tS0hQplIDdAQcmbvl7n35H0AKdCJQaArTrIQw2xt4Qg== + +debounce@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^4.0.1, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-3.0.0.tgz#c8e4c4d401cba25550a2f0f486a2e75bc5f219a2" + integrity sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw== + dependencies: + is-obj "^1.0.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +deepmerge@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" + integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +didyoumean@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" + integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.349: + version "1.3.360" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.360.tgz#1db9cb8d43f4c772546d94ea9be8b677a8ecb483" + integrity sha512-RE1pv2sjQiDRRN1nI0fJ0eQHZ9le4oobu16OArnwEUV5ycAU5SNjFyvzjZ1gPUAqBa2Ud1XagtW8j3ZXfHuQHA== + +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + +envinfo@^7.1.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" + integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +errorhandler@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" + integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== + dependencies: + accepts "~1.3.7" + escape-html "~1.0.3" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +eslint-config-airbnb-base@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz#8a7bcb9643d13c55df4dd7444f138bf4efa61e17" + integrity sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA== + dependencies: + confusing-browser-globals "^1.0.7" + object.assign "^4.1.0" + object.entries "^1.1.0" + +eslint-config-airbnb@^18.0.1: + version "18.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.0.1.tgz#a3a74cc29b46413b6096965025381df8fb908559" + integrity sha512-hLb/ccvW4grVhvd6CT83bECacc+s4Z3/AEyWQdIT2KeTsG9dR7nx1gs7Iw4tDmGKozCNHFn4yZmRm3Tgy+XxyQ== + dependencies: + eslint-config-airbnb-base "^14.0.0" + object.assign "^4.1.0" + object.entries "^1.1.0" + +eslint-config-prettier@^6.0.0, eslint-config-prettier@^6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz#7b15e303bf9c956875c948f6b21500e48ded6a7f" + integrity sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg== + dependencies: + get-stdin "^6.0.0" + +eslint-import-resolver-node@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" + integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.20.1: + version "2.20.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" + integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-jsx-a11y@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" + integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== + dependencies: + "@babel/runtime" "^7.4.5" + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.2.1" + +eslint-plugin-react@^7.18.3: + version "7.18.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz#8be671b7f6be095098e79d27ac32f9580f599bc8" + integrity sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg== + dependencies: + array-includes "^3.1.1" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.14.2" + string.prototype.matchall "^4.0.2" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + dependencies: + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" + integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-target-shim@^5.0.0, event-target-shim@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + 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" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.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" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expo-app-loader-provider@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-app-loader-provider/-/expo-app-loader-provider-8.0.0.tgz#c18ef20a24153f5a0dbb297106ef0bcb5de57180" + integrity sha512-uMEdstZdm14JW8jfWXBWItIjGPNBH7cLj2pNu5e0pYF21W4j759rGL17NTNWit4UdLZg/zJB/HHRidVwEINfxA== + +expo-asset@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.0.0.tgz#400c7cf8693711ddc87da02d20a7d47bd517afeb" + integrity sha512-ICPptpetXB+v88Sqr8yMVEA46UNlUUb8AMbyUytdUJqV7V2itHDQywl08ofOlOICzNgjDFIQdCs3crkTVQ1Zng== + dependencies: + blueimp-md5 "^2.10.0" + path-browserify "^1.0.0" + url-parse "^1.4.4" + +expo-constants@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-8.0.0.tgz#e2c5a072dacb4263ccfc57dcb4835ca791960d48" + integrity sha512-NGRwSWfhwNFA9WVLXwqnSDPJJ4DdXTqEkl9Fr9PcyW5VCoFgz7uke256E1YZsYhOE0Ph365lu/5jjZs+MRmRog== + dependencies: + ua-parser-js "^0.7.19" + +expo-error-recovery@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-1.0.0.tgz#2ca9d59fcd16c5c881af877993731056f2d46afe" + integrity sha512-xnxciNEpGmwxx8BAE2A9fd9HxtzWtz8p9mikKU+EfWgOXaYD3FJwgbFoVLD2pm4QUarxwOcic76rcwg+0cNnGg== + +expo-file-system@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-8.0.0.tgz#60b90c8a375308dc85922592a77531a8e0cde6f7" + integrity sha512-mi84jt3EHVUfxu5eGOikNuRDi7+5daCFSP9LVgk5aQz8Oepo143vnH/+WE4lQEg+u8dB6EmmCWncyc2Fklxv7A== + dependencies: + uuid-js "^0.7.5" + +expo-font@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-8.0.0.tgz#33afd0b501caf8f0392aea77f08717090eeb8d41" + integrity sha512-1hrlvxv8MpE1761v2mDjZRwhhM4hkfDr/MQlkWD2+g17N+UjU3WQct4kc+VuZW30pP+YowwrmG3O6JVoIOhWGA== + dependencies: + fontfaceobserver "^2.1.0" + +expo-keep-awake@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-8.0.0.tgz#f9200a876a5db86e3f0aec8843428a918cdc08d6" + integrity sha512-l+672FVu9qqBEFKSXL1jrsQoDky7gTJX6WYLTWc0/hJuTMhVowWUHsOh/L9vxJEt23QtqLyszQ+hBqjQnWvICQ== + +expo-linear-gradient@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-linear-gradient/-/expo-linear-gradient-8.0.0.tgz#972d33e92714d4a4485635683b5bfa357ecec41b" + integrity sha512-5G3ePGAHUoyBWbGITw5RtdJpssH8TXhCgt55cV+5LTTFjr51OZcuOmGua1vRoVFKBC/9ibLW465GEx9H/HS07Q== + +expo-location@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-location/-/expo-location-8.0.0.tgz#58dd54e47b12e26f9f2a97ded3cd15f8fa959b85" + integrity sha512-48i4dUCaqPTwSri79yummKwg6vE6loI7d4iHCrbG4EEuN3fhS8I9xU60CEkoNZTziH9zK0iw4KSjr7DbXUAaCw== + dependencies: + invariant "^2.2.4" + +expo-permissions@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-permissions/-/expo-permissions-8.0.0.tgz#5a45e8451dd7ff37c9e6ce5e2447818372547813" + integrity sha512-GHTRmwh1rd1b0FcibluPFu93NNQyl9b1anBBDVPmomoo9Prz7kDcO5p2hFqM99r896yvAUSe0fPloPKUq4g/1A== + +expo-sqlite@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-sqlite/-/expo-sqlite-8.0.0.tgz#293b45c78d612ab25400c8c579bd7d73f06ccb6f" + integrity sha512-nJBj1psOkYGIGh2hqMFV/+04EvfGAD3wkHMauUvveU6m/+c48GIxmesPMMDfqtzESgzMcVSKLfbiMYrdQJyrHg== + dependencies: + "@expo/websql" "^1.0.1" + "@types/websql" "^0.0.27" + lodash "^4.17.15" + +expo-web-browser@~8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-8.0.0.tgz#8a4451c744c115569a4c810dac8851f219a21c72" + integrity sha512-7/rXUajycSjEF4Zd4tWm8+zP9/zJg8UWj575w2AeGI7RbOwUjqzQd1CFRzQBJkHflrEaTOXJbFHXxjJXdJaL1g== + +expo@~36.0.0: + version "36.0.2" + resolved "https://registry.yarnpkg.com/expo/-/expo-36.0.2.tgz#17e5470c056f8615ebdd6819087af6a1032cf1ad" + integrity sha512-A0HkOBr6PkHUCcPmmTRmZQHE68EYhWDevFHAiv7fSZxNACmTq9arrSoON+UiPtGQEIV5OyV+MN/joHTJMduTkA== + dependencies: + "@babel/runtime" "^7.1.2" + "@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" "~5.0.0" + "@unimodules/react-native-adapter" "~5.0.0" + babel-preset-expo "~8.0.0" + cross-spawn "^6.0.5" + expo-app-loader-provider "~8.0.0" + expo-asset "~8.0.0" + expo-constants "~8.0.0" + expo-error-recovery "~1.0.0" + expo-file-system "~8.0.0" + expo-font "~8.0.0" + expo-keep-awake "~8.0.0" + expo-linear-gradient "~8.0.0" + expo-location "~8.0.0" + expo-permissions "~8.0.0" + expo-sqlite "~8.0.0" + expo-web-browser "~8.0.0" + fbemitter "^2.1.1" + invariant "^2.2.2" + lodash "^4.6.0" + md5-file "^3.2.3" + nullthrows "^1.1.0" + pretty-format "^23.6.0" + prop-types "^15.6.0" + qs "^6.5.0" + react-native-view-shot "3.0.2" + serialize-error "^2.1.0" + unimodules-barcode-scanner-interface "~5.0.0" + unimodules-camera-interface "~5.0.0" + unimodules-constants-interface "~5.0.0" + unimodules-face-detector-interface "~5.0.0" + unimodules-file-system-interface "~5.0.0" + unimodules-font-interface "~5.0.0" + unimodules-image-loader-interface "~5.0.0" + unimodules-permissions-interface "~5.0.0" + unimodules-sensors-interface "~5.0.0" + unimodules-task-manager-interface "~5.0.0" + uuid-js "^0.7.5" + +extend-shallow@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" + integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= + dependencies: + kind-of "^1.1.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fancy-log@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fbemitter@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs-scripts@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" + integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ== + dependencies: + "@babel/core" "^7.0.0" + ansi-colors "^1.0.1" + babel-preset-fbjs "^3.2.0" + core-js "^2.4.1" + cross-spawn "^5.1.0" + fancy-log "^1.3.2" + object-assign "^4.0.1" + plugin-error "^0.1.2" + semver "^5.1.0" + through2 "^2.0.0" + +fbjs@^0.8.4, fbjs@^0.8.9: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== + dependencies: + core-js "^2.4.1" + fbjs-css-vars "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-babel-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +fn-name@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" + integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +fontfaceobserver@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz#e2705d293e2c585a6531c2a722905657317a2991" + integrity sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +formik@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570" + integrity sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA== + dependencies: + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.14" + lodash-es "^4.17.14" + react-fast-compare "^2.0.1" + scheduler "^0.18.0" + tiny-warning "^1.0.2" + tslib "^1.10.0" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs-extra@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" + integrity sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + dependencies: + type-fest "^0.8.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +"hammerjs@https://github.com/naver/hammer.js.git": + version "2.0.17-snapshot" + resolved "https://github.com/naver/hammer.js.git#54bc698b25edd6e1b76ca975ebaced5ce0467d51" + dependencies: + "@types/hammerjs" "^2.0.36" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hermes-engine@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2" + integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ== + +hoist-non-react-statics@^1.0.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + integrity sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs= + +hoist-non-react-statics@^2.3.1: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^2.1.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +hyphenate-style-name@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" + integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== + +i18n-js@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.5.1.tgz#9787450894059bec1af791123231e59898eb97c1" + integrity sha512-nJgbE5Vj9qzOQfjdVd/uoMoO8ppVaB/3LB6KOmMfD8IQ1vNNh307iHyQLK8ZnLYWkAszfPvVpYmUt1Le/RuHMQ== + +iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +image-size@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" + integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== + +immediate@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + +immer@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/immer/-/immer-4.0.2.tgz#9ff0fcdf88e06f92618a5978ceecb5884e633559" + integrity sha512-Q/tm+yKqnKy4RIBmmtISBlhXuSDrB69e9EKTYiIenIKQkXBQir43w+kN/eGiax3wt1J0O1b2fYcNqLSbEcXA7w== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inline-style-prefixer@^5.0.3: + version "5.1.2" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz#e5a5a3515e25600e016b71e39138971228486c33" + integrity sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA== + dependencies: + css-in-js-utils "^2.0.0" + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" + integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +invariant@^2.1.0, invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-haste-map@^24.7.1: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + 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" + optionalDependencies: + fsevents "^1.2.7" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.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" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== + dependencies: + "@jest/types" "^24.9.0" + +jest-react-native@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/jest-react-native/-/jest-react-native-18.0.0.tgz#77dd909f069324599f227c58c61c2e62168726ba" + integrity sha1-d92QnwaTJFmfInxYxhwuYhaHJro= + +jest-serializer@^24.4.0, jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@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" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.7.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jetifier@^1.6.2: + version "1.6.5" + resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.5.tgz#ea87324a4230bef20a9651178ecab978ee54a8cb" + integrity sha512-T7yzBSu9PR+DqjYt+I0KVO1XTb1QhAfHnXV5Nd3xpbXM6Xg4e3vP60Q4qkNU8Fh6PHC2PivPUNN3rY7G2MxcDQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsc-android@^245459.0.0: + version "245459.0.0" + resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9" + integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + dependencies: + minimist "^1.2.0" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== + dependencies: + array-includes "^3.0.3" + object.assign "^4.1.0" + +kind-of@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash-es@^4.17.11, lodash-es@^4.17.14: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.0: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +logkitty@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.6.1.tgz#fe29209669d261539cbd6bb998a136fc92a1a05c" + integrity sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ== + dependencies: + ansi-fragments "^0.2.1" + dayjs "^1.8.15" + yargs "^12.0.5" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5-file@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" + integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw== + dependencies: + buffer-alloc "^1.1.0" + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +metro-babel-register@^0.56.0, metro-babel-register@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.56.4.tgz#b0c627a1cfdd1bdd768f81af79481754e833a902" + integrity sha512-Phm6hMluOWYqfykftjJ1jsTpWvbgb49AC/1taxEctxUdRCZlFgZwBleJZAhQYxJD5J+ikFkEbHDzePEXb29KVA== + dependencies: + "@babel/core" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/register" "^7.0.0" + core-js "^2.2.2" + escape-string-regexp "^1.0.5" + +metro-babel-transformer@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.56.4.tgz#fe1d0dc600fcf90201a5bea4d42caea10b801057" + integrity sha512-IOi4ILgZvaX7GCGHBJp79paNVOq5QxhhbyqAdEJgDP8bHfl/OVHoVKSypfrsMSKSiBrqxhIjyc4XjkXsQtkx5g== + dependencies: + "@babel/core" "^7.0.0" + metro-source-map "^0.56.4" + +metro-cache@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.56.4.tgz#542f9f8a35f8fb9d5576f46fd3ab4d4f42851a7e" + integrity sha512-d1hiUSKwtRsuMxUhHVJ3tjK2BbpUlJGvTyMWohK8Wxx+0GbnWRWWFcI4vlCzlZfoK0VtZK2MJEl5t7Du1mIniQ== + dependencies: + jest-serializer "^24.4.0" + metro-core "^0.56.4" + mkdirp "^0.5.1" + rimraf "^2.5.4" + +metro-config@^0.56.0, metro-config@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.56.4.tgz#338fd8165fba59424cec427c1a881757945e57e9" + integrity sha512-O85QDHwWdMn/8ERe13y4a6vbZL0AHyO8atTvL+9BCulLEO+FQBi1iJjr3+ViLa8cf0m5dRftDsa7P47m5euk4A== + dependencies: + cosmiconfig "^5.0.5" + jest-validate "^24.7.0" + metro "^0.56.4" + metro-cache "^0.56.4" + metro-core "^0.56.4" + pretty-format "^24.7.0" + +metro-core@^0.56.0, metro-core@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.56.4.tgz#67cc41b3c0bf66e9c2306f50239a1080b1e82312" + integrity sha512-hMzkBdgPt5Zm9nr/1KtIT+A6H7TNiLVCEGG5OiAXj8gTRsA2yy7wAdQpwy0xbE+zi88t/pLOzXpd3ClG/YxyWg== + dependencies: + jest-haste-map "^24.7.1" + lodash.throttle "^4.1.1" + metro-resolver "^0.56.4" + wordwrap "^1.0.0" + +metro-inspector-proxy@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.56.4.tgz#7343ff3c5908af4fd99e96b6d646e24e99816be4" + integrity sha512-E1S3MO25mWKmcLn1UQuCDiS0hf9P2Fwq8sEAX5lBLoZbehepNH+4xJ3xXSY51JX4dozBrE8GGoKL4ll3II40LA== + dependencies: + connect "^3.6.5" + debug "^2.2.0" + rxjs "^5.4.3" + ws "^1.1.5" + yargs "^9.0.0" + +metro-minify-uglify@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.56.4.tgz#13589dfb1d43343608aacb7f78ddfcc052daa63c" + integrity sha512-BHgj7+BKEK2pHvWHUR730bIrsZwl8DPtr49x9L0j2grPZ5/UROWXzEr8VZgIss7fl64t845uu1HXNNyuSj2EhA== + dependencies: + uglify-es "^3.1.9" + +metro-react-native-babel-preset@^0.56.0, metro-react-native-babel-preset@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz#dcedc64b7ff5c0734839458e70eb0ebef6d063a8" + integrity sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + +metro-react-native-babel-transformer@^0.56.0: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.4.tgz#3c6e48b605c305362ee624e45ff338656e35fc1d" + integrity sha512-ng74eutuy1nyGI9+TDzzVAVfEmNPDlapV4msTQMKPi4EFqo/fBn7Ct33ME9l5E51pQBBnxt/UwcpTvd13b29kQ== + dependencies: + "@babel/core" "^7.0.0" + babel-preset-fbjs "^3.1.2" + metro-babel-transformer "^0.56.4" + metro-react-native-babel-preset "^0.56.4" + metro-source-map "^0.56.4" + +metro-resolver@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.56.4.tgz#9876f57bca37fd1bfcffd733541e2ee4a89fad7f" + integrity sha512-Ug4ulVfpkKZ1Wu7mdYj9XLGuOqZTuWCqEhyx3siKTc/2eBwKZQXmiNo5d/IxWNvmwL/87Abeb724I6CMzMfjiQ== + dependencies: + absolute-path "^0.0.0" + +metro-source-map@^0.56.0, metro-source-map@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.56.4.tgz#868ccac3f3519fe14eca358bc186f63651b2b9bc" + integrity sha512-f1P9/rpFmG3Z0Jatiw2zvLItx1TwR7mXTSDj4qLDCWeVMB3kEXAr3R0ucumTW8c6HfpJljeRBWzYFXF33fd81g== + dependencies: + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + invariant "^2.2.4" + metro-symbolicate "^0.56.4" + ob1 "^0.56.4" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-symbolicate@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.56.4.tgz#53e9d40beac9049fa75a3e620ddd47d4907ff015" + integrity sha512-8mCNNn6zV5FFKCIcRgI7736Xl+owgvYuy8qanPxZN36f7utiWRYeB+PirEBPcglBk4qQvoy2lT6oPULNXZQbbQ== + dependencies: + invariant "^2.2.4" + metro-source-map "^0.56.4" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro@^0.56.0, metro@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.56.4.tgz#be7e1380ee6ac3552c25ead8098eab261029e4d7" + integrity sha512-Kt3OQJQtQdts0JrKnyGdLpKHDjqYBgIfzvYrvfhmFCkKuZ8aqRlVnvpfjQ4/OBm0Fmm9NyyxbNRD9VIbj7WjnA== + dependencies: + "@babel/core" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/plugin-external-helpers" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + absolute-path "^0.0.0" + async "^2.4.0" + babel-preset-fbjs "^3.1.2" + buffer-crc32 "^0.2.13" + chalk "^2.4.1" + concat-stream "^1.6.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + eventemitter3 "^3.0.0" + fbjs "^1.0.0" + fs-extra "^1.0.0" + graceful-fs "^4.1.3" + image-size "^0.6.0" + invariant "^2.2.4" + jest-haste-map "^24.7.1" + jest-worker "^24.6.0" + json-stable-stringify "^1.0.1" + lodash.throttle "^4.1.1" + merge-stream "^1.0.1" + metro-babel-register "^0.56.4" + metro-babel-transformer "^0.56.4" + metro-cache "^0.56.4" + metro-config "^0.56.4" + metro-core "^0.56.4" + metro-inspector-proxy "^0.56.4" + metro-minify-uglify "^0.56.4" + metro-react-native-babel-preset "^0.56.4" + metro-resolver "^0.56.4" + metro-source-map "^0.56.4" + metro-symbolicate "^0.56.4" + mime-types "2.1.11" + mkdirp "^0.5.1" + node-fetch "^2.2.0" + nullthrows "^1.1.0" + resolve "^1.5.0" + rimraf "^2.5.4" + serialize-error "^2.1.0" + source-map "^0.5.6" + temp "0.8.3" + throat "^4.1.0" + wordwrap "^1.0.0" + write-file-atomic "^1.2.0" + ws "^1.1.5" + xpipe "^1.0.5" + yargs "^9.0.0" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-db@~1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk= + +mime-types@2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw= + dependencies: + mime-db "~1.23.0" + +mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.1: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +morgan@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" + integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.2" + on-finished "~2.3.0" + on-headers "~1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanoid@^2.1.0: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-base-shoutem-theme@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/native-base-shoutem-theme/-/native-base-shoutem-theme-0.3.1.tgz#f15cbd4ca74ca1c8b6a636d297b9164a5f2b3662" + integrity sha512-uwEGhg6gwDuJTHuhNXRKbHtNjni1UI9qfAsVchIqfK7mQAHSNPVU1QRs9Hw6O2K/qLZaP/aJmNoZGc2h2EGSwA== + dependencies: + hoist-non-react-statics "^1.0.5" + lodash "^4.17.14" + prop-types "^15.5.10" + +native-base@^2.13.8: + version "2.13.8" + resolved "https://registry.yarnpkg.com/native-base/-/native-base-2.13.8.tgz#817dfaf74ec63cd17f48991fab452fdc75103db9" + integrity sha512-47Wm7bjH5Dc99gBUeVvsURyADU97aiLMLPGX4ewPgR9kW47TD9slS/Y5vGMToBgz1bsku9anXgN2T1rpdQbpFA== + dependencies: + blueimp-md5 "^2.5.0" + clamp "^1.0.1" + color "~3.1.2" + create-react-class "^15.6.3" + eslint-config-prettier "^6.0.0" + fs-extra "^2.0.0" + jest-react-native "^18.0.0" + lodash "^4.17.14" + native-base-shoutem-theme "0.3.1" + opencollective-postinstall "^2.0.2" + print-message "^2.1.0" + prop-types "^15.5.10" + react-native-drawer "2.5.1" + react-native-easy-grid "0.2.2" + react-native-keyboard-aware-scroll-view "0.9.1" + react-native-vector-icons "^6.6.0" + react-timer-mixin "^0.13.4" + react-tween-state "^0.1.5" + tween-functions "^1.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-fetch@^2.2.0, node-fetch@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.2.1: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-releases@^1.1.49: + version "1.1.50" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592" + integrity sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ== + dependencies: + semver "^6.3.0" + +noop-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/noop-fn/-/noop-fn-1.0.0.tgz#5f33d47f13d2150df93e0cb036699e982f78ffbf" + integrity sha1-XzPUfxPSFQ35PgywNmmemC94/78= + +normalize-css-color@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/normalize-css-color/-/normalize-css-color-1.0.2.tgz#02991e97cccec6623fe573afbbf0de6a1f3e9f8d" + integrity sha1-Apkel8zOxmI/5XOvu/Deah8+n40= + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nullthrows@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +ob1@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.56.4.tgz#c4acb3baa42f4993a44b35b2da7c8ef443dcccec" + integrity sha512-URgFof9z2wotiYFsqlydXtQfGV81gvBI2ODy64xfd3vPo+AYom5PVDX4t4zn23t/O+S2IxqApSQM8uJAybmz7w== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.1.0, object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1, on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +open@^6.2.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +opencollective-postinstall@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" + integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== + +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.0.tgz#40702a97af46ae00b0ea6fa8998c0b03c0af160d" + integrity sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +paths-js@^0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/paths-js/-/paths-js-0.4.10.tgz#a3575f409b4a36f8aa795ba4d051989021be58c7" + integrity sha512-JZoqlRSHtx+bc+xKI9o4bropEbqZBF4ZfYImiB1T9RYpHB73h5I8XZ7FfSBbHbBMtdD1c04ujjAPH8wUuu4+Gw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +plist@^3.0.0, plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + +plugin-error@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" + integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= + dependencies: + ansi-cyan "^0.1.1" + ansi-red "^0.1.1" + arr-diff "^1.0.1" + arr-union "^2.0.1" + extend-shallow "^1.1.2" + +point-in-polygon@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.0.1.tgz#d59b64e8fee41c49458aac82b56718c5957b2af7" + integrity sha1-1Ztk6P7kHElFiqyCtWcYxZV7Kvc= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +pouchdb-collections@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz#fe63a17da977611abef7cb8026cb1a9553fd8359" + integrity sha1-/mOhfal3YRq+98uAJssalVP9g1k= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pretty-format@^24.7.0, pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +pretty-format@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8" + integrity sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ== + dependencies: + "@jest/types" "^25.1.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +print-message@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/print-message/-/print-message-2.1.0.tgz#b5588ed08b0e1bf77ac7bcb5cb78004afaf9a891" + integrity sha1-tViO0IsOG/d6x7y1y3gASvr5qJE= + dependencies: + chalk "1.1.1" + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +property-expr@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" + integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@^6.5.0: + version "6.9.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" + integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== + +query-string@^6.10.1: + version "6.11.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.0.tgz#dc27a05733d1be66f16d0f83dfa957270f45f66d" + integrity sha512-jS+me8X3OEGFTsF6kF+vUUMFG/d3WUCvD7bHhfZP5784nOq1pjj8yau/u86nfOncmcN6ZkSWKWkKAvv/MGxzLA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +raf@^3.1.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +react-devtools-core@^3.6.3: + version "3.6.3" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" + integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ== + dependencies: + shell-quote "^1.6.1" + ws "^3.3.1" + +react-dom@~16.9.0: + version "16.9.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" + integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.15.0" + +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + +react-native-chart-kit@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/react-native-chart-kit/-/react-native-chart-kit-4.5.0.tgz#beac3864011eefdcee4d41c1528e5a76393c31be" + integrity sha512-vfUEtJ+XoG7zaZeMgE5z3vrvBv+82HuCgBXt/MnMcbIFzeoWxkByOwfeErgsPU+Ei/u3ch4xENbXJX+Ru34G1A== + dependencies: + lodash "^4.17.13" + paths-js "^0.4.10" + point-in-polygon "^1.0.1" + +react-native-drawer@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/react-native-drawer/-/react-native-drawer-2.5.1.tgz#08b9314184f48c724f1b467f8859797369798654" + integrity sha512-cxcQNbSWy5sbGi7anSVp6EDr6JarOBMY9lbFOeLFeVYbONiudoqRKbgEsSDgSw3/LFCLvUXK5zdjXCOedeytxQ== + dependencies: + prop-types "^15.5.8" + tween-functions "^1.0.1" + +react-native-easy-grid@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/react-native-easy-grid/-/react-native-easy-grid-0.2.2.tgz#f0be33620be1ebe2d2295918eb58b0a27e8272ab" + integrity sha512-MlYrNIldnEMKn6TVatQN1P64GoVlwGIuz+8ncdfJ0Wq/xtzUkQwlil8Uksyp7MhKfENE09MQnGNcba6Mx3oSAA== + dependencies: + lodash "^4.17.15" + +react-native-gesture-handler@~1.5.0: + version "1.5.6" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.6.tgz#5d90145f624e3707db2930f43ab41579683e2375" + integrity sha512-z2jLUkRiRc0PBAC9UcXYkqy3VUzBG0cYQAGMsDHsd90JgrzudHAFRJV9fvFm18wNauFTNnJievjZ0C3rI2ydhw== + dependencies: + "@egjs/hammerjs" "^2.0.17" + hammerjs "https://github.com/naver/hammer.js.git" + hoist-non-react-statics "^2.3.1" + invariant "^2.2.4" + prop-types "^15.7.2" + +react-native-iphone-x-helper@^1.0.3, react-native-iphone-x-helper@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772" + integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ== + +react-native-keyboard-aware-scroll-view@0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.1.tgz#9e54b565a5f19b30bed12221d48921781f7630af" + integrity sha512-tBZ8rmjELN0F6t5UBp5CW3NYmZXgVnJSzVCssv/OqG2t6kiB+OUTqxNvUP24K+HARX4H+XaW0aEJSFQkQCv6KA== + dependencies: + prop-types "^15.6.2" + react-native-iphone-x-helper "^1.0.3" + +react-native-reanimated@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.4.0.tgz#7f1acbf9be08492d834f512700570978052be2f9" + integrity sha512-tO7nSNNP+iRLVbkcSS5GXyDBb7tSI02+XuRL3/S39EAr35rnvUy2JfeLUQG+fWSObJjnMVhasUDEUwlENk8IXw== + +react-native-safe-area-context@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-0.6.0.tgz#f53f5a5bcafb462a8798a26b145e68946389ad60" + integrity sha512-blY0akr3ZLTuZFdUotmjV+7LVXpBnd5CGFlNhTiarNNGJoHu79K42IJpUpmtg75iC9aWbSW7QHstlP0xz11V0A== + +react-native-safe-area-view@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-1.0.0.tgz#17be33aeb30702e07bb846378f4c9561e2dd6684" + integrity sha512-cJOBfM6t7HL3NQf3QTVKO6BU7esCCMbKJjpNy9L2nT724UzZ2y6E3ol/3QWsw7ySegWlF857+RIkRLsnpltFVg== + dependencies: + hoist-non-react-statics "^2.3.1" + +react-native-screens@2.0.0-alpha.12: + version "2.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.0.0-alpha.12.tgz#35a6ef3b472958e9d35f0ca9e582d0d158f8e379" + integrity sha512-x9M7FEdcm97bVDp3pi//nhduJHLFMrmDQs0fq299yx3kHdgHbrmhsa8jgW4HvDQhjyPE0FWADY/GrXFuPRj80w== + dependencies: + debounce "^1.2.0" + +react-native-svg@9.13.3: + version "9.13.3" + resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-9.13.3.tgz#6414b337d55af169ac2487ab70f3108404434446" + integrity sha512-H50b2m4jvrQ7KxKs8uYSuWecr6e5XC7BDfS7DaA96+0Owjh0C9DksI5l8SRyHnmE+emiYMPu6Qqfr9dCyKkaJQ== + dependencies: + css-select "^2.0.2" + css-tree "^1.0.0-alpha.37" + +react-native-vector-icons@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz#66cf004918eb05d90778d64bd42077c1800d481b" + integrity sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw== + dependencies: + lodash "^4.0.0" + prop-types "^15.6.2" + yargs "^13.2.2" + +react-native-view-shot@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.0.2.tgz#daccaec5b8038a680b17533ff7e72876e68c7d0d" + integrity sha512-JZOkGo2jzSX2b7N6N2uDr0wQjSz+QmBtY8jzeo0XJY6bLOfaY5nmWyYxDmDRoSpKiFkGTCkyhUqNnjo6lXOtEw== + +react-native-web@~0.11.7: + version "0.11.7" + resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.11.7.tgz#d173d5a9b58db23b6d442c4bc4c81e9939adac23" + integrity sha512-w1KAxX2FYLS2GAi3w3BnEZg/IUu7FdgHnLmFKHplRnHMV3u1OPB2EVA7ndNdfu7ds4Rn2OZjSXoNh6F61g3gkA== + dependencies: + array-find-index "^1.0.2" + create-react-class "^15.6.2" + debounce "^1.2.0" + deep-assign "^3.0.0" + fbjs "^1.0.0" + hyphenate-style-name "^1.0.2" + inline-style-prefixer "^5.0.3" + normalize-css-color "^1.0.2" + prop-types "^15.6.0" + react-timer-mixin "^0.13.4" + +"react-native@https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz": + version "0.61.4" + resolved "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz#fc6d760c9395a1046632b17699718e40b91ea747" + dependencies: + "@babel/runtime" "^7.0.0" + "@react-native-community/cli" "^3.0.0-alpha.1" + "@react-native-community/cli-platform-android" "^3.0.0-alpha.1" + "@react-native-community/cli-platform-ios" "^3.0.0-alpha.1" + abort-controller "^3.0.0" + art "^0.10.0" + base64-js "^1.1.2" + connect "^3.6.5" + create-react-class "^15.6.3" + escape-string-regexp "^1.0.5" + event-target-shim "^5.0.1" + fbjs "^1.0.0" + fbjs-scripts "^1.1.0" + hermes-engine "^0.2.1" + invariant "^2.2.4" + jsc-android "^245459.0.0" + metro-babel-register "^0.56.0" + metro-react-native-babel-transformer "^0.56.0" + metro-source-map "^0.56.0" + nullthrows "^1.1.0" + pretty-format "^24.7.0" + promise "^7.1.1" + prop-types "^15.7.2" + react-devtools-core "^3.6.3" + react-refresh "^0.4.0" + regenerator-runtime "^0.13.2" + scheduler "0.15.0" + stacktrace-parser "^0.1.3" + whatwg-fetch "^3.0.0" + +react-redux@^7.1.3: + version "7.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" + integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== + dependencies: + "@babel/runtime" "^7.5.5" + hoist-non-react-statics "^3.3.0" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^16.9.0" + +react-refresh@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334" + integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ== + +react-timer-mixin@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" + integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== + +react-tween-state@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/react-tween-state/-/react-tween-state-0.1.5.tgz#e98b066551efb93cb92dd1be14995c2e3deae339" + integrity sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk= + dependencies: + raf "^3.1.0" + tween-functions "^1.0.1" + +react@~16.9.0: + version "16.9.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" + integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + +redux-devtools-extension@^2.13.8: + version "2.13.8" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz#37b982688626e5e4993ff87220c9bbb7cd2d96e1" + integrity sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg== + +redux-immutable-state-invariant@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz#308fd3cc7415a0e7f11f51ec997b6379c7055ce1" + integrity sha512-3czbDKs35FwiBRsx/3KabUk5zSOoTXC+cgVofGkpBNv3jQcqIe5JrHcF5AmVt7B/4hyJ8MijBIpCJ8cife6yJg== + dependencies: + invariant "^2.1.0" + json-stringify-safe "^5.0.1" + +redux-persist@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" + integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== + +redux-saga@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112" + integrity sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw== + dependencies: + "@redux-saga/core" "^1.1.3" + +redux-thunk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" + integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== + +redux@^4.0.0, redux@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + dependencies: + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" + integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= + +reselect@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" + integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +rxjs@^5.4.3: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + +rxjs@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sax@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@0.15.0, scheduler@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" + integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +scheduler@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" + integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= + +serve-static@^1.13.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +shortid@^2.2.15: + version "2.2.15" + resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.15.tgz#2b902eaa93a69b11120373cd42a1f1fe4437c122" + integrity sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw== + dependencies: + nanoid "^2.1.0" + +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-plist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.0.tgz#8354ab63eb3922a054c78ce96c209c532e907a23" + integrity sha512-2i5Tc0BYAqppM7jVzmNrI+aEUntPolIq4fDgji6WuNNn1D/qYdn2KwoLhZdzQkE04lu9L5tUoeJsjuJAvd+lFg== + dependencies: + bplist-creator "0.0.8" + bplist-parser "0.2.0" + plist "^3.0.1" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.0.0, slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +stacktrace-parser@^0.1.3: + version "0.1.9" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.9.tgz#11e6d61d42e8cfc87293143d0766408b7a87b00f" + integrity sha512-DRy03ljj0367Ud3OAJHD6eVS/+CvMK2u/djVYuU37fHYcYHoZ8tkFyhbRf7PNG1h3bWLsw+SNTSXrPFe07A7aQ== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + +sudo-prompt@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" + integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= + +symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +synchronous-promise@^2.0.6: + version "2.0.10" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.10.tgz#e64c6fd3afd25f423963353043f4a68ebd397fd8" + integrity sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +temp@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +through2@^2.0.0, through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + +tiny-queue@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" + integrity sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY= + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + +tslib@^1.10.0, tslib@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" + integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== + +tween-functions@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" + integrity sha1-GuOlDnxguz3vd06scHrLynO7w/8= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript-compare@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" + integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== + dependencies: + typescript-logic "^0.0.0" + +typescript-logic@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" + integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== + +typescript-tuple@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" + integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== + dependencies: + typescript-compare "^0.0.2" + +ua-parser-js@^0.7.18, ua-parser-js@^0.7.19: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + +uglify-es@^3.1.9: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +unimodules-barcode-scanner-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-5.0.0.tgz#c8965299fb0d4d4c1f323e7c3dd0314eaeeda8c1" + integrity sha512-8irSCD2UOxojD+3KzrsoGe/TlNOF4NQuCtlhCY5PjDU3SoBAZzSmlLfkz6nYs4iovNila0FZu4vE6msm9Ehdtw== + +unimodules-camera-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-camera-interface/-/unimodules-camera-interface-5.0.0.tgz#980b6ac221deea26badf92ee0baca91c546dc6b1" + integrity sha512-fe1Q1RZ6daKLtT5M87HdznBAV9qEsuHdPZVUWsLfizCXrHwCcRWErwb4RZoJC20Y11sj+kkLlE4W5fBJDn6/WA== + +unimodules-constants-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-constants-interface/-/unimodules-constants-interface-5.0.0.tgz#0e224fde9cf809ed7a026672180e3c96dc186f34" + integrity sha512-s7Fwe3MV6BCj+Sexwfrj9mLAzJlhMfOd/ZM9PNZG10nlTRw8uDxQq0VH1m8NuJqV1Ma2BUmQM7H3lBPe4EysYg== + +unimodules-face-detector-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-face-detector-interface/-/unimodules-face-detector-interface-5.0.0.tgz#4d8d63db954b849387e23b84df833945f21c11cc" + integrity sha512-6VrjHPu429tI54TrGZDQCNIdIXplSwmnJ4jsoVwpubluK+Z4pTRxbEuR3hKelGsvQCUzA38TDD94w7pGMwpe3A== + +unimodules-file-system-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-file-system-interface/-/unimodules-file-system-interface-5.0.0.tgz#890cb2c11c55dfccb4abd51cb3b7142bfd15adea" + integrity sha512-3MRHOigD39geBA6opGkWBoi6nSbFnAr6OWNWiCNN3z1KyFEgeGUFJtTUhzZ/gjsipHubwcWgWBlBSSZKIA7qPQ== + +unimodules-font-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-font-interface/-/unimodules-font-interface-5.0.0.tgz#c9d40f2fe94cc44493f4948d7701def6d2dacd04" + integrity sha512-S7S5JcOzqpEEt7fmqBkTkps5pg5InQRiu0KBv8txgQ6ZkW/OYjt4j5/fb6IkLB5RWEdm7Ji/xxmJLafRSj2bjA== + +unimodules-image-loader-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-image-loader-interface/-/unimodules-image-loader-interface-5.0.0.tgz#59d706367b3df0b0078b1ef510397ff91338256f" + integrity sha512-HzT+eqp1jgm9/KiJfAlb5p4rykQlMMo6eI4S626vRtFcywCr6yKN7y5vYT5jmSxR2QIWY/jLGrX4DSt9dCbYbg== + +unimodules-permissions-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-permissions-interface/-/unimodules-permissions-interface-5.0.0.tgz#567f3506875befa1f35a64654cf40a2ce9ae4036" + integrity sha512-ULtTRsGPSkXm1dELq0Eoq7RCReDYhu71NH2iWnnhmg8MZLykBInHw0bgcd0Fe7IYlRK3VXy8elldAIpFf3OKdw== + +unimodules-sensors-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-sensors-interface/-/unimodules-sensors-interface-5.0.0.tgz#42803532a95d9b6f13b4c08846d39a39144b3d7b" + integrity sha512-ilmeamfmbADXgq595VpJd+5tJLebfbwqMgwVxQ6/EX1niJkHgRk9iloYqx5QRKXwscwbGepIWXjMIv1/DNShQQ== + +unimodules-task-manager-interface@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unimodules-task-manager-interface/-/unimodules-task-manager-interface-5.0.0.tgz#a43b573d319dd84ee526d5eb77b540b3ce5d50e0" + integrity sha512-t5M4sgZBl3i6iUO8PAzjD90bh5RyAdQfLf1GqSVsV8BJVEr1uKokGm6t7lq3E+PCC41ulpeiVApdXPImJywJdg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.4: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use-subscription@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.3.0.tgz#3df13a798e826c8d462899423293289a3362e4e6" + integrity sha512-buZV7FUtnbOr+65dN7PHK7chHhQGfk/yjgqfpRLoWuHIAc4klAD/rdot2FsPNtFthN1ZydvA8tR/mWBMQ+/fDQ== + dependencies: + object-assign "^4.1.1" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid-js@^0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/uuid-js/-/uuid-js-0.7.5.tgz#6c886d02a53d2d40dcf25d91a170b4a7b25b94d0" + integrity sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA= + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vlq@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" + integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^1.1.0, ws@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@^3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xcode@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" + integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ== + dependencies: + simple-plist "^1.0.0" + uuid "^3.3.2" + +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmldoc@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7" + integrity sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ== + dependencies: + sax "^1.2.1" + +xmldom@0.1.x: + version "0.1.31" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" + integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== + +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@^13.2.2: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" + +yargs@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yup@^0.28.0: + version "0.28.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.28.1.tgz#60c0725be7057ed7a9ae61561333809332a63d47" + integrity sha512-xSHMZA7UyecSG/CCTDCtnYZMjBrYDR/C7hu0fMsZ6UcS/ngko4qCVFbw+CAmNtHlbItKkvQ3YXITODeTj/dUkw== + dependencies: + "@babel/runtime" "^7.0.0" + fn-name "~2.0.1" + lodash "^4.17.11" + lodash-es "^4.17.11" + property-expr "^1.5.0" + synchronous-promise "^2.0.6" + toposort "^2.0.2" From a7e76580042970ad5e77e67d24ba907da5b20104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Fri, 13 Mar 2020 13:14:46 +0300 Subject: [PATCH 08/44] Custom admin&password implementation for new tenant --- .../Volo/Abp/Data/DataSeederExtensions.cs | 8 ++++++-- .../TenantManagement/TenantCreateOrUpdateDtoBase.cs | 4 ++++ .../Volo/Abp/TenantManagement/TenantAppService.cs | 8 ++++++-- .../TenantManagement/Localization/Resources/en.json | 5 ++++- .../TenantManagement/Localization/Resources/tr.json | 5 ++++- .../Pages/TenantManagement/Tenants/CreateModal.cshtml | 6 +++++- .../TenantManagement/Tenants/CreateModal.cshtml.cs | 11 +++++++++++ .../Abp/TenantManagement/TenantAppService_Tests.cs | 4 ++-- 8 files changed, 42 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs index 8208d02d2c..95ff597b16 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs @@ -5,9 +5,13 @@ namespace Volo.Abp.Data { public static class DataSeederExtensions { - public static Task SeedAsync(this IDataSeeder seeder, Guid? tenantId = null) + public static Task SeedAsync(this IDataSeeder seeder, Guid? tenantId, string adminEmailAddress, string adminPassword) { - return seeder.SeedAsync(new DataSeedContext(tenantId)); + var context = new DataSeedContext(tenantId) + .WithProperty("AdminEmail", adminEmailAddress) + .WithProperty("AdminPassword", adminPassword); + + return seeder.SeedAsync(context); } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs index a5a9b4af3d..fedaead002 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs @@ -3,5 +3,9 @@ public abstract class TenantCreateOrUpdateDtoBase { public string Name { get; set; } + + public string AdminEmailAddress { get; set; } + + public string AdminPassword { get; set; } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs index 3dabc569bd..ef4da08210 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs @@ -44,6 +44,11 @@ namespace Volo.Abp.TenantManagement [Authorize(TenantManagementPermissions.Tenants.Create)] public virtual async Task CreateAsync(TenantCreateDto input) { + if (string.IsNullOrWhiteSpace(input.AdminEmailAddress) || string.IsNullOrWhiteSpace(input.AdminPassword)) + { + throw new BusinessException(message: L["InvalidAdminProperties"]); + } + var tenant = await TenantManager.CreateAsync(input.Name); await TenantRepository.InsertAsync(tenant); @@ -51,8 +56,7 @@ namespace Volo.Abp.TenantManagement { //TODO: Handle database creation? - //TODO: Set admin email & password..? - await DataSeeder.SeedAsync(tenant.Id); + await DataSeeder.SeedAsync(tenant.Id, input.AdminEmailAddress, input.AdminPassword); } return ObjectMapper.Map(tenant); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json index fc51f00750..3141f62633 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json @@ -15,6 +15,9 @@ "Permission:Edit": "Edit", "Permission:Delete": "Delete", "Permission:ManageConnectionStrings": "Manage connection strings", - "Permission:ManageFeatures": "Manage features" + "Permission:ManageFeatures": "Manage features", + "DisplayName:AdminEmailAddress": "Admin Email Address", + "DisplayName:AdminPassword": "Admin Password", + "InvalidAdminProperties": "Admin email address or password is invalid." } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json index 1b6bdca2c2..ea7d0cf25e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json @@ -15,6 +15,9 @@ "Permission:Edit": "Düzenleme", "Permission:Delete": "Silme", "Permission:ManageConnectionStrings": "Bağlantı cümlelerini yönet", - "Permission:ManageFeatures": "Özellikleri yönet" + "Permission:ManageFeatures": "Özellikleri yönet", + "DisplayName:AdminEmailAddress": "Yönetici Eposta Adresi", + "DisplayName:AdminPassword": "Yönetici Şifresi", + "InvalidAdminProperties": "Admin eposta adresi veya şifre geçerli değil." } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml index b3a2c9d5be..b17c4d94a4 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml @@ -12,7 +12,11 @@ - + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs index a602b12a65..79b7c036c5 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs @@ -33,6 +33,17 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants [StringLength(TenantConsts.MaxNameLength)] [Display(Name = "DisplayName:TenantName")] public string Name { get; set; } + + [Required] + [StringLength(TenantConsts.MaxNameLength)] + [Display(Name = "DisplayName:AdminEmailAddress")] + public string AdminEmailAddress { get; set; } + + [Required] + [StringLength(TenantConsts.MaxNameLength)] + [EmailAddress] + [Display(Name = "DisplayName:AdminPassword")] + public string AdminPassword { get; set; } } } } diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs index 3e44e7c8ea..b27ceff6dc 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs @@ -59,7 +59,7 @@ namespace Volo.Abp.TenantManagement public async Task CreateAsync() { var tenancyName = Guid.NewGuid().ToString("N").ToLowerInvariant(); - var tenant = await _tenantAppService.CreateAsync(new TenantCreateDto { Name = tenancyName }); + var tenant = await _tenantAppService.CreateAsync(new TenantCreateDto { Name = tenancyName , AdminEmailAddress = "admin@admin.com", AdminPassword = "123456"}); tenant.Name.ShouldBe(tenancyName); tenant.Id.ShouldNotBe(default(Guid)); } @@ -69,7 +69,7 @@ namespace Volo.Abp.TenantManagement { await Assert.ThrowsAsync(async () => { - await _tenantAppService.CreateAsync(new TenantCreateDto { Name = "acme" }); + await _tenantAppService.CreateAsync(new TenantCreateDto { Name = "acme", AdminEmailAddress = "admin@admin.com", AdminPassword = "123456" }); }); } From 18e50cfe73b4aad3580c4dc18fa6854d0e604552 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 13 Mar 2020 13:19:03 +0300 Subject: [PATCH 09/44] docs: add config state usage --- docs/en/UI/Angular/Config-State.md | 288 +++++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 docs/en/UI/Angular/Config-State.md diff --git a/docs/en/UI/Angular/Config-State.md b/docs/en/UI/Angular/Config-State.md new file mode 100644 index 0000000000..39dea360b6 --- /dev/null +++ b/docs/en/UI/Angular/Config-State.md @@ -0,0 +1,288 @@ +# Config State + +`ConfigStateService` is a singleton service, i.e. provided in root level of your application, and is actually a façade for interacting with application configuration state in the `Store`. + +## Before Use + +In order to use the `ConfigStateService` you must inject it in your class as a dependency. + +```typescript +@Component({ + /* class metadata here */ +}) +class DemoComponent { + constructor(private config: ConfigStateService) {} +} +``` + +You do not have to provide the `ConfigStateService` at module or component/directive level, because it is already **provided in root**. + +## Selector Methods + +`ConfigStateService` has numerous selector methods which allow you to get a specific configuration or all configurations from the `Store`. + +### How to Get All Configurations From the Store + +You can use the `getAll` method of `ConfigStateService` to get all of the configuration object from the store. It is used as follows: + +```typescript +// this.config is instance of ConfigStateService + +const config = this.config.getAll(); +``` + +### How to Get a Specific Configuration From the Store + +You can use the `getOne` method of `ConfigStateService` to get a specific configuration property from the store. For that, the property name should be passed to the method as parameter. + +```typescript +// this.config is instance of ConfigStateService + +const currentUser = this.config.getOne("currentUser"); +``` + +On occasion, you will probably want to be more specific than getting just the current user. For example, here is how you can get the `tenantId`: + +```typescript +const tenantId = this.config.getDeep("currentUser.tenantId"); +``` + +or by giving an array of keys as parameter: + +```typescript +const tenantId = this.config.getDeep(["currentUser", "tenantId"]); +``` + +FYI, `getDeep` is able to do everything `getOne` does. Just keep in mind that `getOne` is slightly faster. + +#### Config State Properties + +Please refer to `Config.State` type for all the properties you can get with `getOne` and `getDeep`. It can be found in the [config.ts file](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/config.ts#L7). + +### How to Get the Application Information From the Store + +The `getApplicationInfo` method is used to get the application information from the environment variables stored as the config state. This is how you can use it: + +```typescript +// this.config is instance of ConfigStateService + +const appInfo = this.config.getApplicationInfo(); +``` + +This method never returns `undefined` or `null` and returns an empty object literal (`{}`) instead. In other words, you will never get an error when referring to the properties of `appInfo` above. + +#### Application Information Properties + +Please refer to `Config.Application` type for all the properties you can get with `getApplicationInfo`. It can be found in the [config.ts file](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/config.ts#L21). + +### How to Get API URL From the Store + +The `getApplicationInfo` method is used to get a specific API URL from the environment variables stored as the config state. This is how you can use it: + +```typescript +// this.config is instance of ConfigStateService + +const apiUrl = this.config.getApiUrl(); +// environment.apis.default.url + +const searchUrl = this.config.getApiUrl("search"); +// environment.apis.search.url +``` + +This method returns the `url` of a specific API based on the key given as its only parameter. If there is no key, `'default'` is used. + +### How to Get All Settings From the Store + +You can use the `getSettings` method of `ConfigStateService` to get all of the settings object from the configuration state. Here is how you get all settings: + +```typescript +// this.config is instance of ConfigStateService + +const settings = this.config.getSettings(); +``` + +In addition, the method lets you search settings by **passing a keyword** to it. + +```typescript +const localizationSettings = this.config.getSettings("Localization"); +/* +{ + 'Abp.Localization.DefaultLanguage': 'en' +} +*/ +``` + +Beware though, **settings search is case sensitive**. + +### How to Get a Specific Setting From the Store + +You can use the `getSetting` method of `ConfigStateService` to get a specific setting from the configuration state. Here is an example: + +```typescript +// this.config is instance of ConfigStateService + +const defaultLang = this.config.getSetting("Abp.Localization.DefaultLanguage"); +// 'en' +``` + +### How to Get a Specific Permission From the Store + +You can use the `getGrantedPolicy` method of `ConfigStateService` to get a specific permission from the configuration state. For that, you should pass a policy key as parameter to the method. + +```typescript +// this.config is instance of ConfigStateService + +const hasIdentityPermission = this.config.getGrantedPolicy("Abp.Identity"); +// true +``` + +You may also **combine policy keys** to fine tune your selection: + +```typescript +// this.config is instance of ConfigStateService + +const hasIdentityAndAccountPermission = this.config.getGrantedPolicy( + "Abp.Identity && Abp.Account" +); +// false + +const hasIdentityOrAccountPermission = this.config.getGrantedPolicy( + "Abp.Identity || Abp.Account" +); +// true +``` + +Please consider the following **rules** when creating your permission selectors: + +- Maximum 2 keys can be combined. +- `&&` operator looks for both keys. +- `||` operator looks for either key. +- Empty string `''` as key will return `true` +- Using an operator without a second key will return `false` + +### How to Get Translations From the Store + +The `getLocalization` method of `ConfigStateService` is used for translations. Here are some examples: + +```typescript +// this.config is instance of ConfigStateService + +const identity = this.config.getLocalization("AbpIdentity::Identity"); +// 'identity' + +const notFound = this.config.getLocalization("AbpIdentity::IDENTITY"); +// 'AbpIdentity::IDENTITY' + +const defaultValue = this.config.getLocalization({ + key: "AbpIdentity::IDENTITY", + defaultValue: "IDENTITY" +}); +// 'IDENTITY' +``` + +Please check out the [localization documentation](./Localization.md) for details. + +## Dispatch Methods + +`ConfigStateService` has several dispatch methods which allow you to conveniently dispatch predefined actions to the `Store`. + +### How to Get Application Configuration From Server + +The `dispatchGetAppConfiguration` triggers a request to an endpoint that responds with the application state and then places this response to the `Store` as configuration state. + +```typescript +// this.config is instance of ConfigStateService + +this.config.dispatchGetAppConfiguration(); +// returns a state stream which emits after dispatch action is complete +``` + +Note that **you do not have to call this method at application initiation**, because the application configuration is already being received from the server at start. + +### How to Patch Route Configuration + +The `dispatchPatchRouteByName` finds a route by its name and replaces its configuration in the `Store` with the new configuration passed as the second parameter. + +```typescript +// this.config is instance of ConfigStateService + +const newRouteConfig: Partial = { + name: "Home", + path: "home", + children: [ + { + name: "Dashboard", + path: "dashboard" + } + ] +}; + +this.config.dispatchPatchRouteByName("::Menu:Home", newRouteConfig); +// returns a state stream which emits after dispatch action is complete +``` + +### How to Add a New Route Configuration + +The `dispatchPatchRouteByName` triggers a state method that finds a route by its name and replaces its configuration in the `Store` with the new configuration passed as the second parameter. + +```typescript +// this.config is instance of ConfigStateService + +const newRoute: ABP.Route = { + name: "My New Page", + iconClass: "fa fa-dashboard", + path: "page", + invisible: false, + order: 2, + requiredPolicy: "MyProjectName::MyNewPage" +}; + +this.config.dispatchAddRoute(newRoute); +// returns a state stream which emits after dispatch action is complete +``` + +The `newRoute` will be placed as at root level, i.e. without any parent routes and its url will be stored as `'/path'`. + +If you want **to add a child route, you can do this:** + +```typescript +// this.config is instance of ConfigStateService + +const newRoute: ABP.Route = { + parentName: "AbpAccount::Login", + name: "My New Page", + iconClass: "fa fa-dashboard", + path: "page", + invisible: false, + order: 2, + requiredPolicy: "MyProjectName::MyNewPage" +}; + +this.config.dispatchAddRoute(newRoute); +// returns a state stream which emits after dispatch action is complete +``` + +The `newRoute` will then be placed as a child of the parent route named `'AbpAccount::Login'` and its url will be set as `'/account/login/page'`. + +#### Route Configuration Properties + +Please refer to `ABP.Route` type for all the properties you can pass to `dispatchSetEnvironment` in its parameter. It can be found in the [common.ts file](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/common.ts#L27). + +### How to Set the Environment + +The `dispatchSetEnvironment` places environment variables passed to it in the `Store` under the configuration state. Here is how it is used: + +```typescript +// this.config is instance of ConfigStateService + +this.config.dispatchSetEnvironment({ + /* environment properties here */ +}); +// returns a state stream which emits after dispatch action is complete +``` + +Note that **you do not have to call this method at application initiation**, because the environment variables are already being stored at start. + +#### Environment Properties + +Please refer to `Config.Environment` type for all the properties you can pass to `dispatchSetEnvironment` as parameter. It can be found in the [config.ts file](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/config.ts#L13). From 56c30abdd293bffb68ca6f99ea65105af33a4631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Fri, 13 Mar 2020 13:22:29 +0300 Subject: [PATCH 10/44] Update DataSeederExtensions.cs --- .../src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs index 95ff597b16..0d0ac7a1fd 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs @@ -5,6 +5,11 @@ namespace Volo.Abp.Data { public static class DataSeederExtensions { + public static Task SeedAsync(this IDataSeeder seeder, Guid? tenantId = null) + { + return seeder.SeedAsync(new DataSeedContext(tenantId)); + } + public static Task SeedAsync(this IDataSeeder seeder, Guid? tenantId, string adminEmailAddress, string adminPassword) { var context = new DataSeedContext(tenantId) From e04f21a322f0301586de7a679cfc6e3f20ddecbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Fri, 13 Mar 2020 14:07:25 +0300 Subject: [PATCH 11/44] validation update --- .../Abp/TenantManagement/TenantCreateDto.cs | 31 +++++++++++++++++-- .../TenantCreateOrUpdateDtoBase.cs | 4 --- .../Abp/TenantManagement/TenantAppService.cs | 5 --- .../Volo/Abp/TenantManagement/TenantConsts.cs | 4 +++ .../Abp/TenantManagement/TenantController.cs | 1 + 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs index 7561835ee3..46f3f9ff73 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs @@ -1,7 +1,34 @@ -namespace Volo.Abp.TenantManagement +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text.RegularExpressions; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.TenantManagement.Localization; + +namespace Volo.Abp.TenantManagement { - public class TenantCreateDto : TenantCreateOrUpdateDtoBase + public class TenantCreateDto : TenantCreateOrUpdateDtoBase, IValidatableObject { + public string AdminEmailAddress { get; set; } + + public string AdminPassword { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + var l = validationContext.GetRequiredService>(); + + var isValidEmail = + Regex.IsMatch(AdminEmailAddress, TenantConsts.EmailRegex, RegexOptions.IgnoreCase); + + if (string.IsNullOrWhiteSpace(AdminEmailAddress) || !isValidEmail) + { + yield return new ValidationResult(l["InvalidAdminProperties"], new[] { nameof(AdminEmailAddress) }); + } + if (string.IsNullOrWhiteSpace(AdminPassword)) + { + yield return new ValidationResult(l["InvalidAdminProperties"], new[] { nameof(AdminPassword) }); + } + } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs index fedaead002..a5a9b4af3d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs @@ -3,9 +3,5 @@ public abstract class TenantCreateOrUpdateDtoBase { public string Name { get; set; } - - public string AdminEmailAddress { get; set; } - - public string AdminPassword { get; set; } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs index ef4da08210..4ddba47d3c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs @@ -44,11 +44,6 @@ namespace Volo.Abp.TenantManagement [Authorize(TenantManagementPermissions.Tenants.Create)] public virtual async Task CreateAsync(TenantCreateDto input) { - if (string.IsNullOrWhiteSpace(input.AdminEmailAddress) || string.IsNullOrWhiteSpace(input.AdminPassword)) - { - throw new BusinessException(message: L["InvalidAdminProperties"]); - } - var tenant = await TenantManager.CreateAsync(input.Name); await TenantRepository.InsertAsync(tenant); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs index 328c422ab9..ecaa873a09 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs @@ -3,5 +3,9 @@ public static class TenantConsts { public const int MaxNameLength = 64; + + public const string EmailRegex = + @"^(?("")("".+?(? CreateAsync(TenantCreateDto input) { + ValidateModel(); return _service.CreateAsync(input); } From dfd7c86db86fa2288a6f4e4dd882b8397187a5b6 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 13 Mar 2020 14:49:39 +0300 Subject: [PATCH 12/44] docs: add new route for config state doc --- docs/en/UI/Angular/Config-State.md | 38 ++++++++++++++++-------------- docs/en/docs-nav.json | 4 ++++ 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/docs/en/UI/Angular/Config-State.md b/docs/en/UI/Angular/Config-State.md index 39dea360b6..77885d0e05 100644 --- a/docs/en/UI/Angular/Config-State.md +++ b/docs/en/UI/Angular/Config-State.md @@ -6,7 +6,9 @@ In order to use the `ConfigStateService` you must inject it in your class as a dependency. -```typescript +```js +import { ConfigStateService } from '@abp/ng.core'; + @Component({ /* class metadata here */ }) @@ -25,7 +27,7 @@ You do not have to provide the `ConfigStateService` at module or component/direc You can use the `getAll` method of `ConfigStateService` to get all of the configuration object from the store. It is used as follows: -```typescript +```js // this.config is instance of ConfigStateService const config = this.config.getAll(); @@ -35,7 +37,7 @@ const config = this.config.getAll(); You can use the `getOne` method of `ConfigStateService` to get a specific configuration property from the store. For that, the property name should be passed to the method as parameter. -```typescript +```js // this.config is instance of ConfigStateService const currentUser = this.config.getOne("currentUser"); @@ -43,13 +45,13 @@ const currentUser = this.config.getOne("currentUser"); On occasion, you will probably want to be more specific than getting just the current user. For example, here is how you can get the `tenantId`: -```typescript +```js const tenantId = this.config.getDeep("currentUser.tenantId"); ``` or by giving an array of keys as parameter: -```typescript +```js const tenantId = this.config.getDeep(["currentUser", "tenantId"]); ``` @@ -63,7 +65,7 @@ Please refer to `Config.State` type for all the properties you can get with `get The `getApplicationInfo` method is used to get the application information from the environment variables stored as the config state. This is how you can use it: -```typescript +```js // this.config is instance of ConfigStateService const appInfo = this.config.getApplicationInfo(); @@ -79,7 +81,7 @@ Please refer to `Config.Application` type for all the properties you can get wit The `getApplicationInfo` method is used to get a specific API URL from the environment variables stored as the config state. This is how you can use it: -```typescript +```js // this.config is instance of ConfigStateService const apiUrl = this.config.getApiUrl(); @@ -95,7 +97,7 @@ This method returns the `url` of a specific API based on the key given as its on You can use the `getSettings` method of `ConfigStateService` to get all of the settings object from the configuration state. Here is how you get all settings: -```typescript +```js // this.config is instance of ConfigStateService const settings = this.config.getSettings(); @@ -103,7 +105,7 @@ const settings = this.config.getSettings(); In addition, the method lets you search settings by **passing a keyword** to it. -```typescript +```js const localizationSettings = this.config.getSettings("Localization"); /* { @@ -118,7 +120,7 @@ Beware though, **settings search is case sensitive**. You can use the `getSetting` method of `ConfigStateService` to get a specific setting from the configuration state. Here is an example: -```typescript +```js // this.config is instance of ConfigStateService const defaultLang = this.config.getSetting("Abp.Localization.DefaultLanguage"); @@ -129,7 +131,7 @@ const defaultLang = this.config.getSetting("Abp.Localization.DefaultLanguage"); You can use the `getGrantedPolicy` method of `ConfigStateService` to get a specific permission from the configuration state. For that, you should pass a policy key as parameter to the method. -```typescript +```js // this.config is instance of ConfigStateService const hasIdentityPermission = this.config.getGrantedPolicy("Abp.Identity"); @@ -138,7 +140,7 @@ const hasIdentityPermission = this.config.getGrantedPolicy("Abp.Identity"); You may also **combine policy keys** to fine tune your selection: -```typescript +```js // this.config is instance of ConfigStateService const hasIdentityAndAccountPermission = this.config.getGrantedPolicy( @@ -164,7 +166,7 @@ Please consider the following **rules** when creating your permission selectors: The `getLocalization` method of `ConfigStateService` is used for translations. Here are some examples: -```typescript +```js // this.config is instance of ConfigStateService const identity = this.config.getLocalization("AbpIdentity::Identity"); @@ -190,7 +192,7 @@ Please check out the [localization documentation](./Localization.md) for details The `dispatchGetAppConfiguration` triggers a request to an endpoint that responds with the application state and then places this response to the `Store` as configuration state. -```typescript +```js // this.config is instance of ConfigStateService this.config.dispatchGetAppConfiguration(); @@ -203,7 +205,7 @@ Note that **you do not have to call this method at application initiation**, bec The `dispatchPatchRouteByName` finds a route by its name and replaces its configuration in the `Store` with the new configuration passed as the second parameter. -```typescript +```js // this.config is instance of ConfigStateService const newRouteConfig: Partial = { @@ -225,7 +227,7 @@ this.config.dispatchPatchRouteByName("::Menu:Home", newRouteConfig); The `dispatchPatchRouteByName` triggers a state method that finds a route by its name and replaces its configuration in the `Store` with the new configuration passed as the second parameter. -```typescript +```js // this.config is instance of ConfigStateService const newRoute: ABP.Route = { @@ -245,7 +247,7 @@ The `newRoute` will be placed as at root level, i.e. without any parent routes a If you want **to add a child route, you can do this:** -```typescript +```js // this.config is instance of ConfigStateService const newRoute: ABP.Route = { @@ -272,7 +274,7 @@ Please refer to `ABP.Route` type for all the properties you can pass to `dispatc The `dispatchSetEnvironment` places environment variables passed to it in the `Store` under the configuration state. Here is how it is used: -```typescript +```js // this.config is instance of ConfigStateService this.config.dispatchSetEnvironment({ diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 1491a1bcb9..c273e59346 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -316,6 +316,10 @@ "text": "Permission Management", "path": "UI/Angular/Permission-Management.md" }, + { + "text": "Config State", + "path": "UI/Angular/Config-State.md" + }, { "text": "Component Replacement", "path": "UI/Angular/Component-Replacement.md" From c8663c88af76dcdc046d304576f36d4ab7088634 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 13 Mar 2020 14:58:22 +0300 Subject: [PATCH 13/44] docs: fix dispatchAddRoute description --- docs/en/UI/Angular/Config-State.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Config-State.md b/docs/en/UI/Angular/Config-State.md index 77885d0e05..72c8e6c6fd 100644 --- a/docs/en/UI/Angular/Config-State.md +++ b/docs/en/UI/Angular/Config-State.md @@ -225,7 +225,7 @@ this.config.dispatchPatchRouteByName("::Menu:Home", newRouteConfig); ### How to Add a New Route Configuration -The `dispatchPatchRouteByName` triggers a state method that finds a route by its name and replaces its configuration in the `Store` with the new configuration passed as the second parameter. +The `dispatchAddRoute` adds a new route to the configuration state in the `Store`. For this, the route config should be passed as the parameter of the method. ```js // this.config is instance of ConfigStateService From 537fb1a4946d36bbddff3b21b70d3e3d43f26a3a Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 13 Mar 2020 20:31:09 +0800 Subject: [PATCH 14/44] Add localization files to module templates. Fix #3105 --- .../Localization/MyProjectName/sl.json | 6 ++++++ .../Localization/MyProjectName/zh-Hans.json | 6 ++++++ .../Localization/MyProjectName/zh-Hant.json | 6 ++++++ 3 files changed, 18 insertions(+) create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json new file mode 100644 index 0000000000..687d42579c --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json @@ -0,0 +1,6 @@ +{ + "culture": "sl", + "texts": { + "ManageYourProfile": "Upravljajte svojim profilom" + } +} \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json new file mode 100644 index 0000000000..99586f01c9 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hans", + "texts": { + "ManageYourProfile": "管理个人资料" + } +} \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json new file mode 100644 index 0000000000..ceea055597 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hant", + "texts": { + "ManageYourProfile": "管理個人資料" + } +} \ No newline at end of file From 7a69047b8165ef498c411825a03c551683521cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 13 Mar 2020 15:48:56 +0300 Subject: [PATCH 15/44] Complete the Customization-User-Interface document --- .../Customization-User-Interface.md | 34 +++++++++++++++++-- .../BasicTheme.cs | 2 +- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index 7e49efd602..ef4d1e97f7 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -158,7 +158,7 @@ If you need, you can also replace [the code behind c# class](https://github.com/ Just as explained above, you can replace any component, layout or c# class of the used theme. See the [theming document](Theming.md) for more information on the theming system. -### Overriding Static Resources +## Overriding Static Resources Overriding a static embedded resource (like JavaScript, Css or image files) of a module is pretty easy. Just place a file in the same path in your solution and let the Virtual File System to handle it. @@ -437,4 +437,34 @@ See the layouts section below to learn more about the layout system. ### Layouts -TODO \ No newline at end of file +Layout system allows themes to define standard, named layouts and allows any page to select a proper layout for its purpose. There are three pre-defined layouts: + +* "**Application**": The main (and the default) layout for an application. It typically contains header, menu (sidebar), footer, toolbar... etc. +* "**Account**": This layout is used by login, register and other similar pages. It is used for the pages under the `/Pages/Account` folder by default. +* "**Empty**": Empty and minimal layout. + +These names are defined in the `StandardLayouts` class as constants. You can definitely create your own layouts, but these are standard layout names and implemented by all the themes out of the box. + +#### Layout Location + +You can find the layout files [here](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) for the basic theme. You can take them as references to build your own layouts or you can override them if necessary. + +#### ITheme + +ABP Framework uses the `ITheme` service to get the layout location by the layout name. You can replace this service to dynamically select the layout location. + +#### IThemeManager + +`IThemeManager` is used to obtain the current theme and get the layout path. Any page can determine the layout of its own. Example: + +````html +@using Volo.Abp.AspNetCore.Mvc.UI.Theming +@inject IThemeManager ThemeManager +@{ + Layout = ThemeManager.CurrentTheme.GetLayout(StandardLayouts.Empty); +} +```` + +This page will use the empty layout. You use `ThemeManager.CurrentTheme.GetEmptyLayout();` extension method as a shortcut. + +If you want to set the layout for all the pages under a specific folder, then write the code above in a `_ViewStart.cshtml` file under that folder. \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/BasicTheme.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/BasicTheme.cs index 01d3a35db2..60d1307b38 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/BasicTheme.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/BasicTheme.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic { public const string Name = "Basic"; - public string GetLayout(string name, bool fallbackToDefault = true) + public virtual string GetLayout(string name, bool fallbackToDefault = true) { switch (name) { From 48e38d4d841a0eb991004e38aa0966abd1ada378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 13 Mar 2020 15:56:48 +0300 Subject: [PATCH 16/44] Resolved #3056: Guide to customize the pre-build application modules. --- docs/en/Authorization.md | 4 ++++ docs/en/Customizing-Application-Modules-Guide.md | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/docs/en/Authorization.md b/docs/en/Authorization.md index de89920946..1bceda951f 100644 --- a/docs/en/Authorization.md +++ b/docs/en/Authorization.md @@ -204,6 +204,10 @@ If you define and register a policy to the ASP.NET Core authorization system wit See [policy based authorization](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies) document to learn how to define a custom policy. +### Changing Permission Definitions of a Depended Module + +A class deriving from the `PermissionDefinitionProvider` (just like the example above) can also get existing permission definitions (defined by the depended [modules](Module-Development-Basics.md)) and change their definitions. + ## IAuthorizationService ASP.NET Core provides the `IAuthorizationService` that can be used to check for authorization. Once you inject, you can use it in your code to conditionally control the authorization. diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md index 9989c6fc09..7f913f366a 100644 --- a/docs/en/Customizing-Application-Modules-Guide.md +++ b/docs/en/Customizing-Application-Modules-Guide.md @@ -53,3 +53,10 @@ This section suggests some approaches if you decided to use pre-built applicatio * [Overriding Services](Customizing-Application-Modules-Overriding-Services.md) * [Overriding the User Interface](Customizing-Application-Modules-Overriding-User-Interface.md) +### See Also + +Also, see the following documents: + +* See [the localization document](Localization.md) to learn how to extend existing localization resources. +* See [the settings document](Settings.md) to learn how to change setting definitions of a depended module. +* See [the authorization document](Authorization.md) to learn how to change permission definitions of a depended module. \ No newline at end of file From a5ed23fd33e2e23991f157e778fc28b9568b6554 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 13 Mar 2020 21:18:13 +0800 Subject: [PATCH 17/44] Fix document link --- docs/en/UI/AspNetCore/Bundling-Minification.md | 12 ++++++------ docs/en/UI/AspNetCore/Widgets.md | 14 +++++++------- .../zh-Hans/UI/AspNetCore/Bundling-Minification.md | 6 +++--- docs/zh-Hans/UI/AspNetCore/Widgets.md | 8 ++++---- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/en/UI/AspNetCore/Bundling-Minification.md b/docs/en/UI/AspNetCore/Bundling-Minification.md index fc4ddaced3..5af3f177d5 100644 --- a/docs/en/UI/AspNetCore/Bundling-Minification.md +++ b/docs/en/UI/AspNetCore/Bundling-Minification.md @@ -51,7 +51,7 @@ This bundle defines a style bundle with a **unique name**: `MyGlobalBundle`. It' * ABP creates the bundle as **lazy** from the provided files when it's **first requested**. For the subsequent calls, it's returned from the **cache**. That means if you conditionally add the files to the bundle, it's executed only once and any changes of the condition will not effect the bundle for the next requests. * ABP adds bundle files **individually** to the page for the `development` environment. It automatically bundles & minifies for other environments (`staging`, `production`...). -* The bundle files may be **physical** files or [**virtual/embedded** files](../Virtual-File-System.md). +* The bundle files may be **physical** files or [**virtual/embedded** files](../../Virtual-File-System.md). * ABP automatically adds **version query string** to the bundle file URL to prevent browsers from caching when the bundle is being updated. (like ?_v=67872834243042 - generated from last change date of the related files). The versioning works even if the bundle files are individually added to the page (on the development environment). ### Importing The Bundling Tag Helpers @@ -102,7 +102,7 @@ The bundle name will be *scripts.my-scripts* for the example above ("/" is repla ## Bundling Options -If you need to use same bundle in **multiple pages** or want to use some more **powerful features**, you can configure bundles **by code** in your [module](../Module-Development-Basics.md) class. +If you need to use same bundle in **multiple pages** or want to use some more **powerful features**, you can configure bundles **by code** in your [module](../../Module-Development-Basics.md) class. ### Creating A New Bundle @@ -143,7 +143,7 @@ This time, no file defined in the tag helper definition because the bundle files ### Configuring An Existing Bundle -ABP supports [modularity](../Module-Development-Basics.md) for bundling as well. A module can modify an existing bundle that is created by a depended module. Example: +ABP supports [modularity](../../Module-Development-Basics.md) for bundling as well. A module can modify an existing bundle that is created by a depended module. Example: ````C# [DependsOn(typeof(MyWebModule))] @@ -159,7 +159,7 @@ public class MyWebExtensionModule : AbpModule bundle.AddFiles( "/scripts/my-extension-script.js" ); - }); + }); }); } } @@ -195,7 +195,7 @@ services.Configure(options => .ScriptBundles .Configure("MyGlobalBundle", bundle => { bundle.AddContributors(typeof(MyExtensionGlobalStyleContributor)); - }); + }); }); ```` @@ -327,7 +327,7 @@ services.Configure(options => .AddFiles( "/styles/mytheme-global-styles.css" ); - }); + }); }); ```` diff --git a/docs/en/UI/AspNetCore/Widgets.md b/docs/en/UI/AspNetCore/Widgets.md index a45056ba68..062fefb078 100644 --- a/docs/en/UI/AspNetCore/Widgets.md +++ b/docs/en/UI/AspNetCore/Widgets.md @@ -4,8 +4,8 @@ ABP provides a model and infrastructure to create **reusable widgets**. Widget s * Have **scripts & styles** dependencies for your widget. * Create **dashboards** with widgets used inside. -* Define widgets in reusable **[modules](../Module-Development-Basics.md)**. -* Co-operate widgets with **[authorization](../Authorization.md)** and **[bundling](Bundling-Minification.md)** systems. +* Define widgets in reusable **[modules](../../Module-Development-Basics.md)**. +* Co-operate widgets with **[authorization](../../Authorization.md)** and **[bundling](Bundling-Minification.md)** systems. ## Basic Widget Definition @@ -13,7 +13,7 @@ ABP provides a model and infrastructure to create **reusable widgets**. Widget s As the first step, create a new regular ASP.NET Core View Component: -![widget-basic-files](../images/widget-basic-files.png) +![widget-basic-files](../../images/widget-basic-files.png) **MySimpleWidgetViewComponent.cs**: @@ -184,7 +184,7 @@ namespace DashboardDemo.Web.Pages.Components.MySimpleWidget } ```` -See [the localization document](../Localization.md) to learn about localization resources and keys. +See [the localization document](../../Localization.md) to learn about localization resources and keys. ## Style & Script Dependencies @@ -220,7 +220,7 @@ namespace DashboardDemo.Web.Pages.Components.MySimpleWidget } ```` -ABP takes account these dependencies and properly adds to the view/page when you use the widget. Style/script files can be **physical or virtual**. It is completely integrated to the [Virtual File System](../Virtual-File-System.md). +ABP takes account these dependencies and properly adds to the view/page when you use the widget. Style/script files can be **physical or virtual**. It is completely integrated to the [Virtual File System](../../Virtual-File-System.md). ### Defining Bundle Contributors @@ -454,7 +454,7 @@ Used to refresh the widget when needed. It has a filter argument that can be use Some widgets may need to be available only for authenticated or authorized users. In this case, use the following properties of the `Widget` attribute: * `RequiresAuthentication` (`bool`): Set to true to make this widget usable only for authentication users (user have logged in to the application). -* `RequiredPolicies` (`List`): A list of policy names to authorize the user. See [the authorization document](../Authorization.md) for more info about policies. +* `RequiredPolicies` (`List`): A list of policy names to authorize the user. See [the authorization document](../../Authorization.md) for more info about policies. Example: @@ -487,7 +487,7 @@ Configure(options => }); ``` -Write this into the `ConfigureServices` method of your [module](../Module-Development-Basics.md). All the configuration done with the `Widget` attribute is also possible with the `AbpWidgetOptions`. Example configuration that adds a style for the widget: +Write this into the `ConfigureServices` method of your [module](../../Module-Development-Basics.md). All the configuration done with the `Widget` attribute is also possible with the `AbpWidgetOptions`. Example configuration that adds a style for the widget: ````csharp Configure(options => diff --git a/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md b/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md index b7c8c0a1b1..c0f999f996 100644 --- a/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md +++ b/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md @@ -52,7 +52,7 @@ namespace MyCompany.MyProject * 当首次请求时,ABP从提供的文件中 **(延迟)lazy** 创建. 后续将从 **缓存** 中返回内容. 这意味着如果你有条件地将文件添加到包中,它只执行一次, 并且条件的任何更改都不会影响下一个请求的包. * 在`development`环境中ABP会将包文件**单独**添加到页面中, 其他环境(`staging`,`production`...)会自动捆绑和压缩. -* 捆绑文件可以是**物理**文件或[**虚拟/嵌入**](../Virtual-File-System.md)的文件. +* 捆绑文件可以是**物理**文件或[**虚拟/嵌入**](../../Virtual-File-System.md)的文件. * ABP自动将 **版本查询字符串(version query string)** 添加到捆绑文件的URL中,以防止浏览器缓存. 如:?_v=67872834243042(从文件的上次更改日期生成). 即使捆绑文件单独添加到页面(在`development`环境中), 版本控制仍然有效. #### 导入 Bundling Tag Helpers @@ -103,7 +103,7 @@ namespace MyCompany.MyProject ### Bundling 选项 -如果你需要在 **多个页面中使用相同的包** 或想要使用更多 **强大功能**, 你可以在[模块](../Module-Development-Basics.md)类中进行**配置**. +如果你需要在 **多个页面中使用相同的包** 或想要使用更多 **强大功能**, 你可以在[模块](../../Module-Development-Basics.md)类中进行**配置**. #### 创建一个新的捆绑包 @@ -144,7 +144,7 @@ public class MyWebModule : AbpModule #### 配置现有的 Bundle -ABP也支持[模块化](../Module-Development-Basics.md)捆绑. 模块可以修改由依赖模块创建的捆绑包. +ABP也支持[模块化](../../Module-Development-Basics.md)捆绑. 模块可以修改由依赖模块创建的捆绑包. 例如: ````C# diff --git a/docs/zh-Hans/UI/AspNetCore/Widgets.md b/docs/zh-Hans/UI/AspNetCore/Widgets.md index 0e75a24b6f..aae5095f14 100644 --- a/docs/zh-Hans/UI/AspNetCore/Widgets.md +++ b/docs/zh-Hans/UI/AspNetCore/Widgets.md @@ -2,10 +2,10 @@ ABP为创建**可重用的部件**提供了模型和基础设施. 部件系统是[ASP.NET Core ViewComponents](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components)的扩展. 在你有以下需求时,小部件会非常有用; -* 在可复用的 **[模块](../Module-Development-Basics.md)** 中定义部件. +* 在可复用的 **[模块](../../Module-Development-Basics.md)** 中定义部件. * 在部件中引用 **scripts & styles** 脚本. -* 使用部件创建 **[仪表盘](Dashboards.md)**. -* 支持 **[授权](../Authorization.md)** 与 **[捆绑`bundling`](Bundling-Minification.md)** 的部件 +* 使用部件创建 **仪表盘**. +* 支持 **[授权](../../Authorization.md)** 与 **[捆绑`bundling`](Bundling-Minification.md)** 的部件 ## 基本部件定义 @@ -13,7 +13,7 @@ ABP为创建**可重用的部件**提供了模型和基础设施. 部件系统 第一部,创建一个新的ASP.NET Core View Component: -![widget-basic-files](../images/widget-basic-files.png) +![widget-basic-files](../../images/widget-basic-files.png) **MySimpleWidgetViewComponent.cs**: From d68c29c0a999495e4034d14437cdc7a3271553f6 Mon Sep 17 00:00:00 2001 From: Super Date: Fri, 13 Mar 2020 21:43:06 +0800 Subject: [PATCH 18/44] Fix a typo. --- docs/en/UI/AspNetCore/Customization-User-Interface.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index ef4d1e97f7..c5c974e5eb 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -9,7 +9,7 @@ This section covers the [Razor Pages](https://docs.microsoft.com/en-us/aspnet/co You typically have three kind of override requirement for a page: * Overriding **only the Page Model** (C#) side to perform additional logic without changing the page UI. -* Overring **only the Razor Page** (.chtml file) to change the UI without changing the c# behind the page. +* Overriding **only the Razor Page** (.chtml file) to change the UI without changing the c# behind the page. * **Completely overriding** the page. ### Overriding a Page Model (C#) @@ -467,4 +467,4 @@ ABP Framework uses the `ITheme` service to get the layout location by the layout This page will use the empty layout. You use `ThemeManager.CurrentTheme.GetEmptyLayout();` extension method as a shortcut. -If you want to set the layout for all the pages under a specific folder, then write the code above in a `_ViewStart.cshtml` file under that folder. \ No newline at end of file +If you want to set the layout for all the pages under a specific folder, then write the code above in a `_ViewStart.cshtml` file under that folder. From fc00f57d96713a13b616963fc5cc5db7f98b740c Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 13 Mar 2020 16:46:01 +0300 Subject: [PATCH 19/44] fix: return empty object from getSettings when keyword is not found --- .../core/src/lib/states/config.state.ts | 30 ++++++++----------- .../core/src/lib/tests/config.state.spec.ts | 25 ++++++++-------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index f424d83cb2..5fed4b9816 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -1,11 +1,12 @@ +import { Injectable } from '@angular/core'; import { Action, createSelector, Selector, State, StateContext, Store } from '@ngxs/store'; import { of } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import snq from 'snq'; import { + AddRoute, GetAppConfiguration, PatchRouteByName, - AddRoute, SetEnvironment, } from '../actions/config.actions'; import { SetLanguage } from '../actions/session.actions'; @@ -14,7 +15,6 @@ import { Config } from '../models/config'; import { ApplicationConfigurationService } from '../services/application-configuration.service'; import { organizeRoutes } from '../utils/route-utils'; import { SessionState } from './session.state'; -import { Injectable } from '@angular/core'; @State({ name: 'ConfigState', @@ -88,28 +88,24 @@ export class ConfigState { } static getSetting(key: string) { - const selector = createSelector([ConfigState], (state: Config.State) => { + return createSelector([ConfigState], (state: Config.State) => { return snq(() => state.setting.values[key]); }); - return selector; } static getSettings(keyword?: string) { - const selector = createSelector([ConfigState], (state: Config.State) => { - if (keyword) { - const keys = snq( - () => Object.keys(state.setting.values).filter(key => key.indexOf(keyword) > -1), - [], - ); - - if (keys.length) { - return keys.reduce((acc, key) => ({ ...acc, [key]: state.setting.values[key] }), {}); - } - } + return createSelector([ConfigState], (state: Config.State) => { + const settings = snq(() => state.setting.values, {}); - return snq(() => state.setting.values, {}); + if (!keyword) return settings; + + const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1); + + return keysFound.reduce((acc, key) => { + acc[key] = settings[key]; + return acc; + }, {}); }); - return selector; } static getGrantedPolicy(key: string) { diff --git a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts index 635ca1d8b1..07baed4c14 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts @@ -1,12 +1,12 @@ import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; -import { ReplaySubject, timer, Subject, of } from 'rxjs'; +import clone from 'just-clone'; +import { of, ReplaySubject, timer } from 'rxjs'; +import { AddRoute, PatchRouteByName, SetLanguage } from '../actions'; +import { ABP } from '../models'; import { Config } from '../models/config'; import { ApplicationConfigurationService, ConfigStateService } from '../services'; import { ConfigState } from '../states'; -import { SetLanguage, PatchRouteByName, AddRoute } from '../actions'; -import clone from 'just-clone'; -import { ABP } from '../models'; export const CONFIG_STATE_DATA = { environment: { @@ -116,6 +116,7 @@ export const CONFIG_STATE_DATA = { }, setting: { values: { + 'Abp.Custom.SomeSetting': 'X', 'Abp.Localization.DefaultLanguage': 'en', }, }, @@ -218,14 +219,14 @@ describe('ConfigState', () => { }); describe('#getSettings', () => { - it('should return settings', () => { - expect(ConfigState.getSettings('Localization')(CONFIG_STATE_DATA)).toEqual({ - 'Abp.Localization.DefaultLanguage': 'en', - }); - - expect(ConfigState.getSettings('AllSettings')(CONFIG_STATE_DATA)).toEqual( - CONFIG_STATE_DATA.setting.values, - ); + test.each` + keyword | expected + ${undefined} | ${CONFIG_STATE_DATA.setting.values} + ${'Localization'} | ${{ 'Abp.Localization.DefaultLanguage': 'en' }} + ${'X'} | ${{}} + ${'localization'} | ${{}} + `('should return $expected when keyword is given as $keyword', ({ keyword, expected }) => { + expect(ConfigState.getSettings(keyword)(CONFIG_STATE_DATA)).toEqual(expected); }); }); From 7035168861cef6e1913113e331cfb2c5dc47768e Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 13 Mar 2020 16:56:05 +0300 Subject: [PATCH 20/44] fix: assign createSelector return value to a variable before returning (ng-packagr) --- npm/ng-packs/packages/core/src/lib/states/config.state.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index 5fed4b9816..5269946391 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -88,13 +88,15 @@ export class ConfigState { } static getSetting(key: string) { - return createSelector([ConfigState], (state: Config.State) => { + const selector = createSelector([ConfigState], (state: Config.State) => { return snq(() => state.setting.values[key]); }); + + return selector; } static getSettings(keyword?: string) { - return createSelector([ConfigState], (state: Config.State) => { + const selector = createSelector([ConfigState], (state: Config.State) => { const settings = snq(() => state.setting.values, {}); if (!keyword) return settings; @@ -106,6 +108,8 @@ export class ConfigState { return acc; }, {}); }); + + return selector; } static getGrantedPolicy(key: string) { From 84b7e85d488ef6b68a0ad8e6a559118da0e98ad7 Mon Sep 17 00:00:00 2001 From: zHaytam Date: Fri, 13 Mar 2020 15:16:27 +0100 Subject: [PATCH 21/44] Add GetAllBytesAsync to AbpFormFileExtensions This makes it easier to get an array of bytes directly from an `IFormFile` --- .../Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs index c808250a3e..dfc4df0339 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Threading.Tasks; namespace Microsoft.AspNetCore.Http { @@ -11,5 +12,11 @@ namespace Microsoft.AspNetCore.Http return stream.GetAllBytes(); } } + + public static async Task GetAllBytesAsync(this IFormFile file) + { + using var stream = file.OpenReadStream(); + return await stream.GetAllBytesAsync(); + } } } From 59a149457bf8c9afa32c41c9e4ff033184e4abac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 13 Mar 2020 17:35:59 +0300 Subject: [PATCH 22/44] Fixed #3117: Physical razor files are not overridding the virtual files --- .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 06ce49551b..21a675ddc4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -43,21 +43,6 @@ namespace Volo.Abp.AspNetCore.Mvc public override void ConfigureServices(ServiceConfigurationContext context) { - //Configure Razor - context.Services.Insert(0, - ServiceDescriptor.Singleton>( - new ConfigureOptions(options => - { - options.FileProviders.Add( - new RazorViewEngineVirtualFileProvider( - context.Services.GetSingletonInstance>() - ) - ); - } - ) - ) - ); - Configure(options => { options.IgnoredInterfaces.AddIfNotContains(typeof(IAsyncActionFilter)); @@ -101,7 +86,16 @@ namespace Volo.Abp.AspNetCore.Mvc }; }) .AddViewLocalization(); //TODO: How to configure from the application? Also, consider to move to a UI module since APIs does not care about it. - + + Configure(options => + { + options.FileProviders.Add( + new RazorViewEngineVirtualFileProvider( + context.Services.GetSingletonInstance>() + ) + ); + }); + context.Services.ExecutePreConfiguredActions(mvcBuilder); //TODO: AddViewLocalization by default..? From 2c76eb2734cce39f3e464a2271b812ff9ccf33e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 13 Mar 2020 22:05:33 +0300 Subject: [PATCH 23/44] Create IdentityServer-Integration.md --- docs/en/IdentityServer-Integration.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/en/IdentityServer-Integration.md diff --git a/docs/en/IdentityServer-Integration.md b/docs/en/IdentityServer-Integration.md new file mode 100644 index 0000000000..da82d4bc6a --- /dev/null +++ b/docs/en/IdentityServer-Integration.md @@ -0,0 +1,3 @@ +# IdentityServer Integration + +TODO \ No newline at end of file From 7b4894bbe31329e146b8cfb6c40c26a5e745e42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 13 Mar 2020 22:45:01 +0300 Subject: [PATCH 24/44] Update Blogging.md --- docs/en/Modules/Blogging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Modules/Blogging.md b/docs/en/Modules/Blogging.md index 0d2ab35c21..32d2e023ea 100644 --- a/docs/en/Modules/Blogging.md +++ b/docs/en/Modules/Blogging.md @@ -1,3 +1,3 @@ -# IdentityServer Module +# Blogging Module TODO \ No newline at end of file From cb5d67138ff9fab16587ec157026ad0f00cbdc9c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Sat, 14 Mar 2020 18:32:55 +0300 Subject: [PATCH 25/44] Revert "feat: create react-native app template" This reverts commit 185a88544e2f9cf5fe9c6cf55ad1d4c1aa0bcd2c. --- npm/ng-packs/.vscode/settings.json | 1 - templates/app/react-native/.eslintrc.json | 25 - templates/app/react-native/.gitignore | 14 - templates/app/react-native/.prettierrc | 8 - .../app/react-native/.vscode/extensions.json | 3 - templates/app/react-native/App.js | 25 - templates/app/react-native/Environment.js | 31 - templates/app/react-native/app.json | 30 - templates/app/react-native/assets/avatar.png | Bin 255 -> 0 bytes templates/app/react-native/assets/icon.png | Bin 7329 -> 0 bytes templates/app/react-native/assets/logo.png | Bin 1386 -> 0 bytes templates/app/react-native/assets/splash.png | Bin 95246 -> 0 bytes templates/app/react-native/babel.config.js | 6 - templates/app/react-native/package.json | 64 - templates/app/react-native/src/api/API.js | 10 - .../app/react-native/src/api/AccountAPI.js | 41 - .../src/api/ApplicationConfigurationAPI.js | 30 - .../app/react-native/src/api/IdentityAPI.js | 29 - .../src/api/TenantManagementAPI.js | 21 - .../components/AppContainer/AppContainer.js | 99 - .../src/components/DataList/DataList.js | 139 - .../components/DrawerContent/DrawerContent.js | 121 - .../src/components/FormButtons/FormButtons.js | 82 - .../src/components/Loading/Loading.js | 63 - .../components/LoadingButton/LoadingButton.js | 31 - .../src/components/MenuIcon/MenuIcon.js | 19 - .../src/components/TenantBox/TenantBox.js | 128 - .../ValidationMessage/ValidationMessage.js | 18 - .../src/contexts/LocalizationContext.js | 3 - .../react-native/src/hocs/PermissionHOC.js | 17 - .../react-native/src/hooks/UsePermission.js | 16 - .../src/interceptors/APIInterceptor.js | 102 - .../src/navigators/AuthNavigator.js | 22 - .../src/navigators/DrawerNavigator.js | 20 - .../src/navigators/HomeNavigator.js | 24 - .../src/navigators/SettingsNavigator.js | 41 - .../src/navigators/TenantsNavigator.js | 34 - .../src/navigators/UsersNavigator.js | 32 - .../ChangePassword/ChangePasswordForm.js | 99 - .../ChangePassword/ChangePasswordScreen.js | 33 - .../CreateUpdateTenantForm.js | 84 - .../CreateUpdateTenantScreen.js | 77 - .../CreateUpdateUser/CreateUpdateUserForm.js | 242 - .../CreateUpdateUserScreen.js | 69 - .../src/screens/CreateUpdateUser/UserRoles.js | 60 - .../src/screens/Home/HomeScreen.js | 34 - .../src/screens/Login/LoginScreen.js | 128 - .../ManageProfile/ManageProfileForm.js | 122 - .../ManageProfile/ManageProfileScreen.js | 50 - .../src/screens/Settings/SettingsScreen.js | 145 - .../src/screens/Tenants/TenantsScreen.js | 59 - .../src/screens/Users/UsersScreen.js | 61 - .../src/store/actions/AppActions.js | 19 - .../src/store/actions/LoadingActions.js | 13 - .../store/actions/PersistentStorageActions.js | 13 - templates/app/react-native/src/store/index.js | 25 - .../src/store/reducers/AppReducer.js | 12 - .../src/store/reducers/LoadingReducer.js | 23 - .../reducers/PersistentStorageReducer.js | 17 - .../react-native/src/store/reducers/index.js | 12 - .../react-native/src/store/sagas/AppSaga.js | 34 - .../app/react-native/src/store/sagas/index.js | 6 - .../src/store/selectors/AppSelectors.js | 19 - .../src/store/selectors/LoadingSelectors.js | 11 - .../selectors/PersistentStorageSelectors.js | 11 - .../src/theme/components/Badge.js | 39 - .../react-native/src/theme/components/Body.js | 11 - .../src/theme/components/Button.js | 384 - .../react-native/src/theme/components/Card.js | 37 - .../src/theme/components/CardItem.js | 198 - .../src/theme/components/CheckBox.js | 38 - .../src/theme/components/Container.js | 17 - .../src/theme/components/Content.js | 14 - .../react-native/src/theme/components/Fab.js | 25 - .../src/theme/components/Footer.js | 117 - .../src/theme/components/FooterTab.js | 78 - .../react-native/src/theme/components/Form.js | 86 - .../react-native/src/theme/components/H1.js | 13 - .../react-native/src/theme/components/H2.js | 13 - .../react-native/src/theme/components/H3.js | 13 - .../src/theme/components/Header.js | 389 - .../react-native/src/theme/components/Icon.js | 12 - .../src/theme/components/Input.js | 19 - .../src/theme/components/InputGroup.js | 132 - .../react-native/src/theme/components/Item.js | 241 - .../src/theme/components/Label.js | 15 - .../react-native/src/theme/components/Left.js | 11 - .../src/theme/components/ListItem.js | 441 -- .../src/theme/components/Picker.android.js | 14 - .../src/theme/components/Picker.ios.js | 7 - .../src/theme/components/Picker.js | 14 - .../src/theme/components/Radio.js | 26 - .../src/theme/components/Right.js | 14 - .../src/theme/components/Segment.js | 57 - .../src/theme/components/Separator.js | 49 - .../src/theme/components/Spinner.js | 9 - .../src/theme/components/Subtitle.js | 19 - .../src/theme/components/SwipeRow.js | 46 - .../src/theme/components/Switch.js | 9 - .../react-native/src/theme/components/Tab.js | 10 - .../src/theme/components/TabBar.js | 57 - .../src/theme/components/TabContainer.js | 25 - .../src/theme/components/TabHeading.js | 40 - .../react-native/src/theme/components/Text.js | 20 - .../src/theme/components/Textarea.js | 25 - .../src/theme/components/Thumbnail.js | 40 - .../src/theme/components/Title.js | 21 - .../src/theme/components/Toast.js | 41 - .../react-native/src/theme/components/View.js | 13 - .../src/theme/components/index.js | 247 - .../src/theme/overrides/Button.js | 20 - .../src/theme/overrides/Content.js | 14 - .../react-native/src/theme/overrides/Icon.js | 35 - .../react-native/src/theme/overrides/Input.js | 21 - .../src/theme/overrides/InputGroup.js | 19 - .../react-native/src/theme/overrides/Item.js | 24 - .../react-native/src/theme/overrides/Label.js | 18 - .../react-native/src/theme/overrides/Text.js | 31 - .../react-native/src/theme/overrides/index.js | 39 - .../src/theme/variables/CommonColor.js | 304 - .../src/theme/variables/Material.js | 299 - .../src/theme/variables/Platform.js | 333 - .../react-native/src/theme/variables/index.js | 10 - .../react-native/src/utils/DateExtensions.js | 5 - .../app/react-native/src/utils/Debounce.js | 14 - .../app/react-native/src/utils/RandomColor.js | 12 - .../react-native/src/utils/ReduxConnect.js | 9 - .../app/react-native/src/utils/TokenUtils.js | 7 - templates/app/react-native/yarn.lock | 6890 ----------------- 129 files changed, 14077 deletions(-) delete mode 100644 templates/app/react-native/.eslintrc.json delete mode 100644 templates/app/react-native/.gitignore delete mode 100644 templates/app/react-native/.prettierrc delete mode 100644 templates/app/react-native/.vscode/extensions.json delete mode 100644 templates/app/react-native/App.js delete mode 100644 templates/app/react-native/Environment.js delete mode 100644 templates/app/react-native/app.json delete mode 100644 templates/app/react-native/assets/avatar.png delete mode 100644 templates/app/react-native/assets/icon.png delete mode 100644 templates/app/react-native/assets/logo.png delete mode 100644 templates/app/react-native/assets/splash.png delete mode 100644 templates/app/react-native/babel.config.js delete mode 100644 templates/app/react-native/package.json delete mode 100644 templates/app/react-native/src/api/API.js delete mode 100644 templates/app/react-native/src/api/AccountAPI.js delete mode 100644 templates/app/react-native/src/api/ApplicationConfigurationAPI.js delete mode 100644 templates/app/react-native/src/api/IdentityAPI.js delete mode 100644 templates/app/react-native/src/api/TenantManagementAPI.js delete mode 100644 templates/app/react-native/src/components/AppContainer/AppContainer.js delete mode 100644 templates/app/react-native/src/components/DataList/DataList.js delete mode 100644 templates/app/react-native/src/components/DrawerContent/DrawerContent.js delete mode 100644 templates/app/react-native/src/components/FormButtons/FormButtons.js delete mode 100644 templates/app/react-native/src/components/Loading/Loading.js delete mode 100644 templates/app/react-native/src/components/LoadingButton/LoadingButton.js delete mode 100644 templates/app/react-native/src/components/MenuIcon/MenuIcon.js delete mode 100644 templates/app/react-native/src/components/TenantBox/TenantBox.js delete mode 100644 templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js delete mode 100644 templates/app/react-native/src/contexts/LocalizationContext.js delete mode 100644 templates/app/react-native/src/hocs/PermissionHOC.js delete mode 100644 templates/app/react-native/src/hooks/UsePermission.js delete mode 100644 templates/app/react-native/src/interceptors/APIInterceptor.js delete mode 100644 templates/app/react-native/src/navigators/AuthNavigator.js delete mode 100644 templates/app/react-native/src/navigators/DrawerNavigator.js delete mode 100644 templates/app/react-native/src/navigators/HomeNavigator.js delete mode 100644 templates/app/react-native/src/navigators/SettingsNavigator.js delete mode 100644 templates/app/react-native/src/navigators/TenantsNavigator.js delete mode 100644 templates/app/react-native/src/navigators/UsersNavigator.js delete mode 100644 templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js delete mode 100644 templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js delete mode 100644 templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js delete mode 100644 templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js delete mode 100644 templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js delete mode 100644 templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js delete mode 100644 templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js delete mode 100644 templates/app/react-native/src/screens/Home/HomeScreen.js delete mode 100644 templates/app/react-native/src/screens/Login/LoginScreen.js delete mode 100644 templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js delete mode 100644 templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js delete mode 100644 templates/app/react-native/src/screens/Settings/SettingsScreen.js delete mode 100644 templates/app/react-native/src/screens/Tenants/TenantsScreen.js delete mode 100644 templates/app/react-native/src/screens/Users/UsersScreen.js delete mode 100644 templates/app/react-native/src/store/actions/AppActions.js delete mode 100644 templates/app/react-native/src/store/actions/LoadingActions.js delete mode 100644 templates/app/react-native/src/store/actions/PersistentStorageActions.js delete mode 100644 templates/app/react-native/src/store/index.js delete mode 100644 templates/app/react-native/src/store/reducers/AppReducer.js delete mode 100644 templates/app/react-native/src/store/reducers/LoadingReducer.js delete mode 100644 templates/app/react-native/src/store/reducers/PersistentStorageReducer.js delete mode 100644 templates/app/react-native/src/store/reducers/index.js delete mode 100644 templates/app/react-native/src/store/sagas/AppSaga.js delete mode 100644 templates/app/react-native/src/store/sagas/index.js delete mode 100644 templates/app/react-native/src/store/selectors/AppSelectors.js delete mode 100644 templates/app/react-native/src/store/selectors/LoadingSelectors.js delete mode 100644 templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js delete mode 100644 templates/app/react-native/src/theme/components/Badge.js delete mode 100644 templates/app/react-native/src/theme/components/Body.js delete mode 100644 templates/app/react-native/src/theme/components/Button.js delete mode 100644 templates/app/react-native/src/theme/components/Card.js delete mode 100644 templates/app/react-native/src/theme/components/CardItem.js delete mode 100644 templates/app/react-native/src/theme/components/CheckBox.js delete mode 100644 templates/app/react-native/src/theme/components/Container.js delete mode 100644 templates/app/react-native/src/theme/components/Content.js delete mode 100644 templates/app/react-native/src/theme/components/Fab.js delete mode 100644 templates/app/react-native/src/theme/components/Footer.js delete mode 100644 templates/app/react-native/src/theme/components/FooterTab.js delete mode 100644 templates/app/react-native/src/theme/components/Form.js delete mode 100644 templates/app/react-native/src/theme/components/H1.js delete mode 100644 templates/app/react-native/src/theme/components/H2.js delete mode 100644 templates/app/react-native/src/theme/components/H3.js delete mode 100644 templates/app/react-native/src/theme/components/Header.js delete mode 100644 templates/app/react-native/src/theme/components/Icon.js delete mode 100644 templates/app/react-native/src/theme/components/Input.js delete mode 100644 templates/app/react-native/src/theme/components/InputGroup.js delete mode 100644 templates/app/react-native/src/theme/components/Item.js delete mode 100644 templates/app/react-native/src/theme/components/Label.js delete mode 100644 templates/app/react-native/src/theme/components/Left.js delete mode 100644 templates/app/react-native/src/theme/components/ListItem.js delete mode 100644 templates/app/react-native/src/theme/components/Picker.android.js delete mode 100644 templates/app/react-native/src/theme/components/Picker.ios.js delete mode 100644 templates/app/react-native/src/theme/components/Picker.js delete mode 100644 templates/app/react-native/src/theme/components/Radio.js delete mode 100644 templates/app/react-native/src/theme/components/Right.js delete mode 100644 templates/app/react-native/src/theme/components/Segment.js delete mode 100644 templates/app/react-native/src/theme/components/Separator.js delete mode 100644 templates/app/react-native/src/theme/components/Spinner.js delete mode 100644 templates/app/react-native/src/theme/components/Subtitle.js delete mode 100644 templates/app/react-native/src/theme/components/SwipeRow.js delete mode 100644 templates/app/react-native/src/theme/components/Switch.js delete mode 100644 templates/app/react-native/src/theme/components/Tab.js delete mode 100644 templates/app/react-native/src/theme/components/TabBar.js delete mode 100644 templates/app/react-native/src/theme/components/TabContainer.js delete mode 100644 templates/app/react-native/src/theme/components/TabHeading.js delete mode 100644 templates/app/react-native/src/theme/components/Text.js delete mode 100644 templates/app/react-native/src/theme/components/Textarea.js delete mode 100644 templates/app/react-native/src/theme/components/Thumbnail.js delete mode 100644 templates/app/react-native/src/theme/components/Title.js delete mode 100644 templates/app/react-native/src/theme/components/Toast.js delete mode 100644 templates/app/react-native/src/theme/components/View.js delete mode 100644 templates/app/react-native/src/theme/components/index.js delete mode 100644 templates/app/react-native/src/theme/overrides/Button.js delete mode 100644 templates/app/react-native/src/theme/overrides/Content.js delete mode 100644 templates/app/react-native/src/theme/overrides/Icon.js delete mode 100644 templates/app/react-native/src/theme/overrides/Input.js delete mode 100644 templates/app/react-native/src/theme/overrides/InputGroup.js delete mode 100644 templates/app/react-native/src/theme/overrides/Item.js delete mode 100644 templates/app/react-native/src/theme/overrides/Label.js delete mode 100644 templates/app/react-native/src/theme/overrides/Text.js delete mode 100644 templates/app/react-native/src/theme/overrides/index.js delete mode 100644 templates/app/react-native/src/theme/variables/CommonColor.js delete mode 100644 templates/app/react-native/src/theme/variables/Material.js delete mode 100644 templates/app/react-native/src/theme/variables/Platform.js delete mode 100644 templates/app/react-native/src/theme/variables/index.js delete mode 100644 templates/app/react-native/src/utils/DateExtensions.js delete mode 100644 templates/app/react-native/src/utils/Debounce.js delete mode 100644 templates/app/react-native/src/utils/RandomColor.js delete mode 100644 templates/app/react-native/src/utils/ReduxConnect.js delete mode 100644 templates/app/react-native/src/utils/TokenUtils.js delete mode 100644 templates/app/react-native/yarn.lock diff --git a/npm/ng-packs/.vscode/settings.json b/npm/ng-packs/.vscode/settings.json index 9c2678df08..37d9a1e403 100644 --- a/npm/ng-packs/.vscode/settings.json +++ b/npm/ng-packs/.vscode/settings.json @@ -6,7 +6,6 @@ "typescript.tsdk": "../node_modules/typescript/lib", "workbench.colorCustomizations": { "activityBar.background": "#258ecd", - "activityBar.activeBackground": "#258ecd", "activityBar.activeBorder": "#f0aed7", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", diff --git a/templates/app/react-native/.eslintrc.json b/templates/app/react-native/.eslintrc.json deleted file mode 100644 index 6702dcefd6..0000000000 --- a/templates/app/react-native/.eslintrc.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": ["airbnb", "prettier", "prettier/react"], - "parser": "babel-eslint", - "env": { - "jest": true - }, - "rules": { - "no-use-before-define": 0, - "react/jsx-filename-extension": 0, - "react/prop-types": ["error", { "ignore": ["navigation", "children"] }], - "react/require-default-props": 0, - "react/jsx-props-no-spreading": 0, - "react/forbid-prop-types": 0, - "import/prefer-default-export": 0, - "comma-dangle": 0, - "no-underscore-dangle": 1, - "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], - "no-param-reassign": 0, - "operator-linebreak": 0, - "global-require": 0 - }, - "globals": { - "fetch": false - } -} diff --git a/templates/app/react-native/.gitignore b/templates/app/react-native/.gitignore deleted file mode 100644 index c409cf6af4..0000000000 --- a/templates/app/react-native/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -node_modules/**/* -.expo/* -npm-debug.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision -*.orig.* -web-build/ -web-report/ - -# macOS -.DS_Store diff --git a/templates/app/react-native/.prettierrc b/templates/app/react-native/.prettierrc deleted file mode 100644 index 425031393b..0000000000 --- a/templates/app/react-native/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "trailingComma": "all", - "singleQuote": true, - "jsxSingleQuote": false, - "printWidth": 100, - "semi": true, - "jsxBracketSameLine": true -} diff --git a/templates/app/react-native/.vscode/extensions.json b/templates/app/react-native/.vscode/extensions.json deleted file mode 100644 index d7df89c9cd..0000000000 --- a/templates/app/react-native/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] -} diff --git a/templates/app/react-native/App.js b/templates/app/react-native/App.js deleted file mode 100644 index 775a7e1aa5..0000000000 --- a/templates/app/react-native/App.js +++ /dev/null @@ -1,25 +0,0 @@ -import { StyleProvider } from 'native-base'; -import React from 'react'; -import { enableScreens } from 'react-native-screens'; -import { Provider } from 'react-redux'; -import { PersistGate } from 'redux-persist/integration/react'; -import AppContainer from './src/components/AppContainer/AppContainer'; -import { store, persistor } from './src/store'; -import getTheme from './src/theme/components'; -import { activeTheme } from './src/theme/variables'; -import { initAPIInterceptor } from './src/interceptors/APIInterceptor'; - -enableScreens(); -initAPIInterceptor(store); - -export default function App() { - return ( - - - - - - - - ); -} diff --git a/templates/app/react-native/Environment.js b/templates/app/react-native/Environment.js deleted file mode 100644 index 4a7a730d97..0000000000 --- a/templates/app/react-native/Environment.js +++ /dev/null @@ -1,31 +0,0 @@ -const ENV = { - dev: { - apiUrl: 'http://localhost:44305', - oAuthConfig: { - issuer: 'http://localhost:44305', - clientId: 'MyProjectName_App', - clientSecret: '1q2w3e*', - scope: 'MyProjectName', - }, - localization: { - defaultResourceName: 'MyProjectName', - }, - }, - prod: { - apiUrl: 'http://localhost:44305', - oAuthConfig: { - issuer: 'http://localhost:44305', - clientId: 'MyProjectName_App', - clientSecret: '1q2w3e*', - scope: 'MyProjectName', - }, - localization: { - defaultResourceName: 'MyProjectName', - }, - }, -}; - -export const getEnvVars = () => { - // eslint-disable-next-line no-undef - return __DEV__ ? ENV.dev : ENV.prod; -}; diff --git a/templates/app/react-native/app.json b/templates/app/react-native/app.json deleted file mode 100644 index 370089879c..0000000000 --- a/templates/app/react-native/app.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "expo": { - "name": "MyProjectName", - "slug": "MyProjectName", - "privacy": "public", - "sdkVersion": "36.0.0", - "platforms": ["ios", "android", "web"], - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/icon.png", - "splash": { - "image": "./assets/splash.png", - "resizeMode": "cover", - "backgroundColor": "#38003c" - }, - "updates": { - "fallbackToCacheTimeout": 0 - }, - "assetBundlePatterns": ["**/*"], - "ios": { - "supportsTablet": true, - "bundleIdentifier": "com.MyCompanyName.MyProjectName", - "buildNumber": "1.0.0" - }, - "android": { - "package": "com.MyCompanyName.MyProjectName", - "versionCode": 1 - } - } -} diff --git a/templates/app/react-native/assets/avatar.png b/templates/app/react-native/assets/avatar.png deleted file mode 100644 index 8a1daa0121d524256c1d1b45ff5e7ed771784c52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DImVS)*E46%Oq(`s&YU^>_U&7| zc=6GrN4Ia^zG~H~jT<-Ko_$0QsEo6~BeIx*f$sR&2=kJHM z&5N9@w|=XzipNCbb|s-xrJeH)f2E%im~OIrio1Qy&Sj1+>x<+1)+oPni}kGd6Ohy! z>6x1RttNZTv!7LG>?+Ii&zjEnadB}e3778<6P>u`Anzuis~9|8{an^LB{Ts5qZeh6 diff --git a/templates/app/react-native/assets/icon.png b/templates/app/react-native/assets/icon.png deleted file mode 100644 index e1ff94e3054eaea3e0adcadf69b37acd92585649..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7329 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 Hu0mjfe{}7I diff --git a/templates/app/react-native/assets/logo.png b/templates/app/react-native/assets/logo.png deleted file mode 100644 index b672828003dacf42c9cab1f254ef3536a6edf0e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1386 zcmV-w1(o`VP)2Rm(*Ft`meI3_=ghFR4o~~UTZ%R|k(%DQ z60cUwjX^Xq4=nxHmA1Wrwwh3H6kAiJos5fvctM<2UagoLfrsnyDgsk2OgOh>D{d_d zHEBbOeYK3mMJ!%fmWA+YQFFYGK(D8K=gKV16v0XxnwT|vHt}&LA~vrg_)J6{#r}69 zO0g(i6457%%?@njxI{mRArWn(T`FvoWo&{&m|4c=K1X8w10w3<{|h3Th~Lj_Pl_#x zIruFLa5OPTeQLW7s}i#-S9|NRp@~_uci~AN#^zN96ZF}{-<4m?ae$q^`1c#7ZVv*R zK@?lK$kO)2=(i}qKM(b~xRFxWKY)#8Kz}*@8v1{Lh*PDF#&Icbo=yDSIj^s_0b__+ zi;Xp5xZo3w%cDLgFCSQ3Yq*euKrwgmc?ltOgow8A`9oa%+>@EML&njth4ClC#sWfm ztIQHM$njImCR>JpeH^(y=kw9H$)6xb%xuf=mO;!IH72jBNKv$@RYM=*y+fV6h+Wt+ zy;!JiA2v`w7wu*k(F z#olGWPGD~IO#}IBU|VHx2Ik}x^>c{1DzwcJiQO7<9zu|&Ks0RPyE|OGREe8IuxGT9 zQ+mg;$nv4Am~C)zBvH?y)g?L5L@_rhT_y#Si}GhcAC8w<_zQS6%_F-oH0q>Kmc~pp zh#006fs13us9*S;K@-K?B=BPAugDDe&_}y%v}14B_jx7*TG~uP3MX`Z5yHO+TpVTk za0oAb;L2viSO6A9ofc*itKc<8nG_K68p=?FCnP?#xG~R^lnEO&u*Wvz+fD^Bv#pRY zO9MLv=K?Z@m}4%SLTn|XRJBz%aBMt=*E$m3iR(CX(G}ct@fXP>yP#!IY>UEBu&uk2 z{Ta?sC`Oo}ZA28!&vO3PwyCibuzkHsUaNw+0OA<&T70*JP&v!NJC*Ozt^+ZfH?L`X z5qN`hZhHv3so0eH6)=Wb$D1ZgB}^*IQAG?fYZqMGuwZC{k~Z#@{w{m}i&t!z3mnE$ z@v^@mW{#W3h^dDVSw0P$yJ@EFNdcjpB0l9T0&i!V3s7wgt!^&1^2>7M8L97@A*!C5 z)6O27$2ujnujq1zVUAQdsc5$CI?s;qmb#<=4=j5Xn4`O=;m#C0^~5CXIpjNs}UCrpOPpjw*06 z(LT`n^6_vzV(tJQVd{?Ys)2LZ^KAs2B8+f_M1^_zUNs=l3c5ycy*DESyUHRd=1X9D s2o(l~VCBs)HR^1eDeX&OUNVU2AB?X3R_NE8K>z>%07*qoM6N<$g0SM01^@s6 diff --git a/templates/app/react-native/assets/splash.png b/templates/app/react-native/assets/splash.png deleted file mode 100644 index 884bfd7ef1c8d6bf8d064a3f15c7aacfbd59d2f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95246 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 { - // eslint-disable-next-line no-undef - const formData = new FormData(); - formData.append('username', username); - formData.append('password', password); - formData.append('grant_type', 'password'); - formData.append('scope', `${oAuthConfig.scope} offline_access`); - formData.append('client_id', oAuthConfig.clientId); - formData.append('client_secret', oAuthConfig.clientSecret); - - return api({ - method: 'POST', - url: '/connect/token', - headers: { 'Content-Type': 'multipart/form-data' }, - data: formData, - baseURL: oAuthConfig.issuer, - }).then(({ data }) => data); -}; - -export const Logout = () => - api({ - method: 'GET', - url: '/api/account/logout', - }).then(({ data }) => data); - -export const getTenant = tenantName => - api({ - method: 'GET', - url: `/api/abp/multi-tenancy/tenants/by-name/${tenantName}`, - }).then(({ data }) => data); - -export const getTenantById = tenantId => - api({ - method: 'GET', - url: `/api/abp/multi-tenancy/tenants/by-id/${tenantId}`, - }).then(({ data }) => data); diff --git a/templates/app/react-native/src/api/ApplicationConfigurationAPI.js b/templates/app/react-native/src/api/ApplicationConfigurationAPI.js deleted file mode 100644 index 96fcbea5cd..0000000000 --- a/templates/app/react-native/src/api/ApplicationConfigurationAPI.js +++ /dev/null @@ -1,30 +0,0 @@ -import i18n from 'i18n-js'; -import api from './API'; - -export const getApplicationConfiguration = () => - api - .get('/api/abp/application-configuration') - .then(({ data }) => data) - .then(async config => { - const { cultureName } = config.localization.currentCulture; - i18n.locale = cultureName; - - Object.keys(config.localization.values).forEach(key => { - const resource = config.localization.values[key]; - - if (typeof resource !== 'object') return; - - Object.keys(resource).forEach(key2 => { - if (/'{|{/g.test(resource[key2])) { - resource[key2] = resource[key2].replace(/'{|{/g, '{{').replace(/}'|}/g, '}}'); - } - }); - }); - - i18n.translations[cultureName] = { - ...config.localization.values, - ...(i18n.translations[cultureName] || {}), - }; - - return config; - }); diff --git a/templates/app/react-native/src/api/IdentityAPI.js b/templates/app/react-native/src/api/IdentityAPI.js deleted file mode 100644 index 0445057995..0000000000 --- a/templates/app/react-native/src/api/IdentityAPI.js +++ /dev/null @@ -1,29 +0,0 @@ -import api from './API'; - -const maxMaxResultCount = 1000; - -export const getProfileDetail = () => api.get('/api/identity/my-profile').then(({ data }) => data); - -export const getRoles = (params = { maxResultCount: maxMaxResultCount, skipCount: 0 }) => - api.get('/api/identity/roles', { params }).then(({ data }) => data.items); - -export const getUserRoles = id => - api.get(`/api/identity/users/${id}/roles`).then(({ data }) => data.items); - -export const getUsers = (params = { maxResultCount: 10, skipCount: 0 }) => - api.get('/api/identity/users', { params }).then(({ data }) => data); - -export const getUserById = id => api.get(`/api/identity/users/${id}`).then(({ data }) => data); - -export const createUser = body => api.post('/api/identity/users', body).then(({ data }) => data); - -export const updateUser = (body, id) => - api.put(`/api/identity/users/${id}`, body).then(({ data }) => data); - -export const removeUser = id => api.delete(`/api/identity/users/${id}`); - -export const updateProfileDetail = body => - api.put('/api/identity/my-profile', body).then(({ data }) => data); - -export const changePassword = body => - api.post('/api/identity/my-profile/change-password', body).then(({ data }) => data); diff --git a/templates/app/react-native/src/api/TenantManagementAPI.js b/templates/app/react-native/src/api/TenantManagementAPI.js deleted file mode 100644 index f60ed96450..0000000000 --- a/templates/app/react-native/src/api/TenantManagementAPI.js +++ /dev/null @@ -1,21 +0,0 @@ -import api from './API'; - -export function getTenants(params = {}) { - return api.get('/api/multi-tenancy/tenants', { params }).then(({ data }) => data); -} - -export function createTenant(body) { - return api.post('/api/multi-tenancy/tenants', body).then(({ data }) => data); -} - -export function getTenantById(id) { - return api.get(`/api/multi-tenancy/tenants/${id}`).then(({ data }) => data); -} - -export function updateTenant(body, id) { - return api.put(`/api/multi-tenancy/tenants/${id}`, body).then(({ data }) => data); -} - -export function removeTenant(id) { - return api.delete(`/api/multi-tenancy/tenants/${id}`).then(({ data }) => data); -} diff --git a/templates/app/react-native/src/components/AppContainer/AppContainer.js b/templates/app/react-native/src/components/AppContainer/AppContainer.js deleted file mode 100644 index d07b692466..0000000000 --- a/templates/app/react-native/src/components/AppContainer/AppContainer.js +++ /dev/null @@ -1,99 +0,0 @@ -import { Ionicons } from '@expo/vector-icons'; -import * as Font from 'expo-font'; -import i18n from 'i18n-js'; -import PropTypes from 'prop-types'; -import React, { useEffect, useState, useMemo } from 'react'; -import { Platform, StatusBar } from 'react-native'; -import { NavigationContainer } from '@react-navigation/native'; -import { Root } from 'native-base'; -import Loading from '../Loading/Loading'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import { createLanguageSelector } from '../../store/selectors/AppSelectors'; -import { createTokenSelector } from '../../store/selectors/PersistentStorageSelectors'; -import AppActions from '../../store/actions/AppActions'; -import PersistentStorageActions from '../../store/actions/PersistentStorageActions'; -import { LocalizationContext } from '../../contexts/LocalizationContext'; -import { isTokenValid } from '../../utils/TokenUtils'; -import DrawerNavigator from '../../navigators/DrawerNavigator'; -import AuthNavigator from '../../navigators/AuthNavigator'; -import { getEnvVars } from '../../../Environment'; - -const { localization } = getEnvVars(); - -i18n.defaultSeparator = '::'; - -const cloneT = i18n.t; -i18n.t = (key, ...args) => { - if (key.slice(0, 2) === '::') { - key = localization.defaultResourceName + key; - } - return cloneT(key, ...args); -}; - -function AppContainer({ language, fetchAppConfig, token, setToken }) { - const platform = Platform.OS; - const [isReady, setIsReady] = useState(false); - - const localizationContext = useMemo( - () => ({ - t: i18n.t, - locale: (language || {}).cultureName, - }), - [language], - ); - - const isValid = useMemo(() => isTokenValid(token), [token]); - - useEffect(() => { - if (!isValid && token && token.access_token) { - setToken({}); - } - }, [isValid]); - - useEffect(() => { - fetchAppConfig(); - - Promise.all([ - Font.loadAsync({ - Roboto: require('native-base/Fonts/Roboto.ttf'), - Roboto_medium: require('native-base/Fonts/Roboto_medium.ttf'), - ...Ionicons.font, - }), - ]).then(() => setIsReady(true)); - }, []); - - return ( - <> - - - {isReady && language ? ( - - - {isValid ? : } - - - ) : null} - - - - ); -} - -AppContainer.propTypes = { - language: PropTypes.object, - token: PropTypes.object.isRequired, - fetchAppConfig: PropTypes.func.isRequired, - setToken: PropTypes.func.isRequired, -}; - -export default connectToRedux({ - component: AppContainer, - stateProps: state => ({ - language: createLanguageSelector()(state), - token: createTokenSelector()(state), - }), - dispatchProps: { - fetchAppConfig: AppActions.fetchAppConfigAsync, - setToken: PersistentStorageActions.setToken, - }, -}); diff --git a/templates/app/react-native/src/components/DataList/DataList.js b/templates/app/react-native/src/components/DataList/DataList.js deleted file mode 100644 index 7c837ec83f..0000000000 --- a/templates/app/react-native/src/components/DataList/DataList.js +++ /dev/null @@ -1,139 +0,0 @@ -import { useFocusEffect } from '@react-navigation/native'; -import i18n from 'i18n-js'; -import { connectStyle, Icon, Input, InputGroup, Item, List, Spinner, Text } from 'native-base'; -import PropTypes from 'prop-types'; -import React, { forwardRef, useCallback, useEffect, useState } from 'react'; -import { RefreshControl, StyleSheet, View } from 'react-native'; -import LoadingActions from '../../store/actions/LoadingActions'; -import { activeTheme } from '../../theme/variables'; -import { debounce } from '../../utils/Debounce'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import LoadingButton from '../LoadingButton/LoadingButton'; - -function DataList({ - style, - navigation, - fetchFn, - render, - maxResultCount = 15, - debounceTime = 350, - ...props -}) { - const [records, setRecords] = useState([]); - const [totalCount, setTotalCount] = useState(0); - const [loading, setLoading] = useState(false); - const [searchLoading, setSearchLoading] = useState(false); - const [buttonLoading, setButtonLoading] = useState(false); - const [skipCount, setSkipCount] = useState(0); - const [filter, setFilter] = useState(''); - - const fetch = (skip = 0, isRefreshingActive = true) => { - if (isRefreshingActive) setLoading(true); - return fetchFn({ filter, maxResultCount, skipCount: skip }) - .then(({ items, totalCount: total }) => { - setTotalCount(total); - setRecords(skip ? [...records, ...items] : items); - setSkipCount(skip); - }) - .finally(() => { - if (isRefreshingActive) setLoading(false); - }); - }; - - const fetchPartial = () => { - if (loading || records.length === totalCount) return; - - setButtonLoading(true); - fetch(skipCount + maxResultCount, false).finally(() => setButtonLoading(false)); - }; - - useFocusEffect( - useCallback(() => { - setSkipCount(0); - fetch(0, false); - }, []), - ); - - useEffect(() => { - function searchFetch() { - setSearchLoading(true); - return fetch(0, false).finally(() => setTimeout(() => setSearchLoading(false), 150)); - } - debounce(searchFetch, debounceTime)(); - }, [filter]); - - return ( - <> - - - - {searchLoading ? ( - - - - ) : ( - - )} - - - - } - dataArray={records} - renderRow={(data, sectionID, rowId, ...args) => ( - <> - {render(data, sectionID, rowId, ...args)} - {rowId + 1 === skipCount + maxResultCount && totalCount > records.length ? ( - - fetchPartial()}> - {i18n.t('AbpUi::LoadMore')} - - - ) : null} - - )} - {...props} - /> - - - ); -} - -DataList.propTypes = { - ...List.propTypes, - style: PropTypes.any.isRequired, - fetchFn: PropTypes.func.isRequired, - render: PropTypes.func.isRequired, - maxResultCount: PropTypes.number, - debounceTime: PropTypes.number, -}; - -const styles = StyleSheet.create({ - container: { flex: 1 }, - list: {}, - spinner: { - transform: [{ scale: 0.5 }], - position: 'absolute', - right: 8, - top: -40, - color: activeTheme.brandInfo, - }, -}); - -const Forwarded = forwardRef((props, ref) => ); - -export default connectToRedux({ - component: connectStyle('ABP.DataList', styles)(Forwarded), - dispatchProps: { - startLoading: LoadingActions.start, - stopLoading: LoadingActions.stop, - }, -}); diff --git a/templates/app/react-native/src/components/DrawerContent/DrawerContent.js b/templates/app/react-native/src/components/DrawerContent/DrawerContent.js deleted file mode 100644 index 1725abaee3..0000000000 --- a/templates/app/react-native/src/components/DrawerContent/DrawerContent.js +++ /dev/null @@ -1,121 +0,0 @@ -import { Text, View, List, ListItem, Left, Icon, Body } from 'native-base'; -import React from 'react'; -import { Image, StyleSheet } from 'react-native'; -import SafeAreaView from 'react-native-safe-area-view'; -import i18n from 'i18n-js'; -import PropTypes from 'prop-types'; -import Constants from 'expo-constants'; -import { withPermission } from '../../hocs/PermissionHOC'; - -const screens = { - Home: { label: '::Menu:Home', iconName: 'home' }, - Users: { - label: 'AbpIdentity::Users', - iconName: 'contacts', - requiredPolicy: 'AbpIdentity.Users', - }, - Tenants: { - label: 'AbpTenantManagement::Tenants', - iconName: 'people', - requiredPolicy: 'AbpTenantManagement.Tenants', - }, - Settings: { label: 'AbpSettingManagement::Settings', iconName: 'cog' }, -}; - -const ListItemWithPermission = withPermission(ListItem); - -function DrawerContent({ navigation, state: { routeNames, index: currentScreenIndex } }) { - const navigate = screen => { - navigation.navigate(screen); - navigation.closeDrawer(); - }; - - return ( - - - - - - item} - renderRow={name => ( - navigate(name)} - style={{ - ...styles.navItem, - backgroundColor: name === routeNames[currentScreenIndex] ? '#38003c' : '#f2f2f2', - }}> - - - - - - {i18n.t(screens[name].label)} - - - - )} - /> - - - - © MyProjectName - - - v{Constants.manifest.version} - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flexGrow: 1, - }, - logo: { - marginTop: 20, - marginBottom: 15, - }, - headerView: { - borderBottomWidth: 1, - borderColor: '#eee', - alignItems: 'center', - }, - navItem: { - marginLeft: 0, - marginBottom: 3, - paddingLeft: 10, - width: '100%', - backgroundColor: '#f2f2f2', - }, - footer: { - backgroundColor: '#eee', - flexDirection: 'row', - justifyContent: 'space-between', - }, - copyRight: { - margin: 15, - }, - version: { - margin: 15, - }, -}); - -DrawerContent.propTypes = { - state: PropTypes.object.isRequired, -}; - -export default DrawerContent; diff --git a/templates/app/react-native/src/components/FormButtons/FormButtons.js b/templates/app/react-native/src/components/FormButtons/FormButtons.js deleted file mode 100644 index 5bbdb388f8..0000000000 --- a/templates/app/react-native/src/components/FormButtons/FormButtons.js +++ /dev/null @@ -1,82 +0,0 @@ -import React, { forwardRef } from 'react'; -import PropTypes from 'prop-types'; -import { Button, Text, connectStyle } from 'native-base'; -import { View, StyleSheet, Alert } from 'react-native'; -import i18n from 'i18n-js'; - -function FormButtons({ - style, - submit, - remove, - removeMessage, - isRemoveDisabled, - isSubmitDisabled, - isShowRemove = false, - isShowSubmit = true, -}) { - const confirmation = () => { - Alert.alert( - i18n.t('AbpUi::AreYouSure'), - removeMessage, - [ - { - text: i18n.t('AbpUi::Cancel'), - style: 'cancel', - }, - { text: i18n.t('AbpUi::Yes'), onPress: () => remove() }, - ], - { cancelable: true }, - ); - }; - - return ( - - {isShowRemove ? ( - - ) : null} - {isShowSubmit ? ( - - ) : null} - - ); -} - -FormButtons.propTypes = { - submit: PropTypes.func.isRequired, - remove: PropTypes.func, - removeMessage: PropTypes.string, - style: PropTypes.any, - isRemoveDisabled: PropTypes.bool, - isSubmitDisabled: PropTypes.bool, - isShowRemove: PropTypes.bool, - isShowSubmit: PropTypes.bool, -}; - -const styles = StyleSheet.create({ - container: { - width: '100%', - justifyContent: 'center', - alignItems: 'center', - position: 'absolute', - bottom: 0, - flexDirection: 'row', - }, -}); - -const Forwarded = forwardRef((props, ref) => ); - -export default connectStyle('ABP.FormButtons', styles)(Forwarded); diff --git a/templates/app/react-native/src/components/Loading/Loading.js b/templates/app/react-native/src/components/Loading/Loading.js deleted file mode 100644 index 41f0f0693e..0000000000 --- a/templates/app/react-native/src/components/Loading/Loading.js +++ /dev/null @@ -1,63 +0,0 @@ -import React, { forwardRef } from 'react'; -import { Spinner, View, connectStyle } from 'native-base'; -import { StyleSheet } from 'react-native'; -import PropTypes from 'prop-types'; -import { activeTheme } from '../../theme/variables'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import { - createLoadingSelector, - createOpacitySelector, -} from '../../store/selectors/LoadingSelectors'; - -function Loading({ style, loading, opacity }) { - return loading ? ( - - - - - ) : null; -} -const Forwarded = forwardRef((props, ref) => ); - -const backdropStyle = { - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - backgroundColor: '#fff', -}; - -export const styles = StyleSheet.create({ - container: { - ...backdropStyle, - backgroundColor: 'transparent', - zIndex: activeTheme.zIndex.indicator, - alignItems: 'center', - justifyContent: 'center', - }, - backdrop: backdropStyle, - spinner: { - color: activeTheme.brandPrimary, - fontSize: 100, - }, -}); - -Loading.propTypes = { - style: PropTypes.objectOf(PropTypes.any), - loading: PropTypes.bool, - opacity: PropTypes.number, -}; - -export default connectToRedux({ - component: connectStyle('ABP.Loading', styles)(Forwarded), - stateProps: state => ({ - loading: createLoadingSelector()(state), - opacity: createOpacitySelector()(state), - }), -}); diff --git a/templates/app/react-native/src/components/LoadingButton/LoadingButton.js b/templates/app/react-native/src/components/LoadingButton/LoadingButton.js deleted file mode 100644 index 14de6d840a..0000000000 --- a/templates/app/react-native/src/components/LoadingButton/LoadingButton.js +++ /dev/null @@ -1,31 +0,0 @@ -import { Button, connectStyle, Spinner } from 'native-base'; -import PropTypes from 'prop-types'; -import React, { forwardRef } from 'react'; -import { StyleSheet } from 'react-native'; - -function LoadingButton({ loading = false, style, children, ...props }) { - return ( - - ); -} - -LoadingButton.propTypes = { - ...Button.propTypes, - loading: PropTypes.bool.isRequired, -}; - -const styles = StyleSheet.create({ - button: { marginTop: 20, marginBottom: 30, height: 30 }, - spinner: { - transform: [{ scale: 0.5 }], - color: 'white', - marginRight: 5, - }, -}); - -const Forwarded = forwardRef((props, ref) => ); - -export default connectStyle('ABP.LoadingButton', styles)(Forwarded); diff --git a/templates/app/react-native/src/components/MenuIcon/MenuIcon.js b/templates/app/react-native/src/components/MenuIcon/MenuIcon.js deleted file mode 100644 index c820d30a7f..0000000000 --- a/templates/app/react-native/src/components/MenuIcon/MenuIcon.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import { TouchableOpacity } from 'react-native'; -import { Icon } from 'native-base'; -import PropTypes from 'prop-types'; - -function MenuIcon({ onPress, iconName = 'menu' }) { - return ( - - - - ); -} - -MenuIcon.propTypes = { - onPress: PropTypes.func.isRequired, - iconName: PropTypes.string, -}; - -export default MenuIcon; diff --git a/templates/app/react-native/src/components/TenantBox/TenantBox.js b/templates/app/react-native/src/components/TenantBox/TenantBox.js deleted file mode 100644 index a944d80dd5..0000000000 --- a/templates/app/react-native/src/components/TenantBox/TenantBox.js +++ /dev/null @@ -1,128 +0,0 @@ -import i18n from 'i18n-js'; -import { - Button, - connectStyle, - Content, - Input, - InputGroup, - Label, - Segment, - Text, -} from 'native-base'; -import PropTypes from 'prop-types'; -import React, { forwardRef, useState } from 'react'; -import { StyleSheet, View, Alert } from 'react-native'; -import { getTenant } from '../../api/AccountAPI'; -import PersistentStorageActions from '../../store/actions/PersistentStorageActions'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import { createTenantSelector } from '../../store/selectors/PersistentStorageSelectors'; - -function TenantBox({ style, tenant = {}, setTenant, showTenantSelection, toggleTenantSelection }) { - const [tenantName, setTenantName] = useState(tenant.name); - - const findTenant = () => { - if (!tenantName) { - setTenant({}); - toggleTenantSelection(); - return; - } - - getTenant(tenantName).then(({ success, ...data }) => { - if (!success) { - Alert.alert( - i18n.t('AbpUi::Error'), - i18n.t('AbpUiMultiTenancy::GivenTenantIsNotAvailable', { - 0: tenantName, - }), - [{ text: i18n.t('AbpUi::Ok') }], - ); - return; - } - setTenant(data); - toggleTenantSelection(); - }); - }; - - return ( - <> - - - {i18n.t('AbpUiMultiTenancy::Tenant')} - - {tenant.name ? tenant.name : i18n.t('AbpUiMultiTenancy::NotSelected')} - - - - - {showTenantSelection ? ( - - - - - - {i18n.t('AbpUiMultiTenancy::SwitchTenantHint')} - - - - - - ) : null} - - ); -} - -TenantBox.propTypes = { - style: PropTypes.any.isRequired, - setTenant: PropTypes.func.isRequired, - showTenantSelection: PropTypes.bool.isRequired, - toggleTenantSelection: PropTypes.func.isRequired, - tenant: PropTypes.object.isRequired, -}; - -const styles = StyleSheet.create({ - container: { - paddingHorizontal: 20, - alignItems: 'center', - justifyContent: 'space-between', - height: 70, - }, - button: { marginTop: 20, width: '49%' }, - switchButton: { - borderTopWidth: 0, - borderRightWidth: 0, - borderBottomWidth: 0, - borderLeftWidth: 0, - borderRadius: 10, - backgroundColor: '#38003c', - height: 35, - }, - tenant: { color: '#777' }, - title: { - marginRight: 10, - color: '#777', - fontSize: 13, - fontWeight: '600', - textTransform: 'uppercase', - }, - hint: { color: '#bbb', textAlign: 'left' }, -}); - -const Forwarded = forwardRef((props, ref) => ); - -export default connectToRedux({ - component: connectStyle('ABP.TenantBox', styles)(Forwarded), - dispatchProps: { - setTenant: PersistentStorageActions.setTenant, - }, - stateProps: state => ({ - tenant: createTenantSelector()(state), - }), -}); diff --git a/templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js b/templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js deleted file mode 100644 index 30e7087762..0000000000 --- a/templates/app/react-native/src/components/ValidationMessage/ValidationMessage.js +++ /dev/null @@ -1,18 +0,0 @@ -import i18n from 'i18n-js'; -import { connectStyle } from 'native-base'; -import React, { forwardRef } from 'react'; -import { Text } from 'react-native'; - -const ValidationMessage = ({ children, ...props }) => - children ? {i18n.t(children)} : null; - -const styles = { - fontSize: 12, - marginHorizontal: 10, - marginTop: -5, - color: '#ed2f2f', -}; - -const Forwarded = forwardRef((props, ref) => ); - -export default connectStyle('ABP.ValidationMessage', styles)(Forwarded); diff --git a/templates/app/react-native/src/contexts/LocalizationContext.js b/templates/app/react-native/src/contexts/LocalizationContext.js deleted file mode 100644 index 83c68ba2bc..0000000000 --- a/templates/app/react-native/src/contexts/LocalizationContext.js +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export const LocalizationContext = React.createContext(); diff --git a/templates/app/react-native/src/hocs/PermissionHOC.js b/templates/app/react-native/src/hocs/PermissionHOC.js deleted file mode 100644 index 6cf8025428..0000000000 --- a/templates/app/react-native/src/hocs/PermissionHOC.js +++ /dev/null @@ -1,17 +0,0 @@ -import React, { forwardRef } from 'react'; -import PropTypes from 'prop-types'; -import { usePermission } from '../hooks/UsePermission'; - -export function withPermission(Component, policyKey) { - const Forwarded = forwardRef((props, ref) => { - const isGranted = - policyKey || props.policyKey ? usePermission(policyKey || props.policyKey) : true; - return isGranted ? : null; - }); - - Forwarded.propTypes = { - policyKey: PropTypes.string, - }; - - return Forwarded; -} diff --git a/templates/app/react-native/src/hooks/UsePermission.js b/templates/app/react-native/src/hooks/UsePermission.js deleted file mode 100644 index a50d8f7fa1..0000000000 --- a/templates/app/react-native/src/hooks/UsePermission.js +++ /dev/null @@ -1,16 +0,0 @@ -import { useEffect, useState } from 'react'; -import { store } from '../store'; -import { createGrantedPolicySelector } from '../store/selectors/AppSelectors'; - -export function usePermission(key) { - const [permission, setPermission] = useState(false); - - const state = store.getState(); - const policy = createGrantedPolicySelector(key)(state); - - useEffect(() => { - setPermission(policy); - }, [policy]); - - return permission; -} diff --git a/templates/app/react-native/src/interceptors/APIInterceptor.js b/templates/app/react-native/src/interceptors/APIInterceptor.js deleted file mode 100644 index 6060dca2b3..0000000000 --- a/templates/app/react-native/src/interceptors/APIInterceptor.js +++ /dev/null @@ -1,102 +0,0 @@ -import { Toast } from 'native-base'; -import i18n from 'i18n-js'; -import api from '../api/API'; -import PersistentStorageActions from '../store/actions/PersistentStorageActions'; -import LoadingActions from '../store/actions/LoadingActions'; - -export function initAPIInterceptor(store) { - api.interceptors.request.use( - async request => { - const { - persistentStorage: { token, language, tenant }, - } = store.getState(); - - if (!request.headers.Authorization && token && token.access_token) { - request.headers.Authorization = `${token.token_type} ${token.access_token}`; - } - - if (!request.headers['Content-Type']) { - request.headers['Content-Type'] = 'application/json'; - } - - if (!request.headers['Accept-Language'] && language) { - request.headers['Accept-Language'] = language; - } - - if (!request.headers.__tenant && tenant && tenant.tenantId) { - request.headers.__tenant = tenant.tenantId; - } - - return request; - }, - error => console.error(error), - ); - - api.interceptors.response.use( - response => response, - error => { - store.dispatch(LoadingActions.clear()); - const errorRes = error.response; - if (errorRes) { - if (errorRes.headers._abperrorformat && errorRes.status === 401) { - store.dispatch(PersistentStorageActions.setToken({})); - } - - showError({ error: errorRes.data.error || {}, status: errorRes.status }); - } else { - Toast.show({ - text: 'An unexpected error has occurred', - buttonText: 'x', - duration: 10000, - type: 'danger', - textStyle: { textAlign: 'center' }, - }); - } - - return Promise.reject(error); - }, - ); -} - -function showError({ error = {}, status }) { - let message = ''; - let title = i18n.t('AbpAccount::DefaultErrorMessage'); - - if (typeof error === 'string') { - message = error; - } else if (error.details) { - message = error.details; - title = error.message; - } else if (error.message) { - message = error.message; - } else { - switch (status) { - case 401: - title = i18n.t('AbpAccount::DefaultErrorMessage401'); - message = i18n.t('AbpAccount::DefaultErrorMessage401Detail'); - break; - case 403: - title = i18n.t('AbpAccount::DefaultErrorMessage403'); - message = i18n.t('AbpAccount::DefaultErrorMessage403Detail'); - break; - case 404: - title = i18n.t('AbpAccount::DefaultErrorMessage404'); - message = i18n.t('AbpAccount::DefaultErrorMessage404Detail'); - break; - case 500: - title = i18n.t('AbpAccount::500Message'); - message = i18n.t('AbpAccount::InternalServerErrorMessage'); - break; - default: - break; - } - } - - Toast.show({ - text: `${title}\n${message}`, - buttonText: 'x', - duration: 10000, - type: 'danger', - textStyle: { textAlign: 'center' }, - }); -} diff --git a/templates/app/react-native/src/navigators/AuthNavigator.js b/templates/app/react-native/src/navigators/AuthNavigator.js deleted file mode 100644 index b6b06d11b5..0000000000 --- a/templates/app/react-native/src/navigators/AuthNavigator.js +++ /dev/null @@ -1,22 +0,0 @@ -import { createStackNavigator } from '@react-navigation/stack'; -import React from 'react'; -import { LocalizationContext } from '../contexts/LocalizationContext'; -import LoginScreen from '../screens/Login/LoginScreen'; - -const Stack = createStackNavigator(); - -export default function AuthStackNavigator() { - const { t } = React.useContext(LocalizationContext); - - return ( - - ({ - title: t('AbpAccount::Login'), - })} - /> - - ); -} diff --git a/templates/app/react-native/src/navigators/DrawerNavigator.js b/templates/app/react-native/src/navigators/DrawerNavigator.js deleted file mode 100644 index 9b0fde4afc..0000000000 --- a/templates/app/react-native/src/navigators/DrawerNavigator.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { createDrawerNavigator } from '@react-navigation/drawer'; -import HomeStackNavigator from './HomeNavigator'; -import SettingsStackNavigator from './SettingsNavigator'; -import UsersStackNavigator from './UsersNavigator'; -import TenantsStackNavigator from './TenantsNavigator'; -import DrawerContent from '../components/DrawerContent/DrawerContent'; - -const Drawer = createDrawerNavigator(); - -export default function DrawerNavigator() { - return ( - - - - - - - ); -} diff --git a/templates/app/react-native/src/navigators/HomeNavigator.js b/templates/app/react-native/src/navigators/HomeNavigator.js deleted file mode 100644 index 7ba440f510..0000000000 --- a/templates/app/react-native/src/navigators/HomeNavigator.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { createStackNavigator } from '@react-navigation/stack'; -import HomeScreen from '../screens/Home/HomeScreen'; -import MenuIcon from '../components/MenuIcon/MenuIcon'; -import { LocalizationContext } from '../contexts/LocalizationContext'; - -const Stack = createStackNavigator(); - -export default function HomeStackNavigator() { - const { t } = React.useContext(LocalizationContext); - - return ( - - ({ - headerLeft: () => navigation.openDrawer()} />, - title: t('::Menu:Home'), - })} - /> - - ); -} diff --git a/templates/app/react-native/src/navigators/SettingsNavigator.js b/templates/app/react-native/src/navigators/SettingsNavigator.js deleted file mode 100644 index 84d3220473..0000000000 --- a/templates/app/react-native/src/navigators/SettingsNavigator.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { createStackNavigator } from '@react-navigation/stack'; -import i18n from 'i18n-js'; -import SettingsScreen from '../screens/Settings/SettingsScreen'; -import ChangePasswordScreen from '../screens/ChangePassword/ChangePasswordScreen'; -import ManageProfileScreen from '../screens/ManageProfile/ManageProfileScreen'; -import MenuIcon from '../components/MenuIcon/MenuIcon'; -import { LocalizationContext } from '../contexts/LocalizationContext'; - -const Stack = createStackNavigator(); - -export default function SettingsStackNavigator() { - const { t } = React.useContext(LocalizationContext); - - return ( - - ({ - headerLeft: () => navigation.openDrawer()} />, - title: t('AbpSettingManagement::Settings'), - })} - /> - - - - ); -} diff --git a/templates/app/react-native/src/navigators/TenantsNavigator.js b/templates/app/react-native/src/navigators/TenantsNavigator.js deleted file mode 100644 index 7e38b82674..0000000000 --- a/templates/app/react-native/src/navigators/TenantsNavigator.js +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import { createStackNavigator } from '@react-navigation/stack'; -import TenantsScreen from '../screens/Tenants/TenantsScreen'; -import CreateUpdateTenantScreen from '../screens/CreateUpdateTenant/CreateUpdateTenantScreen'; -import MenuIcon from '../components/MenuIcon/MenuIcon'; -import { LocalizationContext } from '../contexts/LocalizationContext'; - -const Stack = createStackNavigator(); - -export default function TenantsStackNavigator() { - const { t } = React.useContext(LocalizationContext); - - return ( - - ({ - headerLeft: () => navigation.openDrawer()} />, - title: t('AbpTenantManagement::Tenants'), - })} - /> - ({ - title: t( - route.params?.tenantId ? 'AbpTenantManagement::Edit' : 'AbpTenantManagement::NewTenant', - ), - })} - /> - - ); -} diff --git a/templates/app/react-native/src/navigators/UsersNavigator.js b/templates/app/react-native/src/navigators/UsersNavigator.js deleted file mode 100644 index 222dfe1550..0000000000 --- a/templates/app/react-native/src/navigators/UsersNavigator.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; -import { createStackNavigator } from '@react-navigation/stack'; -import UsersScreen from '../screens/Users/UsersScreen'; -import CreateUpdateUserScreen from '../screens/CreateUpdateUser/CreateUpdateUserScreen'; -import MenuIcon from '../components/MenuIcon/MenuIcon'; -import { LocalizationContext } from '../contexts/LocalizationContext'; - -const Stack = createStackNavigator(); - -export default function UsersStackNavigator() { - const { t } = React.useContext(LocalizationContext); - - return ( - - ({ - headerLeft: () => navigation.openDrawer()} />, - title: t('AbpIdentity::Users'), - })} - /> - ({ - title: t(route.params?.userId ? 'AbpIdentity::Edit' : 'AbpIdentity::NewUser'), - })} - /> - - ); -} diff --git a/templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js b/templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js deleted file mode 100644 index 03c988c8bf..0000000000 --- a/templates/app/react-native/src/screens/ChangePassword/ChangePasswordForm.js +++ /dev/null @@ -1,99 +0,0 @@ -import { Formik } from 'formik'; -import i18n from 'i18n-js'; -import { Container, Content, Form, Input, InputGroup, Item, Icon, Label } from 'native-base'; -import PropTypes from 'prop-types'; -import React, { useRef, useState } from 'react'; -import * as Yup from 'yup'; -import FormButtons from '../../components/FormButtons/FormButtons'; -import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; - -const ValidationSchema = Yup.object().shape({ - currentPassword: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), - newPassword: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), -}); - -function ChangePasswordForm({ submit, cancel }) { - const [showCurrentPassword, setShowCurrentPassword] = useState(false); - const [showNewPassword, setShowNewPassword] = useState(false); - - const currentPasswordRef = useRef(); - const newPasswordRef = useRef(); - - const onSubmit = values => { - submit({ - ...values, - newPasswordConfirm: values.newPassword, - }); - }; - - return ( - onSubmit(values)}> - {({ handleChange, handleBlur, handleSubmit, values, errors, isValid }) => ( - <> - - -
- - - - newPasswordRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('currentPassword')} - onBlur={handleBlur('currentPassword')} - value={values.currentPassword} - textContentType="password" - secureTextEntry={!showCurrentPassword} - /> - setShowCurrentPassword(!showCurrentPassword)} - /> - - - {errors.currentPassword} - - - - - setShowNewPassword(!showNewPassword)} - /> - - - {errors.newPassword} -
-
-
- - - )} -
- ); -} - -ChangePasswordForm.propTypes = { - submit: PropTypes.func.isRequired, - cancel: PropTypes.func.isRequired, -}; - -export default ChangePasswordForm; diff --git a/templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js b/templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js deleted file mode 100644 index 196c762a38..0000000000 --- a/templates/app/react-native/src/screens/ChangePassword/ChangePasswordScreen.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { changePassword } from '../../api/IdentityAPI'; -import LoadingActions from '../../store/actions/LoadingActions'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import ChangePasswordForm from './ChangePasswordForm'; - -function ChangePasswordScreen({ navigation, startLoading, stopLoading }) { - const submit = data => { - startLoading({ key: 'changePassword' }); - - changePassword(data) - .then(() => { - navigation.goBack(); - }) - .finally(() => stopLoading({ key: 'changePassword' })); - }; - - return navigation.goBack()} />; -} - -ChangePasswordScreen.propTypes = { - startLoading: PropTypes.func.isRequired, - stopLoading: PropTypes.func.isRequired, -}; - -export default connectToRedux({ - component: ChangePasswordScreen, - dispatchProps: { - startLoading: LoadingActions.start, - stopLoading: LoadingActions.stop, - }, -}); diff --git a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js deleted file mode 100644 index ff5801f914..0000000000 --- a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js +++ /dev/null @@ -1,84 +0,0 @@ -import { Formik } from 'formik'; -import i18n from 'i18n-js'; -import { Container, Content, Input, InputGroup, Label } from 'native-base'; -import PropTypes from 'prop-types'; -import React, { useRef } from 'react'; -import { StyleSheet } from 'react-native'; -import * as Yup from 'yup'; -import FormButtons from '../../components/FormButtons/FormButtons'; -import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; -import { usePermission } from '../../hooks/UsePermission'; - -const validations = { - name: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), -}; - -function CreateUpdateTenantForm({ editingTenant = {}, submit, remove }) { - const tenantNameRef = useRef(); - - const hasRemovePermission = usePermission('AbpTenantManagement.Tenants.Delete'); - - const onSubmit = values => { - submit({ - ...editingTenant, - ...values, - }); - }; - - return ( - onSubmit(values)}> - {({ handleChange, handleBlur, handleSubmit, values, errors, isValid }) => ( - <> - - - - - - - {errors.name} - - - - - )} - - ); -} - -CreateUpdateTenantForm.propTypes = { - editingTenant: PropTypes.object, - submit: PropTypes.func.isRequired, - remove: PropTypes.func.isRequired, -}; - -const styles = StyleSheet.create({ - container: { - marginBottom: 50, - }, -}); - -export default CreateUpdateTenantForm; diff --git a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js deleted file mode 100644 index eacbb98a2c..0000000000 --- a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantScreen.js +++ /dev/null @@ -1,77 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useState, useCallback } from 'react'; -import { useFocusEffect } from '@react-navigation/native'; -import { - createTenant, - getTenantById, - removeTenant, - updateTenant, -} from '../../api/TenantManagementAPI'; -import LoadingActions from '../../store/actions/LoadingActions'; -import { createLoadingSelector } from '../../store/selectors/LoadingSelectors'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import CreateUpdateTenantForm from './CreateUpdateTenantForm'; - -function CreateUpdateTenantScreen({ navigation, route, startLoading, stopLoading }) { - const [tenant, setTenant] = useState(); - const tenantId = route.params?.tenantId; - - const remove = () => { - startLoading({ key: 'removeTenant' }); - removeTenant(tenantId) - .then(() => navigation.goBack()) - .finally(() => stopLoading({ key: 'removeTenant' })); - }; - - useFocusEffect( - useCallback(() => { - if (tenantId) { - getTenantById(tenantId).then((data = {}) => setTenant(data)); - } - }, []), - ); - - const submit = data => { - startLoading({ key: 'saveTenant' }); - let request; - if (data.id) { - request = updateTenant(data, tenantId); - } else { - request = createTenant(data); - } - - request - .then(() => { - navigation.goBack(); - }) - .finally(() => stopLoading({ key: 'saveTenant' })); - }; - - const renderForm = () => ( - - ); - - if (tenantId && tenant) { - return renderForm(); - } - - if (!tenantId) { - return renderForm(); - } - - return null; -} - -CreateUpdateTenantScreen.propTypes = { - startLoading: PropTypes.func.isRequired, - stopLoading: PropTypes.func.isRequired, -}; - -export default connectToRedux({ - component: CreateUpdateTenantScreen, - stateProps: state => ({ loading: createLoadingSelector()(state) }), - dispatchProps: { - startLoading: LoadingActions.start, - stopLoading: LoadingActions.stop, - }, -}); diff --git a/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js b/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js deleted file mode 100644 index 6757801c38..0000000000 --- a/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserForm.js +++ /dev/null @@ -1,242 +0,0 @@ -import { Formik } from 'formik'; -import i18n from 'i18n-js'; -import { - Body, - Button, - CheckBox, - Container, - Content, - Input, - InputGroup, - Item, - Icon, - Label, - ListItem, - Segment, - Text, -} from 'native-base'; -import PropTypes from 'prop-types'; -import React, { useRef, useState } from 'react'; -import { StyleSheet, TouchableOpacity, View } from 'react-native'; -import * as Yup from 'yup'; -import FormButtons from '../../components/FormButtons/FormButtons'; -import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; -import { usePermission } from '../../hooks/UsePermission'; -import UserRoles from './UserRoles'; - -const validations = { - userName: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), - email: Yup.string() - .email('AbpAccount::ThisFieldIsNotAValidEmailAddress.') - .required('AbpAccount::ThisFieldIsRequired.'), -}; - -let roleNames = []; - -function onChangeRoles(roles) { - roleNames = roles; -} - -function CreateUpdateUserForm({ editingUser = {}, submit, remove }) { - const [selectedTab, setSelectedTab] = useState(0); - const [showPassword, setShowPassword] = useState(false); - - const usernameRef = useRef(); - const nameRef = useRef(); - const surnameRef = useRef(); - const emailRef = useRef(); - const phoneNumberRef = useRef(); - const passwordRef = useRef(); - - const hasRemovePermission = usePermission('AbpIdentity.Users.Delete'); - - const onSubmit = values => { - submit({ - ...editingUser, - ...values, - roleNames, - }); - }; - - const passwordValidation = Yup.lazy(() => { - if (editingUser.id) { - return Yup.string(); - } - return Yup.string().required('AbpAccount::ThisFieldIsRequired.'); - }); - - return ( - onSubmit(values)}> - {({ handleChange, handleBlur, handleSubmit, values, errors, isValid, setFieldValue }) => ( - <> - - - - - - - - - - - nameRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('userName')} - onBlur={handleBlur('userName')} - value={values.userName} - /> - - {errors.userName} - - - surnameRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('name')} - onBlur={handleBlur('name')} - value={values.name} - /> - - - - emailRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('surname')} - onBlur={handleBlur('surname')} - value={values.surname} - /> - - - - phoneNumberRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('email')} - onBlur={handleBlur('email')} - value={values.email} - /> - - {errors.email} - - - - - {!editingUser.id ? ( - <> - - - - - setShowPassword(!showPassword)} - /> - - - {errors.password} - - ) : null} - - setFieldValue('lockoutEnabled', !values.lockoutEnabled)} - /> - - setFieldValue('lockoutEnabled', !values.lockoutEnabled)}> - {i18n.t('AbpIdentity::DisplayName:LockoutEnabled')} - - - - - setFieldValue('twoFactorEnabled', !values.twoFactorEnabled)} - /> - - setFieldValue('twoFactorEnabled', !values.twoFactorEnabled)}> - {i18n.t('AbpIdentity::DisplayName:TwoFactorEnabled')} - - - - - - - - - - - - )} - - ); -} - -CreateUpdateUserForm.propTypes = { - editingUser: PropTypes.object, - submit: PropTypes.func.isRequired, - remove: PropTypes.func.isRequired, -}; - -const styles = StyleSheet.create({ - container: { - marginBottom: 50, - }, -}); - -export default CreateUpdateUserForm; diff --git a/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js b/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js deleted file mode 100644 index e900fde8fc..0000000000 --- a/templates/app/react-native/src/screens/CreateUpdateUser/CreateUpdateUserScreen.js +++ /dev/null @@ -1,69 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useEffect, useState } from 'react'; -import { createUser, getUserById, removeUser, updateUser } from '../../api/IdentityAPI'; -import LoadingActions from '../../store/actions/LoadingActions'; -import { createLoadingSelector } from '../../store/selectors/LoadingSelectors'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import CreateUpdateUserForm from './CreateUpdateUserForm'; - -function CreateUpdateUserScreen({ navigation, route, startLoading, stopLoading }) { - const [user, setUser] = useState(); - const userId = route.params?.userId; - - const remove = () => { - startLoading({ key: 'remove user' }); - removeUser(userId) - .then(() => navigation.goBack()) - .finally(() => stopLoading({ key: 'remove user' })); - }; - - useEffect(() => { - if (userId) { - getUserById(userId).then((data = {}) => setUser(data)); - } - }, []); - - const submit = data => { - startLoading({ key: 'saveUser' }); - let request; - if (data.id) { - request = updateUser(data, userId); - } else { - request = createUser(data); - } - - request - .then(() => { - navigation.goBack(); - }) - .finally(() => stopLoading({ key: 'saveUser' })); - }; - - const renderForm = () => ( - - ); - - if (userId && user) { - return renderForm(); - } - - if (!userId) { - return renderForm(); - } - - return null; -} - -CreateUpdateUserScreen.propTypes = { - startLoading: PropTypes.func.isRequired, - stopLoading: PropTypes.func.isRequired, -}; - -export default connectToRedux({ - component: CreateUpdateUserScreen, - stateProps: state => ({ loading: createLoadingSelector()(state) }), - dispatchProps: { - startLoading: LoadingActions.start, - stopLoading: LoadingActions.stop, - }, -}); diff --git a/templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js b/templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js deleted file mode 100644 index 9e7b45ebf0..0000000000 --- a/templates/app/react-native/src/screens/CreateUpdateUser/UserRoles.js +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import PropTypes from 'prop-types'; -import { List, ListItem, CheckBox, Body, Text } from 'native-base'; -import { TouchableOpacity } from 'react-native'; -import { getRoles, getUserRoles } from '../../api/IdentityAPI'; - -function UserRoles({ editingUser = {}, onChangeRoles }) { - const [roles, setRoles] = useState([]); - - const onPress = index => { - setRoles( - roles.map((role, i) => ({ - ...role, - isSelected: index === i ? !role.isSelected : role.isSelected, - })), - ); - }; - - useEffect(() => { - const requests = [getRoles()]; - if (editingUser.id) requests.push(getUserRoles(editingUser.id)); - - Promise.all(requests).then(([allRoles = [], userRoles = []]) => { - setRoles( - allRoles.map(role => ({ - ...role, - isSelected: editingUser.id - ? !!userRoles?.find(userRole => userRole?.id === role?.id) - : role.isDefault, - })), - ); - }); - }, []); - - useEffect(() => { - onChangeRoles(roles.filter(role => role.isSelected).map(role => role.name)); - }, [roles]); - - return ( - - {roles.map((role, index) => ( - - onPress(index)} /> - - onPress(index)}> - {role.name} - - - - ))} - - ); -} - -UserRoles.propTypes = { - editingUser: PropTypes.objectOf(PropTypes.any).isRequired, - onChangeRoles: PropTypes.func.isRequired, -}; - -export default UserRoles; diff --git a/templates/app/react-native/src/screens/Home/HomeScreen.js b/templates/app/react-native/src/screens/Home/HomeScreen.js deleted file mode 100644 index 63140d9a8a..0000000000 --- a/templates/app/react-native/src/screens/Home/HomeScreen.js +++ /dev/null @@ -1,34 +0,0 @@ -import i18n from 'i18n-js'; -import { Text } from 'native-base'; -import React from 'react'; -import { StyleSheet, View } from 'react-native'; - -function HomeScreen() { - return ( - - {i18n.t('::Welcome')} - {i18n.t('::LongWelcomeMessage')} - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - paddingHorizontal: 20, - backgroundColor: '#fff', - }, - centeredText: { - textAlign: 'center', - }, - title: { - marginBottom: 30, - fontSize: 32, - fontWeight: '300', - textAlign: 'center', - }, -}); - -export default HomeScreen; diff --git a/templates/app/react-native/src/screens/Login/LoginScreen.js b/templates/app/react-native/src/screens/Login/LoginScreen.js deleted file mode 100644 index 9a010a4484..0000000000 --- a/templates/app/react-native/src/screens/Login/LoginScreen.js +++ /dev/null @@ -1,128 +0,0 @@ -import { Formik } from 'formik'; -import i18n from 'i18n-js'; -import { - Button, - Container, - Content, - Form, - Input, - InputGroup, - Item, - Label, - Text, - Icon, -} from 'native-base'; -import PropTypes from 'prop-types'; -import React, { useState } from 'react'; -import { View } from 'react-native'; -import * as Yup from 'yup'; -import { login } from '../../api/AccountAPI'; -import TenantBox from '../../components/TenantBox/TenantBox'; -import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; -import AppActions from '../../store/actions/AppActions'; -import LoadingActions from '../../store/actions/LoadingActions'; -import PersistentStorageActions from '../../store/actions/PersistentStorageActions'; -import { connectToRedux } from '../../utils/ReduxConnect'; - -const ValidationSchema = Yup.object().shape({ - username: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), - password: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), -}); - -function LoginScreen({ startLoading, stopLoading, setToken, fetchAppConfig }) { - const [showTenantSelection, setShowTenantSelection] = useState(false); - const [showPassword, setShowPassword] = useState(false); - - const toggleTenantSelection = () => { - setShowTenantSelection(!showTenantSelection); - }; - - const submit = ({ username, password }) => { - startLoading({ key: 'login' }); - login({ username, password }) - .then(data => - setToken({ - ...data, - expire_time: new Date().valueOf() + data.expires_in, - scope: undefined, - }), - ) - .then( - () => - new Promise(resolve => - fetchAppConfig({ showLoading: false, callback: () => resolve(true) }), - ), - ) - .finally(() => stopLoading({ key: 'login' })); - }; - - return ( - - - {!showTenantSelection ? ( - - - {({ handleChange, handleBlur, handleSubmit, values, errors }) => ( -
- - - - - {errors.username} - - - - - setShowPassword(!showPassword)} - /> - - - {errors.password} - - - -
- )} -
-
- ) : null} -
- ); -} - -LoginScreen.propTypes = { - startLoading: PropTypes.func.isRequired, - stopLoading: PropTypes.func.isRequired, - setToken: PropTypes.func.isRequired, - fetchAppConfig: PropTypes.func.isRequired, -}; - -export default connectToRedux({ - component: LoginScreen, - dispatchProps: { - startLoading: LoadingActions.start, - stopLoading: LoadingActions.stop, - fetchAppConfig: AppActions.fetchAppConfigAsync, - setToken: PersistentStorageActions.setToken, - }, -}); diff --git a/templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js b/templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js deleted file mode 100644 index 9135df2ade..0000000000 --- a/templates/app/react-native/src/screens/ManageProfile/ManageProfileForm.js +++ /dev/null @@ -1,122 +0,0 @@ -import { Formik } from 'formik'; -import i18n from 'i18n-js'; -import { Container, Content, Form, Input, InputGroup, Label } from 'native-base'; -import PropTypes from 'prop-types'; -import React, { useRef } from 'react'; -import * as Yup from 'yup'; -import FormButtons from '../../components/FormButtons/FormButtons'; -import ValidationMessage from '../../components/ValidationMessage/ValidationMessage'; - -const ValidationSchema = Yup.object().shape({ - userName: Yup.string().required('AbpAccount::ThisFieldIsRequired.'), - email: Yup.string() - .required('AbpAccount::ThisFieldIsRequired.') - .email('AbpAccount::ThisFieldIsNotAValidEmailAddress.'), -}); - -function ManageProfileForm({ editingUser = {}, submit, cancel }) { - const usernameRef = useRef(); - const nameRef = useRef(); - const surnameRef = useRef(); - const emailRef = useRef(); - const phoneNumberRef = useRef(); - - const onSubmit = values => { - submit({ - ...editingUser, - ...values, - }); - }; - - return ( - onSubmit(values)}> - {({ handleChange, handleBlur, handleSubmit, values, errors, isValid }) => ( - <> - - -
- - - nameRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('userName')} - onBlur={handleBlur('userName')} - value={values.userName} - abpInput - /> - - {errors.userName} - - - surnameRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('name')} - onBlur={handleBlur('name')} - value={values.name} - /> - - - - phoneNumberRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('surname')} - onBlur={handleBlur('surname')} - value={values.surname} - /> - - - - emailRef.current._root.focus()} - returnKeyType="next" - onChangeText={handleChange('phoneNumber')} - onBlur={handleBlur('phoneNumber')} - value={values.phoneNumber} - /> - - - - - - {errors.email} -
-
-
- - - )} -
- ); -} - -ManageProfileForm.propTypes = { - editingUser: PropTypes.object.isRequired, - submit: PropTypes.func.isRequired, - cancel: PropTypes.func.isRequired, -}; - -export default ManageProfileForm; diff --git a/templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js b/templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js deleted file mode 100644 index 1f2e577a37..0000000000 --- a/templates/app/react-native/src/screens/ManageProfile/ManageProfileScreen.js +++ /dev/null @@ -1,50 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import PropTypes from 'prop-types'; -import { updateProfileDetail, getProfileDetail } from '../../api/IdentityAPI'; -import ManageProfileForm from './ManageProfileForm'; -import LoadingActions from '../../store/actions/LoadingActions'; -import { connectToRedux } from '../../utils/ReduxConnect'; - -function ManageProfileScreen({ navigation, startLoading, stopLoading }) { - const [user, setUser] = useState(); - - useEffect(() => { - if (!user) { - startLoading({ key: 'manageProfile' }); - getProfileDetail() - .then((data = {}) => setUser(data)) - .finally(() => stopLoading({ key: 'manageProfile' })); - } - }); - - const submit = data => { - startLoading({ key: 'manageProfile' }); - - updateProfileDetail(data) - .then(() => { - navigation.goBack(); - }) - .finally(() => stopLoading({ key: 'manageProfile' })); - }; - - return ( - <> - {user ? ( - navigation.goBack()} /> - ) : null} - - ); -} - -ManageProfileScreen.propTypes = { - startLoading: PropTypes.func.isRequired, - stopLoading: PropTypes.func.isRequired, -}; - -export default connectToRedux({ - component: ManageProfileScreen, - dispatchProps: { - startLoading: LoadingActions.start, - stopLoading: LoadingActions.stop, - }, -}); diff --git a/templates/app/react-native/src/screens/Settings/SettingsScreen.js b/templates/app/react-native/src/screens/Settings/SettingsScreen.js deleted file mode 100644 index 80fc93e0b4..0000000000 --- a/templates/app/react-native/src/screens/Settings/SettingsScreen.js +++ /dev/null @@ -1,145 +0,0 @@ -import i18n from 'i18n-js'; -import { - Body, - Button, - Icon, - Label, - Left, - List, - ListItem, - Picker, - Right, - Text, - Thumbnail, -} from 'native-base'; -import PropTypes from 'prop-types'; -import React, { useCallback, useState } from 'react'; -import { View } from 'react-native'; -import { useFocusEffect } from '@react-navigation/native'; -import { getProfileDetail } from '../../api/IdentityAPI'; -import AppActions from '../../store/actions/AppActions'; -import { - createLanguageSelector, - createLanguagesSelector, -} from '../../store/selectors/AppSelectors'; -import { connectToRedux } from '../../utils/ReduxConnect'; -import { createTenantSelector } from '../../store/selectors/PersistentStorageSelectors'; - -function SettingsScreen({ - navigation, - language, - languages, - setLanguageAsync, - logoutAsync, - tenant = {}, -}) { - const [user, setUser] = useState({}); - - const fetchUser = () => { - getProfileDetail().then(data => { - setUser(data || {}); - }); - }; - - useFocusEffect( - useCallback(() => { - fetchUser(); - }, []), - ); - - return ( - - - - navigation.navigate('ManageProfile')}> - - - - - {tenant.name ? `${tenant.name} / ` : ''} - {user.userName ? `${user.userName}` : ''} - - {user.email} - - - - - - - - - navigation.navigate('ChangePassword')}> - - {i18n.t('AbpUi::ChangePassword')} - - - - - - - - - - - - } - onValueChange={value => setLanguageAsync(value)} - selectedValue={language.cultureName} - textStyle={{ paddingLeft: 0 }}> - {languages.map(lang => ( - - ))} - - - - - - - - ); -} - -SettingsScreen.propTypes = { - setLanguageAsync: PropTypes.func.isRequired, - logoutAsync: PropTypes.func.isRequired, - language: PropTypes.object.isRequired, - languages: PropTypes.array.isRequired, - tenant: PropTypes.object.isRequired, -}; - -export default connectToRedux({ - component: SettingsScreen, - stateProps: state => ({ - languages: createLanguagesSelector()(state), - language: createLanguageSelector()(state), - tenant: createTenantSelector()(state), - }), - dispatchProps: { - setLanguageAsync: AppActions.setLanguageAsync, - logoutAsync: AppActions.logoutAsync, - }, -}); diff --git a/templates/app/react-native/src/screens/Tenants/TenantsScreen.js b/templates/app/react-native/src/screens/Tenants/TenantsScreen.js deleted file mode 100644 index e937175dfa..0000000000 --- a/templates/app/react-native/src/screens/Tenants/TenantsScreen.js +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import i18n from 'i18n-js'; -import { ListItem, Text, Icon, Left, Body, Fab } from 'native-base'; -import { StyleSheet } from 'react-native'; -import { getTenants } from '../../api/TenantManagementAPI'; -import { activeTheme } from '../../theme/variables'; -import DataList from '../../components/DataList/DataList'; -import { withPermission } from '../../hocs/PermissionHOC'; - -const CreateTenantButtonWithPermission = withPermission(Fab, 'AbpTenantManagement.Tenants.Create'); - -function TenantsScreen({ navigation }) { - return ( - <> - ( - navigateToCreateUpdateTenantScreen(navigation, tenant)}> - - - {tenant.name} - - - - )} - /> - - navigation.navigate('CreateUpdateTenant')}> - - - - ); -} - -const navigateToCreateUpdateTenantScreen = (navigation, tenant = {}) => { - navigation.navigate('CreateUpdateTenant', { - tenantId: tenant.id, - }); -}; - -const styles = StyleSheet.create({ - listItem: { - alignItems: 'center', - marginVertical: 3, - marginLeft: -15, - paddingTop: 5, - paddingBottom: 5, - paddingLeft: 15, - backgroundColor: '#f9f9f9', - width: '110%', - minHeight: 50, - }, -}); - -export default TenantsScreen; diff --git a/templates/app/react-native/src/screens/Users/UsersScreen.js b/templates/app/react-native/src/screens/Users/UsersScreen.js deleted file mode 100644 index 4dc25dc646..0000000000 --- a/templates/app/react-native/src/screens/Users/UsersScreen.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { ListItem, Text, Icon, Left, Thumbnail, Body, Fab } from 'native-base'; -import { StyleSheet } from 'react-native'; -import { getUsers } from '../../api/IdentityAPI'; -import { activeTheme } from '../../theme/variables'; -import DataList from '../../components/DataList/DataList'; -import { withPermission } from '../../hocs/PermissionHOC'; - -const CreateUserButtonWithPermission = withPermission(Fab, 'AbpIdentity.Users.Create'); - -function UsersScreen({ navigation }) { - return ( - <> - ( - navigateToCreateUpdateUserScreen(navigation, user)}> - - - - {user.userName} - {user.email} - - - - )} - /> - - navigation.navigate('CreateUpdateUser')}> - - - - ); -} - -const navigateToCreateUpdateUserScreen = (navigation, user = {}) => { - navigation.navigate('CreateUpdateUser', { - userId: user.id, - }); -}; - -const styles = StyleSheet.create({ - container: { flex: 1 }, - listItem: { - alignItems: 'center', - marginVertical: 3, - marginLeft: -15, - paddingTop: 5, - paddingBottom: 5, - paddingLeft: 15, - backgroundColor: '#f9f9f9', - width: '110%', - }, -}); - -export default UsersScreen; diff --git a/templates/app/react-native/src/store/actions/AppActions.js b/templates/app/react-native/src/store/actions/AppActions.js deleted file mode 100644 index caefb017ea..0000000000 --- a/templates/app/react-native/src/store/actions/AppActions.js +++ /dev/null @@ -1,19 +0,0 @@ -import { createAction } from '@reduxjs/toolkit'; - -const fetchAppConfigAsync = createAction( - 'app/fetchAppConfigAsync', - ({ callback = () => {}, showLoading = true } = {}) => ({ payload: { callback, showLoading } }), -); - -const setAppConfig = createAction('app/setAppConfig'); - -const setLanguageAsync = createAction('app/setLanguageAsync'); - -const logoutAsync = createAction('app/logoutAsync'); - -export default { - fetchAppConfigAsync, - setAppConfig, - setLanguageAsync, - logoutAsync, -}; diff --git a/templates/app/react-native/src/store/actions/LoadingActions.js b/templates/app/react-native/src/store/actions/LoadingActions.js deleted file mode 100644 index 9705dc4e0f..0000000000 --- a/templates/app/react-native/src/store/actions/LoadingActions.js +++ /dev/null @@ -1,13 +0,0 @@ -import { createAction } from '@reduxjs/toolkit'; - -const start = createAction('loading/start'); - -const stop = createAction('loading/stop'); - -const clear = createAction('loading/clear'); - -export default { - start, - stop, - clear, -}; diff --git a/templates/app/react-native/src/store/actions/PersistentStorageActions.js b/templates/app/react-native/src/store/actions/PersistentStorageActions.js deleted file mode 100644 index 4b32d9ff31..0000000000 --- a/templates/app/react-native/src/store/actions/PersistentStorageActions.js +++ /dev/null @@ -1,13 +0,0 @@ -import { createAction } from '@reduxjs/toolkit'; - -const setToken = createAction('persistentStorage/setToken'); - -const setLanguage = createAction('persistentStorage/setLanguage'); - -const setTenant = createAction('persistentStorage/setTenant'); - -export default { - setToken, - setLanguage, - setTenant, -}; diff --git a/templates/app/react-native/src/store/index.js b/templates/app/react-native/src/store/index.js deleted file mode 100644 index 6333bc7ded..0000000000 --- a/templates/app/react-native/src/store/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import { configureStore } from '@reduxjs/toolkit'; -import createSagaMiddleware from 'redux-saga'; -import { persistStore, persistReducer } from 'redux-persist'; -import { AsyncStorage } from 'react-native'; -import { rootSaga } from './sagas'; -import rootReducer from './reducers'; - -const sagaMiddleware = createSagaMiddleware(); - -const persistConfig = { - key: 'root', - storage: AsyncStorage, - whitelist: ['persistentStorage'], -}; - -const persistedReducer = persistReducer(persistConfig, rootReducer); - -export const store = configureStore({ - reducer: persistedReducer, - middleware: [sagaMiddleware], -}); - -export const persistor = persistStore(store); - -sagaMiddleware.run(rootSaga); diff --git a/templates/app/react-native/src/store/reducers/AppReducer.js b/templates/app/react-native/src/store/reducers/AppReducer.js deleted file mode 100644 index a628f7f802..0000000000 --- a/templates/app/react-native/src/store/reducers/AppReducer.js +++ /dev/null @@ -1,12 +0,0 @@ -import { createReducer } from '@reduxjs/toolkit'; -import AppActions from '../actions/AppActions'; - -const initialState = { - appConfig: {}, -}; - -export default createReducer(initialState, builder => - builder.addCase(AppActions.setAppConfig, (state, action) => { - state.appConfig = action.payload; - }), -); diff --git a/templates/app/react-native/src/store/reducers/LoadingReducer.js b/templates/app/react-native/src/store/reducers/LoadingReducer.js deleted file mode 100644 index 99ccb14149..0000000000 --- a/templates/app/react-native/src/store/reducers/LoadingReducer.js +++ /dev/null @@ -1,23 +0,0 @@ -import { createReducer } from '@reduxjs/toolkit'; -import LoadingActions from '../actions/LoadingActions'; - -const initialState = { activeLoadings: {}, loading: false }; - -export default createReducer(initialState, builder => - builder - .addCase(LoadingActions.start, (state, action) => { - const { key, opacity } = action.payload; - return { - ...state, - actives: { ...state.activeLoadings, [key]: action }, - loading: true, - opacity, - }; - }) - .addCase(LoadingActions.stop, (state, action) => { - delete state.activeLoadings[action.payload.key]; - - state.loading = !!Object.keys(state.activeLoadings).length; - }) - .addCase(LoadingActions.clear, () => ({})), -); diff --git a/templates/app/react-native/src/store/reducers/PersistentStorageReducer.js b/templates/app/react-native/src/store/reducers/PersistentStorageReducer.js deleted file mode 100644 index d4d8f9a32b..0000000000 --- a/templates/app/react-native/src/store/reducers/PersistentStorageReducer.js +++ /dev/null @@ -1,17 +0,0 @@ -import { createReducer } from '@reduxjs/toolkit'; -import PersistentStorageActions from '../actions/PersistentStorageActions'; - -const initialState = { token: {}, language: null, tenant: {} }; - -export default createReducer(initialState, builder => - builder - .addCase(PersistentStorageActions.setToken, (state, action) => { - state.token = action.payload; - }) - .addCase(PersistentStorageActions.setLanguage, (state, action) => { - state.language = action.payload; - }) - .addCase(PersistentStorageActions.setTenant, (state, action) => { - state.tenant = action.payload; - }), -); diff --git a/templates/app/react-native/src/store/reducers/index.js b/templates/app/react-native/src/store/reducers/index.js deleted file mode 100644 index 8784be3042..0000000000 --- a/templates/app/react-native/src/store/reducers/index.js +++ /dev/null @@ -1,12 +0,0 @@ -import { combineReducers } from '@reduxjs/toolkit'; -import LoadingReducer from './LoadingReducer'; -import AppReducer from './AppReducer'; -import PersistentStorageReducer from './PersistentStorageReducer'; - -const rootReducer = combineReducers({ - loading: LoadingReducer, - app: AppReducer, - persistentStorage: PersistentStorageReducer, -}); - -export default rootReducer; diff --git a/templates/app/react-native/src/store/sagas/AppSaga.js b/templates/app/react-native/src/store/sagas/AppSaga.js deleted file mode 100644 index 7bcf4822ee..0000000000 --- a/templates/app/react-native/src/store/sagas/AppSaga.js +++ /dev/null @@ -1,34 +0,0 @@ -import { call, put, takeLatest, all } from 'redux-saga/effects'; -import { getApplicationConfiguration } from '../../api/ApplicationConfigurationAPI'; -import { Logout } from '../../api/AccountAPI'; -import AppActions from '../actions/AppActions'; -import LoadingActions from '../actions/LoadingActions'; -import PersistentStorageActions from '../actions/PersistentStorageActions'; - -function* fetchAppConfig({ payload: { showLoading, callback } }) { - if (showLoading) yield put(LoadingActions.start({ key: 'appConfig', opacity: 1 })); - const data = yield call(getApplicationConfiguration); - yield put(AppActions.setAppConfig(data)); - yield put(PersistentStorageActions.setLanguage(data.localization.currentCulture.cultureName)); - if (showLoading) yield put(LoadingActions.stop({ key: 'appConfig' })); - callback(); -} - -function* setLanguage(action) { - yield put(PersistentStorageActions.setLanguage(action.payload)); - yield put(AppActions.fetchAppConfigAsync()); -} - -function* logout() { - yield call(Logout); - yield put(PersistentStorageActions.setToken({})); - yield put(AppActions.fetchAppConfigAsync()); -} - -export default function*() { - yield all([ - takeLatest(AppActions.setLanguageAsync.type, setLanguage), - takeLatest(AppActions.fetchAppConfigAsync.type, fetchAppConfig), - takeLatest(AppActions.logoutAsync.type, logout), - ]); -} diff --git a/templates/app/react-native/src/store/sagas/index.js b/templates/app/react-native/src/store/sagas/index.js deleted file mode 100644 index 1b56c35c2c..0000000000 --- a/templates/app/react-native/src/store/sagas/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import { all, fork } from 'redux-saga/effects'; -import AppSaga from './AppSaga'; - -export function* rootSaga() { - yield all([fork(AppSaga)]); -} diff --git a/templates/app/react-native/src/store/selectors/AppSelectors.js b/templates/app/react-native/src/store/selectors/AppSelectors.js deleted file mode 100644 index 82e0000b71..0000000000 --- a/templates/app/react-native/src/store/selectors/AppSelectors.js +++ /dev/null @@ -1,19 +0,0 @@ -import { createSelector } from 'reselect'; - -const getApp = state => state.app; - -export function createAppConfigSelector() { - return createSelector([getApp], state => state.appConfig); -} - -export function createLanguageSelector() { - return createSelector([getApp], state => state?.appConfig?.localization?.currentCulture); -} - -export function createLanguagesSelector() { - return createSelector([getApp], state => state?.appConfig?.localization?.languages); -} - -export function createGrantedPolicySelector(key) { - return createSelector([getApp], state => state?.appConfig?.auth?.grantedPolicies[key] ?? false); -} diff --git a/templates/app/react-native/src/store/selectors/LoadingSelectors.js b/templates/app/react-native/src/store/selectors/LoadingSelectors.js deleted file mode 100644 index 47a798fe2c..0000000000 --- a/templates/app/react-native/src/store/selectors/LoadingSelectors.js +++ /dev/null @@ -1,11 +0,0 @@ -import { createSelector } from 'reselect'; - -const getLoading = state => state.loading; - -export function createLoadingSelector() { - return createSelector([getLoading], loading => loading.loading); -} - -export function createOpacitySelector() { - return createSelector([getLoading], loading => loading.opacity); -} diff --git a/templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js b/templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js deleted file mode 100644 index d5d86f8b7d..0000000000 --- a/templates/app/react-native/src/store/selectors/PersistentStorageSelectors.js +++ /dev/null @@ -1,11 +0,0 @@ -import { createSelector } from 'reselect'; - -const getPersistentStorage = state => state.persistentStorage; - -export function createTokenSelector() { - return createSelector([getPersistentStorage], persistentStorage => persistentStorage.token); -} - -export function createTenantSelector() { - return createSelector([getPersistentStorage], persistentStorage => persistentStorage.tenant); -} diff --git a/templates/app/react-native/src/theme/components/Badge.js b/templates/app/react-native/src/theme/components/Badge.js deleted file mode 100644 index 7db8c886ec..0000000000 --- a/templates/app/react-native/src/theme/components/Badge.js +++ /dev/null @@ -1,39 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const badgeTheme = { - '.primary': { - backgroundColor: variables.buttonPrimaryBg, - }, - '.warning': { - backgroundColor: variables.buttonWarningBg, - }, - '.info': { - backgroundColor: variables.buttonInfoBg, - }, - '.success': { - backgroundColor: variables.buttonSuccessBg, - }, - '.danger': { - backgroundColor: variables.buttonDangerBg, - }, - 'NativeBase.Text': { - color: variables.badgeColor, - fontSize: variables.fontSizeBase, - lineHeight: variables.lineHeight - 1, - textAlign: 'center', - paddingHorizontal: 3, - }, - backgroundColor: variables.badgeBg, - padding: variables.badgePadding, - paddingHorizontal: 6, - alignSelf: 'flex-start', - justifyContent: variables.platform === PLATFORM.IOS ? 'center' : undefined, - borderRadius: 13.5, - height: 27, - }; - return badgeTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Body.js b/templates/app/react-native/src/theme/components/Body.js deleted file mode 100644 index 9bf2b99268..0000000000 --- a/templates/app/react-native/src/theme/components/Body.js +++ /dev/null @@ -1,11 +0,0 @@ -// @flow - -export default () => { - const bodyTheme = { - flex: 1, - alignItems: 'center', - alignSelf: 'center', - }; - - return bodyTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Button.js b/templates/app/react-native/src/theme/components/Button.js deleted file mode 100644 index e1f106b18b..0000000000 --- a/templates/app/react-native/src/theme/components/Button.js +++ /dev/null @@ -1,384 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platformStyle } = variables; - const { platform } = variables; - const darkCommon = { - 'NativeBase.Text': { - color: variables.brandDark, - }, - 'NativeBase.Icon': { - color: variables.brandDark, - }, - 'NativeBase.IconNB': { - color: variables.brandDark, - }, - }; - const lightCommon = { - 'NativeBase.Text': { - color: variables.brandLight, - }, - 'NativeBase.Icon': { - color: variables.brandLight, - }, - 'NativeBase.IconNB': { - color: variables.brandLight, - }, - }; - const primaryCommon = { - 'NativeBase.Text': { - color: variables.buttonPrimaryBg, - }, - 'NativeBase.Icon': { - color: variables.buttonPrimaryBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonPrimaryBg, - }, - }; - const successCommon = { - 'NativeBase.Text': { - color: variables.buttonSuccessBg, - }, - 'NativeBase.Icon': { - color: variables.buttonSuccessBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonSuccessBg, - }, - }; - const infoCommon = { - 'NativeBase.Text': { - color: variables.buttonInfoBg, - }, - 'NativeBase.Icon': { - color: variables.buttonInfoBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonInfoBg, - }, - }; - const warningCommon = { - 'NativeBase.Text': { - color: variables.buttonWarningBg, - }, - 'NativeBase.Icon': { - color: variables.buttonWarningBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonWarningBg, - }, - }; - const dangerCommon = { - 'NativeBase.Text': { - color: variables.buttonDangerBg, - }, - 'NativeBase.Icon': { - color: variables.buttonDangerBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonDangerBg, - }, - }; - const buttonTheme = { - '.disabled': { - '.transparent': { - backgroundColor: 'transparent', - 'NativeBase.Text': { - color: variables.buttonDisabledBg, - }, - 'NativeBase.Icon': { - color: variables.buttonDisabledBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonDisabledBg, - }, - }, - 'NativeBase.Icon': { - color: variables.brandLight, - }, - 'NativeBase.IconNB': { - color: variables.brandLight, - }, - backgroundColor: variables.buttonDisabledBg, - }, - '.bordered': { - '.dark': { - ...darkCommon, - backgroundColor: 'transparent', - borderColor: variables.brandDark, - borderWidth: variables.borderWidth * 2, - }, - '.light': { - ...lightCommon, - backgroundColor: 'transparent', - borderColor: variables.brandLight, - borderWidth: variables.borderWidth * 2, - }, - '.primary': { - ...primaryCommon, - backgroundColor: 'transparent', - borderColor: variables.buttonPrimaryBg, - borderWidth: variables.borderWidth * 2, - }, - '.success': { - ...successCommon, - backgroundColor: 'transparent', - borderColor: variables.buttonSuccessBg, - borderWidth: variables.borderWidth * 2, - }, - '.info': { - ...infoCommon, - backgroundColor: 'transparent', - borderColor: variables.buttonInfoBg, - borderWidth: variables.borderWidth * 2, - }, - '.warning': { - ...warningCommon, - backgroundColor: 'transparent', - borderColor: variables.buttonWarningBg, - borderWidth: variables.borderWidth * 2, - }, - '.danger': { - ...dangerCommon, - backgroundColor: 'transparent', - borderColor: variables.buttonDangerBg, - borderWidth: variables.borderWidth * 2, - }, - '.disabled': { - backgroundColor: 'transparent', - borderColor: variables.buttonDisabledBg, - borderWidth: variables.borderWidth * 2, - 'NativeBase.Text': { - color: variables.buttonDisabledBg, - }, - }, - ...primaryCommon, - borderWidth: variables.borderWidth * 2, - elevation: null, - shadowColor: null, - shadowOffset: null, - shadowOpacity: null, - shadowRadius: null, - backgroundColor: 'transparent', - }, - - '.dark': { - '.bordered': { - ...darkCommon, - }, - backgroundColor: variables.brandDark, - }, - '.light': { - '.transparent': { - ...lightCommon, - backgroundColor: 'transparent', - }, - '.bordered': { - ...lightCommon, - }, - ...darkCommon, - backgroundColor: variables.brandLight, - }, - - '.primary': { - '.bordered': { - ...primaryCommon, - }, - backgroundColor: variables.buttonPrimaryBg, - }, - - '.success': { - '.bordered': { - ...successCommon, - }, - backgroundColor: variables.buttonSuccessBg, - }, - - '.info': { - '.bordered': { - ...infoCommon, - }, - backgroundColor: variables.buttonInfoBg, - }, - - '.warning': { - '.bordered': { - ...warningCommon, - }, - backgroundColor: variables.buttonWarningBg, - }, - - '.danger': { - '.bordered': { - ...dangerCommon, - }, - backgroundColor: variables.buttonDangerBg, - }, - - '.block': { - justifyContent: 'center', - alignSelf: 'stretch', - }, - - '.full': { - justifyContent: 'center', - alignSelf: 'stretch', - borderRadius: 0, - }, - - '.rounded': { - borderRadius: variables.borderRadiusLarge, - }, - - '.transparent': { - backgroundColor: 'transparent', - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - ...primaryCommon, - '.dark': { - ...darkCommon, - }, - '.danger': { - ...dangerCommon, - }, - '.warning': { - ...warningCommon, - }, - '.info': { - ...infoCommon, - }, - '.primary': { - ...primaryCommon, - }, - '.success': { - ...successCommon, - }, - '.light': { - ...lightCommon, - }, - '.disabled': { - backgroundColor: 'transparent', - borderColor: variables.buttonDisabledBg, - borderWidth: variables.borderWidth * 2, - 'NativeBase.Text': { - color: variables.buttonDisabledBg, - }, - 'NativeBase.Icon': { - color: variables.buttonDisabledBg, - }, - 'NativeBase.IconNB': { - color: variables.buttonDisabledBg, - }, - }, - }, - - '.small': { - height: 30, - 'NativeBase.Text': { - fontSize: 14, - }, - 'NativeBase.Icon': { - fontSize: 20, - paddingTop: 0, - }, - 'NativeBase.IconNB': { - fontSize: 20, - paddingTop: 0, - }, - }, - - '.large': { - height: 60, - 'NativeBase.Text': { - fontSize: 22, - }, - }, - - '.capitalize': {}, - - '.vertical': { - flexDirection: 'column', - height: null, - }, - - 'NativeBase.Text': { - fontFamily: variables.buttonFontFamily, - marginLeft: 0, - marginRight: 0, - color: variables.inverseTextColor, - fontSize: variables.buttonTextSize, - paddingHorizontal: 16, - backgroundColor: 'transparent', - }, - - 'NativeBase.Icon': { - color: variables.inverseTextColor, - fontSize: 24, - marginHorizontal: 16, - paddingTop: platform === PLATFORM.IOS ? 2 : undefined, - }, - 'NativeBase.IconNB': { - color: variables.inverseTextColor, - fontSize: 24, - marginHorizontal: 16, - paddingTop: platform === PLATFORM.IOS ? 2 : undefined, - }, - - '.iconLeft': { - 'NativeBase.Text': { - marginLeft: 0, - }, - 'NativeBase.IconNB': { - marginRight: 0, - marginLeft: 16, - }, - 'NativeBase.Icon': { - marginRight: 0, - marginLeft: 16, - }, - }, - '.iconRight': { - 'NativeBase.Text': { - marginRight: 0, - }, - 'NativeBase.IconNB': { - marginLeft: 0, - marginRight: 16, - }, - 'NativeBase.Icon': { - marginLeft: 0, - marginRight: 16, - }, - }, - '.picker': { - 'NativeBase.Text': { - '.note': { - fontSize: 16, - lineHeight: null, - }, - }, - }, - paddingVertical: variables.buttonPadding, - backgroundColor: variables.buttonPrimaryBg, - borderRadius: variables.borderRadiusBase, - borderColor: variables.buttonPrimaryBg, - borderWidth: null, - height: 45, - flexDirection: 'row', - elevation: 2, - shadowColor: platformStyle === PLATFORM.MATERIAL ? variables.brandDark : undefined, - shadowOffset: platformStyle === PLATFORM.MATERIAL ? { width: 0, height: 2 } : undefined, - shadowOpacity: platformStyle === PLATFORM.MATERIAL ? 0.2 : undefined, - shadowRadius: platformStyle === PLATFORM.MATERIAL ? 1.2 : undefined, - alignItems: 'center', - justifyContent: 'space-between', - }; - return buttonTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Card.js b/templates/app/react-native/src/theme/components/Card.js deleted file mode 100644 index c8e726336f..0000000000 --- a/templates/app/react-native/src/theme/components/Card.js +++ /dev/null @@ -1,37 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const cardTheme = { - '.transparent': { - shadowColor: null, - shadowOffset: null, - shadowOpacity: null, - shadowRadius: null, - elevation: null, - backgroundColor: 'transparent', - borderWidth: 0, - }, - '.noShadow': { - shadowColor: null, - shadowOffset: null, - shadowOpacity: null, - elevation: null, - }, - marginVertical: 5, - marginHorizontal: 2, - borderWidth: variables.borderWidth, - borderRadius: variables.cardBorderRadius, - borderColor: variables.cardBorderColor, - flexWrap: 'nowrap', - backgroundColor: variables.cardDefaultBg, - shadowColor: '#000', - shadowOffset: { width: 0, height: 2 }, - shadowOpacity: 0.1, - shadowRadius: 1.5, - elevation: 3, - }; - - return cardTheme; -}; diff --git a/templates/app/react-native/src/theme/components/CardItem.js b/templates/app/react-native/src/theme/components/CardItem.js deleted file mode 100644 index 745714bb03..0000000000 --- a/templates/app/react-native/src/theme/components/CardItem.js +++ /dev/null @@ -1,198 +0,0 @@ -// @flow - -import { StyleSheet } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platform } = variables; - const transparentBtnCommon = { - 'NativeBase.Text': { - fontSize: variables.DefaultFontSize - 3, - color: variables.sTabBarActiveTextColor, - }, - 'NativeBase.Icon': { - fontSize: variables.iconFontSize - 10, - color: variables.sTabBarActiveTextColor, - marginHorizontal: null, - }, - 'NativeBase.IconNB': { - fontSize: variables.iconFontSize - 10, - color: variables.sTabBarActiveTextColor, - }, - paddingVertical: null, - paddingHorizontal: null, - }; - - const cardItemTheme = { - 'NativeBase.Left': { - 'NativeBase.Body': { - 'NativeBase.Text': { - '.note': { - color: variables.listNoteColor, - fontWeight: '400', - marginRight: 20, - }, - }, - flex: 1, - marginLeft: 10, - alignItems: null, - }, - 'NativeBase.Icon': { - fontSize: variables.iconFontSize, - }, - 'NativeBase.IconNB': { - fontSize: variables.iconFontSize, - }, - 'NativeBase.Text': { - marginLeft: 10, - alignSelf: 'center', - }, - 'NativeBase.Button': { - '.transparent': { - ...transparentBtnCommon, - paddingRight: variables.cardItemPadding + 5, - }, - }, - flex: 1, - flexDirection: 'row', - alignItems: 'center', - }, - '.content': { - 'NativeBase.Text': { - color: platform === PLATFORM.IOS ? '#555' : '#222', - fontSize: variables.DefaultFontSize - 2, - }, - }, - '.cardBody': { - padding: -5, - 'NativeBase.Text': { - marginTop: 5, - }, - }, - 'NativeBase.Body': { - 'NativeBase.Text': { - '.note': { - color: variables.listNoteColor, - fontWeight: '200', - marginRight: 20, - }, - }, - 'NativeBase.Button': { - '.transparent': { - ...transparentBtnCommon, - paddingRight: variables.cardItemPadding + 5, - alignSelf: 'stretch', - }, - }, - flex: 1, - alignSelf: 'stretch', - alignItems: 'flex-start', - }, - 'NativeBase.Right': { - 'NativeBase.Badge': { - alignSelf: null, - }, - 'NativeBase.Button': { - '.transparent': { - ...transparentBtnCommon, - }, - alignSelf: null, - }, - 'NativeBase.Icon': { - alignSelf: null, - fontSize: variables.iconFontSize - 8, - color: variables.cardBorderColor, - }, - 'NativeBase.IconNB': { - alignSelf: null, - fontSize: variables.iconFontSize - 8, - color: variables.cardBorderColor, - }, - 'NativeBase.Text': { - fontSize: variables.DefaultFontSize - 1, - alignSelf: null, - }, - 'NativeBase.Thumbnail': { - alignSelf: null, - }, - 'NativeBase.Image': { - alignSelf: null, - }, - 'NativeBase.Radio': { - alignSelf: null, - }, - 'NativeBase.Checkbox': { - alignSelf: null, - }, - 'NativeBase.Switch': { - alignSelf: null, - }, - flex: 0.8, - }, - '.header': { - 'NativeBase.Text': { - fontSize: 16, - fontWeight: platform === PLATFORM.IOS ? '600' : '500', - }, - '.bordered': { - 'NativeBase.Text': { - color: variables.brandPrimary, - fontWeight: platform === PLATFORM.IOS ? '600' : '500', - }, - borderBottomWidth: variables.borderWidth, - }, - borderBottomWidth: null, - paddingVertical: variables.cardItemPadding + 5, - }, - '.footer': { - 'NativeBase.Text': { - fontSize: 16, - fontWeight: platform === PLATFORM.IOS ? '600' : '500', - }, - '.bordered': { - 'NativeBase.Text': { - color: variables.brandPrimary, - fontWeight: platform === PLATFORM.IOS ? '600' : '500', - }, - borderTopWidth: variables.borderWidth, - }, - borderBottomWidth: null, - }, - 'NativeBase.Text': { - '.note': { - color: variables.listNoteColor, - fontWeight: '200', - }, - }, - 'NativeBase.Icon': { - width: variables.iconFontSize + 5, - fontSize: variables.iconFontSize - 2, - }, - 'NativeBase.IconNB': { - width: variables.iconFontSize + 5, - fontSize: variables.iconFontSize - 2, - }, - '.bordered': { - borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: variables.cardBorderColor, - }, - '.first': { - borderTopLeftRadius: variables.cardBorderRadius, - borderTopRightRadius: variables.cardBorderRadius, - }, - '.last': { - borderBottomLeftRadius: variables.cardBorderRadius, - borderBottomRightRadius: variables.cardBorderRadius, - }, - flexDirection: 'row', - alignItems: 'center', - borderRadius: variables.cardBorderRadius, - padding: variables.cardItemPadding + 5, - paddingVertical: variables.cardItemPadding, - backgroundColor: variables.cardDefaultBg, - }; - - return cardItemTheme; -}; diff --git a/templates/app/react-native/src/theme/components/CheckBox.js b/templates/app/react-native/src/theme/components/CheckBox.js deleted file mode 100644 index ac280de985..0000000000 --- a/templates/app/react-native/src/theme/components/CheckBox.js +++ /dev/null @@ -1,38 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const checkBoxTheme = { - '.checked': { - 'NativeBase.Icon': { - color: variables.checkboxTickColor, - }, - 'NativeBase.IconNB': { - color: variables.checkboxTickColor, - }, - }, - 'NativeBase.Icon': { - color: 'transparent', - lineHeight: variables.CheckboxIconSize, - marginTop: variables.CheckboxIconMarginTop, - fontSize: variables.CheckboxFontSize, - }, - 'NativeBase.IconNB': { - color: 'transparent', - lineHeight: variables.CheckboxIconSize, - marginTop: variables.CheckboxIconMarginTop, - fontSize: variables.CheckboxFontSize, - }, - borderRadius: variables.CheckboxRadius, - overflow: 'hidden', - width: variables.checkboxSize, - height: variables.checkboxSize, - borderWidth: variables.CheckboxBorderWidth, - paddingLeft: variables.CheckboxPaddingLeft - 1, - paddingBottom: variables.CheckboxPaddingBottom, - left: 10, - }; - - return checkBoxTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Container.js b/templates/app/react-native/src/theme/components/Container.js deleted file mode 100644 index f2f57afa41..0000000000 --- a/templates/app/react-native/src/theme/components/Container.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow - -import { Platform, Dimensions } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -const deviceHeight = Dimensions.get('window').height; -export default (variables /* : * */ = variable) => { - const theme = { - flex: 1, - height: Platform.OS === PLATFORM.IOS ? deviceHeight : deviceHeight - 20, - backgroundColor: variables.containerBgColor, - }; - - return theme; -}; diff --git a/templates/app/react-native/src/theme/components/Content.js b/templates/app/react-native/src/theme/components/Content.js deleted file mode 100644 index e09a22a8a5..0000000000 --- a/templates/app/react-native/src/theme/components/Content.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -export default () => { - const contentTheme = { - flex: 1, - backgroundColor: 'transparent', - 'NativeBase.Segment': { - borderWidth: 0, - backgroundColor: 'transparent', - }, - }; - - return contentTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Fab.js b/templates/app/react-native/src/theme/components/Fab.js deleted file mode 100644 index 87520a690b..0000000000 --- a/templates/app/react-native/src/theme/components/Fab.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow - -export default () => { - const fabTheme = { - 'NativeBase.Button': { - alignItems: 'center', - padding: null, - justifyContent: 'center', - 'NativeBase.Icon': { - alignSelf: 'center', - fontSize: 20, - marginLeft: 0, - marginRight: 0, - }, - 'NativeBase.IconNB': { - alignSelf: 'center', - fontSize: 20, - marginLeft: 0, - marginRight: 0, - }, - }, - }; - - return fabTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Footer.js b/templates/app/react-native/src/theme/components/Footer.js deleted file mode 100644 index 49101fc0d9..0000000000 --- a/templates/app/react-native/src/theme/components/Footer.js +++ /dev/null @@ -1,117 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platformStyle } = variables; - const { platform } = variables; - - const iconCommon = { - 'NativeBase.Icon': { - color: variables.tabBarActiveTextColor, - }, - }; - const iconNBCommon = { - 'NativeBase.IconNB': { - color: variables.tabBarActiveTextColor, - }, - }; - const textCommon = { - 'NativeBase.Text': { - color: variables.tabBarActiveTextColor, - }, - }; - const footerTheme = { - 'NativeBase.Left': { - 'NativeBase.Button': { - '.transparent': { - backgroundColor: 'transparent', - borderColor: null, - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - ...iconCommon, - ...iconNBCommon, - ...textCommon, - }, - alignSelf: null, - ...iconCommon, - ...iconNBCommon, - // ...textCommon - }, - flex: 1, - alignSelf: 'center', - alignItems: 'flex-start', - }, - 'NativeBase.Body': { - flex: 1, - alignItems: 'center', - alignSelf: 'center', - flexDirection: 'row', - 'NativeBase.Button': { - alignSelf: 'center', - '.transparent': { - backgroundColor: 'transparent', - borderColor: null, - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - ...iconCommon, - ...iconNBCommon, - ...textCommon, - }, - '.full': { - height: variables.footerHeight, - paddingBottom: variables.footerPaddingBottom, - flex: 1, - }, - ...iconCommon, - ...iconNBCommon, - // ...textCommon - }, - }, - 'NativeBase.Right': { - 'NativeBase.Button': { - '.transparent': { - backgroundColor: 'transparent', - borderColor: null, - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - ...iconCommon, - ...iconNBCommon, - ...textCommon, - }, - alignSelf: null, - ...iconCommon, - ...iconNBCommon, - // ...textCommon - }, - flex: 1, - alignSelf: 'center', - alignItems: 'flex-end', - }, - backgroundColor: variables.footerDefaultBg, - flexDirection: 'row', - justifyContent: 'center', - borderTopWidth: - platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL - ? variables.borderWidth - : undefined, - borderColor: - platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? '#cbcbcb' : undefined, - height: variables.footerHeight, - paddingBottom: variables.footerPaddingBottom, - elevation: 3, - left: 0, - right: 0, - }; - return footerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/FooterTab.js b/templates/app/react-native/src/theme/components/FooterTab.js deleted file mode 100644 index 39e50fa891..0000000000 --- a/templates/app/react-native/src/theme/components/FooterTab.js +++ /dev/null @@ -1,78 +0,0 @@ -// @flow - -import { Platform } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platform } = variables; - - const footerTabTheme = { - 'NativeBase.Button': { - '.active': { - 'NativeBase.Text': { - color: variables.tabBarActiveTextColor, - fontSize: variables.tabBarTextSize, - lineHeight: 16, - }, - 'NativeBase.Icon': { - color: variables.tabBarActiveTextColor, - }, - 'NativeBase.IconNB': { - color: variables.tabBarActiveTextColor, - }, - backgroundColor: variables.tabActiveBgColor, - }, - flexDirection: null, - backgroundColor: 'transparent', - borderColor: null, - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - alignSelf: 'center', - flex: 1, - height: variables.footerHeight, - justifyContent: 'center', - '.badge': { - 'NativeBase.Badge': { - 'NativeBase.Text': { - fontSize: 11, - fontWeight: platform === PLATFORM.IOS ? '600' : undefined, - lineHeight: 14, - }, - top: -3, - alignSelf: 'center', - left: 10, - zIndex: 99, - height: 18, - padding: 1.7, - paddingHorizontal: 3, - }, - 'NativeBase.Icon': { - marginTop: -18, - }, - }, - 'NativeBase.Icon': { - color: variables.tabBarTextColor, - }, - 'NativeBase.IconNB': { - color: variables.tabBarTextColor, - }, - 'NativeBase.Text': { - color: variables.tabBarTextColor, - fontSize: variables.tabBarTextSize, - lineHeight: 16, - }, - }, - backgroundColor: Platform.OS === PLATFORM.ANDROID ? variables.footerDefaultBg : undefined, - flexDirection: 'row', - justifyContent: 'space-between', - flex: 1, - alignSelf: 'stretch', - }; - - return footerTabTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Form.js b/templates/app/react-native/src/theme/components/Form.js deleted file mode 100644 index 48a638fff4..0000000000 --- a/templates/app/react-native/src/theme/components/Form.js +++ /dev/null @@ -1,86 +0,0 @@ -// @flow - -export default () => { - const theme = { - 'NativeBase.Item': { - '.fixedLabel': { - 'NativeBase.Label': { - paddingLeft: null, - }, - marginLeft: 15, - }, - '.inlineLabel': { - 'NativeBase.Label': { - paddingLeft: null, - }, - marginLeft: 15, - }, - '.placeholderLabel': { - 'NativeBase.Input': {}, - }, - '.stackedLabel': { - 'NativeBase.Label': { - top: 5, - paddingLeft: null, - }, - 'NativeBase.Input': { - paddingLeft: null, - marginLeft: null, - }, - 'NativeBase.Icon': { - marginTop: 36, - }, - marginLeft: 15, - }, - '.floatingLabel': { - 'NativeBase.Input': { - paddingLeft: null, - top: 10, - marginLeft: null, - }, - 'NativeBase.Label': { - left: 0, - top: 6, - }, - 'NativeBase.Icon': { - top: 6, - }, - marginTop: 15, - marginLeft: 15, - }, - '.regular': { - 'NativeBase.Label': { - left: 0, - }, - marginLeft: 0, - }, - '.rounded': { - 'NativeBase.Label': { - left: 0, - }, - marginLeft: 0, - }, - '.underline': { - 'NativeBase.Label': { - left: 0, - top: 0, - position: 'relative', - }, - 'NativeBase.Input': { - left: -15, - }, - marginLeft: 15, - }, - '.last': { - marginLeft: 0, - paddingLeft: 15, - }, - 'NativeBase.Label': { - paddingRight: 5, - }, - marginLeft: 15, - }, - }; - - return theme; -}; diff --git a/templates/app/react-native/src/theme/components/H1.js b/templates/app/react-native/src/theme/components/H1.js deleted file mode 100644 index 0f45abc872..0000000000 --- a/templates/app/react-native/src/theme/components/H1.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const h1Theme = { - color: variables.textColor, - fontSize: variables.fontSizeH1, - lineHeight: variables.lineHeightH1, - }; - - return h1Theme; -}; diff --git a/templates/app/react-native/src/theme/components/H2.js b/templates/app/react-native/src/theme/components/H2.js deleted file mode 100644 index 4763fdf92d..0000000000 --- a/templates/app/react-native/src/theme/components/H2.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const h2Theme = { - color: variables.textColor, - fontSize: variables.fontSizeH2, - lineHeight: variables.lineHeightH2, - }; - - return h2Theme; -}; diff --git a/templates/app/react-native/src/theme/components/H3.js b/templates/app/react-native/src/theme/components/H3.js deleted file mode 100644 index 0765853f15..0000000000 --- a/templates/app/react-native/src/theme/components/H3.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const h3Theme = { - color: variables.textColor, - fontSize: variables.fontSizeH3, - lineHeight: variables.lineHeightH3, - }; - - return h3Theme; -}; diff --git a/templates/app/react-native/src/theme/components/Header.js b/templates/app/react-native/src/theme/components/Header.js deleted file mode 100644 index ebb9f5b331..0000000000 --- a/templates/app/react-native/src/theme/components/Header.js +++ /dev/null @@ -1,389 +0,0 @@ -// @flow - -import { PixelRatio, StatusBar } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platformStyle } = variables; - const { platform } = variables; - - const headerTheme = { - '.span': { - height: 128, - 'NativeBase.Left': { - alignSelf: 'flex-start', - }, - 'NativeBase.Body': { - alignSelf: 'flex-end', - alignItems: 'flex-start', - justifyContent: 'center', - paddingBottom: 26, - }, - 'NativeBase.Right': { - alignSelf: 'flex-start', - }, - }, - '.hasSubtitle': { - 'NativeBase.Body': { - 'NativeBase.Title': { - fontSize: variables.titleFontSize - 2, - fontFamily: variables.titleFontfamily, - textAlign: 'center', - fontWeight: '500', - paddingBottom: 3, - }, - 'NativeBase.Subtitle': { - fontSize: variables.subTitleFontSize, - fontFamily: variables.titleFontfamily, - color: variables.subtitleColor, - textAlign: 'center', - }, - }, - }, - '.transparent': { - backgroundColor: 'transparent', - borderBottomColor: 'transparent', - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - paddingTop: platform === PLATFORM.ANDROID ? StatusBar.currentHeight : undefined, - height: - platform === PLATFORM.ANDROID - ? variables.toolbarHeight + StatusBar.currentHeight - : variables.toolbarHeight, - }, - '.noShadow': { - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - }, - '.hasTabs': { - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - borderBottomWidth: null, - }, - '.hasSegment': { - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - borderBottomWidth: null, - 'NativeBase.Left': { - flex: 0.3, - }, - 'NativeBase.Right': { - flex: 0.3, - }, - 'NativeBase.Body': { - flex: 1, - 'NativeBase.Segment': { - marginRight: 0, - alignSelf: 'center', - 'NativeBase.Button': { - paddingLeft: 0, - paddingRight: 0, - }, - }, - }, - }, - '.noLeft': { - 'NativeBase.Left': { - width: platform === PLATFORM.IOS ? undefined : 0, - flex: platform === PLATFORM.IOS ? 1 : 0, - }, - 'NativeBase.Body': { - 'NativeBase.Title': { - paddingLeft: platform === PLATFORM.IOS ? undefined : 10, - }, - 'NativeBase.Subtitle': { - paddingLeft: platform === PLATFORM.IOS ? undefined : 10, - }, - }, - }, - 'NativeBase.Button': { - justifyContent: 'center', - alignSelf: 'center', - alignItems: 'center', - '.transparent': { - 'NativeBase.Text': { - color: variables.toolbarBtnTextColor, - fontWeight: '600', - }, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - }, - paddingHorizontal: variables.buttonPadding, - }, - paddingHorizontal: 15, - }, - '.searchBar': { - 'NativeBase.Item': { - 'NativeBase.Icon': { - backgroundColor: 'transparent', - color: variables.dropdownLinkColor, - fontSize: variables.toolbarSearchIconSize, - alignItems: 'center', - marginTop: 2, - paddingRight: 10, - paddingLeft: 10, - }, - 'NativeBase.IconNB': { - backgroundColor: 'transparent', - color: null, - alignSelf: 'center', - }, - 'NativeBase.Input': { - alignSelf: 'center', - lineHeight: null, - height: variables.searchBarInputHeight, - }, - alignSelf: 'center', - alignItems: 'center', - justifyContent: 'flex-start', - flex: 1, - height: variables.searchBarHeight, - borderColor: 'transparent', - backgroundColor: variables.toolbarInputColor, - }, - 'NativeBase.Button': { - '.transparent': { - 'NativeBase.Text': { - fontWeight: '500', - }, - paddingHorizontal: null, - paddingLeft: platform === PLATFORM.IOS ? 10 : null, - }, - paddingHorizontal: platform === PLATFORM.IOS ? undefined : null, - width: platform === PLATFORM.IOS ? undefined : 0, - height: platform === PLATFORM.IOS ? undefined : 0, - }, - }, - '.rounded': { - 'NativeBase.Item': { - borderRadius: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 25 : 3, - }, - }, - 'NativeBase.Left': { - 'NativeBase.Button': { - '.hasText': { - marginLeft: -10, - height: 30, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - fontSize: variables.iconHeaderSize, - marginTop: 2, - marginRight: 5, - marginLeft: 2, - }, - 'NativeBase.Text': { - color: variables.toolbarBtnTextColor, - fontSize: platform === PLATFORM.IOS ? 17 : 0, - marginLeft: 7, - lineHeight: 19.5, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - fontSize: variables.iconHeaderSize, - marginTop: 2, - marginRight: 5, - marginLeft: 2, - }, - }, - '.transparent': { - marginLeft: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? -3 : 0, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - fontSize: - platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL - ? variables.iconHeaderSize + 1 - : variables.iconHeaderSize, - marginTop: 0, - marginRight: 2, - marginLeft: 1, - paddingTop: 1, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - fontSize: - platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL - ? variables.iconHeaderSize + 1 - : variables.iconHeaderSize - 2, - marginTop: 0, - marginRight: 2, - marginLeft: 1, - paddingTop: 1, - }, - 'NativeBase.Text': { - color: variables.toolbarBtnTextColor, - fontSize: platform === PLATFORM.IOS ? 17 : 0, - top: platform === PLATFORM.IOS ? 1 : -1.5, - paddingLeft: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 2 : 5, - paddingRight: - platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? undefined : 10, - }, - backgroundColor: 'transparent', - borderColor: null, - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - }, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - }, - alignSelf: null, - paddingRight: variables.buttonPadding, - paddingLeft: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 4 : 8, - }, - flex: platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 1 : 0.4, - alignSelf: 'center', - alignItems: 'flex-start', - }, - 'NativeBase.Body': { - flex: 1, - alignItems: - platform === PLATFORM.IOS && platformStyle !== PLATFORM.MATERIAL ? 'center' : 'flex-start', - alignSelf: 'center', - 'NativeBase.Segment': { - borderWidth: 0, - alignSelf: 'flex-end', - marginRight: platform === PLATFORM.IOS ? -40 : -55, - }, - 'NativeBase.Button': { - alignSelf: 'center', - '.transparent': { - backgroundColor: 'transparent', - }, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - }, - 'NativeBase.Text': { - color: variables.inverseTextColor, - backgroundColor: 'transparent', - }, - }, - }, - 'NativeBase.Right': { - 'NativeBase.Button': { - '.hasText': { - height: 30, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - fontSize: variables.iconHeaderSize - 2, - marginTop: 2, - marginRight: 2, - marginLeft: 5, - }, - 'NativeBase.Text': { - color: variables.toolbarBtnTextColor, - fontSize: platform === PLATFORM.IOS ? 17 : 14, - lineHeight: 19.5, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - fontSize: variables.iconHeaderSize - 2, - marginTop: 2, - marginRight: 2, - marginLeft: 5, - }, - }, - '.transparent': { - marginRight: platform === PLATFORM.IOS ? -9 : -5, - paddingLeft: 15, - paddingRight: 12, - paddingHorizontal: 15, - borderRadius: 50, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - fontSize: variables.iconHeaderSize - 2, - marginTop: 0, - marginLeft: 2, - marginRight: 0, - // paddingTop: 0 - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - fontSize: variables.iconHeaderSize - 2, - marginTop: 0, - marginLeft: 2, - marginRight: 0, - // paddingTop: 0 - }, - 'NativeBase.Text': { - color: variables.toolbarBtnTextColor, - fontSize: platform === PLATFORM.IOS ? 17 : 14, - top: platform === PLATFORM.IOS ? 1 : -1.5, - paddingRight: - platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL - ? 0 - : undefined, - }, - backgroundColor: 'transparent', - borderColor: null, - elevation: 0, - shadowColor: null, - shadowOffset: null, - shadowRadius: null, - shadowOpacity: null, - }, - 'NativeBase.Icon': { - color: variables.toolbarBtnColor, - }, - 'NativeBase.IconNB': { - color: variables.toolbarBtnColor, - }, - alignSelf: null, - paddingHorizontal: variables.buttonPadding, - }, - flex: 1, - alignSelf: 'center', - alignItems: 'flex-end', - flexDirection: 'row', - justifyContent: 'flex-end', - }, - backgroundColor: variables.toolbarDefaultBg, - flexDirection: 'row', - // paddingHorizontal: 10, - paddingLeft: - platform === PLATFORM.IOS && variables.platformStyle !== PLATFORM.MATERIAL ? 6 : 10, - paddingRight: 10, - justifyContent: 'center', - paddingTop: platform === PLATFORM.IOS ? 18 : 0, - borderBottomWidth: platform === PLATFORM.IOS ? 1 / PixelRatio.getPixelSizeForLayoutSize(1) : 0, - borderBottomColor: variables.toolbarDefaultBorder, - height: - variables.platform === PLATFORM.IOS && variables.platformStyle === PLATFORM.MATERIAL - ? variables.toolbarHeight + 10 - : variables.toolbarHeight, - elevation: 3, - shadowColor: platformStyle === PLATFORM.MATERIAL ? '#000' : undefined, - shadowOffset: platformStyle === PLATFORM.MATERIAL ? { width: 0, height: 2 } : undefined, - shadowOpacity: platformStyle === PLATFORM.MATERIAL ? 0.2 : undefined, - shadowRadius: platformStyle === PLATFORM.MATERIAL ? 1.2 : undefined, - top: 0, - left: 0, - right: 0, - }; - - return headerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Icon.js b/templates/app/react-native/src/theme/components/Icon.js deleted file mode 100644 index d233562deb..0000000000 --- a/templates/app/react-native/src/theme/components/Icon.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const iconTheme = { - fontSize: variables.iconFontSize, - color: variable.textColor, - }; - - return iconTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Input.js b/templates/app/react-native/src/theme/components/Input.js deleted file mode 100644 index bc5b5b7da2..0000000000 --- a/templates/app/react-native/src/theme/components/Input.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const inputTheme = { - '.multiline': { - height: null, - }, - height: variables.inputHeightBase, - color: variables.inputColor, - paddingLeft: 5, - paddingRight: 5, - flex: 1, - fontSize: variables.inputFontSize, - }; - - return inputTheme; -}; diff --git a/templates/app/react-native/src/theme/components/InputGroup.js b/templates/app/react-native/src/theme/components/InputGroup.js deleted file mode 100644 index 9638ad20b2..0000000000 --- a/templates/app/react-native/src/theme/components/InputGroup.js +++ /dev/null @@ -1,132 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const inputGroupTheme = { - 'NativeBase.Icon': { - fontSize: 24, - color: variables.sTabBarActiveTextColor, - paddingHorizontal: 5, - }, - 'NativeBase.IconNB': { - fontSize: 24, - color: variables.sTabBarActiveTextColor, - paddingHorizontal: 5, - }, - 'NativeBase.Input': { - height: variables.inputHeightBase, - color: variables.inputColor, - paddingLeft: 5, - paddingRight: 5, - flex: 1, - fontSize: variables.inputFontSize, - lineHeight: variables.inputLineHeight, - }, - '.underline': { - '.success': { - borderColor: variables.inputSuccessBorderColor, - }, - '.error': { - borderColor: variables.inputErrorBorderColor, - }, - paddingLeft: 5, - borderWidth: variables.borderWidth, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputBorderColor, - }, - '.regular': { - '.success': { - borderColor: variables.inputSuccessBorderColor, - }, - '.error': { - borderColor: variables.inputErrorBorderColor, - }, - paddingLeft: 5, - borderWidth: variables.borderWidth, - borderColor: variables.inputBorderColor, - }, - '.rounded': { - '.success': { - borderColor: variables.inputSuccessBorderColor, - }, - '.error': { - borderColor: variables.inputErrorBorderColor, - }, - paddingLeft: 5, - borderWidth: variables.borderWidth, - borderRadius: variables.inputGroupRoundedBorderRadius, - borderColor: variables.inputBorderColor, - }, - - '.success': { - 'NativeBase.Icon': { - color: variables.inputSuccessBorderColor, - }, - 'NativeBase.IconNB': { - color: variables.inputSuccessBorderColor, - }, - '.rounded': { - borderRadius: 30, - borderColor: variables.inputSuccessBorderColor, - }, - '.regular': { - borderColor: variables.inputSuccessBorderColor, - }, - '.underline': { - borderWidth: variables.borderWidth, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputSuccessBorderColor, - }, - borderColor: variables.inputSuccessBorderColor, - }, - - '.error': { - 'NativeBase.Icon': { - color: variables.inputErrorBorderColor, - }, - 'NativeBase.IconNB': { - color: variables.inputErrorBorderColor, - }, - '.rounded': { - borderRadius: 30, - borderColor: variables.inputErrorBorderColor, - }, - '.regular': { - borderColor: variables.inputErrorBorderColor, - }, - '.underline': { - borderWidth: variables.borderWidth, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputErrorBorderColor, - }, - borderColor: variables.inputErrorBorderColor, - }, - '.disabled': { - 'NativeBase.Icon': { - color: '#384850', - }, - 'NativeBase.IconNB': { - color: '#384850', - }, - }, - - paddingLeft: 5, - borderWidth: variables.borderWidth, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputBorderColor, - backgroundColor: 'transparent', - flexDirection: 'row', - alignItems: 'center', - }; - - return inputGroupTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Item.js b/templates/app/react-native/src/theme/components/Item.js deleted file mode 100644 index 997504a084..0000000000 --- a/templates/app/react-native/src/theme/components/Item.js +++ /dev/null @@ -1,241 +0,0 @@ -// @flow - -import { Platform } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const itemTheme = { - '.floatingLabel': { - 'NativeBase.Input': { - height: 50, - top: 8, - paddingTop: 3, - paddingBottom: 7, - '.multiline': { - minHeight: variables.inputHeightBase, - paddingTop: Platform.OS === PLATFORM.IOS ? 10 : 3, - paddingBottom: Platform.OS === PLATFORM.IOS ? 14 : 10, - }, - }, - 'NativeBase.Label': { - paddingTop: 5, - }, - 'NativeBase.Icon': { - top: 6, - paddingTop: 8, - }, - 'NativeBase.IconNB': { - top: 6, - paddingTop: 8, - }, - }, - '.fixedLabel': { - 'NativeBase.Label': { - position: null, - top: null, - left: null, - right: null, - flex: 1, - height: null, - width: null, - fontSize: variables.inputFontSize, - }, - 'NativeBase.Input': { - flex: 2, - fontSize: variables.inputFontSize, - }, - }, - '.stackedLabel': { - 'NativeBase.Label': { - position: null, - top: null, - left: null, - right: null, - paddingTop: 5, - alignSelf: 'flex-start', - fontSize: variables.inputFontSize - 2, - }, - 'NativeBase.Icon': { - marginTop: 36, - }, - 'NativeBase.Input': { - alignSelf: Platform.OS === PLATFORM.IOS ? 'stretch' : 'flex-start', - flex: 1, - width: Platform.OS === PLATFORM.IOS ? null : variables.deviceWidth - 25, - fontSize: variables.inputFontSize, - lineHeight: variables.inputLineHeight - 6, - '.secureTextEntry': { - fontSize: variables.inputFontSize, - }, - '.multiline': { - paddingTop: Platform.OS === PLATFORM.IOS ? 9 : undefined, - paddingBottom: Platform.OS === PLATFORM.IOS ? 9 : undefined, - }, - }, - flexDirection: null, - minHeight: variables.inputHeightBase + 15, - }, - '.inlineLabel': { - 'NativeBase.Label': { - position: null, - top: null, - left: null, - right: null, - paddingRight: 20, - height: null, - width: null, - fontSize: variables.inputFontSize, - }, - 'NativeBase.Input': { - paddingLeft: 5, - fontSize: variables.inputFontSize, - }, - flexDirection: 'row', - }, - 'NativeBase.Label': { - fontSize: variables.inputFontSize, - color: variables.inputColorPlaceholder, - paddingRight: 5, - }, - 'NativeBase.Icon': { - fontSize: 24, - paddingRight: 8, - }, - 'NativeBase.IconNB': { - fontSize: 24, - paddingRight: 8, - }, - 'NativeBase.Input': { - '.multiline': { - height: null, - }, - height: variables.inputHeightBase, - color: variables.inputColor, - flex: 1, - top: Platform.OS === PLATFORM.IOS ? 1.5 : undefined, - fontSize: variables.inputFontSize, - }, - '.underline': { - 'NativeBase.Input': { - paddingLeft: 15, - }, - '.success': { - borderColor: variables.inputSuccessBorderColor, - }, - '.error': { - borderColor: variables.inputErrorBorderColor, - }, - borderWidth: variables.borderWidth * 2, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputBorderColor, - }, - '.regular': { - 'NativeBase.Input': { - paddingLeft: 8, - }, - 'NativeBase.Icon': { - paddingLeft: 10, - }, - '.success': { - borderColor: variables.inputSuccessBorderColor, - }, - '.error': { - borderColor: variables.inputErrorBorderColor, - }, - borderWidth: variables.borderWidth * 2, - borderColor: variables.inputBorderColor, - }, - '.rounded': { - 'NativeBase.Input': { - paddingLeft: 8, - }, - 'NativeBase.Icon': { - paddingLeft: 10, - }, - '.success': { - borderColor: variables.inputSuccessBorderColor, - }, - '.error': { - borderColor: variables.inputErrorBorderColor, - }, - borderWidth: variables.borderWidth * 2, - borderRadius: 30, - borderColor: variables.inputBorderColor, - }, - - '.success': { - 'NativeBase.Icon': { - color: variables.inputSuccessBorderColor, - }, - 'NativeBase.IconNB': { - color: variables.inputSuccessBorderColor, - }, - '.rounded': { - borderRadius: 30, - borderColor: variables.inputSuccessBorderColor, - }, - '.regular': { - borderColor: variables.inputSuccessBorderColor, - }, - '.underline': { - borderWidth: variables.borderWidth * 2, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputSuccessBorderColor, - }, - borderColor: variables.inputSuccessBorderColor, - }, - - '.error': { - 'NativeBase.Icon': { - color: variables.inputErrorBorderColor, - }, - 'NativeBase.IconNB': { - color: variables.inputErrorBorderColor, - }, - '.rounded': { - borderRadius: 30, - borderColor: variables.inputErrorBorderColor, - }, - '.regular': { - borderColor: variables.inputErrorBorderColor, - }, - '.underline': { - borderWidth: variables.borderWidth * 2, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputErrorBorderColor, - }, - borderColor: variables.inputErrorBorderColor, - }, - '.disabled': { - 'NativeBase.Icon': { - color: '#384850', - }, - 'NativeBase.IconNB': { - color: '#384850', - }, - }, - '.picker': { - marginLeft: 0, - }, - - borderWidth: variables.borderWidth * 2, - borderTopWidth: 0, - borderRightWidth: 0, - borderLeftWidth: 0, - borderColor: variables.inputBorderColor, - backgroundColor: 'transparent', - flexDirection: 'row', - alignItems: 'center', - marginLeft: 2, - }; - - return itemTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Label.js b/templates/app/react-native/src/theme/components/Label.js deleted file mode 100644 index cbefe9d449..0000000000 --- a/templates/app/react-native/src/theme/components/Label.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -export default () => { - const labelTheme = { - '.focused': { - width: 0, - }, - '.textPrimary': { - color: 'gray', - }, - fontSize: 17, - }; - - return labelTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Left.js b/templates/app/react-native/src/theme/components/Left.js deleted file mode 100644 index 5a1b8b09b6..0000000000 --- a/templates/app/react-native/src/theme/components/Left.js +++ /dev/null @@ -1,11 +0,0 @@ -// @flow - -export default () => { - const leftTheme = { - flex: 1, - alignSelf: 'center', - alignItems: 'flex-start', - }; - - return leftTheme; -}; diff --git a/templates/app/react-native/src/theme/components/ListItem.js b/templates/app/react-native/src/theme/components/ListItem.js deleted file mode 100644 index ab1e38002a..0000000000 --- a/templates/app/react-native/src/theme/components/ListItem.js +++ /dev/null @@ -1,441 +0,0 @@ -// @flow - -import { Platform, PixelRatio } from 'react-native'; - -import pickerTheme from './Picker'; -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platform } = variables; - const selectedStyle = { - 'NativeBase.Text': { - color: variables.listItemSelected, - }, - 'NativeBase.Icon': { - color: variables.listItemSelected, - }, - }; - - const listItemTheme = { - 'NativeBase.InputGroup': { - 'NativeBase.Icon': { - paddingRight: 5, - }, - 'NativeBase.IconNB': { - paddingRight: 5, - }, - 'NativeBase.Input': { - paddingHorizontal: 5, - }, - flex: 1, - borderWidth: null, - margin: -10, - borderBottomColor: 'transparent', - }, - '.searchBar': { - 'NativeBase.Item': { - 'NativeBase.Icon': { - backgroundColor: 'transparent', - color: variables.dropdownLinkColor, - fontSize: - platform === PLATFORM.IOS ? variables.iconFontSize - 10 : variables.iconFontSize - 5, - alignItems: 'center', - marginTop: 2, - paddingRight: 8, - }, - 'NativeBase.IconNB': { - backgroundColor: 'transparent', - color: null, - alignSelf: 'center', - }, - 'NativeBase.Input': { - alignSelf: 'center', - }, - alignSelf: 'center', - alignItems: 'center', - justifyContent: 'flex-start', - flex: 1, - height: platform === PLATFORM.IOS ? 30 : 40, - borderColor: 'transparent', - backgroundColor: '#fff', - borderRadius: 5, - }, - 'NativeBase.Button': { - '.transparent': { - 'NativeBase.Text': { - fontWeight: '500', - }, - paddingHorizontal: null, - paddingLeft: platform === PLATFORM.IOS ? 10 : null, - }, - paddingHorizontal: platform === PLATFORM.IOS ? undefined : null, - width: platform === PLATFORM.IOS ? undefined : 0, - height: platform === PLATFORM.IOS ? undefined : 0, - }, - backgroundColor: variables.toolbarInputColor, - padding: 10, - marginLeft: null, - }, - 'NativeBase.CheckBox': { - marginLeft: -10, - marginRight: 10, - }, - '.first': { - '.itemHeader': { - paddingTop: variables.listItemPadding + 3, - }, - }, - '.itemHeader': { - '.first': { - paddingTop: variables.listItemPadding + 3, - }, - borderBottomWidth: platform === PLATFORM.IOS ? variables.borderWidth : null, - marginLeft: null, - padding: variables.listItemPadding, - paddingLeft: variables.listItemPadding + 5, - paddingTop: platform === PLATFORM.IOS ? variables.listItemPadding + 25 : undefined, - paddingBottom: platform === PLATFORM.ANDROID ? variables.listItemPadding + 20 : undefined, - flexDirection: 'row', - borderColor: variables.listBorderColor, - 'NativeBase.Text': { - fontSize: 14, - color: platform === PLATFORM.IOS ? undefined : variables.listNoteColor, - }, - }, - '.itemDivider': { - borderBottomWidth: null, - marginLeft: null, - padding: variables.listItemPadding, - paddingLeft: variables.listItemPadding + 5, - backgroundColor: variables.listDividerBg, - flexDirection: 'row', - borderColor: variables.listBorderColor, - }, - '.selected': { - 'NativeBase.Left': { - ...selectedStyle, - }, - 'NativeBase.Body': { - ...selectedStyle, - }, - 'NativeBase.Right': { - ...selectedStyle, - }, - ...selectedStyle, - }, - 'NativeBase.Left': { - 'NativeBase.Body': { - 'NativeBase.Text': { - '.note': { - color: variables.listNoteColor, - fontWeight: '200', - }, - fontWeight: '600', - }, - marginLeft: 10, - alignItems: null, - alignSelf: null, - }, - 'NativeBase.Icon': { - width: variables.iconFontSize - 10, - fontSize: variables.iconFontSize - 10, - }, - 'NativeBase.IconNB': { - width: variables.iconFontSize - 10, - fontSize: variables.iconFontSize - 10, - }, - 'NativeBase.Text': { - alignSelf: 'center', - }, - flexDirection: 'row', - }, - 'NativeBase.Body': { - 'NativeBase.Text': { - marginHorizontal: variables.listItemPadding, - '.note': { - color: variables.listNoteColor, - fontWeight: '200', - }, - }, - alignSelf: null, - alignItems: null, - }, - 'NativeBase.Right': { - 'NativeBase.Badge': { - alignSelf: null, - }, - 'NativeBase.PickerNB': { - 'NativeBase.Button': { - marginRight: -15, - 'NativeBase.Text': { - color: variables.topTabBarActiveTextColor, - }, - }, - }, - 'NativeBase.Button': { - alignSelf: null, - '.transparent': { - 'NativeBase.Text': { - color: variables.topTabBarActiveTextColor, - }, - }, - }, - 'NativeBase.Icon': { - alignSelf: null, - fontSize: variables.iconFontSize - 8, - color: '#c9c8cd', - }, - 'NativeBase.IconNB': { - alignSelf: null, - fontSize: variables.iconFontSize - 8, - color: '#c9c8cd', - }, - 'NativeBase.Text': { - '.note': { - color: variables.listNoteColor, - fontWeight: '200', - }, - alignSelf: null, - }, - 'NativeBase.Thumbnail': { - alignSelf: null, - }, - 'NativeBase.Image': { - alignSelf: null, - }, - 'NativeBase.Radio': { - alignSelf: null, - }, - 'NativeBase.Checkbox': { - alignSelf: null, - }, - 'NativeBase.Switch': { - alignSelf: null, - }, - padding: null, - flex: 0.28, - }, - 'NativeBase.Text': { - '.note': { - color: variables.listNoteColor, - fontWeight: '200', - }, - alignSelf: 'center', - }, - '.last': { - marginLeft: -(variables.listItemPadding + 5), - paddingLeft: (variables.listItemPadding + 5) * 2, - top: 1, - }, - '.avatar': { - 'NativeBase.Left': { - flex: 0, - alignSelf: 'flex-start', - paddingTop: 14, - }, - 'NativeBase.Body': { - 'NativeBase.Text': { - marginLeft: null, - }, - flex: 1, - paddingVertical: variables.listItemPadding, - borderBottomWidth: variables.borderWidth, - borderColor: variables.listBorderColor, - marginLeft: variables.listItemPadding + 5, - }, - 'NativeBase.Right': { - 'NativeBase.Text': { - '.note': { - fontSize: variables.noteFontSize - 2, - }, - }, - flex: 0, - paddingRight: variables.listItemPadding + 5, - alignSelf: 'stretch', - paddingVertical: variables.listItemPadding, - borderBottomWidth: variables.borderWidth, - borderColor: variables.listBorderColor, - }, - '.noBorder': { - 'NativeBase.Body': { - borderBottomWidth: null, - }, - 'NativeBase.Right': { - borderBottomWidth: null, - }, - }, - borderBottomWidth: null, - paddingVertical: null, - paddingRight: null, - }, - '.thumbnail': { - 'NativeBase.Left': { - flex: 0, - }, - 'NativeBase.Body': { - 'NativeBase.Text': { - marginLeft: null, - }, - flex: 1, - paddingVertical: variables.listItemPadding + 8, - borderBottomWidth: variables.borderWidth, - borderColor: variables.listBorderColor, - marginLeft: variables.listItemPadding + 5, - }, - 'NativeBase.Right': { - 'NativeBase.Button': { - '.transparent': { - 'NativeBase.Text': { - fontSize: variables.listNoteSize, - color: variables.sTabBarActiveTextColor, - }, - }, - height: null, - }, - flex: 0, - justifyContent: 'center', - alignSelf: 'stretch', - paddingRight: variables.listItemPadding + 5, - paddingVertical: variables.listItemPadding + 5, - borderBottomWidth: variables.borderWidth, - borderColor: variables.listBorderColor, - }, - '.noBorder': { - 'NativeBase.Body': { - borderBottomWidth: null, - }, - 'NativeBase.Right': { - borderBottomWidth: null, - }, - }, - borderBottomWidth: null, - paddingVertical: null, - paddingRight: null, - }, - '.icon': { - '.last': { - 'NativeBase.Body': { - borderBottomWidth: null, - }, - 'NativeBase.Right': { - borderBottomWidth: null, - }, - borderBottomWidth: variables.borderWidth, - borderColor: variables.listBorderColor, - }, - 'NativeBase.Left': { - 'NativeBase.Button': { - 'NativeBase.IconNB': { - marginHorizontal: null, - fontSize: variables.iconFontSize - 5, - }, - 'NativeBase.Icon': { - marginHorizontal: null, - fontSize: variables.iconFontSize - 8, - }, - alignSelf: 'center', - height: 29, - width: 29, - borderRadius: 6, - paddingVertical: null, - paddingHorizontal: null, - alignItems: 'center', - justifyContent: 'center', - }, - 'NativeBase.Icon': { - width: variables.iconFontSize - 5, - fontSize: variables.iconFontSize - 2, - }, - 'NativeBase.IconNB': { - width: variables.iconFontSize - 5, - fontSize: variables.iconFontSize - 2, - }, - paddingRight: variables.listItemPadding + 5, - flex: 0, - height: 44, - justifyContent: 'center', - alignItems: 'center', - }, - 'NativeBase.Body': { - 'NativeBase.Text': { - marginLeft: null, - fontSize: 17, - }, - flex: 1, - height: 44, - justifyContent: 'center', - borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), - borderColor: variables.listBorderColor, - }, - 'NativeBase.Right': { - 'NativeBase.Text': { - textAlign: 'center', - color: '#8F8E95', - fontSize: 17, - }, - 'NativeBase.IconNB': { - color: '#C8C7CC', - fontSize: variables.iconFontSize - 10, - alignSelf: 'center', - paddingLeft: 10, - paddingTop: 3, - }, - 'NativeBase.Icon': { - color: '#C8C7CC', - fontSize: variables.iconFontSize - 10, - alignSelf: 'center', - paddingLeft: 10, - paddingTop: 3, - }, - 'NativeBase.Switch': { - marginRight: Platform.OS === PLATFORM.IOS ? undefined : -5, - alignSelf: null, - }, - 'NativeBase.PickerNB': { - ...pickerTheme(), - }, - flexDirection: 'row', - alignItems: 'center', - flex: 0, - alignSelf: 'stretch', - height: 44, - justifyContent: 'flex-end', - borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), - borderColor: variables.listBorderColor, - paddingRight: variables.listItemPadding + 5, - }, - '.noBorder': { - 'NativeBase.Body': { - borderBottomWidth: null, - }, - 'NativeBase.Right': { - borderBottomWidth: null, - }, - }, - borderBottomWidth: null, - paddingVertical: null, - paddingRight: null, - height: 44, - justifyContent: 'center', - }, - '.noBorder': { - borderBottomWidth: null, - }, - '.noIndent': { - marginLeft: null, - padding: variables.listItemPadding, - paddingLeft: variables.listItemPadding + 6, - }, - alignItems: 'center', - flexDirection: 'row', - paddingRight: variables.listItemPadding + 6, - paddingVertical: variables.listItemPadding + 3, - marginLeft: variables.listItemPadding + 6, - borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), - backgroundColor: variables.listBg, - borderColor: variables.listBorderColor, - }; - - return listItemTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Picker.android.js b/templates/app/react-native/src/theme/components/Picker.android.js deleted file mode 100644 index 0b499a6537..0000000000 --- a/templates/app/react-native/src/theme/components/Picker.android.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -export default () => { - const pickerTheme = { - '.note': { - color: '#8F8E95', - }, - // width: 90, - marginRight: -4, - flexGrow: 1, - }; - - return pickerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Picker.ios.js b/templates/app/react-native/src/theme/components/Picker.ios.js deleted file mode 100644 index b81b0568e2..0000000000 --- a/templates/app/react-native/src/theme/components/Picker.ios.js +++ /dev/null @@ -1,7 +0,0 @@ -// @flow - -export default () => { - const pickerTheme = {}; - - return pickerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Picker.js b/templates/app/react-native/src/theme/components/Picker.js deleted file mode 100644 index 0b499a6537..0000000000 --- a/templates/app/react-native/src/theme/components/Picker.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -export default () => { - const pickerTheme = { - '.note': { - color: '#8F8E95', - }, - // width: 90, - marginRight: -4, - flexGrow: 1, - }; - - return pickerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Radio.js b/templates/app/react-native/src/theme/components/Radio.js deleted file mode 100644 index a50e70deb7..0000000000 --- a/templates/app/react-native/src/theme/components/Radio.js +++ /dev/null @@ -1,26 +0,0 @@ -// @flow - -import { Platform } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const radioTheme = { - '.selected': { - 'NativeBase.IconNB': { - color: - Platform.OS === PLATFORM.IOS ? variables.radioColor : variables.radioSelectedColorAndroid, - lineHeight: Platform.OS === PLATFORM.IOS ? 25 : variables.radioBtnLineHeight, - height: Platform.OS === PLATFORM.IOS ? 20 : undefined, - }, - }, - 'NativeBase.IconNB': { - color: Platform.OS === PLATFORM.IOS ? 'transparent' : undefined, - lineHeight: Platform.OS === PLATFORM.IOS ? undefined : variables.radioBtnLineHeight, - fontSize: Platform.OS === PLATFORM.IOS ? undefined : variables.radioBtnSize, - }, - }; - - return radioTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Right.js b/templates/app/react-native/src/theme/components/Right.js deleted file mode 100644 index 25b4c604f3..0000000000 --- a/templates/app/react-native/src/theme/components/Right.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -export default () => { - const rightTheme = { - 'NativeBase.Button': { - alignSelf: null, - }, - flex: 1, - alignSelf: 'center', - alignItems: 'flex-end', - }; - - return rightTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Segment.js b/templates/app/react-native/src/theme/components/Segment.js deleted file mode 100644 index b78c0f391d..0000000000 --- a/templates/app/react-native/src/theme/components/Segment.js +++ /dev/null @@ -1,57 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platform } = variables; - - const segmentTheme = { - height: 45, - borderColor: variables.segmentBorderColorMain, - flexDirection: 'row', - justifyContent: 'center', - backgroundColor: variables.segmentBackgroundColor, - 'NativeBase.Button': { - alignSelf: 'center', - borderRadius: 0, - paddingTop: 3, - paddingBottom: 3, - height: 30, - backgroundColor: 'transparent', - borderWidth: 1, - borderLeftWidth: 0, - borderColor: variables.segmentBorderColor, - elevation: 0, - '.active': { - backgroundColor: variables.segmentActiveBackgroundColor, - 'NativeBase.Text': { - color: variables.segmentActiveTextColor, - }, - 'NativeBase.Icon': { - color: variables.segmentActiveTextColor, - }, - }, - '.first': { - borderTopLeftRadius: platform === PLATFORM.IOS ? 5 : undefined, - borderBottomLeftRadius: platform === PLATFORM.IOS ? 5 : undefined, - borderLeftWidth: 1, - }, - '.last': { - borderTopRightRadius: platform === PLATFORM.IOS ? 5 : undefined, - borderBottomRightRadius: platform === PLATFORM.IOS ? 5 : undefined, - }, - 'NativeBase.Text': { - color: variables.segmentTextColor, - fontSize: 14, - }, - 'NativeBase.Icon': { - fontSize: 22, - paddingTop: 0, - color: variables.segmentTextColor, - }, - }, - }; - - return segmentTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Separator.js b/templates/app/react-native/src/theme/components/Separator.js deleted file mode 100644 index 8892181faf..0000000000 --- a/templates/app/react-native/src/theme/components/Separator.js +++ /dev/null @@ -1,49 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const theme = { - '.group': { - height: 50, - paddingVertical: variables.listItemPadding - 8, - paddingTop: variables.listItemPadding + 12, - '.bordered': { - height: 50, - paddingVertical: variables.listItemPadding - 8, - paddingTop: variables.listItemPadding + 12, - }, - }, - '.bordered': { - '.noTopBorder': { - borderTopWidth: 0, - }, - '.noBottomBorder': { - borderBottomWidth: 0, - }, - height: 35, - paddingTop: variables.listItemPadding + 2, - paddingBottom: variables.listItemPadding, - borderBottomWidth: variables.borderWidth, - borderTopWidth: variables.borderWidth, - borderColor: variables.listBorderColor, - }, - 'NativeBase.Text': { - fontSize: variables.tabBarTextSize - 2, - color: '#777', - }, - '.noTopBorder': { - borderTopWidth: 0, - }, - '.noBottomBorder': { - borderBottomWidth: 0, - }, - height: 38, - backgroundColor: '#F0EFF5', - flex: 1, - justifyContent: 'center', - paddingLeft: variables.listItemPadding + 5, - }; - - return theme; -}; diff --git a/templates/app/react-native/src/theme/components/Spinner.js b/templates/app/react-native/src/theme/components/Spinner.js deleted file mode 100644 index f52a4d0aef..0000000000 --- a/templates/app/react-native/src/theme/components/Spinner.js +++ /dev/null @@ -1,9 +0,0 @@ -// @flow - -export default () => { - const spinnerTheme = { - height: 80, - }; - - return spinnerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Subtitle.js b/templates/app/react-native/src/theme/components/Subtitle.js deleted file mode 100644 index 9d6ec5022c..0000000000 --- a/templates/app/react-native/src/theme/components/Subtitle.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow - -import { Platform } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const subtitleTheme = { - fontSize: variables.subTitleFontSize, - fontFamily: variables.titleFontfamily, - color: variables.subtitleColor, - textAlign: 'center', - paddingLeft: Platform.OS === PLATFORM.IOS ? 4 : 0, - marginLeft: Platform.OS === PLATFORM.IOS ? undefined : -3, - }; - - return subtitleTheme; -}; diff --git a/templates/app/react-native/src/theme/components/SwipeRow.js b/templates/app/react-native/src/theme/components/SwipeRow.js deleted file mode 100644 index 16de874ecf..0000000000 --- a/templates/app/react-native/src/theme/components/SwipeRow.js +++ /dev/null @@ -1,46 +0,0 @@ -// @flow - -export default () => { - const swipeRowTheme = { - 'NativeBase.ListItem': { - '.list': { - backgroundColor: '#FFF', - }, - marginLeft: 0, - }, - 'NativeBase.Left': { - flex: 0, - alignSelf: null, - alignItems: null, - 'NativeBase.Button': { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - alignSelf: 'stretch', - borderRadius: 0, - }, - }, - 'NativeBase.Right': { - flex: 0, - alignSelf: null, - alignItems: null, - 'NativeBase.Button': { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - alignSelf: 'stretch', - borderRadius: 0, - }, - }, - 'NativeBase.Button': { - flex: 1, - height: null, - alignItems: 'center', - justifyContent: 'center', - alignSelf: 'stretch', - borderRadius: 0, - }, - }; - - return swipeRowTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Switch.js b/templates/app/react-native/src/theme/components/Switch.js deleted file mode 100644 index d4edad8cc7..0000000000 --- a/templates/app/react-native/src/theme/components/Switch.js +++ /dev/null @@ -1,9 +0,0 @@ -// @flow - -export default () => { - const switchTheme = { - marginVertical: -5, - }; - - return switchTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Tab.js b/templates/app/react-native/src/theme/components/Tab.js deleted file mode 100644 index 0498253251..0000000000 --- a/templates/app/react-native/src/theme/components/Tab.js +++ /dev/null @@ -1,10 +0,0 @@ -// @flow - -export default () => { - const tabTheme = { - flex: 1, - backgroundColor: '#FFF', - }; - - return tabTheme; -}; diff --git a/templates/app/react-native/src/theme/components/TabBar.js b/templates/app/react-native/src/theme/components/TabBar.js deleted file mode 100644 index 0c2b51da4f..0000000000 --- a/templates/app/react-native/src/theme/components/TabBar.js +++ /dev/null @@ -1,57 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const tabBarTheme = { - '.tabIcon': { - height: undefined, - }, - '.vertical': { - height: 60, - }, - 'NativeBase.Button': { - '.transparent': { - 'NativeBase.Text': { - fontSize: variables.tabFontSize, - color: variables.sTabBarActiveTextColor, - fontWeight: '400', - }, - 'NativeBase.IconNB': { - color: variables.sTabBarActiveTextColor, - }, - }, - 'NativeBase.IconNB': { - color: variables.sTabBarActiveTextColor, - }, - 'NativeBase.Text': { - fontSize: variables.tabFontSize, - color: variables.sTabBarActiveTextColor, - fontWeight: '400', - }, - '.isTabActive': { - 'NativeBase.Text': { - fontWeight: '900', - }, - }, - flex: 1, - alignSelf: 'stretch', - alignItems: 'center', - justifyContent: 'center', - borderRadius: null, - borderBottomColor: 'transparent', - backgroundColor: variables.tabBgColor, - }, - height: 45, - flexDirection: 'row', - justifyContent: 'space-around', - borderWidth: 1, - borderTopWidth: 0, - borderLeftWidth: 0, - borderRightWidth: 0, - borderBottomColor: '#ccc', - backgroundColor: variables.tabBgColor, - }; - - return tabBarTheme; -}; diff --git a/templates/app/react-native/src/theme/components/TabContainer.js b/templates/app/react-native/src/theme/components/TabContainer.js deleted file mode 100644 index 1b42d58a0e..0000000000 --- a/templates/app/react-native/src/theme/components/TabContainer.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow - -import { Platform } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platformStyle } = variables; - - const tabContainerTheme = { - elevation: 3, - height: 50, - flexDirection: 'row', - shadowColor: platformStyle === PLATFORM.MATERIAL ? '#000' : undefined, - shadowOffset: platformStyle === PLATFORM.MATERIAL ? { width: 0, height: 2 } : undefined, - shadowOpacity: platformStyle === PLATFORM.MATERIAL ? 0.2 : undefined, - shadowRadius: platformStyle === PLATFORM.MATERIAL ? 1.2 : undefined, - justifyContent: 'space-around', - borderBottomWidth: Platform.OS === PLATFORM.IOS ? variables.borderWidth : 0, - borderColor: variables.topTabBarBorderColor, - }; - - return tabContainerTheme; -}; diff --git a/templates/app/react-native/src/theme/components/TabHeading.js b/templates/app/react-native/src/theme/components/TabHeading.js deleted file mode 100644 index 37bb15350a..0000000000 --- a/templates/app/react-native/src/theme/components/TabHeading.js +++ /dev/null @@ -1,40 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platform } = variables; - - const tabHeadingTheme = { - flexDirection: 'row', - backgroundColor: variables.tabDefaultBg, - flex: 1, - alignItems: 'center', - justifyContent: 'center', - '.scrollable': { - paddingHorizontal: 20, - flex: platform === PLATFORM.ANDROID ? 0 : 1, - minWidth: platform === PLATFORM.ANDROID ? undefined : 60, - }, - 'NativeBase.Text': { - color: variables.topTabBarTextColor, - marginHorizontal: 7, - }, - 'NativeBase.Icon': { - color: variables.topTabBarTextColor, - fontSize: platform === PLATFORM.IOS ? 26 : undefined, - }, - '.active': { - 'NativeBase.Text': { - color: variables.topTabBarActiveTextColor, - fontWeight: '600', - }, - 'NativeBase.Icon': { - color: variables.topTabBarActiveTextColor, - }, - }, - }; - - return tabHeadingTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Text.js b/templates/app/react-native/src/theme/components/Text.js deleted file mode 100644 index 2e6bea0e06..0000000000 --- a/templates/app/react-native/src/theme/components/Text.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const textTheme = { - fontSize: variables.DefaultFontSize, - fontFamily: variables.fontFamily, - color: variables.textColor, - '.note': { - color: '#a7a7a7', - fontSize: variables.noteFontSize, - }, - '.textPrimary': { - color: '#333', - }, - }; - - return textTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Textarea.js b/templates/app/react-native/src/theme/components/Textarea.js deleted file mode 100644 index 8022d3093b..0000000000 --- a/templates/app/react-native/src/theme/components/Textarea.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const textAreaTheme = { - '.underline': { - borderBottomWidth: variables.borderWidth, - marginTop: 5, - borderColor: variables.inputBorderColor, - }, - '.bordered': { - borderWidth: 1, - marginTop: 5, - borderColor: variables.inputBorderColor, - }, - color: variables.textColor, - paddingLeft: 10, - paddingRight: 5, - fontSize: 15, - textAlignVertical: 'top', - }; - - return textAreaTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Thumbnail.js b/templates/app/react-native/src/theme/components/Thumbnail.js deleted file mode 100644 index b3152fdcbb..0000000000 --- a/templates/app/react-native/src/theme/components/Thumbnail.js +++ /dev/null @@ -1,40 +0,0 @@ -// @flow - -export default () => { - const thumbnailTheme = { - '.square': { - borderRadius: 0, - '.small': { - width: 36, - height: 36, - borderRadius: 0, - }, - '.large': { - width: 80, - height: 80, - borderRadius: 0, - }, - }, - '.small': { - width: 36, - height: 36, - borderRadius: 18, - '.square': { - borderRadius: 0, - }, - }, - '.large': { - width: 80, - height: 80, - borderRadius: 40, - '.square': { - borderRadius: 0, - }, - }, - width: 56, - height: 56, - borderRadius: 28, - }; - - return thumbnailTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Title.js b/templates/app/react-native/src/theme/components/Title.js deleted file mode 100644 index 02d28aafaa..0000000000 --- a/templates/app/react-native/src/theme/components/Title.js +++ /dev/null @@ -1,21 +0,0 @@ -// @flow - -import { Platform } from 'react-native'; - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const titleTheme = { - fontSize: variables.titleFontSize, - fontFamily: variables.titleFontfamily, - color: variables.titleFontColor, - fontWeight: Platform.OS === PLATFORM.IOS ? '700' : undefined, - textAlign: 'center', - paddingLeft: Platform.OS === PLATFORM.IOS ? 4 : 0, - marginLeft: Platform.OS === PLATFORM.IOS ? undefined : -3, - paddingTop: 1, - }; - - return titleTheme; -}; diff --git a/templates/app/react-native/src/theme/components/Toast.js b/templates/app/react-native/src/theme/components/Toast.js deleted file mode 100644 index 6246a049f0..0000000000 --- a/templates/app/react-native/src/theme/components/Toast.js +++ /dev/null @@ -1,41 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; -import { PLATFORM } from '../variables/CommonColor'; - -export default (variables /* : * */ = variable) => { - const { platform } = variables; - - const toastTheme = { - '.danger': { - backgroundColor: variables.brandDanger, - }, - '.warning': { - backgroundColor: variables.brandWarning, - }, - '.success': { - backgroundColor: variables.brandSuccess, - }, - backgroundColor: 'rgba(0,0,0,0.8)', - borderRadius: platform === PLATFORM.IOS ? 5 : 0, - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - padding: 10, - minHeight: 50, - 'NativeBase.Text': { - color: '#fff', - flex: 1, - }, - 'NativeBase.Button': { - backgroundColor: 'transparent', - height: 30, - elevation: 0, - 'NativeBase.Text': { - fontSize: 14, - }, - }, - }; - - return toastTheme; -}; diff --git a/templates/app/react-native/src/theme/components/View.js b/templates/app/react-native/src/theme/components/View.js deleted file mode 100644 index a01a86939e..0000000000 --- a/templates/app/react-native/src/theme/components/View.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -import variable from '../variables/Platform'; - -export default (variables /* : * */ = variable) => { - const viewTheme = { - '.padder': { - padding: variables.contentPadding, - }, - }; - - return viewTheme; -}; diff --git a/templates/app/react-native/src/theme/components/index.js b/templates/app/react-native/src/theme/components/index.js deleted file mode 100644 index 921980bb8a..0000000000 --- a/templates/app/react-native/src/theme/components/index.js +++ /dev/null @@ -1,247 +0,0 @@ -/* eslint-disable no-param-reassign */ -// @flow - -import _ from 'lodash'; - -import bodyTheme from './Body'; -import leftTheme from './Left'; -import rightTheme from './Right'; -import headerTheme from './Header'; -import switchTheme from './Switch'; -import thumbnailTheme from './Thumbnail'; -import containerTheme from './Container'; -import contentTheme from './Content'; -import buttonTheme from './Button'; -import titleTheme from './Title'; -import subtitleTheme from './Subtitle'; -import inputGroupTheme from './InputGroup'; -import badgeTheme from './Badge'; -import checkBoxTheme from './CheckBox'; -import cardTheme from './Card'; -import radioTheme from './Radio'; -import h3Theme from './H3'; -import h2Theme from './H2'; -import h1Theme from './H1'; -import footerTheme from './Footer'; -import footerTabTheme from './FooterTab'; -import fabTheme from './Fab'; -import itemTheme from './Item'; -import labelTheme from './Label'; -import textAreaTheme from './Textarea'; -import textTheme from './Text'; -import toastTheme from './Toast'; -import tabTheme from './Tab'; -import tabBarTheme from './TabBar'; -import tabContainerTheme from './TabContainer'; -import viewTheme from './View'; -import tabHeadingTheme from './TabHeading'; -import iconTheme from './Icon'; -import inputTheme from './Input'; -import swipeRowTheme from './SwipeRow'; -import segmentTheme from './Segment'; -import spinnerTheme from './Spinner'; -import cardItemTheme from './CardItem'; -import listItemTheme from './ListItem'; -import formTheme from './Form'; -import separatorTheme from './Separator'; -import pickerTheme from './Picker'; -import variable from '../variables/Platform'; -import getOverrides from '../overrides'; - -export default (variables /* : * */ = variable) => { - const theme = { - variables, - 'NativeBase.Left': { - ...leftTheme(variables), - }, - 'NativeBase.Right': { - ...rightTheme(variables), - }, - 'NativeBase.Body': { - ...bodyTheme(variables), - }, - - 'NativeBase.Header': { - ...headerTheme(variables), - }, - - 'NativeBase.Button': { - ...buttonTheme(variables), - }, - - 'NativeBase.Title': { - ...titleTheme(variables), - }, - 'NativeBase.Subtitle': { - ...subtitleTheme(variables), - }, - - 'NativeBase.InputGroup': { - ...inputGroupTheme(variables), - }, - - 'NativeBase.Input': { - ...inputTheme(variables), - }, - - 'NativeBase.Badge': { - ...badgeTheme(variables), - }, - - 'NativeBase.CheckBox': { - ...checkBoxTheme(variables), - }, - - 'NativeBase.Radio': { - ...radioTheme(variables), - }, - - 'NativeBase.Card': { - ...cardTheme(variables), - }, - - 'NativeBase.CardItem': { - ...cardItemTheme(variables), - }, - - 'NativeBase.Toast': { - ...toastTheme(variables), - }, - - 'NativeBase.H1': { - ...h1Theme(variables), - }, - 'NativeBase.H2': { - ...h2Theme(variables), - }, - 'NativeBase.H3': { - ...h3Theme(variables), - }, - 'NativeBase.Form': { - ...formTheme(variables), - }, - - 'NativeBase.Container': { - ...containerTheme(variables), - }, - 'NativeBase.Content': { - ...contentTheme(variables), - }, - - 'NativeBase.Footer': { - ...footerTheme(variables), - }, - - 'NativeBase.Tabs': { - flex: 1, - }, - - 'NativeBase.FooterTab': { - ...footerTabTheme(variables), - }, - - 'NativeBase.ListItem': { - ...listItemTheme(variables), - }, - - 'NativeBase.ListItem1': { - ...listItemTheme(variables), - }, - - 'NativeBase.Icon': { - ...iconTheme(variables), - }, - 'NativeBase.IconNB': { - ...iconTheme(variables), - }, - 'NativeBase.Text': { - ...textTheme(variables), - }, - 'NativeBase.Spinner': { - ...spinnerTheme(variables), - }, - - 'NativeBase.Fab': { - ...fabTheme(variables), - }, - - 'NativeBase.Item': { - ...itemTheme(variables), - }, - - 'NativeBase.Label': { - ...labelTheme(variables), - }, - - 'NativeBase.Textarea': { - ...textAreaTheme(variables), - }, - - 'NativeBase.PickerNB': { - ...pickerTheme(variables), - 'NativeBase.Button': { - 'NativeBase.Text': {}, - }, - }, - - 'NativeBase.Tab': { - ...tabTheme(variables), - }, - - 'NativeBase.Segment': { - ...segmentTheme(variables), - }, - - 'NativeBase.TabBar': { - ...tabBarTheme(variables), - }, - 'NativeBase.ViewNB': { - ...viewTheme(variables), - }, - 'NativeBase.TabHeading': { - ...tabHeadingTheme(variables), - }, - 'NativeBase.TabContainer': { - ...tabContainerTheme(variables), - }, - 'NativeBase.Switch': { - ...switchTheme(variables), - }, - 'NativeBase.Separator': { - ...separatorTheme(variables), - }, - 'NativeBase.SwipeRow': { - ...swipeRowTheme(variables), - }, - 'NativeBase.Thumbnail': { - ...thumbnailTheme(variables), - }, - ...getOverrides(variables), - }; - - const cssifyTheme = (grandparent, parent, parentKey) => { - _.forEach(parent, (style, styleName) => { - if (styleName.indexOf('.') === 0 && parentKey && parentKey.indexOf('.') === 0) { - if (grandparent) { - if (!grandparent[styleName]) { - grandparent[styleName] = {}; - } else { - grandparent[styleName][parentKey] = style; - } - } - } - if ( - style && - typeof style === 'object' && - styleName !== 'fontVariant' && - styleName !== 'transform' - ) { - cssifyTheme(parent, style, styleName); - } - }); - }; - - cssifyTheme(null, theme, null); - - return theme; -}; diff --git a/templates/app/react-native/src/theme/overrides/Button.js b/templates/app/react-native/src/theme/overrides/Button.js deleted file mode 100644 index 9597871ba2..0000000000 --- a/templates/app/react-native/src/theme/overrides/Button.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow -import buttonTheme from '../components/Button'; - -export default variables => { - const buttonOverrides = { - ...buttonTheme(variables), - '.abpButton': { - display: 'flex', - justifyContent: 'center', - borderRadius: 15, - width: '100%', - 'NativeBase.Text': { - fontWeight: '600', - textTransform: 'uppercase', - }, - }, - }; - - return buttonOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/Content.js b/templates/app/react-native/src/theme/overrides/Content.js deleted file mode 100644 index a3baf45b2c..0000000000 --- a/templates/app/react-native/src/theme/overrides/Content.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow -import contentTheme from '../components/Content'; - -export default variables => { - const override = { - ...contentTheme(variables), - backgroundColor: '#f8f8f8', - '.px20': { - paddingHorizontal: 20, - }, - }; - - return override; -}; diff --git a/templates/app/react-native/src/theme/overrides/Icon.js b/templates/app/react-native/src/theme/overrides/Icon.js deleted file mode 100644 index ee602f9049..0000000000 --- a/templates/app/react-native/src/theme/overrides/Icon.js +++ /dev/null @@ -1,35 +0,0 @@ -// @flow -import iconTheme from '../components/Icon'; - -export default variables => { - const iconOverrides = { - ...iconTheme(variables), - '.primary': { - color: variables.brandPrimary, - }, - '.success': { - color: variables.brandSuccess, - }, - '.info': { - color: variables.brandInfo, - }, - '.danger': { - color: variables.brandDanger, - }, - '.warning': { - color: variables.brandWarning, - }, - '.dark': { - color: variables.brandDark, - }, - '.light': { - color: variables.brandLight, - }, - '.navElement': { - marginHorizontal: 15, - fontSize: 35, - }, - }; - - return iconOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/Input.js b/templates/app/react-native/src/theme/overrides/Input.js deleted file mode 100644 index 5ff4b86a9d..0000000000 --- a/templates/app/react-native/src/theme/overrides/Input.js +++ /dev/null @@ -1,21 +0,0 @@ -import inputTheme from '../components/Input'; - -export default variables => { - const inputOverrides = { - ...inputTheme(variables), - '.abpInput': { - paddingVertical: 0, - paddingHorizontal: 20, - borderWidth: 1, - borderColor: '#e6e6e6', - borderRadius: 15, - width: '100%', - height: 40, - backgroundColor: '#fff', - color: '#000', - lineHeight: 22, - }, - }; - - return inputOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/InputGroup.js b/templates/app/react-native/src/theme/overrides/InputGroup.js deleted file mode 100644 index e673b7e052..0000000000 --- a/templates/app/react-native/src/theme/overrides/InputGroup.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow -import inputGroupTheme from '../components/InputGroup'; - -export default variables => { - const inputGroupOverrides = { - ...inputGroupTheme(variables), - '.abpInputGroup': { - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - padding: 0, - marginVertical: 10, - borderBottomWidth: 0, - height: 60, - }, - }; - - return inputGroupOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/Item.js b/templates/app/react-native/src/theme/overrides/Item.js deleted file mode 100644 index c5fd1d2397..0000000000 --- a/templates/app/react-native/src/theme/overrides/Item.js +++ /dev/null @@ -1,24 +0,0 @@ -import itemTheme from '../components/Item'; - -export default variables => { - const itemOverrides = { - ...itemTheme(variables), - '.abpInput': { - paddingVertical: 0, - paddingHorizontal: 5, - borderTopWidth: 1, - borderRightWidth: 1, - borderBottomWidth: 1, - borderLeftWidth: 1, - borderWidth: 1, - borderColor: '#e6e6e6', - borderRadius: 15, - width: '100%', - height: 40, - backgroundColor: '#fff', - color: '#000', - }, - }; - - return itemOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/Label.js b/templates/app/react-native/src/theme/overrides/Label.js deleted file mode 100644 index fbc68c661d..0000000000 --- a/templates/app/react-native/src/theme/overrides/Label.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow -import labelTheme from '../components/Label'; - -export default variables => { - const labelOverrides = { - ...labelTheme(variables), - '.abpLabel': { - alignSelf: 'flex-start', - marginBottom: 5, - color: '#8F8F8F', - fontWeight: '600', - fontSize: 13, - textTransform: 'uppercase', - }, - }; - - return labelOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/Text.js b/templates/app/react-native/src/theme/overrides/Text.js deleted file mode 100644 index 811c694011..0000000000 --- a/templates/app/react-native/src/theme/overrides/Text.js +++ /dev/null @@ -1,31 +0,0 @@ -// @flow -import textTheme from '../components/Text'; - -export default variables => { - const textOverrides = { - ...textTheme(variables), - '.primary': { - color: variables.brandPrimary, - }, - '.success': { - color: variables.brandSuccess, - }, - '.info': { - color: variables.brandInfo, - }, - '.danger': { - color: variables.brandDanger, - }, - '.warning': { - color: variables.brandWarning, - }, - '.dark': { - color: variables.brandDark, - }, - '.light': { - color: variables.brandLight, - }, - }; - - return textOverrides; -}; diff --git a/templates/app/react-native/src/theme/overrides/index.js b/templates/app/react-native/src/theme/overrides/index.js deleted file mode 100644 index e44c56805d..0000000000 --- a/templates/app/react-native/src/theme/overrides/index.js +++ /dev/null @@ -1,39 +0,0 @@ -import textTheme from './Text'; -import iconTheme from './Icon'; -import inputTheme from './Input'; -import inputGroupTheme from './InputGroup'; -import labelTheme from './Label'; -import buttonTheme from './Button'; -import contentTheme from './Content'; -import itemTheme from './Item'; - -export default variables => { - const theme = { - 'NativeBase.Text': { - ...textTheme(variables), - }, - 'NativeBase.Icon': { - ...iconTheme(variables), - }, - 'NativeBase.Input': { - ...inputTheme(variables), - }, - 'NativeBase.InputGroup': { - ...inputGroupTheme(variables), - }, - 'NativeBase.Label': { - ...labelTheme(variables), - }, - 'NativeBase.Button': { - ...buttonTheme(variables), - }, - 'NativeBase.Content': { - ...contentTheme(variables), - }, - 'NativeBase.Item': { - ...itemTheme(variables), - }, - }; - - return theme; -}; diff --git a/templates/app/react-native/src/theme/variables/CommonColor.js b/templates/app/react-native/src/theme/variables/CommonColor.js deleted file mode 100644 index dd28eb1531..0000000000 --- a/templates/app/react-native/src/theme/variables/CommonColor.js +++ /dev/null @@ -1,304 +0,0 @@ -import color from 'color'; -import { Platform, Dimensions, PixelRatio } from 'react-native'; - -export const PLATFORM = { - ANDROID: 'android', - IOS: 'ios', - MATERIAL: 'material', - WEB: 'web', -}; - -const deviceHeight = Dimensions.get('window').height; -const deviceWidth = Dimensions.get('window').width; -const platform = Platform.OS; -const platformStyle = undefined; -const isIphoneX = - platform === PLATFORM.IOS && - (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); - -export default { - platformStyle, - platform, - - // Accordion - headerStyle: '#edebed', - iconStyle: '#000', - contentStyle: '#f5f4f5', - expandedIconStyle: '#000', - accordionBorderColor: '#d3d3d3', - - // ActionSheet - elevation: 4, - containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', - innerTouchableBackgroundColor: '#fff', - listItemHeight: 50, - listItemBorderColor: 'transparent', - marginHorizontal: -15, - marginLeft: 14, - marginTop: 15, - minHeight: 56, - padding: 15, - touchableTextColor: '#757575', - - // Android - androidRipple: true, - androidRippleColor: 'rgba(256, 256, 256, 0.3)', - androidRippleColorDark: 'rgba(0, 0, 0, 0.15)', - buttonUppercaseAndroidText: true, - - // Badge - badgeBg: '#ED1727', - badgeColor: '#fff', - badgePadding: platform === PLATFORM.IOS ? 3 : 0, - - // Button - buttonFontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', - buttonDisabledBg: '#b5b5b5', - buttonPadding: 6, - get buttonPrimaryBg() { - return this.brandPrimary; - }, - get buttonPrimaryColor() { - return this.inverseTextColor; - }, - get buttonInfoBg() { - return this.brandInfo; - }, - get buttonInfoColor() { - return this.inverseTextColor; - }, - get buttonSuccessBg() { - return this.brandSuccess; - }, - get buttonSuccessColor() { - return this.inverseTextColor; - }, - get buttonDangerBg() { - return this.brandDanger; - }, - get buttonDangerColor() { - return this.inverseTextColor; - }, - get buttonWarningBg() { - return this.brandWarning; - }, - get buttonWarningColor() { - return this.inverseTextColor; - }, - get buttonTextSize() { - return platform === PLATFORM.IOS ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; - }, - get buttonTextSizeLarge() { - return this.fontSizeBase * 1.5; - }, - get buttonTextSizeSmall() { - return this.fontSizeBase * 0.8; - }, - get borderRadiusLarge() { - return this.fontSizeBase * 3.8; - }, - get iconSizeLarge() { - return this.iconFontSize * 1.5; - }, - get iconSizeSmall() { - return this.iconFontSize * 0.6; - }, - - // Card - cardDefaultBg: '#fff', - cardBorderColor: '#ccc', - cardBorderRadius: 2, - cardItemPadding: platform === PLATFORM.IOS ? 10 : 12, - - // CheckBox - CheckboxRadius: platform === PLATFORM.IOS ? 13 : 0, - CheckboxBorderWidth: platform === PLATFORM.IOS ? 1 : 2, - CheckboxPaddingLeft: platform === PLATFORM.IOS ? 4 : 2, - CheckboxPaddingBottom: platform === PLATFORM.IOS ? 0 : 5, - CheckboxIconSize: platform === PLATFORM.IOS ? 21 : 16, - CheckboxIconMarginTop: platform === PLATFORM.IOS ? undefined : 1, - CheckboxFontSize: platform === PLATFORM.IOS ? 23 / 0.9 : 17, - checkboxBgColor: '#039BE5', - checkboxSize: 20, - checkboxTickColor: '#fff', - - // Color - brandPrimary: platform === PLATFORM.IOS ? '#007aff' : '#3F51B5', - brandInfo: '#62B1F6', - brandSuccess: '#5cb85c', - brandDanger: '#d9534f', - brandWarning: '#f0ad4e', - brandDark: '#000', - brandLight: '#f4f4f4', - - // Container - containerBgColor: '#fff', - - // Date Picker - datePickerTextColor: '#000', - datePickerBg: 'transparent', - - // FAB - fabWidth: 56, - - // Font - DefaultFontSize: 16, - fontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto', - fontSizeBase: 15, - get fontSizeH1() { - return this.fontSizeBase * 1.8; - }, - get fontSizeH2() { - return this.fontSizeBase * 1.6; - }, - get fontSizeH3() { - return this.fontSizeBase * 1.4; - }, - - // Footer - footerHeight: 55, - footerDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - footerPaddingBottom: 0, - - // FooterTab - tabBarTextColor: platform === PLATFORM.IOS ? '#737373' : '#bfc6ea', - tabBarTextSize: platform === PLATFORM.IOS ? 14 : 11, - activeTab: platform === PLATFORM.IOS ? '#007aff' : '#fff', - sTabBarActiveTextColor: '#007aff', - tabBarActiveTextColor: platform === PLATFORM.IOS ? '#2874F0' : '#fff', - tabActiveBgColor: platform === PLATFORM.IOS ? '#cde1f9' : '#3F51B5', - - // Header - toolbarBtnColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - toolbarDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - toolbarHeight: platform === PLATFORM.IOS ? 64 : 56, - toolbarSearchIconSize: platform === PLATFORM.IOS ? 20 : 23, - toolbarInputColor: platform === PLATFORM.IOS ? '#CECDD2' : '#fff', - searchBarHeight: platform === PLATFORM.IOS ? 30 : 40, - searchBarInputHeight: platform === PLATFORM.IOS ? 30 : 50, - toolbarBtnTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - iosStatusbar: 'dark-content', - toolbarDefaultBorder: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', - get statusBarColor() { - return color(this.toolbarDefaultBg) - .darken(0.2) - .hex(); - }, - get darkenHeader() { - return color(this.tabBgColor) - .darken(0.03) - .hex(); - }, - - // Icon - iconFamily: 'Ionicons', - iconFontSize: platform === PLATFORM.IOS ? 30 : 28, - iconHeaderSize: platform === PLATFORM.IOS ? 33 : 24, - - // InputGroup - inputFontSize: 17, - inputBorderColor: '#D9D5DC', - inputSuccessBorderColor: '#2b8339', - inputErrorBorderColor: '#ed2f2f', - inputHeightBase: 50, - get inputColor() { - return this.textColor; - }, - get inputColorPlaceholder() { - return '#575757'; - }, - - // Line Height - buttonLineHeight: 19, - lineHeightH1: 32, - lineHeightH2: 27, - lineHeightH3: 22, - lineHeight: platform === PLATFORM.IOS ? 20 : 24, - - // List - listBg: 'transparent', - listBorderColor: '#c9c9c9', - listDividerBg: '#f4f4f4', - listBtnUnderlayColor: '#DDD', - listItemPadding: platform === PLATFORM.IOS ? 10 : 12, - listNoteColor: '#808080', - listNoteSize: 13, - listItemSelected: platform === PLATFORM.IOS ? '#007aff' : '#3F51B5', - - // Progress Bar - defaultProgressColor: '#E4202D', - inverseProgressColor: '#1A191B', - - // Radio Button - radioBtnSize: platform === PLATFORM.IOS ? 25 : 23, - radioSelectedColorAndroid: '#3F51B5', - radioBtnLineHeight: platform === PLATFORM.IOS ? 29 : 24, - get radioColor() { - return this.brandPrimary; - }, - - // Segment - segmentBackgroundColor: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - segmentActiveBackgroundColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - segmentTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - segmentActiveTextColor: platform === PLATFORM.IOS ? '#fff' : '#3F51B5', - segmentBorderColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - segmentBorderColorMain: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', - - // Spinner - defaultSpinnerColor: '#45D56E', - inverseSpinnerColor: '#1A191B', - - // Tab - tabDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - topTabBarTextColor: platform === PLATFORM.IOS ? '#6b6b6b' : '#b3c7f9', - topTabBarActiveTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - topTabBarBorderColor: platform === PLATFORM.IOS ? '#a7a6ab' : '#fff', - topTabBarActiveBorderColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - - // Tabs - tabBgColor: '#F8F8F8', - tabFontSize: 15, - - // Text - textColor: '#000', - inverseTextColor: '#fff', - noteFontSize: 14, - get defaultTextColor() { - return this.textColor; - }, - - // Title - titleFontfamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', - titleFontSize: platform === PLATFORM.IOS ? 17 : 19, - subTitleFontSize: platform === PLATFORM.IOS ? 11 : 14, - subtitleColor: platform === PLATFORM.IOS ? '#000' : '#fff', - titleFontColor: platform === PLATFORM.IOS ? '#000' : '#fff', - - // Other - borderRadiusBase: platform === PLATFORM.IOS ? 5 : 2, - borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), - contentPadding: 10, - dropdownLinkColor: '#414142', - inputLineHeight: 24, - deviceWidth, - deviceHeight, - isIphoneX, - inputGroupRoundedBorderRadius: 30, - - // iPhoneX SafeArea - Inset: { - portrait: { - topInset: 24, - leftInset: 0, - rightInset: 0, - bottomInset: 34, - }, - landscape: { - topInset: 0, - leftInset: 44, - rightInset: 44, - bottomInset: 21, - }, - }, -}; diff --git a/templates/app/react-native/src/theme/variables/Material.js b/templates/app/react-native/src/theme/variables/Material.js deleted file mode 100644 index 8382482c96..0000000000 --- a/templates/app/react-native/src/theme/variables/Material.js +++ /dev/null @@ -1,299 +0,0 @@ -import color from 'color'; -import { Platform, Dimensions, PixelRatio } from 'react-native'; - -import { PLATFORM } from './CommonColor'; - -const deviceHeight = Dimensions.get('window').height; -const deviceWidth = Dimensions.get('window').width; -const platform = Platform.OS; -const platformStyle = PLATFORM.MATERIAL; -const isIphoneX = - platform === PLATFORM.IOS && - (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); - -export default { - platformStyle, - platform, - - // Accordion - headerStyle: '#edebed', - iconStyle: '#000', - contentStyle: '#f5f4f5', - expandedIconStyle: '#000', - accordionBorderColor: '#d3d3d3', - - // ActionSheet - elevation: 4, - containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', - innerTouchableBackgroundColor: '#fff', - listItemHeight: 50, - listItemBorderColor: 'transparent', - marginHorizontal: -15, - marginLeft: 14, - marginTop: 15, - minHeight: 56, - padding: 15, - touchableTextColor: '#757575', - - // Android - androidRipple: true, - androidRippleColor: 'rgba(256, 256, 256, 0.3)', - androidRippleColorDark: 'rgba(0, 0, 0, 0.15)', - buttonUppercaseAndroidText: true, - - // Badge - badgeBg: '#ED1727', - badgeColor: '#fff', - badgePadding: 0, - - // Button - buttonFontFamily: 'Roboto', - buttonDisabledBg: '#b5b5b5', - buttonPadding: 6, - get buttonPrimaryBg() { - return this.brandPrimary; - }, - get buttonPrimaryColor() { - return this.inverseTextColor; - }, - get buttonInfoBg() { - return this.brandInfo; - }, - get buttonInfoColor() { - return this.inverseTextColor; - }, - get buttonSuccessBg() { - return this.brandSuccess; - }, - get buttonSuccessColor() { - return this.inverseTextColor; - }, - get buttonDangerBg() { - return this.brandDanger; - }, - get buttonDangerColor() { - return this.inverseTextColor; - }, - get buttonWarningBg() { - return this.brandWarning; - }, - get buttonWarningColor() { - return this.inverseTextColor; - }, - get buttonTextSize() { - return this.fontSizeBase - 1; - }, - get buttonTextSizeLarge() { - return this.fontSizeBase * 1.5; - }, - get buttonTextSizeSmall() { - return this.fontSizeBase * 0.8; - }, - get borderRadiusLarge() { - return this.fontSizeBase * 3.8; - }, - get iconSizeLarge() { - return this.iconFontSize * 1.5; - }, - get iconSizeSmall() { - return this.iconFontSize * 0.6; - }, - - // Card - cardDefaultBg: '#fff', - cardBorderColor: '#ccc', - cardBorderRadius: 2, - cardItemPadding: platform === PLATFORM.IOS ? 10 : 12, - - // CheckBox - CheckboxRadius: 0, - CheckboxBorderWidth: 2, - CheckboxPaddingLeft: 2, - CheckboxPaddingBottom: 5, - CheckboxIconSize: 16, - CheckboxIconMarginTop: 1, - CheckboxFontSize: 17, - checkboxBgColor: '#039BE5', - checkboxSize: 20, - checkboxTickColor: '#fff', - - // Color - brandPrimary: '#3F51B5', - brandInfo: '#62B1F6', - brandSuccess: '#5cb85c', - brandDanger: '#d9534f', - brandWarning: '#f0ad4e', - brandDark: '#000', - brandLight: '#f4f4f4', - - // Container - containerBgColor: '#fff', - - // Date Picker - datePickerTextColor: '#000', - datePickerBg: 'transparent', - - // FAB - fabWidth: 56, - - // Font - DefaultFontSize: 16, - fontFamily: 'Roboto', - fontSizeBase: 15, - get fontSizeH1() { - return this.fontSizeBase * 1.8; - }, - get fontSizeH2() { - return this.fontSizeBase * 1.6; - }, - get fontSizeH3() { - return this.fontSizeBase * 1.4; - }, - - // Footer - footerHeight: 55, - footerDefaultBg: '#3F51B5', - footerPaddingBottom: 0, - - // FooterTab - tabBarTextColor: '#bfc6ea', - tabBarTextSize: 11, - activeTab: '#fff', - sTabBarActiveTextColor: '#007aff', - tabBarActiveTextColor: '#fff', - tabActiveBgColor: '#3F51B5', - - // Header - toolbarBtnColor: '#fff', - toolbarDefaultBg: '#3F51B5', - toolbarHeight: 56, - toolbarSearchIconSize: 23, - toolbarInputColor: '#fff', - searchBarHeight: platform === PLATFORM.IOS ? 30 : 40, - searchBarInputHeight: platform === PLATFORM.IOS ? 40 : 50, - toolbarBtnTextColor: '#fff', - toolbarDefaultBorder: '#3F51B5', - iosStatusbar: 'light-content', - get statusBarColor() { - return color(this.toolbarDefaultBg) - .darken(0.2) - .hex(); - }, - get darkenHeader() { - return color(this.tabBgColor) - .darken(0.03) - .hex(); - }, - - // Icon - iconFamily: 'Ionicons', - iconFontSize: 28, - iconHeaderSize: 24, - - // InputGroup - inputFontSize: 17, - inputBorderColor: '#D9D5DC', - inputSuccessBorderColor: '#2b8339', - inputErrorBorderColor: '#ed2f2f', - inputHeightBase: 50, - get inputColor() { - return this.textColor; - }, - get inputColorPlaceholder() { - return '#575757'; - }, - - // Line Height - buttonLineHeight: 19, - lineHeightH1: 32, - lineHeightH2: 27, - lineHeightH3: 22, - lineHeight: 24, - - // List - listBg: 'transparent', - listBorderColor: '#c9c9c9', - listDividerBg: '#f4f4f4', - listBtnUnderlayColor: '#DDD', - listItemPadding: 12, - listNoteColor: '#808080', - listNoteSize: 13, - listItemSelected: '#3F51B5', - - // Progress Bar - defaultProgressColor: '#E4202D', - inverseProgressColor: '#1A191B', - - // Radio Button - radioBtnSize: 23, - radioSelectedColorAndroid: '#3F51B5', - radioBtnLineHeight: 24, - get radioColor() { - return this.brandPrimary; - }, - - // Segment - segmentBackgroundColor: '#3F51B5', - segmentActiveBackgroundColor: '#fff', - segmentTextColor: '#fff', - segmentActiveTextColor: '#3F51B5', - segmentBorderColor: '#fff', - segmentBorderColorMain: '#3F51B5', - - // Spinner - defaultSpinnerColor: '#45D56E', - inverseSpinnerColor: '#1A191B', - - // Tab - tabDefaultBg: '#3F51B5', - topTabBarTextColor: '#b3c7f9', - topTabBarActiveTextColor: '#fff', - topTabBarBorderColor: '#fff', - topTabBarActiveBorderColor: '#fff', - - // Tabs - tabBgColor: '#F8F8F8', - tabFontSize: 15, - - // Text - textColor: '#000', - inverseTextColor: '#fff', - noteFontSize: 14, - get defaultTextColor() { - return this.textColor; - }, - - // Title - titleFontfamily: 'Roboto', - titleFontSize: 19, - subTitleFontSize: 14, - subtitleColor: '#FFF', - titleFontColor: '#FFF', - - // Other - borderRadiusBase: 2, - borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), - contentPadding: 10, - dropdownLinkColor: '#414142', - inputLineHeight: 24, - deviceWidth, - deviceHeight, - isIphoneX, - inputGroupRoundedBorderRadius: 30, - - // iPhoneX SafeArea - Inset: { - portrait: { - topInset: 24, - leftInset: 0, - rightInset: 0, - bottomInset: 34, - }, - landscape: { - topInset: 0, - leftInset: 44, - rightInset: 44, - bottomInset: 21, - }, - }, -}; diff --git a/templates/app/react-native/src/theme/variables/Platform.js b/templates/app/react-native/src/theme/variables/Platform.js deleted file mode 100644 index db8fccab92..0000000000 --- a/templates/app/react-native/src/theme/variables/Platform.js +++ /dev/null @@ -1,333 +0,0 @@ -// @flow - -import color from 'color'; -import { Platform, Dimensions, PixelRatio } from 'react-native'; - -import { PLATFORM } from './CommonColor'; - -const deviceHeight = Dimensions.get('window').height; -const deviceWidth = Dimensions.get('window').width; -const platform = Platform.OS; -const platformStyle = undefined; -const isIphoneX = - platform === PLATFORM.IOS && - (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); - -export default { - platformStyle, - platform, - - // Accordion - accordionBorderColor: '#d3d3d3', - accordionContentPadding: 10, - accordionIconFontSize: 18, - contentStyle: '#f5f4f5', - expandedIconStyle: '#000', - headerStyle: '#edebed', - iconStyle: '#000', - - // ActionSheet - elevation: 4, - containerTouchableBackgroundColor: 'rgba(0,0,0,0.4)', - innerTouchableBackgroundColor: '#fff', - listItemHeight: 50, - listItemBorderColor: 'transparent', - marginHorizontal: -15, - marginLeft: 14, - marginTop: 15, - minHeight: 56, - padding: 15, - touchableTextColor: '#757575', - - // Android - androidRipple: true, - androidRippleColor: 'rgba(256, 256, 256, 0.3)', - androidRippleColorDark: 'rgba(0, 0, 0, 0.15)', - buttonUppercaseAndroidText: true, - - // Badge - badgeBg: '#ED1727', - badgeColor: '#fff', - badgePadding: platform === PLATFORM.IOS ? 3 : 0, - - // Button - buttonFontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', - buttonDisabledBg: '#b5b5b5', - buttonPadding: 6, - buttonDefaultActiveOpacity: 0.5, - buttonDefaultFlex: 1, - buttonDefaultBorderRadius: 2, - buttonDefaultBorderWidth: 1, - get buttonPrimaryBg() { - return this.brandPrimary; - }, - get buttonPrimaryColor() { - return this.inverseTextColor; - }, - get buttonInfoBg() { - return this.brandInfo; - }, - get buttonInfoColor() { - return this.inverseTextColor; - }, - get buttonSuccessBg() { - return this.brandSuccess; - }, - get buttonSuccessColor() { - return this.inverseTextColor; - }, - get buttonDangerBg() { - return this.brandDanger; - }, - get buttonDangerColor() { - return this.inverseTextColor; - }, - get buttonWarningBg() { - return this.brandWarning; - }, - get buttonWarningColor() { - return this.inverseTextColor; - }, - get buttonTextSize() { - return platform === PLATFORM.IOS ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; - }, - get buttonTextSizeLarge() { - return this.fontSizeBase * 1.5; - }, - get buttonTextSizeSmall() { - return this.fontSizeBase * 0.8; - }, - get borderRadiusLarge() { - return this.fontSizeBase * 3.8; - }, - get iconSizeLarge() { - return this.iconFontSize * 1.5; - }, - get iconSizeSmall() { - return this.iconFontSize * 0.6; - }, - - // Card - cardDefaultBg: '#fff', - cardBorderColor: '#ccc', - cardBorderRadius: 2, - cardItemPadding: platform === PLATFORM.IOS ? 10 : 12, - - // CheckBox - CheckboxRadius: platform === PLATFORM.IOS ? 13 : 0, - CheckboxBorderWidth: platform === PLATFORM.IOS ? 1 : 2, - CheckboxPaddingLeft: platform === PLATFORM.IOS ? 4 : 2, - CheckboxPaddingBottom: platform === PLATFORM.IOS ? 0 : 5, - CheckboxIconSize: platform === PLATFORM.IOS ? 21 : 16, - CheckboxIconMarginTop: platform === PLATFORM.IOS ? undefined : 1, - CheckboxFontSize: platform === PLATFORM.IOS ? 23 / 0.9 : 17, - get checkboxBgColor() { - return this.brandPrimary; - }, - checkboxSize: 20, - checkboxTickColor: '#fff', - checkboxDefaultColor: 'transparent', - checkboxTextShadowRadius: 0, - - // Color - brandPrimary: '#38003c', - brandInfo: '#54B9F1', - brandSuccess: '#42B87F', - brandDanger: '#A83232', - brandWarning: '#FFC42E', - brandDark: '#2A2A2A', - brandLight: '#E8E8E8', - - // Container - containerBgColor: '#fff', - - // Date Picker - datePickerFlex: 1, - datePickerPadding: 10, - datePickerTextColor: '#000', - datePickerBg: 'transparent', - - // FAB - fabBackgroundColor: 'blue', - fabBorderRadius: 28, - fabBottom: 0, - fabButtonBorderRadius: 20, - fabButtonHeight: 40, - fabButtonLeft: 7, - fabButtonMarginBottom: 10, - fabContainerBottom: 20, - fabDefaultPosition: 20, - fabElevation: 4, - fabIconColor: '#fff', - fabIconSize: 24, - fabShadowColor: '#000', - fabShadowOffsetHeight: 2, - fabShadowOffsetWidth: 0, - fabShadowOpacity: 0.4, - fabShadowRadius: 2, - fabWidth: 56, - - // Font - DefaultFontSize: 16, - fontFamily: platform === PLATFORM.IOS ? 'System' : 'Roboto', - fontSizeBase: 15, - get fontSizeH1() { - return this.fontSizeBase * 1.8; - }, - get fontSizeH2() { - return this.fontSizeBase * 1.6; - }, - get fontSizeH3() { - return this.fontSizeBase * 1.4; - }, - - // Footer - footerHeight: 55, - footerDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - footerPaddingBottom: 0, - - // FooterTab - tabBarTextColor: platform === PLATFORM.IOS ? '#6b6b6b' : '#b3c7f9', - tabBarTextSize: platform === PLATFORM.IOS ? 14 : 11, - activeTab: platform === PLATFORM.IOS ? '#007aff' : '#fff', - sTabBarActiveTextColor: '#007aff', - tabBarActiveTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - tabActiveBgColor: platform === PLATFORM.IOS ? '#cde1f9' : '#3F51B5', - - // Header - toolbarBtnColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - toolbarDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - toolbarHeight: platform === PLATFORM.IOS ? 64 : 56, - toolbarSearchIconSize: platform === PLATFORM.IOS ? 20 : 23, - toolbarInputColor: platform === PLATFORM.IOS ? '#CECDD2' : '#fff', - searchBarHeight: platform === PLATFORM.IOS ? 30 : 40, - searchBarInputHeight: platform === PLATFORM.IOS ? 30 : 50, - toolbarBtnTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - toolbarDefaultBorder: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', - iosStatusbar: 'light-content', - get statusBarColor() { - return color(this.toolbarDefaultBg) - .darken(0.2) - .hex(); - }, - get darkenHeader() { - return color(this.tabBgColor) - .darken(0.03) - .hex(); - }, - - // Icon - iconFamily: 'Ionicons', - iconFontSize: platform === PLATFORM.IOS ? 30 : 28, - iconHeaderSize: platform === PLATFORM.IOS ? 33 : 24, - - // InputGroup - inputFontSize: 17, - inputBorderColor: '#D9D5DC', - inputSuccessBorderColor: '#2b8339', - inputErrorBorderColor: '#ed2f2f', - inputHeightBase: 50, - get inputColor() { - return this.textColor; - }, - get inputColorPlaceholder() { - return '#575757'; - }, - - // Line Height - buttonLineHeight: 19, - lineHeightH1: 32, - lineHeightH2: 27, - lineHeightH3: 22, - lineHeight: platform === PLATFORM.IOS ? 20 : 24, - listItemSelected: platform === PLATFORM.IOS ? '#007aff' : '#3F51B5', - - // List - listBg: 'transparent', - listBorderColor: '#c9c9c9', - listDividerBg: '#f4f4f4', - listBtnUnderlayColor: '#DDD', - listItemPadding: platform === PLATFORM.IOS ? 10 : 12, - listNoteColor: '#808080', - listNoteSize: 13, - - // Progress Bar - defaultProgressColor: '#E4202D', - inverseProgressColor: '#1A191B', - - // Radio Button - radioBtnSize: platform === PLATFORM.IOS ? 25 : 23, - radioSelectedColorAndroid: '#3F51B5', - radioBtnLineHeight: platform === PLATFORM.IOS ? 29 : 24, - get radioColor() { - return this.brandPrimary; - }, - - // Segment - segmentBackgroundColor: '#f8f8f8', - segmentActiveBackgroundColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - segmentTextColor: '#333', - segmentActiveTextColor: '#fff', - get segmentBorderColor() { - return this.brandPrimary; - }, - segmentBorderColorMain: platform === PLATFORM.IOS ? '#a7a6ab' : '#3F51B5', - - // Spinner - defaultSpinnerColor: '#45D56E', - inverseSpinnerColor: '#1A191B', - - // Tab - tabBarDisabledTextColor: '#BDBDBD', - tabDefaultBg: platform === PLATFORM.IOS ? '#F8F8F8' : '#3F51B5', - topTabBarTextColor: platform === PLATFORM.IOS ? '#6b6b6b' : '#b3c7f9', - topTabBarActiveTextColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - topTabBarBorderColor: platform === PLATFORM.IOS ? '#a7a6ab' : '#fff', - topTabBarActiveBorderColor: platform === PLATFORM.IOS ? '#007aff' : '#fff', - - // Tabs - tabBgColor: '#F8F8F8', - tabFontSize: 15, - - // Text - textColor: '#000', - inverseTextColor: '#fff', - noteFontSize: 14, - get defaultTextColor() { - return this.textColor; - }, - - // Title - titleFontfamily: platform === PLATFORM.IOS ? 'System' : 'Roboto_medium', - titleFontSize: platform === PLATFORM.IOS ? 17 : 19, - subTitleFontSize: platform === PLATFORM.IOS ? 11 : 14, - subtitleColor: platform === PLATFORM.IOS ? '#8e8e93' : '#FFF', - titleFontColor: platform === PLATFORM.IOS ? '#000' : '#FFF', - - // Other - borderRadiusBase: platform === PLATFORM.IOS ? 5 : 2, - borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), - contentPadding: 10, - dropdownLinkColor: '#414142', - inputLineHeight: 24, - deviceWidth, - deviceHeight, - isIphoneX, - inputGroupRoundedBorderRadius: 30, - - // iPhoneX SafeArea - Inset: { - portrait: { - topInset: 24, - leftInset: 0, - rightInset: 0, - bottomInset: 34, - }, - landscape: { - topInset: 0, - leftInset: 44, - rightInset: 44, - bottomInset: 21, - }, - }, -}; diff --git a/templates/app/react-native/src/theme/variables/index.js b/templates/app/react-native/src/theme/variables/index.js deleted file mode 100644 index d200bbdb83..0000000000 --- a/templates/app/react-native/src/theme/variables/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import platform from './Platform'; - -export const customVariables = { - zIndex: { - overlay: 50, - loaders: 150, - }, -}; - -export const activeTheme = { ...platform, ...customVariables }; diff --git a/templates/app/react-native/src/utils/DateExtensions.js b/templates/app/react-native/src/utils/DateExtensions.js deleted file mode 100644 index 890a6fdfc5..0000000000 --- a/templates/app/react-native/src/utils/DateExtensions.js +++ /dev/null @@ -1,5 +0,0 @@ -export function toLocalISOString(date) { - const timezoneOffset = date.getTimezoneOffset(); - - return new Date(date.getTime() - timezoneOffset * 60000).toISOString(); -} diff --git a/templates/app/react-native/src/utils/Debounce.js b/templates/app/react-native/src/utils/Debounce.js deleted file mode 100644 index 34588c63d4..0000000000 --- a/templates/app/react-native/src/utils/Debounce.js +++ /dev/null @@ -1,14 +0,0 @@ -export function debounce(func, wait, immediate) { - let timeout; - return (...args) => { - const context = this; - const later = () => { - timeout = null; - if (!immediate) func.apply(context, args); - }; - const callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) func.apply(context, args); - }; -} diff --git a/templates/app/react-native/src/utils/RandomColor.js b/templates/app/react-native/src/utils/RandomColor.js deleted file mode 100644 index a925d77763..0000000000 --- a/templates/app/react-native/src/utils/RandomColor.js +++ /dev/null @@ -1,12 +0,0 @@ -export function getRandomColors(count) { - const colors = []; - - for (let i = 0; i < count; i++) { - const r = ((i + 5) * (i + 5) * 474) % 255; - const g = ((i + 5) * (i + 5) * 1600) % 255; - const b = ((i + 5) * (i + 5) * 84065) % 255; - colors.push(`rgba(${r}, ${g}, ${b})`); - } - - return colors; -} diff --git a/templates/app/react-native/src/utils/ReduxConnect.js b/templates/app/react-native/src/utils/ReduxConnect.js deleted file mode 100644 index be68b186af..0000000000 --- a/templates/app/react-native/src/utils/ReduxConnect.js +++ /dev/null @@ -1,9 +0,0 @@ -import { connect } from 'react-redux'; - -export function connectToRedux({ component, stateProps = () => ({}), dispatchProps = () => ({}) }) { - const mapStateToProps = () => stateProps; - - const mapDispatchToProps = dispatchProps; - - return connect(mapStateToProps, mapDispatchToProps)(component); -} diff --git a/templates/app/react-native/src/utils/TokenUtils.js b/templates/app/react-native/src/utils/TokenUtils.js deleted file mode 100644 index ab1925061b..0000000000 --- a/templates/app/react-native/src/utils/TokenUtils.js +++ /dev/null @@ -1,7 +0,0 @@ -export function isTokenValid(token) { - if (!token || typeof token !== 'object' || !token.expire_time) return false; - - const now = new Date().valueOf(); - - return now < token.expire_time; -} diff --git a/templates/app/react-native/yarn.lock b/templates/app/react-native/yarn.lock deleted file mode 100644 index fb96d4e051..0000000000 --- a/templates/app/react-native/yarn.lock +++ /dev/null @@ -1,6890 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/compat-data@^7.8.4": - version "7.8.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" - integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== - dependencies: - browserslist "^4.8.5" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@^7.0.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.0.0", "@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== - dependencies: - "@babel/types" "^7.8.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-builder-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" - integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== - dependencies: - "@babel/types" "^7.8.3" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-compilation-targets@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" - integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== - dependencies: - "@babel/compat-data" "^7.8.4" - browserslist "^4.8.5" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" - integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - -"@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== - dependencies: - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.6.0" - -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== - dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-replace-supers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" - integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - -"@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== - -"@babel/plugin-external-helpers@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz#5a94164d9af393b2820a3cdc407e28ebf237de4b" - integrity sha512-mx0WXDDiIl5DwzMtzWGRSPugXi9BxROS05GQrhLNbEamhBiicgn994ibwkyiBH+6png7bm/yA7AUsvHyCXi4Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-decorators@^7.6.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" - integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-decorators" "^7.8.3" - -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" - integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-export-default-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" - integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" - integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-decorators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" - integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" - integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0", "@babel/plugin-syntax-flow@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" - integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" - integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" - integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz#da705a655466b2a9b36046b57bf0cbcd53551bd4" - integrity sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" - integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== - dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== - dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== - dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.8.3.tgz#dc3b8dd50ef03837868a37b7df791f64f288538e" - integrity sha512-i3LuN8tPDqUCRFu3dkzF2r1Nx0jp4scxtm7JxtIqI9he9Vk20YD+/zshdzR9JLsoBMlJlNR82a62vQExNEVx/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" - integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== - dependencies: - "@babel/helper-call-delegate" "^7.8.3" - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0" - integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" - integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== - dependencies: - "@babel/helper-builder-react-jsx" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== - dependencies: - regenerator-transform "^0.14.0" - -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-runtime@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" - integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typescript@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" - integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-typescript" "^7.8.3" - -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/preset-env@^7.6.3": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" - integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== - dependencies: - "@babel/compat-data" "^7.8.4" - "@babel/helper-compilation-targets" "^7.8.4" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.3" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.4" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.4" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.3" - browserslist "^4.8.5" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/register@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.3.tgz#5d5d30cfcc918437535d724b8ac1e4a60c5db1f8" - integrity sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" - integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.0.0", "@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" - "@babel/types" "^7.8.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.0.0", "@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@egjs/hammerjs@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124" - integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A== - dependencies: - "@types/hammerjs" "^2.0.36" - -"@expo/vector-icons@^10.0.2", "@expo/vector-icons@^10.0.6": - version "10.0.6" - resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-10.0.6.tgz#5718953ff0b97827d11dae5787976fa8ce5caaed" - integrity sha512-qNlKPNdf073LpeEpyClxAh0D3mmIK4TGAQzeKR0HVwf14RIEe17+mLW5Z6Ka5Ho/lUtKMRPDHumSllFyKvpeGg== - dependencies: - lodash "^4.17.4" - -"@expo/websql@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@expo/websql/-/websql-1.0.1.tgz#fff0cf9c1baa1f70f9e1d658b7c39a420d9b10a9" - integrity sha1-//DPnBuqH3D54dZYt8OaQg2bEKk= - dependencies: - argsarray "^0.0.1" - immediate "^3.2.2" - noop-fn "^1.0.0" - pouchdb-collections "^1.0.1" - tiny-queue "^0.2.1" - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.3": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== - dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - -"@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== - dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/istanbul-lib-coverage" "^2.0.0" - -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - -"@jest/types@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395" - integrity sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@react-native-community/cli-debugger-ui@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz#d01d08d1e5ddc1633d82c7d84d48fff07bd39416" - integrity sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g== - dependencies: - serve-static "^1.13.1" - -"@react-native-community/cli-platform-android@^3.0.0-alpha.1": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-3.1.4.tgz#61f964dc311623e60b0fb29c5f3732cc8a6f076f" - integrity sha512-ClSdY20F0gzWVLTqCv7vHjnUqOcuq10jd9GgHX6lGSc2GI+Ql3/aQg3tmG4uY3KXNNwAv3U8QCoYgg1WGfwiHA== - dependencies: - "@react-native-community/cli-tools" "^3.0.0" - chalk "^2.4.2" - execa "^1.0.0" - jetifier "^1.6.2" - logkitty "^0.6.0" - slash "^3.0.0" - xmldoc "^1.1.2" - -"@react-native-community/cli-platform-ios@^3.0.0-alpha.1": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.2.0.tgz#c469444f5993c9e6737a4b16d78cf033e3702f00" - integrity sha512-pzEnx68H6+mHBq5jsMrr3UmAmkrLSMlC9BZ4yoUdfUXCQq6/R70zNYvH4hjUw8h2Al7Kgq53UzHUsM0ph8TSWQ== - dependencies: - "@react-native-community/cli-tools" "^3.0.0" - chalk "^2.4.2" - js-yaml "^3.13.1" - xcode "^2.0.0" - -"@react-native-community/cli-tools@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-3.0.0.tgz#fe48b80822ed7e49b8af051f9fe41e22a2a710b1" - integrity sha512-8IhQKZdf3E4CR8T7HhkPGgorot/cLkRDgneJFDSWk/wCYZAuUh4NEAdumQV7N0jLSMWX7xxiWUPi94lOBxVY9g== - dependencies: - chalk "^2.4.2" - lodash "^4.17.5" - mime "^2.4.1" - node-fetch "^2.5.0" - -"@react-native-community/cli-types@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-3.0.0.tgz#488d46605cb05e88537e030f38da236eeda74652" - integrity sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg== - -"@react-native-community/cli@^3.0.0-alpha.1": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.2.0.tgz#f4b04b94bf96810c4a7f57379a69ebd11fd9c933" - integrity sha512-k8GmNQH/EbIIVd4VlVbFP99IRNhovWV6hhnJ3y2+FfZq18H/U6yV/t1bpI3A3QqPuAyWxk/1jBdXvP6BY/7kbw== - dependencies: - "@hapi/joi" "^15.0.3" - "@react-native-community/cli-debugger-ui" "^3.0.0" - "@react-native-community/cli-tools" "^3.0.0" - "@react-native-community/cli-types" "^3.0.0" - chalk "^2.4.2" - command-exists "^1.2.8" - commander "^2.19.0" - compression "^1.7.1" - connect "^3.6.5" - cosmiconfig "^5.1.0" - deepmerge "^3.2.0" - didyoumean "^1.2.1" - envinfo "^7.1.0" - errorhandler "^1.5.0" - execa "^1.0.0" - find-up "^4.1.0" - fs-extra "^7.0.1" - glob "^7.1.1" - graceful-fs "^4.1.3" - inquirer "^3.0.6" - lodash "^4.17.5" - metro "^0.56.0" - metro-config "^0.56.0" - metro-core "^0.56.0" - metro-react-native-babel-transformer "^0.56.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - morgan "^1.9.0" - node-notifier "^5.2.1" - open "^6.2.0" - ora "^3.4.0" - plist "^3.0.0" - pretty-format "^25.1.0" - semver "^6.3.0" - serve-static "^1.13.1" - shell-quote "1.6.1" - strip-ansi "^5.2.0" - sudo-prompt "^9.0.0" - wcwidth "^1.0.1" - ws "^1.1.0" - -"@react-native-community/masked-view@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.5.tgz#25421be6cd943a4b1660b62cfbcd45be8891462c" - integrity sha512-Lj1DzfCmW0f4HnmHtEuX8Yy2f7cnUA8r5KGGUuDDGtQt1so6QJkKeUmsnLo2zYDtsF8due6hvIL06Vdo5xxuLQ== - -"@react-navigation/core@^5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-5.1.6.tgz#cefaad9618e17ff743d9a26aeee4da53c4a96b92" - integrity sha512-YsYICOZ+a1HmvfSULtR9BTRYJVB0vO9ZCFlSI5OZTcqlMH1oyV4Zt7Dxk6slPg0qa9n0agJB6L0ZWI2+gjmO0w== - dependencies: - "@react-navigation/routers" "^5.0.2" - escape-string-regexp "^2.0.0" - query-string "^6.10.1" - react-is "^16.12.0" - shortid "^2.2.15" - use-subscription "^1.3.0" - -"@react-navigation/drawer@^5.0.3": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@react-navigation/drawer/-/drawer-5.0.7.tgz#677a7ab3b1f022ba7ad962c7e05259dc51335096" - integrity sha512-1BwYqGoiveH2k3KIwfCE0w8pCU/jhwgUNPIAwPM/f/TpgNjz2h13YAu0G77gwDgH5lz+oeRwiz3TFDZ6AJr+Dg== - dependencies: - color "^3.1.2" - react-native-iphone-x-helper "^1.2.1" - -"@react-navigation/native@^5.0.3": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-5.0.7.tgz#621c4820ab751d09b13e39619439bd775a26f606" - integrity sha512-WDqhjyGSFsoMHD2436lvL6Z9Lmn3vJhY3Ltm8T2PNNtnR/3/Z7mNAKU373zritAUVSk0lJppAQluJYITtbdXcQ== - dependencies: - "@react-navigation/core" "^5.1.6" - -"@react-navigation/routers@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-5.0.2.tgz#c528a5c1f5f697fbb7ed7a8c8df87db4f4308b79" - integrity sha512-vHzXuhS9bkr/GnBkFVVmduHDTXRQAxKDBU77BRqL7Qg0D6gVlIHZTa68HsuoOoz1UH07ZaxYo1br0btXM322SQ== - dependencies: - shortid "^2.2.15" - -"@react-navigation/stack@^5.0.3": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-5.0.9.tgz#f6b0a17bf3658d406c4f8b594924c2b79b8b930d" - integrity sha512-6cgOCvvX4N35d2y+NX36qN25w8bjsJXVoo213cXB23X6SVRSRqbAPOWE98rsHyX6REYPyJx200k7U09xiwCImg== - dependencies: - color "^3.1.2" - react-native-iphone-x-helper "^1.2.1" - -"@redux-saga/core@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" - integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== - dependencies: - "@babel/runtime" "^7.6.3" - "@redux-saga/deferred" "^1.1.2" - "@redux-saga/delay-p" "^1.1.2" - "@redux-saga/is" "^1.1.2" - "@redux-saga/symbols" "^1.1.2" - "@redux-saga/types" "^1.1.0" - redux "^4.0.4" - typescript-tuple "^2.2.1" - -"@redux-saga/deferred@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" - integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== - -"@redux-saga/delay-p@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" - integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== - dependencies: - "@redux-saga/symbols" "^1.1.2" - -"@redux-saga/is@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" - integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== - dependencies: - "@redux-saga/symbols" "^1.1.2" - "@redux-saga/types" "^1.1.0" - -"@redux-saga/symbols@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" - integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== - -"@redux-saga/types@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" - integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== - -"@reduxjs/toolkit@^1.2.3": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.2.5.tgz#149aa62da12a18a67a30495cb63fd897003f2272" - integrity sha512-/OWoW5mniUXAomw4+3ZhhWodcs1/SRvK2HKyxLXdW6vKgmJhiBiSHe/huHARlKWujEmGaJrkafx548GE494bCQ== - dependencies: - immer "^4.0.1" - redux "^4.0.0" - redux-devtools-extension "^2.13.8" - redux-immutable-state-invariant "^2.1.0" - redux-thunk "^2.3.0" - reselect "^4.0.0" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/fbemitter@^2.0.32": - version "2.0.32" - resolved "https://registry.yarnpkg.com/@types/fbemitter/-/fbemitter-2.0.32.tgz#8ed204da0f54e9c8eaec31b1eec91e25132d082c" - integrity sha1-jtIE2g9U6cjq7DGx7skeJRMtCCw= - -"@types/hammerjs@^2.0.36": - version "2.0.36" - resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.36.tgz#17ce0a235e9ffbcdcdf5095646b374c2bf615a4c" - integrity sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ== - -"@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/i18n-js@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/i18n-js/-/i18n-js-3.0.1.tgz#e027d35513b2703e5d48b82771e7fcb3b664e2fb" - integrity sha512-m7tWPh9zKpQoYenIpkmeREb2oMaZiZB8qfGv+2ucDg1LgFnETAxYIXkT8dASGyVRWZyEhNEPlfODP4+QfXI3KQ== - -"@types/invariant@^2.2.29": - version "2.2.31" - resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.31.tgz#4444c03004f215289dbca3856538434317dd28b2" - integrity sha512-jMlgg9pIURvy9jgBHCjQp/CyBjYHUwj91etVcDdXkFl2CwTFiQlB+8tcsMeXpXf2PFE5X2pjk4Gm43hQSMHAdA== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/lodash.zipobject@^4.1.4": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/lodash.zipobject/-/lodash.zipobject-4.1.6.tgz#75e140f44ac7d7682a18d3aae8ee4594fad094d7" - integrity sha512-30khEHqHWaLgMZR35wtkg07OmHiNiDQyor0SK7oj8Sy05tg6jDjPmJybeZ64WKeFZUEgs1tdJwdT0xUl+2qUgQ== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.149" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" - integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/qs@^6.5.1": - version "6.9.1" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.1.tgz#937fab3194766256ee09fcd40b781740758617e7" - integrity sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw== - -"@types/react-native@~0.60.23": - version "0.60.31" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.31.tgz#a7af12197f884ad8dd22cda2df9862ed72973ded" - integrity sha512-Y0Q+nv50KHnLL+jM0UH68gQQv7Wt6v2KuNepiHKwK1DoWGVd1oYun/GJCnvUje+/V8pMQQWW6QuBvHZz1pV7tQ== - dependencies: - "@types/prop-types" "*" - "@types/react" "*" - -"@types/react-redux@^7.1.7": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.7.tgz#12a0c529aba660696947384a059c5c6e08185c7a" - integrity sha512-U+WrzeFfI83+evZE2dkZ/oF/1vjIYgqrb5dGgedkqVV8HEfDFujNgWCwHL89TDuWKb47U0nTBT6PLGq4IIogWg== - dependencies: - "@types/hoist-non-react-statics" "^3.3.0" - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - redux "^4.0.0" - -"@types/react@*", "@types/react@~16.9.0": - version "16.9.22" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.22.tgz#f0288c92d94e93c4b43e3f5633edf788b2c040ae" - integrity sha512-7OSt4EGiLvy0h5R7X+r0c7S739TCU/LvWbkNOrm10lUwNHe7XPz5OLhLOSZeCkqO9JSCly1NkYJ7ODTUqVnHJQ== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/uuid-js@^0.7.1": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@types/uuid-js/-/uuid-js-0.7.2.tgz#5b5552fcbaaf4acf026fb6dc66f7e5bd6b4be92f" - integrity sha512-9R+mA6mMXkFVQnXEeX5fMQDR2SYND7cafJTqbeMpLhgsL7qr7MF4ZBxWpLexml3lZsBsyAmqVWbOiB0N10m15w== - -"@types/websql@^0.0.27": - version "0.0.27" - resolved "https://registry.yarnpkg.com/@types/websql/-/websql-0.0.27.tgz#621a666a7f02018e7cbb4abab956a25736c27d71" - integrity sha1-Yhpman8CAY58u0q6uVaiVzbCfXE= - -"@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== - -"@types/yargs@^13.0.0": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^15.0.0": - version "15.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.3.tgz#41453a0bc7ab393e995d1f5451455638edbd2baf" - integrity sha512-XCMQRK6kfpNBixHLyHUsGmXrpEmFFxzMrcnSXFMziHd8CoNJo8l16FkHyQq4x+xbM7E2XL83/O78OD8u+iZTdQ== - dependencies: - "@types/yargs-parser" "*" - -"@types/yup@^0.26.29": - version "0.26.32" - resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.26.32.tgz#bd356fb405f3d641eff963854edf7ad854a8e829" - integrity sha512-55WFAq8lNYXdRzSP1cenMFFXtPRe7PWsqn5y9ibqKHOQZ/cSLErkcnB1LE89M7W2TSXVDFtx+T7eFePkGoB+xw== - -"@unimodules/core@~5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-5.0.0.tgz#e1e3ca3f91f3d27dbc93c6eebc03a40c711da755" - integrity sha512-PswccfzFIviX61Lm8h6/QyC94bWe+6cARwhzgzTCKa6aR6azmi4732ExhX4VxfQjJNHB0szYVXGXVEDsFkj+tQ== - dependencies: - compare-versions "^3.4.0" - -"@unimodules/react-native-adapter@~5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-5.0.0.tgz#af9835821a2bf38390b9f09f3231c0b7546ee510" - integrity sha512-qb5p5wUQoi3TRa/33aLLHSnS7sewV99oBxIo9gnzNI3VFzbOm3rsbTjOJNcR2hx0raUolTtnQT75VbgagVQx4w== - dependencies: - invariant "^2.2.4" - lodash "^4.5.0" - prop-types "^15.6.1" - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -absolute-path@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" - integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= - -accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-jsx@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" - integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== - -acorn@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" - integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== - -ajv@^6.10.0, ajv@^6.10.2: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" - integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= - dependencies: - ansi-wrap "0.1.0" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" - integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== - dependencies: - type-fest "^0.8.1" - -ansi-fragments@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" - integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== - dependencies: - colorette "^1.0.7" - slice-ansi "^2.0.0" - strip-ansi "^5.0.0" - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argsarray@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" - integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs= - -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - -array-find-index@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-includes@^3.0.3, array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= - -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -art@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2" - integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ== - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.4.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -axios@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -axobject-query@^2.0.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799" - integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ== - -babel-eslint@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" - integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-module-resolver@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" - integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== - dependencies: - find-babel-config "^1.1.0" - glob "^7.1.2" - pkg-up "^2.0.0" - reselect "^3.0.1" - resolve "^1.4.0" - -babel-plugin-react-native-web@^0.11.7: - version "0.11.7" - resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.11.7.tgz#15b578c0731bd7d65d334f9c759d95e8e4a602e2" - integrity sha512-CxE7uhhqkzAFkwV2X7+Mc/UVPujQQDtja/EGxCXRJvdYRi72QTmaJYKbK1lV9qgTZuB+TDguU89coaA9Z1BNbg== - -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== - -babel-preset-expo@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-8.0.0.tgz#08c042363189f2d871381f0d0dbf9644e9f67aea" - integrity sha512-40UCIE4E+9Xx5K+oEidFHML2+j/WE/ikcC7+3ndWx74MtdmRAtnGecboKRiGUK/vMrHzXIcWPP6/SOnE7zQVgQ== - dependencies: - "@babel/plugin-proposal-decorators" "^7.6.0" - "@babel/preset-env" "^7.6.3" - babel-plugin-module-resolver "^3.2.0" - babel-plugin-react-native-web "^0.11.7" - metro-react-native-babel-preset "^0.56.0" - -babel-preset-fbjs@^3.1.2, babel-preset-fbjs@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" - integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.1.2, base64-js@^1.2.3: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -big-integer@^1.6.44: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -blueimp-md5@^2.10.0, blueimp-md5@^2.5.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.12.0.tgz#be7367938a889dec3ffbb71138617c117e9c130a" - integrity sha512-zo+HIdIhzojv6F1siQPqPFROyVy7C50KzHv/k/Iz+BtvtVzSHXiMXOpq2wCfNkeBqdCv+V8XOV96tsEt2W/3rQ== - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -bplist-creator@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" - integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== - dependencies: - stream-buffers "~2.2.0" - -bplist-parser@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -browserslist@^4.8.3, browserslist@^4.8.5: - version "4.8.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" - integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== - dependencies: - caniuse-lite "^1.0.30001027" - electron-to-chromium "^1.3.349" - node-releases "^1.1.49" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001027: - version "1.0.30001030" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz#78076c4c6d67d3e41d6eb9399853fb27fe6e44ee" - integrity sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.1.tgz#509afb67066e7499f7eb3535c77445772ae2d019" - integrity sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk= - dependencies: - ansi-styles "^2.1.0" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -clamp@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" - integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ= - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" - integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.1.2, color@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colorette@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" - integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== - -command-exists@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" - integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw== - -commander@^2.11.0, commander@^2.19.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-versions@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" - integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== - -connect@^3.6.5: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== - dependencies: - browserslist "^4.8.3" - semver "7.0.0" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - -core-js@^2.2.2, core-js@^2.4.1: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -create-react-class@^15.6.2, create-react-class@^15.6.3: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -css-in-js-utils@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" - integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== - dependencies: - hyphenate-style-name "^1.0.2" - isobject "^3.0.1" - -css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-tree@^1.0.0-alpha.37: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" - integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== - dependencies: - mdn-data "2.0.6" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" - integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== - -csstype@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" - integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== - -damerau-levenshtein@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" - integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== - -dayjs@^1.8.15: - version "1.8.20" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.20.tgz#724a5cb6ad1f6fc066b0bd9a800dedcc7886f19e" - integrity sha512-mH0MCDxw6UCGJYxVN78h8ugWycZAO8thkj3bW6vApL5tS0hQplIDdAQcmbvl7n35H0AKdCJQaArTrIQw2xt4Qg== - -debounce@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" - integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.1.1, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-3.0.0.tgz#c8e4c4d401cba25550a2f0f486a2e75bc5f219a2" - integrity sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw== - dependencies: - is-obj "^1.0.0" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - -deepmerge@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" - integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -denodeify@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -didyoumean@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" - integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.349: - version "1.3.360" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.360.tgz#1db9cb8d43f4c772546d94ea9be8b677a8ecb483" - integrity sha512-RE1pv2sjQiDRRN1nI0fJ0eQHZ9le4oobu16OArnwEUV5ycAU5SNjFyvzjZ1gPUAqBa2Ud1XagtW8j3ZXfHuQHA== - -emoji-regex@^7.0.1, emoji-regex@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -envinfo@^7.1.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" - integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -errorhandler@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" - integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== - dependencies: - accepts "~1.3.7" - escape-html "~1.0.3" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -eslint-config-airbnb-base@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz#8a7bcb9643d13c55df4dd7444f138bf4efa61e17" - integrity sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA== - dependencies: - confusing-browser-globals "^1.0.7" - object.assign "^4.1.0" - object.entries "^1.1.0" - -eslint-config-airbnb@^18.0.1: - version "18.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.0.1.tgz#a3a74cc29b46413b6096965025381df8fb908559" - integrity sha512-hLb/ccvW4grVhvd6CT83bECacc+s4Z3/AEyWQdIT2KeTsG9dR7nx1gs7Iw4tDmGKozCNHFn4yZmRm3Tgy+XxyQ== - dependencies: - eslint-config-airbnb-base "^14.0.0" - object.assign "^4.1.0" - object.entries "^1.1.0" - -eslint-config-prettier@^6.0.0, eslint-config-prettier@^6.10.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz#7b15e303bf9c956875c948f6b21500e48ded6a7f" - integrity sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg== - dependencies: - get-stdin "^6.0.0" - -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-import@^2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jsx-a11y@^6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" - integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== - dependencies: - "@babel/runtime" "^7.4.5" - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.2" - damerau-levenshtein "^1.0.4" - emoji-regex "^7.0.2" - has "^1.0.3" - jsx-ast-utils "^2.2.1" - -eslint-plugin-react@^7.18.3: - version "7.18.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz#8be671b7f6be095098e79d27ac32f9580f599bc8" - integrity sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg== - dependencies: - array-includes "^3.1.1" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.14.2" - string.prototype.matchall "^4.0.2" - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== - dependencies: - acorn "^7.1.0" - acorn-jsx "^5.1.0" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-target-shim@^5.0.0, event-target-shim@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - 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" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.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" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expo-app-loader-provider@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-app-loader-provider/-/expo-app-loader-provider-8.0.0.tgz#c18ef20a24153f5a0dbb297106ef0bcb5de57180" - integrity sha512-uMEdstZdm14JW8jfWXBWItIjGPNBH7cLj2pNu5e0pYF21W4j759rGL17NTNWit4UdLZg/zJB/HHRidVwEINfxA== - -expo-asset@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.0.0.tgz#400c7cf8693711ddc87da02d20a7d47bd517afeb" - integrity sha512-ICPptpetXB+v88Sqr8yMVEA46UNlUUb8AMbyUytdUJqV7V2itHDQywl08ofOlOICzNgjDFIQdCs3crkTVQ1Zng== - dependencies: - blueimp-md5 "^2.10.0" - path-browserify "^1.0.0" - url-parse "^1.4.4" - -expo-constants@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-8.0.0.tgz#e2c5a072dacb4263ccfc57dcb4835ca791960d48" - integrity sha512-NGRwSWfhwNFA9WVLXwqnSDPJJ4DdXTqEkl9Fr9PcyW5VCoFgz7uke256E1YZsYhOE0Ph365lu/5jjZs+MRmRog== - dependencies: - ua-parser-js "^0.7.19" - -expo-error-recovery@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-1.0.0.tgz#2ca9d59fcd16c5c881af877993731056f2d46afe" - integrity sha512-xnxciNEpGmwxx8BAE2A9fd9HxtzWtz8p9mikKU+EfWgOXaYD3FJwgbFoVLD2pm4QUarxwOcic76rcwg+0cNnGg== - -expo-file-system@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-8.0.0.tgz#60b90c8a375308dc85922592a77531a8e0cde6f7" - integrity sha512-mi84jt3EHVUfxu5eGOikNuRDi7+5daCFSP9LVgk5aQz8Oepo143vnH/+WE4lQEg+u8dB6EmmCWncyc2Fklxv7A== - dependencies: - uuid-js "^0.7.5" - -expo-font@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-8.0.0.tgz#33afd0b501caf8f0392aea77f08717090eeb8d41" - integrity sha512-1hrlvxv8MpE1761v2mDjZRwhhM4hkfDr/MQlkWD2+g17N+UjU3WQct4kc+VuZW30pP+YowwrmG3O6JVoIOhWGA== - dependencies: - fontfaceobserver "^2.1.0" - -expo-keep-awake@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-8.0.0.tgz#f9200a876a5db86e3f0aec8843428a918cdc08d6" - integrity sha512-l+672FVu9qqBEFKSXL1jrsQoDky7gTJX6WYLTWc0/hJuTMhVowWUHsOh/L9vxJEt23QtqLyszQ+hBqjQnWvICQ== - -expo-linear-gradient@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-linear-gradient/-/expo-linear-gradient-8.0.0.tgz#972d33e92714d4a4485635683b5bfa357ecec41b" - integrity sha512-5G3ePGAHUoyBWbGITw5RtdJpssH8TXhCgt55cV+5LTTFjr51OZcuOmGua1vRoVFKBC/9ibLW465GEx9H/HS07Q== - -expo-location@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-location/-/expo-location-8.0.0.tgz#58dd54e47b12e26f9f2a97ded3cd15f8fa959b85" - integrity sha512-48i4dUCaqPTwSri79yummKwg6vE6loI7d4iHCrbG4EEuN3fhS8I9xU60CEkoNZTziH9zK0iw4KSjr7DbXUAaCw== - dependencies: - invariant "^2.2.4" - -expo-permissions@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-permissions/-/expo-permissions-8.0.0.tgz#5a45e8451dd7ff37c9e6ce5e2447818372547813" - integrity sha512-GHTRmwh1rd1b0FcibluPFu93NNQyl9b1anBBDVPmomoo9Prz7kDcO5p2hFqM99r896yvAUSe0fPloPKUq4g/1A== - -expo-sqlite@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-sqlite/-/expo-sqlite-8.0.0.tgz#293b45c78d612ab25400c8c579bd7d73f06ccb6f" - integrity sha512-nJBj1psOkYGIGh2hqMFV/+04EvfGAD3wkHMauUvveU6m/+c48GIxmesPMMDfqtzESgzMcVSKLfbiMYrdQJyrHg== - dependencies: - "@expo/websql" "^1.0.1" - "@types/websql" "^0.0.27" - lodash "^4.17.15" - -expo-web-browser@~8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-8.0.0.tgz#8a4451c744c115569a4c810dac8851f219a21c72" - integrity sha512-7/rXUajycSjEF4Zd4tWm8+zP9/zJg8UWj575w2AeGI7RbOwUjqzQd1CFRzQBJkHflrEaTOXJbFHXxjJXdJaL1g== - -expo@~36.0.0: - version "36.0.2" - resolved "https://registry.yarnpkg.com/expo/-/expo-36.0.2.tgz#17e5470c056f8615ebdd6819087af6a1032cf1ad" - integrity sha512-A0HkOBr6PkHUCcPmmTRmZQHE68EYhWDevFHAiv7fSZxNACmTq9arrSoON+UiPtGQEIV5OyV+MN/joHTJMduTkA== - dependencies: - "@babel/runtime" "^7.1.2" - "@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" "~5.0.0" - "@unimodules/react-native-adapter" "~5.0.0" - babel-preset-expo "~8.0.0" - cross-spawn "^6.0.5" - expo-app-loader-provider "~8.0.0" - expo-asset "~8.0.0" - expo-constants "~8.0.0" - expo-error-recovery "~1.0.0" - expo-file-system "~8.0.0" - expo-font "~8.0.0" - expo-keep-awake "~8.0.0" - expo-linear-gradient "~8.0.0" - expo-location "~8.0.0" - expo-permissions "~8.0.0" - expo-sqlite "~8.0.0" - expo-web-browser "~8.0.0" - fbemitter "^2.1.1" - invariant "^2.2.2" - lodash "^4.6.0" - md5-file "^3.2.3" - nullthrows "^1.1.0" - pretty-format "^23.6.0" - prop-types "^15.6.0" - qs "^6.5.0" - react-native-view-shot "3.0.2" - serialize-error "^2.1.0" - unimodules-barcode-scanner-interface "~5.0.0" - unimodules-camera-interface "~5.0.0" - unimodules-constants-interface "~5.0.0" - unimodules-face-detector-interface "~5.0.0" - unimodules-file-system-interface "~5.0.0" - unimodules-font-interface "~5.0.0" - unimodules-image-loader-interface "~5.0.0" - unimodules-permissions-interface "~5.0.0" - unimodules-sensors-interface "~5.0.0" - unimodules-task-manager-interface "~5.0.0" - uuid-js "^0.7.5" - -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" - integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= - dependencies: - kind-of "^1.1.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - -fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fbemitter@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" - integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= - dependencies: - fbjs "^0.8.4" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs-scripts@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" - integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ== - dependencies: - "@babel/core" "^7.0.0" - ansi-colors "^1.0.1" - babel-preset-fbjs "^3.2.0" - core-js "^2.4.1" - cross-spawn "^5.1.0" - fancy-log "^1.3.2" - object-assign "^4.0.1" - plugin-error "^0.1.2" - semver "^5.1.0" - through2 "^2.0.0" - -fbjs@^0.8.4, fbjs@^0.8.9: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -fbjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" - integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== - dependencies: - core-js "^2.4.1" - fbjs-css-vars "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-babel-config@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" - integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -fontfaceobserver@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz#e2705d293e2c585a6531c2a722905657317a2991" - integrity sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -formik@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570" - integrity sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA== - dependencies: - deepmerge "^2.1.1" - hoist-non-react-statics "^3.3.0" - lodash "^4.17.14" - lodash-es "^4.17.14" - react-fast-compare "^2.0.1" - scheduler "^0.18.0" - tiny-warning "^1.0.2" - tslib "^1.10.0" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs-extra@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" - integrity sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.11" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" - integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" - integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== - dependencies: - type-fest "^0.8.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -"hammerjs@https://github.com/naver/hammer.js.git": - version "2.0.17-snapshot" - resolved "https://github.com/naver/hammer.js.git#54bc698b25edd6e1b76ca975ebaced5ce0467d51" - dependencies: - "@types/hammerjs" "^2.0.36" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hermes-engine@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2" - integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ== - -hoist-non-react-statics@^1.0.5: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" - integrity sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs= - -hoist-non-react-statics@^2.3.1: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== - -hoist-non-react-statics@^3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -hyphenate-style-name@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" - integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== - -i18n-js@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.5.1.tgz#9787450894059bec1af791123231e59898eb97c1" - integrity sha512-nJgbE5Vj9qzOQfjdVd/uoMoO8ppVaB/3LB6KOmMfD8IQ1vNNh307iHyQLK8ZnLYWkAszfPvVpYmUt1Le/RuHMQ== - -iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -image-size@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" - integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== - -immediate@^3.2.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= - -immer@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/immer/-/immer-4.0.2.tgz#9ff0fcdf88e06f92618a5978ceecb5884e633559" - integrity sha512-Q/tm+yKqnKy4RIBmmtISBlhXuSDrB69e9EKTYiIenIKQkXBQir43w+kN/eGiax3wt1J0O1b2fYcNqLSbEcXA7w== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inline-style-prefixer@^5.0.3: - version "5.1.2" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz#e5a5a3515e25600e016b71e39138971228486c33" - integrity sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA== - dependencies: - css-in-js-utils "^2.0.0" - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" - integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.2" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== - dependencies: - es-abstract "^1.17.0-next.1" - has "^1.0.3" - side-channel "^1.0.2" - -invariant@^2.1.0, invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== - dependencies: - has "^1.0.3" - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== - -jest-haste-map@^24.7.1: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - 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" - optionalDependencies: - fsevents "^1.2.7" - -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== - dependencies: - "@babel/code-frame" "^7.0.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" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== - dependencies: - "@jest/types" "^24.9.0" - -jest-react-native@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/jest-react-native/-/jest-react-native-18.0.0.tgz#77dd909f069324599f227c58c61c2e62168726ba" - integrity sha1-d92QnwaTJFmfInxYxhwuYhaHJro= - -jest-serializer@^24.4.0, jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== - -jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== - dependencies: - "@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" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - -jest-validate@^24.7.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== - dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" - leven "^3.1.0" - pretty-format "^24.9.0" - -jest-worker@^24.6.0, jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -jetifier@^1.6.2: - version "1.6.5" - resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.5.tgz#ea87324a4230bef20a9651178ecab978ee54a8cb" - integrity sha512-T7yzBSu9PR+DqjYt+I0KVO1XTb1QhAfHnXV5Nd3xpbXM6Xg4e3vP60Q4qkNU8Fh6PHC2PivPUNN3rY7G2MxcDQ== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsc-android@^245459.0.0: - version "245459.0.0" - resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9" - integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" - integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== - dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" - -kind-of@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" - integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash-es@^4.17.11, lodash-es@^4.17.14: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" - integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== - -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.0: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -logkitty@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.6.1.tgz#fe29209669d261539cbd6bb998a136fc92a1a05c" - integrity sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ== - dependencies: - ansi-fragments "^0.2.1" - dayjs "^1.8.15" - yargs "^12.0.5" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5-file@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" - integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw== - dependencies: - buffer-alloc "^1.1.0" - -mdn-data@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" - integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -metro-babel-register@^0.56.0, metro-babel-register@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.56.4.tgz#b0c627a1cfdd1bdd768f81af79481754e833a902" - integrity sha512-Phm6hMluOWYqfykftjJ1jsTpWvbgb49AC/1taxEctxUdRCZlFgZwBleJZAhQYxJD5J+ikFkEbHDzePEXb29KVA== - dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/register" "^7.0.0" - core-js "^2.2.2" - escape-string-regexp "^1.0.5" - -metro-babel-transformer@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.56.4.tgz#fe1d0dc600fcf90201a5bea4d42caea10b801057" - integrity sha512-IOi4ILgZvaX7GCGHBJp79paNVOq5QxhhbyqAdEJgDP8bHfl/OVHoVKSypfrsMSKSiBrqxhIjyc4XjkXsQtkx5g== - dependencies: - "@babel/core" "^7.0.0" - metro-source-map "^0.56.4" - -metro-cache@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.56.4.tgz#542f9f8a35f8fb9d5576f46fd3ab4d4f42851a7e" - integrity sha512-d1hiUSKwtRsuMxUhHVJ3tjK2BbpUlJGvTyMWohK8Wxx+0GbnWRWWFcI4vlCzlZfoK0VtZK2MJEl5t7Du1mIniQ== - dependencies: - jest-serializer "^24.4.0" - metro-core "^0.56.4" - mkdirp "^0.5.1" - rimraf "^2.5.4" - -metro-config@^0.56.0, metro-config@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.56.4.tgz#338fd8165fba59424cec427c1a881757945e57e9" - integrity sha512-O85QDHwWdMn/8ERe13y4a6vbZL0AHyO8atTvL+9BCulLEO+FQBi1iJjr3+ViLa8cf0m5dRftDsa7P47m5euk4A== - dependencies: - cosmiconfig "^5.0.5" - jest-validate "^24.7.0" - metro "^0.56.4" - metro-cache "^0.56.4" - metro-core "^0.56.4" - pretty-format "^24.7.0" - -metro-core@^0.56.0, metro-core@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.56.4.tgz#67cc41b3c0bf66e9c2306f50239a1080b1e82312" - integrity sha512-hMzkBdgPt5Zm9nr/1KtIT+A6H7TNiLVCEGG5OiAXj8gTRsA2yy7wAdQpwy0xbE+zi88t/pLOzXpd3ClG/YxyWg== - dependencies: - jest-haste-map "^24.7.1" - lodash.throttle "^4.1.1" - metro-resolver "^0.56.4" - wordwrap "^1.0.0" - -metro-inspector-proxy@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.56.4.tgz#7343ff3c5908af4fd99e96b6d646e24e99816be4" - integrity sha512-E1S3MO25mWKmcLn1UQuCDiS0hf9P2Fwq8sEAX5lBLoZbehepNH+4xJ3xXSY51JX4dozBrE8GGoKL4ll3II40LA== - dependencies: - connect "^3.6.5" - debug "^2.2.0" - rxjs "^5.4.3" - ws "^1.1.5" - yargs "^9.0.0" - -metro-minify-uglify@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.56.4.tgz#13589dfb1d43343608aacb7f78ddfcc052daa63c" - integrity sha512-BHgj7+BKEK2pHvWHUR730bIrsZwl8DPtr49x9L0j2grPZ5/UROWXzEr8VZgIss7fl64t845uu1HXNNyuSj2EhA== - dependencies: - uglify-es "^3.1.9" - -metro-react-native-babel-preset@^0.56.0, metro-react-native-babel-preset@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz#dcedc64b7ff5c0734839458e70eb0ebef6d063a8" - integrity sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-assign" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.0.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - react-refresh "^0.4.0" - -metro-react-native-babel-transformer@^0.56.0: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.4.tgz#3c6e48b605c305362ee624e45ff338656e35fc1d" - integrity sha512-ng74eutuy1nyGI9+TDzzVAVfEmNPDlapV4msTQMKPi4EFqo/fBn7Ct33ME9l5E51pQBBnxt/UwcpTvd13b29kQ== - dependencies: - "@babel/core" "^7.0.0" - babel-preset-fbjs "^3.1.2" - metro-babel-transformer "^0.56.4" - metro-react-native-babel-preset "^0.56.4" - metro-source-map "^0.56.4" - -metro-resolver@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.56.4.tgz#9876f57bca37fd1bfcffd733541e2ee4a89fad7f" - integrity sha512-Ug4ulVfpkKZ1Wu7mdYj9XLGuOqZTuWCqEhyx3siKTc/2eBwKZQXmiNo5d/IxWNvmwL/87Abeb724I6CMzMfjiQ== - dependencies: - absolute-path "^0.0.0" - -metro-source-map@^0.56.0, metro-source-map@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.56.4.tgz#868ccac3f3519fe14eca358bc186f63651b2b9bc" - integrity sha512-f1P9/rpFmG3Z0Jatiw2zvLItx1TwR7mXTSDj4qLDCWeVMB3kEXAr3R0ucumTW8c6HfpJljeRBWzYFXF33fd81g== - dependencies: - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - invariant "^2.2.4" - metro-symbolicate "^0.56.4" - ob1 "^0.56.4" - source-map "^0.5.6" - vlq "^1.0.0" - -metro-symbolicate@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.56.4.tgz#53e9d40beac9049fa75a3e620ddd47d4907ff015" - integrity sha512-8mCNNn6zV5FFKCIcRgI7736Xl+owgvYuy8qanPxZN36f7utiWRYeB+PirEBPcglBk4qQvoy2lT6oPULNXZQbbQ== - dependencies: - invariant "^2.2.4" - metro-source-map "^0.56.4" - source-map "^0.5.6" - through2 "^2.0.1" - vlq "^1.0.0" - -metro@^0.56.0, metro@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.56.4.tgz#be7e1380ee6ac3552c25ead8098eab261029e4d7" - integrity sha512-Kt3OQJQtQdts0JrKnyGdLpKHDjqYBgIfzvYrvfhmFCkKuZ8aqRlVnvpfjQ4/OBm0Fmm9NyyxbNRD9VIbj7WjnA== - dependencies: - "@babel/core" "^7.0.0" - "@babel/generator" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/plugin-external-helpers" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - absolute-path "^0.0.0" - async "^2.4.0" - babel-preset-fbjs "^3.1.2" - buffer-crc32 "^0.2.13" - chalk "^2.4.1" - concat-stream "^1.6.0" - connect "^3.6.5" - debug "^2.2.0" - denodeify "^1.2.1" - eventemitter3 "^3.0.0" - fbjs "^1.0.0" - fs-extra "^1.0.0" - graceful-fs "^4.1.3" - image-size "^0.6.0" - invariant "^2.2.4" - jest-haste-map "^24.7.1" - jest-worker "^24.6.0" - json-stable-stringify "^1.0.1" - lodash.throttle "^4.1.1" - merge-stream "^1.0.1" - metro-babel-register "^0.56.4" - metro-babel-transformer "^0.56.4" - metro-cache "^0.56.4" - metro-config "^0.56.4" - metro-core "^0.56.4" - metro-inspector-proxy "^0.56.4" - metro-minify-uglify "^0.56.4" - metro-react-native-babel-preset "^0.56.4" - metro-resolver "^0.56.4" - metro-source-map "^0.56.4" - metro-symbolicate "^0.56.4" - mime-types "2.1.11" - mkdirp "^0.5.1" - node-fetch "^2.2.0" - nullthrows "^1.1.0" - resolve "^1.5.0" - rimraf "^2.5.4" - serialize-error "^2.1.0" - source-map "^0.5.6" - temp "0.8.3" - throat "^4.1.0" - wordwrap "^1.0.0" - write-file-atomic "^1.2.0" - ws "^1.1.5" - xpipe "^1.0.5" - yargs "^9.0.0" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - -mime-db@~1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" - integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk= - -mime-types@2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" - integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw= - dependencies: - mime-db "~1.23.0" - -mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== - dependencies: - mime-db "1.43.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.1: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -morgan@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== - dependencies: - basic-auth "~2.0.0" - debug "2.6.9" - depd "~1.1.2" - on-finished "~2.3.0" - on-headers "~1.0.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanoid@^2.1.0: - version "2.1.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" - integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -native-base-shoutem-theme@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/native-base-shoutem-theme/-/native-base-shoutem-theme-0.3.1.tgz#f15cbd4ca74ca1c8b6a636d297b9164a5f2b3662" - integrity sha512-uwEGhg6gwDuJTHuhNXRKbHtNjni1UI9qfAsVchIqfK7mQAHSNPVU1QRs9Hw6O2K/qLZaP/aJmNoZGc2h2EGSwA== - dependencies: - hoist-non-react-statics "^1.0.5" - lodash "^4.17.14" - prop-types "^15.5.10" - -native-base@^2.13.8: - version "2.13.8" - resolved "https://registry.yarnpkg.com/native-base/-/native-base-2.13.8.tgz#817dfaf74ec63cd17f48991fab452fdc75103db9" - integrity sha512-47Wm7bjH5Dc99gBUeVvsURyADU97aiLMLPGX4ewPgR9kW47TD9slS/Y5vGMToBgz1bsku9anXgN2T1rpdQbpFA== - dependencies: - blueimp-md5 "^2.5.0" - clamp "^1.0.1" - color "~3.1.2" - create-react-class "^15.6.3" - eslint-config-prettier "^6.0.0" - fs-extra "^2.0.0" - jest-react-native "^18.0.0" - lodash "^4.17.14" - native-base-shoutem-theme "0.3.1" - opencollective-postinstall "^2.0.2" - print-message "^2.1.0" - prop-types "^15.5.10" - react-native-drawer "2.5.1" - react-native-easy-grid "0.2.2" - react-native-keyboard-aware-scroll-view "0.9.1" - react-native-vector-icons "^6.6.0" - react-timer-mixin "^0.13.4" - react-tween-state "^0.1.5" - tween-functions "^1.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-fetch@^2.2.0, node-fetch@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^5.2.1: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-releases@^1.1.49: - version "1.1.50" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592" - integrity sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ== - dependencies: - semver "^6.3.0" - -noop-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/noop-fn/-/noop-fn-1.0.0.tgz#5f33d47f13d2150df93e0cb036699e982f78ffbf" - integrity sha1-XzPUfxPSFQ35PgywNmmemC94/78= - -normalize-css-color@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/normalize-css-color/-/normalize-css-color-1.0.2.tgz#02991e97cccec6623fe573afbbf0de6a1f3e9f8d" - integrity sha1-Apkel8zOxmI/5XOvu/Deah8+n40= - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nullthrows@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -ob1@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.56.4.tgz#c4acb3baa42f4993a44b35b2da7c8ef443dcccec" - integrity sha512-URgFof9z2wotiYFsqlydXtQfGV81gvBI2ODy64xfd3vPo+AYom5PVDX4t4zn23t/O+S2IxqApSQM8uJAybmz7w== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.1.0, object.entries@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" - integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0, object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1, on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -open@^6.2.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -opencollective-postinstall@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" - integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== - -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.0.tgz#40702a97af46ae00b0ea6fa8998c0b03c0af160d" - integrity sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -paths-js@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/paths-js/-/paths-js-0.4.10.tgz#a3575f409b4a36f8aa795ba4d051989021be58c7" - integrity sha512-JZoqlRSHtx+bc+xKI9o4bropEbqZBF4ZfYImiB1T9RYpHB73h5I8XZ7FfSBbHbBMtdD1c04ujjAPH8wUuu4+Gw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -plist@^3.0.0, plist@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" - integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== - dependencies: - base64-js "^1.2.3" - xmlbuilder "^9.0.7" - xmldom "0.1.x" - -plugin-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" - integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= - dependencies: - ansi-cyan "^0.1.1" - ansi-red "^0.1.1" - arr-diff "^1.0.1" - arr-union "^2.0.1" - extend-shallow "^1.1.2" - -point-in-polygon@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.0.1.tgz#d59b64e8fee41c49458aac82b56718c5957b2af7" - integrity sha1-1Ztk6P7kHElFiqyCtWcYxZV7Kvc= - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -pouchdb-collections@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz#fe63a17da977611abef7cb8026cb1a9553fd8359" - integrity sha1-/mOhfal3YRq+98uAJssalVP9g1k= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^24.7.0, pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -pretty-format@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8" - integrity sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ== - dependencies: - "@jest/types" "^25.1.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -print-message@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/print-message/-/print-message-2.1.0.tgz#b5588ed08b0e1bf77ac7bcb5cb78004afaf9a891" - integrity sha1-tViO0IsOG/d6x7y1y3gASvr5qJE= - dependencies: - chalk "1.1.1" - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@^6.5.0: - version "6.9.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" - integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== - -query-string@^6.10.1: - version "6.11.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.0.tgz#dc27a05733d1be66f16d0f83dfa957270f45f66d" - integrity sha512-jS+me8X3OEGFTsF6kF+vUUMFG/d3WUCvD7bHhfZP5784nOq1pjj8yau/u86nfOncmcN6ZkSWKWkKAvv/MGxzLA== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== - -raf@^3.1.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -react-devtools-core@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" - integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ== - dependencies: - shell-quote "^1.6.1" - ws "^3.3.1" - -react-dom@~16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" - integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.15.0" - -react-fast-compare@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" - integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== - -react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== - -react-native-chart-kit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/react-native-chart-kit/-/react-native-chart-kit-4.5.0.tgz#beac3864011eefdcee4d41c1528e5a76393c31be" - integrity sha512-vfUEtJ+XoG7zaZeMgE5z3vrvBv+82HuCgBXt/MnMcbIFzeoWxkByOwfeErgsPU+Ei/u3ch4xENbXJX+Ru34G1A== - dependencies: - lodash "^4.17.13" - paths-js "^0.4.10" - point-in-polygon "^1.0.1" - -react-native-drawer@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/react-native-drawer/-/react-native-drawer-2.5.1.tgz#08b9314184f48c724f1b467f8859797369798654" - integrity sha512-cxcQNbSWy5sbGi7anSVp6EDr6JarOBMY9lbFOeLFeVYbONiudoqRKbgEsSDgSw3/LFCLvUXK5zdjXCOedeytxQ== - dependencies: - prop-types "^15.5.8" - tween-functions "^1.0.1" - -react-native-easy-grid@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/react-native-easy-grid/-/react-native-easy-grid-0.2.2.tgz#f0be33620be1ebe2d2295918eb58b0a27e8272ab" - integrity sha512-MlYrNIldnEMKn6TVatQN1P64GoVlwGIuz+8ncdfJ0Wq/xtzUkQwlil8Uksyp7MhKfENE09MQnGNcba6Mx3oSAA== - dependencies: - lodash "^4.17.15" - -react-native-gesture-handler@~1.5.0: - version "1.5.6" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.6.tgz#5d90145f624e3707db2930f43ab41579683e2375" - integrity sha512-z2jLUkRiRc0PBAC9UcXYkqy3VUzBG0cYQAGMsDHsd90JgrzudHAFRJV9fvFm18wNauFTNnJievjZ0C3rI2ydhw== - dependencies: - "@egjs/hammerjs" "^2.0.17" - hammerjs "https://github.com/naver/hammer.js.git" - hoist-non-react-statics "^2.3.1" - invariant "^2.2.4" - prop-types "^15.7.2" - -react-native-iphone-x-helper@^1.0.3, react-native-iphone-x-helper@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772" - integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ== - -react-native-keyboard-aware-scroll-view@0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.1.tgz#9e54b565a5f19b30bed12221d48921781f7630af" - integrity sha512-tBZ8rmjELN0F6t5UBp5CW3NYmZXgVnJSzVCssv/OqG2t6kiB+OUTqxNvUP24K+HARX4H+XaW0aEJSFQkQCv6KA== - dependencies: - prop-types "^15.6.2" - react-native-iphone-x-helper "^1.0.3" - -react-native-reanimated@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.4.0.tgz#7f1acbf9be08492d834f512700570978052be2f9" - integrity sha512-tO7nSNNP+iRLVbkcSS5GXyDBb7tSI02+XuRL3/S39EAr35rnvUy2JfeLUQG+fWSObJjnMVhasUDEUwlENk8IXw== - -react-native-safe-area-context@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-0.6.0.tgz#f53f5a5bcafb462a8798a26b145e68946389ad60" - integrity sha512-blY0akr3ZLTuZFdUotmjV+7LVXpBnd5CGFlNhTiarNNGJoHu79K42IJpUpmtg75iC9aWbSW7QHstlP0xz11V0A== - -react-native-safe-area-view@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-1.0.0.tgz#17be33aeb30702e07bb846378f4c9561e2dd6684" - integrity sha512-cJOBfM6t7HL3NQf3QTVKO6BU7esCCMbKJjpNy9L2nT724UzZ2y6E3ol/3QWsw7ySegWlF857+RIkRLsnpltFVg== - dependencies: - hoist-non-react-statics "^2.3.1" - -react-native-screens@2.0.0-alpha.12: - version "2.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.0.0-alpha.12.tgz#35a6ef3b472958e9d35f0ca9e582d0d158f8e379" - integrity sha512-x9M7FEdcm97bVDp3pi//nhduJHLFMrmDQs0fq299yx3kHdgHbrmhsa8jgW4HvDQhjyPE0FWADY/GrXFuPRj80w== - dependencies: - debounce "^1.2.0" - -react-native-svg@9.13.3: - version "9.13.3" - resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-9.13.3.tgz#6414b337d55af169ac2487ab70f3108404434446" - integrity sha512-H50b2m4jvrQ7KxKs8uYSuWecr6e5XC7BDfS7DaA96+0Owjh0C9DksI5l8SRyHnmE+emiYMPu6Qqfr9dCyKkaJQ== - dependencies: - css-select "^2.0.2" - css-tree "^1.0.0-alpha.37" - -react-native-vector-icons@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz#66cf004918eb05d90778d64bd42077c1800d481b" - integrity sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw== - dependencies: - lodash "^4.0.0" - prop-types "^15.6.2" - yargs "^13.2.2" - -react-native-view-shot@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.0.2.tgz#daccaec5b8038a680b17533ff7e72876e68c7d0d" - integrity sha512-JZOkGo2jzSX2b7N6N2uDr0wQjSz+QmBtY8jzeo0XJY6bLOfaY5nmWyYxDmDRoSpKiFkGTCkyhUqNnjo6lXOtEw== - -react-native-web@~0.11.7: - version "0.11.7" - resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.11.7.tgz#d173d5a9b58db23b6d442c4bc4c81e9939adac23" - integrity sha512-w1KAxX2FYLS2GAi3w3BnEZg/IUu7FdgHnLmFKHplRnHMV3u1OPB2EVA7ndNdfu7ds4Rn2OZjSXoNh6F61g3gkA== - dependencies: - array-find-index "^1.0.2" - create-react-class "^15.6.2" - debounce "^1.2.0" - deep-assign "^3.0.0" - fbjs "^1.0.0" - hyphenate-style-name "^1.0.2" - inline-style-prefixer "^5.0.3" - normalize-css-color "^1.0.2" - prop-types "^15.6.0" - react-timer-mixin "^0.13.4" - -"react-native@https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz": - version "0.61.4" - resolved "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz#fc6d760c9395a1046632b17699718e40b91ea747" - dependencies: - "@babel/runtime" "^7.0.0" - "@react-native-community/cli" "^3.0.0-alpha.1" - "@react-native-community/cli-platform-android" "^3.0.0-alpha.1" - "@react-native-community/cli-platform-ios" "^3.0.0-alpha.1" - abort-controller "^3.0.0" - art "^0.10.0" - base64-js "^1.1.2" - connect "^3.6.5" - create-react-class "^15.6.3" - escape-string-regexp "^1.0.5" - event-target-shim "^5.0.1" - fbjs "^1.0.0" - fbjs-scripts "^1.1.0" - hermes-engine "^0.2.1" - invariant "^2.2.4" - jsc-android "^245459.0.0" - metro-babel-register "^0.56.0" - metro-react-native-babel-transformer "^0.56.0" - metro-source-map "^0.56.0" - nullthrows "^1.1.0" - pretty-format "^24.7.0" - promise "^7.1.1" - prop-types "^15.7.2" - react-devtools-core "^3.6.3" - react-refresh "^0.4.0" - regenerator-runtime "^0.13.2" - scheduler "0.15.0" - stacktrace-parser "^0.1.3" - whatwg-fetch "^3.0.0" - -react-redux@^7.1.3: - version "7.2.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" - integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== - dependencies: - "@babel/runtime" "^7.5.5" - hoist-non-react-statics "^3.3.0" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.9.0" - -react-refresh@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334" - integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ== - -react-timer-mixin@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" - integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== - -react-tween-state@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/react-tween-state/-/react-tween-state-0.1.5.tgz#e98b066551efb93cb92dd1be14995c2e3deae339" - integrity sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk= - dependencies: - raf "^3.1.0" - tween-functions "^1.0.1" - -react@~16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" - integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - 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" - -redux-devtools-extension@^2.13.8: - version "2.13.8" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz#37b982688626e5e4993ff87220c9bbb7cd2d96e1" - integrity sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg== - -redux-immutable-state-invariant@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz#308fd3cc7415a0e7f11f51ec997b6379c7055ce1" - integrity sha512-3czbDKs35FwiBRsx/3KabUk5zSOoTXC+cgVofGkpBNv3jQcqIe5JrHcF5AmVt7B/4hyJ8MijBIpCJ8cife6yJg== - dependencies: - invariant "^2.1.0" - json-stringify-safe "^5.0.1" - -redux-persist@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" - integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== - -redux-saga@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112" - integrity sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw== - dependencies: - "@redux-saga/core" "^1.1.3" - -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== - -redux@^4.0.0, redux@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" - integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== - -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== - dependencies: - private "^0.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" - integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -reselect@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" - integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= - -reselect@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" - integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - -rxjs@^5.4.3: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" - -rxjs@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@0.15.0, scheduler@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" - integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= - -serve-static@^1.13.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -shortid@^2.2.15: - version "2.2.15" - resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.15.tgz#2b902eaa93a69b11120373cd42a1f1fe4437c122" - integrity sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw== - dependencies: - nanoid "^2.1.0" - -side-channel@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" - integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== - dependencies: - es-abstract "^1.17.0-next.1" - object-inspect "^1.7.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-plist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.0.tgz#8354ab63eb3922a054c78ce96c209c532e907a23" - integrity sha512-2i5Tc0BYAqppM7jVzmNrI+aEUntPolIq4fDgji6WuNNn1D/qYdn2KwoLhZdzQkE04lu9L5tUoeJsjuJAvd+lFg== - dependencies: - bplist-creator "0.0.8" - bplist-parser "0.2.0" - plist "^3.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.0.0, slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.16: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -stacktrace-parser@^0.1.3: - version "0.1.9" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.9.tgz#11e6d61d42e8cfc87293143d0766408b7a87b00f" - integrity sha512-DRy03ljj0367Ud3OAJHD6eVS/+CvMK2u/djVYuU37fHYcYHoZ8tkFyhbRf7PNG1h3bWLsw+SNTSXrPFe07A7aQ== - dependencies: - type-fest "^0.7.1" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stream-buffers@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" - integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" - integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.2" - -string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -sudo-prompt@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" - integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= - -symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -synchronous-promise@^2.0.6: - version "2.0.10" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.10.tgz#e64c6fd3afd25f423963353043f4a68ebd397fd8" - integrity sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A== - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -through2@^2.0.0, through2@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - -tiny-queue@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" - integrity sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY= - -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - -tslib@^1.10.0, tslib@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" - integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== - -tween-functions@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" - integrity sha1-GuOlDnxguz3vd06scHrLynO7w/8= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript-compare@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" - integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== - dependencies: - typescript-logic "^0.0.0" - -typescript-logic@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" - integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== - -typescript-tuple@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" - integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== - dependencies: - typescript-compare "^0.0.2" - -ua-parser-js@^0.7.18, ua-parser-js@^0.7.19: - version "0.7.21" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" - integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== - -uglify-es@^3.1.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -unimodules-barcode-scanner-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-5.0.0.tgz#c8965299fb0d4d4c1f323e7c3dd0314eaeeda8c1" - integrity sha512-8irSCD2UOxojD+3KzrsoGe/TlNOF4NQuCtlhCY5PjDU3SoBAZzSmlLfkz6nYs4iovNila0FZu4vE6msm9Ehdtw== - -unimodules-camera-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-camera-interface/-/unimodules-camera-interface-5.0.0.tgz#980b6ac221deea26badf92ee0baca91c546dc6b1" - integrity sha512-fe1Q1RZ6daKLtT5M87HdznBAV9qEsuHdPZVUWsLfizCXrHwCcRWErwb4RZoJC20Y11sj+kkLlE4W5fBJDn6/WA== - -unimodules-constants-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-constants-interface/-/unimodules-constants-interface-5.0.0.tgz#0e224fde9cf809ed7a026672180e3c96dc186f34" - integrity sha512-s7Fwe3MV6BCj+Sexwfrj9mLAzJlhMfOd/ZM9PNZG10nlTRw8uDxQq0VH1m8NuJqV1Ma2BUmQM7H3lBPe4EysYg== - -unimodules-face-detector-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-face-detector-interface/-/unimodules-face-detector-interface-5.0.0.tgz#4d8d63db954b849387e23b84df833945f21c11cc" - integrity sha512-6VrjHPu429tI54TrGZDQCNIdIXplSwmnJ4jsoVwpubluK+Z4pTRxbEuR3hKelGsvQCUzA38TDD94w7pGMwpe3A== - -unimodules-file-system-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-file-system-interface/-/unimodules-file-system-interface-5.0.0.tgz#890cb2c11c55dfccb4abd51cb3b7142bfd15adea" - integrity sha512-3MRHOigD39geBA6opGkWBoi6nSbFnAr6OWNWiCNN3z1KyFEgeGUFJtTUhzZ/gjsipHubwcWgWBlBSSZKIA7qPQ== - -unimodules-font-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-font-interface/-/unimodules-font-interface-5.0.0.tgz#c9d40f2fe94cc44493f4948d7701def6d2dacd04" - integrity sha512-S7S5JcOzqpEEt7fmqBkTkps5pg5InQRiu0KBv8txgQ6ZkW/OYjt4j5/fb6IkLB5RWEdm7Ji/xxmJLafRSj2bjA== - -unimodules-image-loader-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-image-loader-interface/-/unimodules-image-loader-interface-5.0.0.tgz#59d706367b3df0b0078b1ef510397ff91338256f" - integrity sha512-HzT+eqp1jgm9/KiJfAlb5p4rykQlMMo6eI4S626vRtFcywCr6yKN7y5vYT5jmSxR2QIWY/jLGrX4DSt9dCbYbg== - -unimodules-permissions-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-permissions-interface/-/unimodules-permissions-interface-5.0.0.tgz#567f3506875befa1f35a64654cf40a2ce9ae4036" - integrity sha512-ULtTRsGPSkXm1dELq0Eoq7RCReDYhu71NH2iWnnhmg8MZLykBInHw0bgcd0Fe7IYlRK3VXy8elldAIpFf3OKdw== - -unimodules-sensors-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-sensors-interface/-/unimodules-sensors-interface-5.0.0.tgz#42803532a95d9b6f13b4c08846d39a39144b3d7b" - integrity sha512-ilmeamfmbADXgq595VpJd+5tJLebfbwqMgwVxQ6/EX1niJkHgRk9iloYqx5QRKXwscwbGepIWXjMIv1/DNShQQ== - -unimodules-task-manager-interface@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unimodules-task-manager-interface/-/unimodules-task-manager-interface-5.0.0.tgz#a43b573d319dd84ee526d5eb77b540b3ce5d50e0" - integrity sha512-t5M4sgZBl3i6iUO8PAzjD90bh5RyAdQfLf1GqSVsV8BJVEr1uKokGm6t7lq3E+PCC41ulpeiVApdXPImJywJdg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.4.4: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -use-subscription@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.3.0.tgz#3df13a798e826c8d462899423293289a3362e4e6" - integrity sha512-buZV7FUtnbOr+65dN7PHK7chHhQGfk/yjgqfpRLoWuHIAc4klAD/rdot2FsPNtFthN1ZydvA8tR/mWBMQ+/fDQ== - dependencies: - object-assign "^4.1.1" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid-js@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/uuid-js/-/uuid-js-0.7.5.tgz#6c886d02a53d2d40dcf25d91a170b4a7b25b94d0" - integrity sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA= - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vlq@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" - integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^1.2.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" - integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^1.1.0, ws@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" - integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== - dependencies: - options ">=0.0.5" - ultron "1.0.x" - -ws@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xcode@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe" - integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ== - dependencies: - simple-plist "^1.0.0" - uuid "^3.3.2" - -xmlbuilder@^9.0.7: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xmldoc@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7" - integrity sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ== - dependencies: - sax "^1.2.1" - -xmldom@0.1.x: - version "0.1.31" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" - integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== - -xpipe@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" - integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" - -yargs@^12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@^13.2.2: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.1" - -yargs@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" - integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w= - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yup@^0.28.0: - version "0.28.1" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.28.1.tgz#60c0725be7057ed7a9ae61561333809332a63d47" - integrity sha512-xSHMZA7UyecSG/CCTDCtnYZMjBrYDR/C7hu0fMsZ6UcS/ngko4qCVFbw+CAmNtHlbItKkvQ3YXITODeTj/dUkw== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - lodash-es "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" From 8dcd05ced64b8c4e66173b50002ca9aa2bd87913 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Sat, 14 Mar 2020 18:47:35 +0300 Subject: [PATCH 26/44] docs: fix wrong relative links --- docs/zh-Hans/UI/AspNetCore/Widgets.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/zh-Hans/UI/AspNetCore/Widgets.md b/docs/zh-Hans/UI/AspNetCore/Widgets.md index aae5095f14..5f86595ba2 100644 --- a/docs/zh-Hans/UI/AspNetCore/Widgets.md +++ b/docs/zh-Hans/UI/AspNetCore/Widgets.md @@ -132,7 +132,7 @@ namespace DashboardDemo.Web.Pages.Components.MySimpleWidget } ```` -参阅 [本地化文档](../Localization.md) 学习关于本地化资源的更多内容. +参阅 [本地化文档](../../Localization.md) 学习关于本地化资源的更多内容. ## 引用 Style & Script @@ -168,7 +168,7 @@ namespace DashboardDemo.Web.Pages.Components.MySimpleWidget } ```` -ABP会考虑到这些依赖关系, 在view/page中使用正确的方法添加部件 . 样式和script可以是物理文件也可以是虚拟文件. 它于[虚拟文件系统](../Virtual-File-System.md)完全集成]. +ABP会考虑到这些依赖关系, 在view/page中使用正确的方法添加部件 . 样式和script可以是物理文件也可以是虚拟文件. 它于[虚拟文件系统](../../Virtual-File-System.md)完全集成]. ### 定义 Bundle @@ -227,7 +227,7 @@ namespace DashboardDemo.Web.Pages.Components.MySimpleWidget 某些组件可能只对通过身份验证或授权的用户可用,这时可以使用 `Widget` attribute 的以下属性: * `RequiresAuthentication` (`bool`): 设置为true,只有通过身份验证的用户(登录用户)可用. -* `RequiredPolicies` (`List`): 授权用户的策略名称列表. 有关策略的详细信息请参阅[授权文档](../Authorization.md). +* `RequiredPolicies` (`List`): 授权用户的策略名称列表. 有关策略的详细信息请参阅[授权文档](../../Authorization.md). 示例: @@ -260,7 +260,7 @@ Configure(options => }); ``` -将上面的代码写到[模块](../Module-Development-Basics.md)的 `ConfigureServices` 方法中. `AbpWidgetOptions` 可以完成 `Widget` attribute 的所有功能. 比如为组件添加样式: +将上面的代码写到[模块](../../Module-Development-Basics.md)的 `ConfigureServices` 方法中. `AbpWidgetOptions` 可以完成 `Widget` attribute 的所有功能. 比如为组件添加样式: ````csharp Configure(options => From 1d53bee97a9b21e0fef3407c62e5603818dbc660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Sun, 15 Mar 2020 00:36:39 +0300 Subject: [PATCH 27/44] some requested changes resolved --- .../Abp/TenantManagement/TenantCreateDto.cs | 20 +------------------ .../Localization/Resources/en.json | 5 +---- .../Localization/Resources/tr.json | 5 +---- .../Volo/Abp/TenantManagement/TenantConsts.cs | 4 ---- .../Tenants/CreateModal.cshtml | 6 +++--- .../Tenants/CreateModal.cshtml.cs | 5 +---- 6 files changed, 7 insertions(+), 38 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs index 46f3f9ff73..e3c4c3ba49 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs @@ -7,28 +7,10 @@ using Volo.Abp.TenantManagement.Localization; namespace Volo.Abp.TenantManagement { - public class TenantCreateDto : TenantCreateOrUpdateDtoBase, IValidatableObject + public class TenantCreateDto : TenantCreateOrUpdateDtoBase { public string AdminEmailAddress { get; set; } public string AdminPassword { get; set; } - - public IEnumerable Validate(ValidationContext validationContext) - { - var l = validationContext.GetRequiredService>(); - - var isValidEmail = - Regex.IsMatch(AdminEmailAddress, TenantConsts.EmailRegex, RegexOptions.IgnoreCase); - - if (string.IsNullOrWhiteSpace(AdminEmailAddress) || !isValidEmail) - { - yield return new ValidationResult(l["InvalidAdminProperties"], new[] { nameof(AdminEmailAddress) }); - } - - if (string.IsNullOrWhiteSpace(AdminPassword)) - { - yield return new ValidationResult(l["InvalidAdminProperties"], new[] { nameof(AdminPassword) }); - } - } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json index 3141f62633..fc51f00750 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json @@ -15,9 +15,6 @@ "Permission:Edit": "Edit", "Permission:Delete": "Delete", "Permission:ManageConnectionStrings": "Manage connection strings", - "Permission:ManageFeatures": "Manage features", - "DisplayName:AdminEmailAddress": "Admin Email Address", - "DisplayName:AdminPassword": "Admin Password", - "InvalidAdminProperties": "Admin email address or password is invalid." + "Permission:ManageFeatures": "Manage features" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json index ea7d0cf25e..1b6bdca2c2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json @@ -15,9 +15,6 @@ "Permission:Edit": "Düzenleme", "Permission:Delete": "Silme", "Permission:ManageConnectionStrings": "Bağlantı cümlelerini yönet", - "Permission:ManageFeatures": "Özellikleri yönet", - "DisplayName:AdminEmailAddress": "Yönetici Eposta Adresi", - "DisplayName:AdminPassword": "Yönetici Şifresi", - "InvalidAdminProperties": "Admin eposta adresi veya şifre geçerli değil." + "Permission:ManageFeatures": "Özellikleri yönet" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs index ecaa873a09..328c422ab9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/TenantConsts.cs @@ -3,9 +3,5 @@ public static class TenantConsts { public const int MaxNameLength = 64; - - public const string EmailRegex = - @"^(?("")("".+?(? - + - + - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs index 79b7c036c5..aa4c9e92fe 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs @@ -31,18 +31,15 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { [Required] [StringLength(TenantConsts.MaxNameLength)] - [Display(Name = "DisplayName:TenantName")] public string Name { get; set; } [Required] + [EmailAddress] [StringLength(TenantConsts.MaxNameLength)] - [Display(Name = "DisplayName:AdminEmailAddress")] public string AdminEmailAddress { get; set; } [Required] [StringLength(TenantConsts.MaxNameLength)] - [EmailAddress] - [Display(Name = "DisplayName:AdminPassword")] public string AdminPassword { get; set; } } } From 2c9798298a44a979172745bafed9b2145816bcb3 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 15 Mar 2020 11:19:04 +0800 Subject: [PATCH 28/44] Update AbpFormFileExtensions.cs --- .../Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs index dfc4df0339..31768b5e6a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Http/AbpFormFileExtensions.cs @@ -15,8 +15,10 @@ namespace Microsoft.AspNetCore.Http public static async Task GetAllBytesAsync(this IFormFile file) { - using var stream = file.OpenReadStream(); - return await stream.GetAllBytesAsync(); + using (var stream = file.OpenReadStream()) + { + return await stream.GetAllBytesAsync(); + } } } } From ccbaf4fd6072cfb35a74a9ddb4d83e0be7fd7592 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 15 Mar 2020 11:27:45 +0800 Subject: [PATCH 29/44] Upgrade MailKit to 2.5.2. Fix #3118 --- framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj index 8aa654922a..d282ce5269 100644 --- a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj +++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj @@ -15,7 +15,7 @@ - + From 3445449b6f07bce047f6a10bcdb6e9cdd9168251 Mon Sep 17 00:00:00 2001 From: Super Date: Sun, 15 Mar 2020 21:42:22 +0800 Subject: [PATCH 30/44] Add EfCore.Tools package reference to HttpApi.Host. fix #3124 --- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 897e84c66e..c95c5a148f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -16,6 +16,7 @@ + From a69357c228791818aeb43d57dc41390cf4efa4de Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 16 Mar 2020 14:48:06 +0800 Subject: [PATCH 31/44] Update document --- docs/zh-Hans/Samples/Microservice-Demo.md | 91 +++--------------- docs/zh-Hans/UI/AspNetCore/Layout-Hooks.md | 3 + docs/zh-Hans/UI/AspNetCore/Navigation-Menu.md | 3 + .../UI/AspNetCore/Tag-Helpers/Buttons.md | 68 ++++++------- .../UI/AspNetCore/Tag-Helpers/Index.md | 27 +++++- docs/zh-Hans/UI/AspNetCore/Theming.md | 2 +- docs/zh-Hans/UI/AspNetCore/Toolbars.md | 3 + .../images/bookstore-added-brand-files.png | Bin 0 -> 18491 bytes docs/zh-Hans/images/bookstore-added-logo.png | Bin 0 -> 67004 bytes .../images/bookstore-added-role-js-file.png | Bin 0 -> 15441 bytes .../bookstore-brand-area-highlighted.png | Bin 0 -> 56889 bytes .../images/bookstore-global-css-file.png | Bin 0 -> 13273 bytes ...kstore-google-analytics-view-component.png | Bin 0 -> 30016 bytes .../images/bookstore-menus-highlighted.png | Bin 0 -> 71428 bytes ...bookstore-notification-icon-on-toolbar.png | Bin 0 -> 60143 bytes .../bookstore-notification-view-component.png | Bin 0 -> 30047 bytes .../images/bookstore-toolbar-highlighted.png | Bin 0 -> 71299 bytes .../images/microservice-sample-diagram-3.png | Bin 0 -> 337888 bytes .../images/microservice-sample-solution-2.png | Bin 0 -> 38533 bytes .../images/overriding-login-cshtml.png | Bin 0 -> 4655 bytes 20 files changed, 80 insertions(+), 117 deletions(-) create mode 100644 docs/zh-Hans/UI/AspNetCore/Layout-Hooks.md create mode 100644 docs/zh-Hans/UI/AspNetCore/Navigation-Menu.md create mode 100644 docs/zh-Hans/UI/AspNetCore/Toolbars.md create mode 100644 docs/zh-Hans/images/bookstore-added-brand-files.png create mode 100644 docs/zh-Hans/images/bookstore-added-logo.png create mode 100644 docs/zh-Hans/images/bookstore-added-role-js-file.png create mode 100644 docs/zh-Hans/images/bookstore-brand-area-highlighted.png create mode 100644 docs/zh-Hans/images/bookstore-global-css-file.png create mode 100644 docs/zh-Hans/images/bookstore-google-analytics-view-component.png create mode 100644 docs/zh-Hans/images/bookstore-menus-highlighted.png create mode 100644 docs/zh-Hans/images/bookstore-notification-icon-on-toolbar.png create mode 100644 docs/zh-Hans/images/bookstore-notification-view-component.png create mode 100644 docs/zh-Hans/images/bookstore-toolbar-highlighted.png create mode 100644 docs/zh-Hans/images/microservice-sample-diagram-3.png create mode 100644 docs/zh-Hans/images/microservice-sample-solution-2.png create mode 100644 docs/zh-Hans/images/overriding-login-cshtml.png diff --git a/docs/zh-Hans/Samples/Microservice-Demo.md b/docs/zh-Hans/Samples/Microservice-Demo.md index a96571c881..9b559797f7 100644 --- a/docs/zh-Hans/Samples/Microservice-Demo.md +++ b/docs/zh-Hans/Samples/Microservice-Demo.md @@ -24,82 +24,15 @@ ABP框架的主要目标之一就是提供[便捷的基础设施来创建微服 下图展示了该系统: -![microservice-sample-diagram](../images/microservice-sample-diagram-2.png) +![microservice-sample-diagram](../images/microservice-sample-diagram-3.png) ### 源码 你可以从[GitHub仓库](https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo)获取源码. -### 状态 - -该示例的初始版本已完成.其他改进仍在开发中. - ## 运行解决方案 -您可以从 **源代码** 或者预先配置好的 **docker-compose** 文件运行. - -### 使用Docker容器 - -#### 预先要求 - -由于所有依赖项都已预先配置, 因此作为Docker容器运行更容易. 你只需要安装[最新的docker](https://docs.docker.com/compose/install/). - -#### 运行容器 - -- 克隆或下载 [ABP仓库](https://github.com/abpframework/abp). - -- 在存储库的`samples/MicroserviceDemo`文件夹中打开命令行. - -- 从Docker Hub中拉取image: - - ``` - docker-compose -f docker-compose.yml -f docker-compose.migrations.yml pull - ``` - -- 如果要在本地构建映像, 可以跳过上述步骤, 使用build命令: - - ``` - docker-compose -f docker-compose.yml -f docker-compose.migrations.yml build - ``` - - 根据你的电脑配置, 构建image可能需要**很长时间**. - -- 还原 SQL Server 数据库: - - ``` - docker-compose -f docker-compose.yml -f docker-compose.migrations.yml run restore-database - ``` - -- 启动容器: - - ``` - docker-compose up -d - ``` - -- 将此行添加到`hosts`文件的末尾: - - ``` - 127.0.0.1 auth-server - ``` - - hosts文件位于Windows上的`C:\Windows\System32\Drivers\etc\hosts`文件夹, Linux/MacOS的`/etc/hosts`中. - -#### 运行应用程序 - -你可能想要了解容器中运行一些应用程序: - -* 后端管理应用程序 (BackendAdminApp.Host): `http://localhost:51512` - *(用于管理系统中的用户和产品)* -* 公共网站 (PublicWebsite.Host): `http://localhost:51513` - *(用于列出产品并运行/管理博客模块)* -* 认证服务器 (AuthServer.Host): `http://auth-server:51511/` - *(用作使用IdentityServer4构建的单点登录和身份验证服务器)* -* Kibana UI: `http://localhost:51510` - *(用于显示/跟踪所有服务/应用程序/网关写入的日志)* - -### 从源代码运行 - -#### 预先要求 +### 预先要求 为了能够从源代码运行解决方案, 应在你的计算机上安装并运行以下工具: @@ -110,19 +43,19 @@ ABP框架的主要目标之一就是提供[便捷的基础设施来创建微服 * [ElasticSearch](https://www.elastic.co/downloads/elasticsearch) 6.6+ * [Kibana](https://www.elastic.co/downloads/kibana) 6.6+ (可选,建议显示日志) -#### 打开并构建Visual Studio解决方案 +### 打开并构建Visual Studio解决方案 * 在Visual Studio 2017 (15.9.0+)中打开`samples\MicroserviceDemo\MicroserviceDemo.sln`. * 在`samples\MicroserviceDemo`文件夹中的命令行运行`dotnet restore`命令. * 在Visual Studio中构建解决方案. -#### 创建数据库 +### 创建数据库 MongoDB 数据库是动态创建的,但是你需要创建 SQL server 数据库的结构。其实你可以很轻松的创建数据库,因为这个解决方案配置了使用 Entity Core Code First 来做迁移。 这个解决方案中有两个 SQL server 数据库。 -##### MsDemo_Identity 数据库 +#### MsDemo_Identity 数据库 * 右键 `AuthServer.Host` 项目,然后点击 `设置为启动项目`. * 打开 **程序包管理器控制台** (工具 -> NuGet 包管理器 -> 程序包管理器控制台) @@ -131,7 +64,7 @@ MongoDB 数据库是动态创建的,但是你需要创建 SQL server 数据库 ![microservice-sample-update-database-authserver](../images/microservice-sample-update-database-authserver.png) -##### MsDemo_ProductManagement +#### MsDemo_ProductManagement * 右键 `ProductService.Host` 项目,然后点击 `设置为启动项目`. * 打开 **程序包管理器控制台** (工具 -> NuGet 包管理器 -> 程序包管理器控制台) @@ -140,12 +73,13 @@ MongoDB 数据库是动态创建的,但是你需要创建 SQL server 数据库 ![microservice-sample-update-database-products](../images/microservice-sample-update-database-products.png) -#### 运行项目 +### 运行项目 按以下顺序运行项目(右键单击每个项目设置为启动项目,按Ctrl+F5运行,无需调试): * AuthServer.Host * IdentityService.Host +* TenantManagementService.Host * BloggingService.Host * ProductService.Host * InternalGateway.Host @@ -158,7 +92,7 @@ MongoDB 数据库是动态创建的,但是你需要创建 SQL server 数据库 Visual Studio解决方案由多个项目组成,每个项目在系统中具有不同的角色: -![microservice-sample-solution](../images/microservice-sample-solution.png) +![microservice-sample-solution](../images/microservice-sample-solution-2.png) ### 应用程序(Applications) @@ -182,6 +116,7 @@ Visual Studio解决方案由多个项目组成,每个项目在系统中具有不 微服务没有UI,但暴露了一些REST API. - **IdentityService.Host**: 托管用于管理用户和角色的ABP Identity模块. 它没有其他服务,仅托管Identity模块的API. +- **TenantManagementService.Host**: 托管用于管理角色的ABP租户管理模块. 它没有其他服务,仅托管租户管理模块的API. - **BloggingService.Host**: 托管ABP博客模块,该模块用于管理博客和帖子(典型的博客应用程序). 它没有其他服务,仅托管Blogging模块的API. - **ProductService.Host**: 托管用于管理产品的产品模块(位于解决方案内). 它还包含用于创建/更新产品管理数据库架构的EF Core迁移. @@ -193,7 +128,7 @@ Visual Studio解决方案由多个项目组成,每个项目在系统中具有不 此解决方案使用多个数据库: -* **MsDemo_Identity**: 一个SQL数据库. 默认使用**SQL Server**,但可以是EF Core支持的任何DBMS. 由AuthServer和IdentityService共享. 审计日志,权限和设置也存储在此数据库中(虽然它们可以轻松拥有自己的数据库,共享相同的数据库以保持简单). +* **MsDemo_Identity**: 一个SQL数据库. 默认使用**SQL Server**,但可以是EF Core支持的任何DBMS. 由AuthServer,IdentityService和TenantManagementService共享. 审计日志,权限和设置也存储在此数据库中(虽然它们可以轻松拥有自己的数据库,共享相同的数据库以保持简单). * **MsDemo_ProductManagement**: 一个SQL数据库. 同样默认使用 **SQL Server**,但可以是EF Core支持的任何DBMS. 由ProductService用作专用数据库. * **MsDemo_Blogging**: **MongoDB**数据库. 由BloggingService使用. * **Elasticsearch**: 用于在Serilog上写日志. @@ -1474,3 +1409,7 @@ ABP提供自动审计日志记录,详细保存每个请求(当前用户,浏览 所有服务和应用程序都配置为编写审核日志. 审核日志将保存到MsDemo_Identity SQL数据库中. 因此,您可以从单个点查询所有应用程序的所有审核日志. 审核日志记录具有`CorrelationId`属性,可用于跟踪请求. 当服务在单个Web请求中调用另一个服务时,它们都会使用相同的`CorrelationId`保存审核日志. 请参阅数据库中的`AbpAuditLogs`表. + +### 多租户 + +该解决方案已配置提供[多租户](../Multi-Tenancy.md)系统,其中每个租户可以拥有其隔离的用户,角色,权限和其他数据. \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Layout-Hooks.md b/docs/zh-Hans/UI/AspNetCore/Layout-Hooks.md new file mode 100644 index 0000000000..49b334c6c0 --- /dev/null +++ b/docs/zh-Hans/UI/AspNetCore/Layout-Hooks.md @@ -0,0 +1,3 @@ +# Layout Hooks + +TODO \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Navigation-Menu.md b/docs/zh-Hans/UI/AspNetCore/Navigation-Menu.md new file mode 100644 index 0000000000..4e0164ec72 --- /dev/null +++ b/docs/zh-Hans/UI/AspNetCore/Navigation-Menu.md @@ -0,0 +1,3 @@ +# Navigation Menu + +TODO \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Buttons.md b/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Buttons.md index 848d043312..76307ad820 100644 --- a/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Buttons.md +++ b/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Buttons.md @@ -1,30 +1,26 @@ # 按钮 -ABP框架定义了Tag Helper用于简单的创建bootstrap按钮. +## 介绍 -`` +`abp-button` 是创建按钮的主要元素. -## 属性 +基本用法: -`` 有7个不同的属性. +````xml +Click Me +```` -* [`button-type`](#button-type) -* [`size`](#size) -* [`busy-text`](#busy-text) -* [`text`](#text) -* [`icon`](#icon) -* [`disabled`](#disabled) -* [`icon-type`](#icon-type) +## Demo -### `button-type` +参阅 [按钮Demo页面](https://bootstrap-taghelpers.abp.io/Components/Buttons) 查看示例. -`button-type` 是一个可选参数. 它的默认值是 `Default`. +## Attributes -`Button` +### `button-type` -你可以为按钮选择以下按钮类型: +指定按钮的主样式/类型. 应为以下值之一: -* `Default` +* `Default` (default value) * `Primary` * `Secondary` * `Success` @@ -45,11 +41,7 @@ ABP框架定义了Tag Helper用于简单的创建bootstrap按钮. ### `size` -`size` 是一个可选参数. 它的默认值是 `Default`. - -`Button` - -你可以为按钮选择以下size类型: +指定按钮的大小. 应为以下值之一: * `Default` * `Small` @@ -62,33 +54,33 @@ ABP框架定义了Tag Helper用于简单的创建bootstrap按钮. ### `busy-text` -`busy-text` 是一个字符串类型参数. 当按钮繁忙时设置该文本. +当按钮busy时显示的文本. ### `text` -`text` 是一个字符串类型参数,显示在按钮上. - -### `icon` +按钮的文本. 如果你只想为为按钮设置文本,这是一种快捷方式. 例: -`icon` 是一个字符串类型参数. 它的值取决于[`icon-type`](#`icon-type`). 默认情况下,我们对图标使用[Font Awesome](https://fontawesome.com/). 要使用它,你需要将 `icon` 参数设置为图标名称. +````xml + +```` -##### 示例 +在这个示例中,你可以使用 self-closing 标签将其缩短. -[fa-address-card](https://fontawesome.com/icons/address-card): ![fa-address-card](fa-address-card.png "Address Card") - -`` - -> 不要忘记: 你不需要写前缀,如果你没有更改 `icon-type` ,它会为[Font Awesome](https://fontawesome.com/)图标自动添加 `fa` 前缀. +### `icon` -### `disabled` +设置按钮的图标. 默认情况下它使用[Font Awesome](https://fontawesome.com/)图标库. 例: -`disabled` 是一个布尔类型参数. 如果你设值为 `true`, 按钮会被禁用. +````xml + +```` ### `icon-type` -`icon-type` 是一个可选参数。它的默认值是 `FontAwesome`. 你可以创建自己的图标类型提供程序并更改它. +如果你不想使用font-awesome,你有两个选项: + +1. 设置 `icon-type` 为 `Other`,并为你的按钮编写图标样式. +2. 如果你不使用图标,请手动使用opening和closing标签,并在标签内写任何代码. -你可以为按钮选择以下图标类型: +### `disabled` -* `FontAwesome` -* `Other` +设置为 `true` 禁用按钮. \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Index.md b/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Index.md index 1f19d50701..acbb9e872b 100644 --- a/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Index.md +++ b/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Index.md @@ -1,3 +1,26 @@ -## ABP Tag Helpers +# ABP Tag Helpers -"ABP tag helpers" 文档还在创建中. 你现在可以参阅[组件演示](http://bootstrap-taghelpers.abp.io/). \ No newline at end of file +ABP框架定义了一组**标签助手组件**. 简化开发ASP.NET Core (MVC / Razor Pages) 应用程序界面. + +## bootstrap 组件包装 + +大多数标签助手是[Bootstrap](https://getbootstrap.com/) (v4+)的包装. 编写bootstrap代码并不是那么简单,其中包含太多的重复HTML标签并且也没有类型安全. ABP标签助手使其 **简单** 并且 **类型安全**. + +我们的目标并不是100%的包装bootstrap组件. 仍然可以编写 **原生bootstrap代码** (实际上标签助手生成的也是原生的bootstrap代码), 但我们建议尽量使用标签助手. + +ABP框架还向标准bootstrap组件添加了一些**实用的功能**. + +这里是ABP框架包装的组件列表: + +* [Buttons](Buttons.md) +* ... + +> 在为所有的标签助手完成文档之前,你可以访问 https://bootstrap-taghelpers.abp.io/ 查看在线示例. + +## 表单元素 + +参阅 [demo](https://bootstrap-taghelpers.abp.io/Components/FormElements). + +## 动态表单 + +参阅 [demo](https://bootstrap-taghelpers.abp.io/Components/DynamicForms). \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Theming.md b/docs/zh-Hans/UI/AspNetCore/Theming.md index 470ef1a458..10486dd6c5 100644 --- a/docs/zh-Hans/UI/AspNetCore/Theming.md +++ b/docs/zh-Hans/UI/AspNetCore/Theming.md @@ -1,3 +1,3 @@ -# Theming +# ASP.NET Core MVC / Razor Pages 主题 TODO \ No newline at end of file diff --git a/docs/zh-Hans/UI/AspNetCore/Toolbars.md b/docs/zh-Hans/UI/AspNetCore/Toolbars.md new file mode 100644 index 0000000000..cc3bcd95be --- /dev/null +++ b/docs/zh-Hans/UI/AspNetCore/Toolbars.md @@ -0,0 +1,3 @@ +# Toolbars + +TODO \ No newline at end of file diff --git a/docs/zh-Hans/images/bookstore-added-brand-files.png b/docs/zh-Hans/images/bookstore-added-brand-files.png new file mode 100644 index 0000000000000000000000000000000000000000..15ef283a2aa29c1762f1868c4510decafa4e8cf0 GIT binary patch literal 18491 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 Vybo#sj{7h$c)I$ztaD0e0s!v<JOG6aJM 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/bookstore-added-role-js-file.png b/docs/zh-Hans/images/bookstore-added-role-js-file.png new file mode 100644 index 0000000000000000000000000000000000000000..00881bf808ae1a4e9e83e88360382483c4973142 GIT binary patch literal 15441 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 xwZ9=NWtz8 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/bookstore-global-css-file.png b/docs/zh-Hans/images/bookstore-global-css-file.png new file mode 100644 index 0000000000000000000000000000000000000000..e764fef8eee473d34ac23342359fe995d26e94cf GIT binary patch literal 13273 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 b8)-A0cT6b}S{Cq=9gvKKqIk8KQSkoH)&_E-1 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

Pmgj*J$FWbO#Ylm|q89ldVt5?z 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ℜSpoq)`6V#PlT~VbH zevGJvEzfK1Axe4|C${uKIiN*#h@)uUW1wD$-8!MEXLPfvKlo-3DDP7{Vz=SCU7>)9 zx}ANH1+^YM<B!#I+F%EYto%(k46! zakyD8MkiK7zInc1D}VXH3E@1pq^SdYroBK+ylZ%Ukyd0mx^t(ThGZNE^2Bm|#KmtF zZV?p$`Xx5$^oAl}`Yg^)YI~vSFsQAlK)7>0mn4vT~P8ugx zS#PfkagNk2#yy3J51C?up%*<{0b`0OBM5#f>mM5Z%P9TBCkQIm zvis>0?*^3zfH-;1VvvC=RUvcGlMX=JhI6cBhpg{R56Ih;$bRYtX*^+?HUq3Umm)4I$VTAT#TE(xXngLM zSRLtW-gI3(dRI8$u*FNrZ61b=9Wr1>OR9)IO{rREF~zN+>TJ?sU^6B8!EWI@BO37g zgSo2=PR!20(#Ypw7TlQrge=Uth@N9w7*%2M!#Cojd6FPX0gbGhqG#C%+U!e3sXz&v zNOE#tw zUViC9?|h88o=ES^t@3&9Kk0hBSDu^9t}R(`lJ-=(7wU9bgdWv_n%K0L@ZYWpiYA8p z_HNJ=^Ot*&5V5PVSJxu(-!pWJTWxe~qI#Dl(BPAmWbNod>|PN*LYf}1jEpka^#3L_ z>J1tG?lR4*xY*+pT_f#&Z<)3r`qxM3C?5!{fI_JgM%H@+TpB!@y`did-k44Tf<1x^ z{8X1kV$}w7Ak+5$oykAso;O+M%h>%EO{M+g5aRobD7etCd0cB9q5a0=*aE!b(ar12 zYwmoQ-M4zCYuJAgx%XDPM73uLllqJk7l4ecZoeUNE!}9lJl2_fClA?oSSXgZg_9!< zJipA0Y?`Gxe`ZO07)d=FVhL+xQBF1x(exy5SZ;gKQ ztch?@wrI?s$0F9~{{TJz%F8Ci=mUwIHSVdFA@?C?%ER36bJzok~1FLa5{RVbWHDd0KDzLsn{8BSkc&9XlGJU464rV zc9wsl_09j>D6;bZQ@0!S$hK@=+_C^Jrv%Wop}Eg8 z8zsFWmche-IZ=*No0||35YpQMXnSOQ{07kBX#O?KZk3P6GLrm_1?{nGjo% zj{O1SY-pq*bss2s8vbRzUik#%C)~JV*TIFKA6#HrYvr0ILj~QYH4ZUg4qakrG z$&Vz#DrlHYwgKx@H%(4W`3Cg2Us9L_0cT^io!zPmpre~aSMXASwk?9di)B=kd}szQ zvf}$-aDpjR*T8Jq^b>f?wlk^+r5;mu^W?9F4GJ_0D2M3nfk+odbPoL%lH9GJJn=Zv z^>}-Iv=n(6(Jz2ifw>9omx=O~Z4!^5(ZA0A`tkBs2b zQ?-$vmUg!=u@7jlf@OdI-s@=bL~{ubs^&GH1_DeSW!2>Vm{07_)!bTi`(+^@viFLIqyE5VTvyS? z?0hE0V=>X;nn?UVO@F=;l7h7i&l~~=_Uy}QA{r5{z66m$U%Wu^jq}a3?@HVNZ$<^l MN-9ZIi5Ug_AD_^LUjP6A literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/bookstore-menus-highlighted.png b/docs/zh-Hans/images/bookstore-menus-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f3237b0011ac1854d21696d266796bc95eea08 GIT binary patch literal 71428 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 L{CXK9%N^#EU(LE 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/bookstore-toolbar-highlighted.png b/docs/zh-Hans/images/bookstore-toolbar-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b7c3f57e55c216426fda26e5fc97b2b474f885 GIT binary patch literal 71299 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