From 966e2db7437ca615bdbbfaefc3e5afbb589ee950 Mon Sep 17 00:00:00 2001 From: sercan Date: Wed, 21 Jul 2021 11:36:43 +0300 Subject: [PATCH 01/10] (apps/contacts) Small adjustments for better consistency (apps/ecommerce/inventory) Small adjustments for better consistency --- src/app/modules/admin/apps/contacts/list/list.component.html | 2 +- .../apps/ecommerce/inventory/list/inventory.component.html | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/app/modules/admin/apps/contacts/list/list.component.html b/src/app/modules/admin/apps/contacts/list/list.component.html index ee6027f9..a5c8e368 100644 --- a/src/app/modules/admin/apps/contacts/list/list.component.html +++ b/src/app/modules/admin/apps/contacts/list/list.component.html @@ -42,7 +42,7 @@
- +
- + + [svgIcon]="'heroicons_solid:search'"> Date: Wed, 21 Jul 2021 12:22:02 +0300 Subject: [PATCH 02/10] (dashboards/project) Light header on light themes, small adjustments in the project selector --- .../dashboards/project/project.component.html | 63 ++++++++++--------- .../dashboards/project/project.module.ts | 6 +- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/app/modules/admin/dashboards/project/project.component.html b/src/app/modules/admin/dashboards/project/project.component.html index c9c5a428..8aaacf02 100644 --- a/src/app/modules/admin/dashboards/project/project.component.html +++ b/src/app/modules/admin/dashboards/project/project.component.html @@ -1,7 +1,7 @@
-
+
@@ -26,7 +26,7 @@
-
-
-
{{selectedProject}}
+
+
+
+
{{selectedProject}}
+
+
+ +
-
+ - - - - - - -
+ + + +
-
+
diff --git a/src/app/modules/admin/dashboards/project/project.module.ts b/src/app/modules/admin/dashboards/project/project.module.ts index bb2109fd..7f02f75a 100644 --- a/src/app/modules/admin/dashboards/project/project.module.ts +++ b/src/app/modules/admin/dashboards/project/project.module.ts @@ -6,6 +6,7 @@ import { MatDividerModule } from '@angular/material/divider'; import { MatIconModule } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatRippleModule } from '@angular/material/core'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; @@ -20,7 +21,7 @@ import { projectRoutes } from 'app/modules/admin/dashboards/project/project.rout declarations: [ ProjectComponent ], - imports : [ + imports: [ RouterModule.forChild(projectRoutes), MatButtonModule, MatButtonToggleModule, @@ -34,7 +35,8 @@ import { projectRoutes } from 'app/modules/admin/dashboards/project/project.rout MatTabsModule, NgApexchartsModule, TranslocoModule, - SharedModule + SharedModule, + MatRippleModule ] }) export class ProjectModule From 10ec1790ca3802bc19cf90b2bd99a5b7847fab09 Mon Sep 17 00:00:00 2001 From: sercan Date: Wed, 21 Jul 2021 12:22:23 +0300 Subject: [PATCH 03/10] (dashboards/project) Module import order --- src/app/modules/admin/dashboards/project/project.module.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/modules/admin/dashboards/project/project.module.ts b/src/app/modules/admin/dashboards/project/project.module.ts index 7f02f75a..0af3a0c3 100644 --- a/src/app/modules/admin/dashboards/project/project.module.ts +++ b/src/app/modules/admin/dashboards/project/project.module.ts @@ -21,7 +21,7 @@ import { projectRoutes } from 'app/modules/admin/dashboards/project/project.rout declarations: [ ProjectComponent ], - imports: [ + imports : [ RouterModule.forChild(projectRoutes), MatButtonModule, MatButtonToggleModule, @@ -29,14 +29,14 @@ import { projectRoutes } from 'app/modules/admin/dashboards/project/project.rout MatIconModule, MatMenuModule, MatProgressBarModule, + MatRippleModule, MatSidenavModule, MatSortModule, MatTableModule, MatTabsModule, NgApexchartsModule, TranslocoModule, - SharedModule, - MatRippleModule + SharedModule ] }) export class ProjectModule From dde9333120be00dc7886339d10598c1bf1bbc976 Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 23 Jul 2021 21:30:51 +0300 Subject: [PATCH 04/10] (dashboards/project) Small tweaks on the header --- .../modules/admin/dashboards/project/project.component.html | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/modules/admin/dashboards/project/project.component.html b/src/app/modules/admin/dashboards/project/project.component.html index 8aaacf02..69233c4f 100644 --- a/src/app/modules/admin/dashboards/project/project.component.html +++ b/src/app/modules/admin/dashboards/project/project.component.html @@ -47,7 +47,7 @@
@@ -85,9 +85,8 @@
-
+
- -
From 569809aabbaa1f6c2ebc098ec4e5a26c936a3c3d Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 23 Jul 2021 22:23:02 +0300 Subject: [PATCH 05/10] (dashboards/project) Small tweaks --- .../admin/dashboards/project/project.component.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/modules/admin/dashboards/project/project.component.html b/src/app/modules/admin/dashboards/project/project.component.html index 69233c4f..dfc768c9 100644 --- a/src/app/modules/admin/dashboards/project/project.component.html +++ b/src/app/modules/admin/dashboards/project/project.component.html @@ -118,7 +118,7 @@
21
Due Tasks
-
+
Completed:
13
@@ -146,7 +146,7 @@
17
Tasks
-
+
From yesterday:
9
@@ -174,7 +174,7 @@
24
Open
-
+
Closed today:
19
@@ -202,7 +202,7 @@
38
Proposals
-
+
Implemented:
16
@@ -684,7 +684,6 @@ mat-row *matRowDef="let row; columns: data.budgetDetails.columns;"> -
From 1581ea74cca7c00f75a0c6751e74e35f959d5b32 Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 23 Jul 2021 22:23:42 +0300 Subject: [PATCH 06/10] (dashboards/finance) Added finance dashboard (dashboards/crypto) Added crypto dashboard --- src/app/app.routing.ts | 2 + src/app/mock-api/common/navigation/data.ts | 14 + src/app/mock-api/dashboards/crypto/api.ts | 38 + src/app/mock-api/dashboards/crypto/data.ts | 1196 +++++++++++++++++ src/app/mock-api/dashboards/finance/api.ts | 38 + src/app/mock-api/dashboards/finance/data.ts | 1045 ++++++++++++++ src/app/mock-api/index.ts | 4 + .../dashboards/crypto/crypto.component.html | 277 ++++ .../dashboards/crypto/crypto.component.ts | 238 ++++ .../admin/dashboards/crypto/crypto.module.ts | 42 + .../dashboards/crypto/crypto.resolvers.ts | 32 + .../admin/dashboards/crypto/crypto.routing.ts | 13 + .../admin/dashboards/crypto/crypto.service.ts | 47 + .../dashboards/finance/finance.component.html | 526 ++++++++ .../dashboards/finance/finance.component.ts | 146 ++ .../dashboards/finance/finance.module.ts | 34 + .../dashboards/finance/finance.resolvers.ts | 32 + .../dashboards/finance/finance.routing.ts | 13 + .../dashboards/finance/finance.service.ts | 47 + 19 files changed, 3784 insertions(+) create mode 100644 src/app/mock-api/dashboards/crypto/api.ts create mode 100644 src/app/mock-api/dashboards/crypto/data.ts create mode 100644 src/app/mock-api/dashboards/finance/api.ts create mode 100644 src/app/mock-api/dashboards/finance/data.ts create mode 100644 src/app/modules/admin/dashboards/crypto/crypto.component.html create mode 100644 src/app/modules/admin/dashboards/crypto/crypto.component.ts create mode 100644 src/app/modules/admin/dashboards/crypto/crypto.module.ts create mode 100644 src/app/modules/admin/dashboards/crypto/crypto.resolvers.ts create mode 100644 src/app/modules/admin/dashboards/crypto/crypto.routing.ts create mode 100644 src/app/modules/admin/dashboards/crypto/crypto.service.ts create mode 100644 src/app/modules/admin/dashboards/finance/finance.component.html create mode 100644 src/app/modules/admin/dashboards/finance/finance.component.ts create mode 100644 src/app/modules/admin/dashboards/finance/finance.module.ts create mode 100644 src/app/modules/admin/dashboards/finance/finance.resolvers.ts create mode 100644 src/app/modules/admin/dashboards/finance/finance.routing.ts create mode 100644 src/app/modules/admin/dashboards/finance/finance.service.ts diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 4e786c73..3364a294 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -79,6 +79,8 @@ export const appRoutes: Route[] = [ {path: 'dashboards', children: [ {path: 'project', loadChildren: () => import('app/modules/admin/dashboards/project/project.module').then(m => m.ProjectModule)}, {path: 'analytics', loadChildren: () => import('app/modules/admin/dashboards/analytics/analytics.module').then(m => m.AnalyticsModule)}, + {path: 'finance', loadChildren: () => import('app/modules/admin/dashboards/finance/finance.module').then(m => m.FinanceModule)}, + {path: 'crypto', loadChildren: () => import('app/modules/admin/dashboards/crypto/crypto.module').then(m => m.CryptoModule)}, ]}, // Apps diff --git a/src/app/mock-api/common/navigation/data.ts b/src/app/mock-api/common/navigation/data.ts index 478dab97..be3cb9b8 100644 --- a/src/app/mock-api/common/navigation/data.ts +++ b/src/app/mock-api/common/navigation/data.ts @@ -22,6 +22,20 @@ export const defaultNavigation: FuseNavigationItem[] = [ type : 'basic', icon : 'heroicons_outline:chart-pie', link : '/dashboards/analytics' + }, + { + id : 'dashboards.finance', + title: 'Finance', + type : 'basic', + icon : 'heroicons_outline:cash', + link : '/dashboards/finance' + }, + { + id : 'dashboards.crypto', + title: 'Crypto', + type : 'basic', + icon : 'heroicons_outline:currency-dollar', + link : '/dashboards/crypto' } ] }, diff --git a/src/app/mock-api/dashboards/crypto/api.ts b/src/app/mock-api/dashboards/crypto/api.ts new file mode 100644 index 00000000..e59c7b04 --- /dev/null +++ b/src/app/mock-api/dashboards/crypto/api.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { cloneDeep } from 'lodash-es'; +import { FuseMockApiService } from '@fuse/lib/mock-api'; +import { crypto as cryptoData } from 'app/mock-api/dashboards/crypto/data'; + +@Injectable({ + providedIn: 'root' +}) +export class CryptoMockApi +{ + private _crypto: any = cryptoData; + + /** + * Constructor + */ + constructor(private _fuseMockApiService: FuseMockApiService) + { + // Register Mock API handlers + this.registerHandlers(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Register Mock API handlers + */ + registerHandlers(): void + { + // ----------------------------------------------------------------------------------------------------- + // @ Crypto - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/dashboards/crypto') + .reply(() => [200, cloneDeep(this._crypto)]); + } +} diff --git a/src/app/mock-api/dashboards/crypto/data.ts b/src/app/mock-api/dashboards/crypto/data.ts new file mode 100644 index 00000000..3a564943 --- /dev/null +++ b/src/app/mock-api/dashboards/crypto/data.ts @@ -0,0 +1,1196 @@ +import * as moment from 'moment'; + +/* tslint:disable:max-line-length */ +export const crypto = { + btc : { + amount : 8878.48, + trend : { + dir : 'up', + amount: 0.17 + }, + marketCap : 148752956966, + volume : 22903438381, + supply : 18168448, + allTimeHigh: 19891.00, + price : { + series: [ + { + name: 'Price', + data: [ + { + x: -145, + y: 6554.36 + }, + { + x: -144, + y: 6554.36 + }, + { + x: -143, + y: 6546.94 + }, + { + x: -142, + y: 6546.96 + }, + { + x: -141, + y: 6546.11 + }, + { + x: -140, + y: 6550.26 + }, + { + x: -139, + y: 6546.11 + }, + { + x: -138, + y: 6550.79 + }, + { + x: -137, + y: 6545.36 + }, + { + x: -136, + y: 6541.06 + }, + { + x: -135, + y: 6540.10 + }, + { + x: -134, + y: 6538.31 + }, + { + x: -133, + y: 6538.42 + }, + { + x: -132, + y: 6538.48 + }, + { + x: -131, + y: 6538.71 + }, + { + x: -130, + y: 6548.42 + }, + { + x: -129, + y: 6546.87 + }, + { + x: -128, + y: 6547.07 + }, + { + x: -127, + y: 6535.07 + }, + { + x: -126, + y: 6535.01 + }, + { + x: -125, + y: 6539.02 + }, + { + x: -124, + y: 6547.96 + }, + { + x: -123, + y: 6547.92 + }, + { + x: -122, + y: 6546.56 + }, + { + x: -121, + y: 6546.56 + }, + { + x: -120, + y: 6564.16 + }, + { + x: -119, + y: 6560.83 + }, + { + x: -118, + y: 6559.08 + }, + { + x: -117, + y: 6553.02 + }, + { + x: -116, + y: 6564.99 + }, + { + x: -115, + y: 6558.70 + }, + { + x: -114, + y: 6568.73 + }, + { + x: -113, + y: 6568.80 + }, + { + x: -112, + y: 6568.80 + }, + { + x: -111, + y: 6568.80 + }, + { + x: -110, + y: 6571.83 + }, + { + x: -109, + y: 6562.64 + }, + { + x: -108, + y: 6561.28 + }, + { + x: -107, + y: 6561.28 + }, + { + x: -106, + y: 6560.40 + }, + { + x: -105, + y: 6564.41 + }, + { + x: -104, + y: 6562.44 + }, + { + x: -103, + y: 6565.13 + }, + { + x: -102, + y: 6553.30 + }, + { + x: -101, + y: 6552.68 + }, + { + x: -100, + y: 6551.92 + }, + { + x: -99, + y: 6553.85 + }, + { + x: -98, + y: 6560.00 + }, + { + x: -97, + y: 6560.00 + }, + { + x: -96, + y: 6565.01 + }, + { + x: -95, + y: 6583.19 + }, + { + x: -94, + y: 6555.79 + }, + { + x: -93, + y: 6556.04 + }, + { + x: -92, + y: 6558.85 + }, + { + x: -91, + y: 6564.75 + }, + { + x: -90, + y: 6564.88 + }, + { + x: -89, + y: 6565.10 + }, + { + x: -88, + y: 6565.72 + }, + { + x: -87, + y: 6565.72 + }, + { + x: -86, + y: 6565.95 + }, + { + x: -85, + y: 6561.82 + }, + { + x: -84, + y: 6566.26 + }, + { + x: -83, + y: 6568.81 + }, + { + x: -82, + y: 6588.57 + }, + { + x: -81, + y: 6587.11 + }, + { + x: -80, + y: 6577.86 + }, + { + x: -79, + y: 6586.51 + }, + { + x: -78, + y: 6581.14 + }, + { + x: -77, + y: 6581.45 + }, + { + x: -76, + y: 6589.54 + }, + { + x: -75, + y: 6580.91 + }, + { + x: -74, + y: 6581.67 + }, + { + x: -73, + y: 6579.06 + }, + { + x: -72, + y: 6578.73 + }, + { + x: -71, + y: 6578.64 + }, + { + x: -70, + y: 6579.08 + }, + { + x: -69, + y: 6577.43 + }, + { + x: -68, + y: 6582.12 + }, + { + x: -67, + y: 6572.42 + }, + { + x: -66, + y: 6578.72 + }, + { + x: -65, + y: 6572.43 + }, + { + x: -64, + y: 6570.64 + }, + { + x: -63, + y: 6561.64 + }, + { + x: -62, + y: 6550.84 + }, + { + x: -61, + y: 6561.83 + }, + { + x: -60, + y: 6561.84 + }, + { + x: -59, + y: 6552.44 + }, + { + x: -58, + y: 6552.47 + }, + { + x: -57, + y: 6562.31 + }, + { + x: -56, + y: 6562.10 + }, + { + x: -55, + y: 6561.65 + }, + { + x: -54, + y: 6547.96 + }, + { + x: -53, + y: 6559.95 + }, + { + x: -52, + y: 6562.08 + }, + { + x: -51, + y: 6557.71 + }, + { + x: -50, + y: 6559.05 + }, + { + x: -49, + y: 6562.69 + }, + { + x: -48, + y: 6578.18 + }, + { + x: -47, + y: 6580.15 + }, + { + x: -46, + y: 6584.26 + }, + { + x: -45, + y: 6574.75 + }, + { + x: -44, + y: 6574.85 + }, + { + x: -43, + y: 6582.63 + }, + { + x: -42, + y: 6569.70 + }, + { + x: -41, + y: 6570.10 + }, + { + x: -40, + y: 6570.11 + }, + { + x: -39, + y: 6569.71 + }, + { + x: -38, + y: 6578.03 + }, + { + x: -37, + y: 6579.92 + }, + { + x: -36, + y: 6571.03 + }, + { + x: -35, + y: 6571.48 + }, + { + x: -34, + y: 6576.67 + }, + { + x: -33, + y: 6576.67 + }, + { + x: -32, + y: 6576.63 + }, + { + x: -31, + y: 6576.68 + }, + { + x: -30, + y: 6573.29 + }, + { + x: -29, + y: 6577.28 + }, + { + x: -28, + y: 6577.73 + }, + { + x: -27, + y: 6577.70 + }, + { + x: -26, + y: 6578.36 + }, + { + x: -25, + y: 6578.24 + }, + { + x: -24, + y: 6581.30 + }, + { + x: -23, + y: 6582.59 + }, + { + x: -22, + y: 6602.51 + }, + { + x: -21, + y: 6582.65 + }, + { + x: -20, + y: 6574.77 + }, + { + x: -19, + y: 6574.41 + }, + { + x: -18, + y: 6575.08 + }, + { + x: -17, + y: 6575.08 + }, + { + x: -16, + y: 6574.09 + }, + { + x: -15, + y: 6568.84 + }, + { + x: -14, + y: 6567.49 + }, + { + x: -13, + y: 6559.75 + }, + { + x: -12, + y: 6566.65 + }, + { + x: -11, + y: 6567.52 + }, + { + x: -10, + y: 6567.59 + }, + { + x: -9, + y: 6564.18 + }, + { + x: -8, + y: 6570.11 + }, + { + x: -7, + y: 6562.70 + }, + { + x: -6, + y: 6562.70 + }, + { + x: -5, + y: 6562.77 + }, + { + x: -4, + y: 6569.46 + }, + { + x: -3, + y: 6571.04 + }, + { + x: -2, + y: 6571.48 + }, + { + x: -1, + y: 6571.30 + } + ] + } + ] + } + }, + prices : { + btc: 8878.48, + eth: 170.46, + bch: 359.93, + xrp: 0.23512 + }, + wallets : { + btc: 24.97311243, + eth: 126.3212, + bch: 78.454412, + xrp: 11278.771123 + }, + watchlist: [ + { + title : 'Ethereum', + iso : 'ETH', + amount: 170.46, + trend : { + dir : 'up', + amount: 2.35 + }, + series: [ + { + name: 'Price', + data: [ + { + x: moment().subtract(20, 'minutes').format('HH:mm'), + y: 154.36 + }, + { + x: moment().subtract(19, 'minutes').format('HH:mm'), + y: 154.36 + }, + { + x: moment().subtract(18, 'minutes').format('HH:mm'), + y: 146.94 + }, + { + x: moment().subtract(17, 'minutes').format('HH:mm'), + y: 146.96 + }, + { + x: moment().subtract(16, 'minutes').format('HH:mm'), + y: 146.11 + }, + { + x: moment().subtract(15, 'minutes').format('HH:mm'), + y: 150.26 + }, + { + x: moment().subtract(14, 'minutes').format('HH:mm'), + y: 146.11 + }, + { + x: moment().subtract(13, 'minutes').format('HH:mm'), + y: 150.79 + }, + { + x: moment().subtract(12, 'minutes').format('HH:mm'), + y: 145.36 + }, + { + x: moment().subtract(11, 'minutes').format('HH:mm'), + y: 141.06 + }, + { + x: moment().subtract(10, 'minutes').format('HH:mm'), + y: 140.10 + }, + { + x: moment().subtract(9, 'minutes').format('HH:mm'), + y: 138.31 + }, + { + x: moment().subtract(8, 'minutes').format('HH:mm'), + y: 138.42 + }, + { + x: moment().subtract(7, 'minutes').format('HH:mm'), + y: 138.48 + }, + { + x: moment().subtract(6, 'minutes').format('HH:mm'), + y: 138.71 + }, + { + x: moment().subtract(5, 'minutes').format('HH:mm'), + y: 148.42 + }, + { + x: moment().subtract(4, 'minutes').format('HH:mm'), + y: 146.87 + }, + { + x: moment().subtract(3, 'minutes').format('HH:mm'), + y: 147.07 + }, + { + x: moment().subtract(2, 'minutes').format('HH:mm'), + y: 135.07 + }, + { + x: moment().subtract(1, 'minutes').format('HH:mm'), + y: 135.01 + } + ] + } + ] + }, + { + title : 'Bitcoin Cash', + iso : 'BCH', + amount: 359.93, + trend : { + dir : 'up', + amount: 9.94 + }, + series: [ + { + name: 'Price', + data: [ + { + x: moment().subtract(20, 'minutes').format('HH:mm'), + y: 374.77 + }, + { + x: moment().subtract(19, 'minutes').format('HH:mm'), + y: 374.41 + }, + { + x: moment().subtract(18, 'minutes').format('HH:mm'), + y: 375.08 + }, + { + x: moment().subtract(17, 'minutes').format('HH:mm'), + y: 375.08 + }, + { + x: moment().subtract(16, 'minutes').format('HH:mm'), + y: 374.09 + }, + { + x: moment().subtract(15, 'minutes').format('HH:mm'), + y: 368.84 + }, + { + x: moment().subtract(14, 'minutes').format('HH:mm'), + y: 367.49 + }, + { + x: moment().subtract(13, 'minutes').format('HH:mm'), + y: 359.75 + }, + { + x: moment().subtract(12, 'minutes').format('HH:mm'), + y: 366.65 + }, + { + x: moment().subtract(11, 'minutes').format('HH:mm'), + y: 367.52 + }, + { + x: moment().subtract(10, 'minutes').format('HH:mm'), + y: 367.59 + }, + { + x: moment().subtract(9, 'minutes').format('HH:mm'), + y: 364.18 + }, + { + x: moment().subtract(8, 'minutes').format('HH:mm'), + y: 370.11 + }, + { + x: moment().subtract(7, 'minutes').format('HH:mm'), + y: 362.70 + }, + { + x: moment().subtract(6, 'minutes').format('HH:mm'), + y: 362.70 + }, + { + x: moment().subtract(5, 'minutes').format('HH:mm'), + y: 362.77 + }, + { + x: moment().subtract(4, 'minutes').format('HH:mm'), + y: 369.46 + }, + { + x: moment().subtract(3, 'minutes').format('HH:mm'), + y: 371.04 + }, + { + x: moment().subtract(2, 'minutes').format('HH:mm'), + y: 371.48 + }, + { + x: moment().subtract(1, 'minutes').format('HH:mm'), + y: 371.30 + } + ] + } + ] + }, + { + title : 'XRP', + iso : 'XRP', + amount: 0.23512, + trend : { + dir : 'down', + amount: 0.35 + }, + series: [ + { + name: 'Price', + data: [ + { + x: moment().subtract(20, 'minutes').format('HH:mm'), + y: 0.258 + }, + { + x: moment().subtract(19, 'minutes').format('HH:mm'), + y: 0.256 + }, + { + x: moment().subtract(18, 'minutes').format('HH:mm'), + y: 0.255 + }, + { + x: moment().subtract(17, 'minutes').format('HH:mm'), + y: 0.255 + }, + { + x: moment().subtract(16, 'minutes').format('HH:mm'), + y: 0.254 + }, + { + x: moment().subtract(15, 'minutes').format('HH:mm'), + y: 0.248 + }, + { + x: moment().subtract(14, 'minutes').format('HH:mm'), + y: 0.247 + }, + { + x: moment().subtract(13, 'minutes').format('HH:mm'), + y: 0.249 + }, + { + x: moment().subtract(12, 'minutes').format('HH:mm'), + y: 0.246 + }, + { + x: moment().subtract(11, 'minutes').format('HH:mm'), + y: 0.247 + }, + { + x: moment().subtract(10, 'minutes').format('HH:mm'), + y: 0.247 + }, + { + x: moment().subtract(9, 'minutes').format('HH:mm'), + y: 0.244 + }, + { + x: moment().subtract(8, 'minutes').format('HH:mm'), + y: 0.250 + }, + { + x: moment().subtract(7, 'minutes').format('HH:mm'), + y: 0.242 + }, + { + x: moment().subtract(6, 'minutes').format('HH:mm'), + y: 0.251 + }, + { + x: moment().subtract(5, 'minutes').format('HH:mm'), + y: 0.251 + }, + { + x: moment().subtract(4, 'minutes').format('HH:mm'), + y: 0.251 + }, + { + x: moment().subtract(3, 'minutes').format('HH:mm'), + y: 0.249 + }, + { + x: moment().subtract(2, 'minutes').format('HH:mm'), + y: 0.242 + }, + { + x: moment().subtract(1, 'minutes').format('HH:mm'), + y: 0.240 + } + ] + } + ] + }, + { + title : 'Litecoin', + iso : 'LTC', + amount: 60.15, + trend : { + dir : 'up', + amount: 0.99 + }, + series: [ + { + name: 'Price', + data: [ + { + x: moment().subtract(20, 'minutes').format('HH:mm'), + y: 62.54 + }, + { + x: moment().subtract(19, 'minutes').format('HH:mm'), + y: 61.54 + }, + { + x: moment().subtract(18, 'minutes').format('HH:mm'), + y: 62.55 + }, + { + x: moment().subtract(17, 'minutes').format('HH:mm'), + y: 60.55 + }, + { + x: moment().subtract(16, 'minutes').format('HH:mm'), + y: 59.54 + }, + { + x: moment().subtract(15, 'minutes').format('HH:mm'), + y: 58.48 + }, + { + x: moment().subtract(14, 'minutes').format('HH:mm'), + y: 54.47 + }, + { + x: moment().subtract(13, 'minutes').format('HH:mm'), + y: 51.49 + }, + { + x: moment().subtract(12, 'minutes').format('HH:mm'), + y: 51.46 + }, + { + x: moment().subtract(11, 'minutes').format('HH:mm'), + y: 53.47 + }, + { + x: moment().subtract(10, 'minutes').format('HH:mm'), + y: 52.47 + }, + { + x: moment().subtract(9, 'minutes').format('HH:mm'), + y: 54.44 + }, + { + x: moment().subtract(8, 'minutes').format('HH:mm'), + y: 59.50 + }, + { + x: moment().subtract(7, 'minutes').format('HH:mm'), + y: 62.42 + }, + { + x: moment().subtract(6, 'minutes').format('HH:mm'), + y: 61.42 + }, + { + x: moment().subtract(5, 'minutes').format('HH:mm'), + y: 60.42 + }, + { + x: moment().subtract(4, 'minutes').format('HH:mm'), + y: 58.49 + }, + { + x: moment().subtract(3, 'minutes').format('HH:mm'), + y: 57.51 + }, + { + x: moment().subtract(2, 'minutes').format('HH:mm'), + y: 54.51 + }, + { + x: moment().subtract(1, 'minutes').format('HH:mm'), + y: 51.25 + } + ] + } + ] + }, + { + title : 'Zcash', + iso : 'ZEC', + amount: 58.41, + trend : { + dir : 'down', + amount: 8.79 + }, + series: [ + { + name: 'Price', + data: [ + { + x: moment().subtract(20, 'minutes').format('HH:mm'), + y: 53.54 + }, + { + x: moment().subtract(19, 'minutes').format('HH:mm'), + y: 52.54 + }, + { + x: moment().subtract(18, 'minutes').format('HH:mm'), + y: 52.55 + }, + { + x: moment().subtract(17, 'minutes').format('HH:mm'), + y: 46.44 + }, + { + x: moment().subtract(16, 'minutes').format('HH:mm'), + y: 49.50 + }, + { + x: moment().subtract(15, 'minutes').format('HH:mm'), + y: 55.42 + }, + { + x: moment().subtract(14, 'minutes').format('HH:mm'), + y: 54.42 + }, + { + x: moment().subtract(13, 'minutes').format('HH:mm'), + y: 43.49 + }, + { + x: moment().subtract(12, 'minutes').format('HH:mm'), + y: 43.46 + }, + { + x: moment().subtract(11, 'minutes').format('HH:mm'), + y: 41.47 + }, + { + x: moment().subtract(10, 'minutes').format('HH:mm'), + y: 41.47 + }, + { + x: moment().subtract(9, 'minutes').format('HH:mm'), + y: 51.55 + }, + { + x: moment().subtract(8, 'minutes').format('HH:mm'), + y: 48.54 + }, + { + x: moment().subtract(7, 'minutes').format('HH:mm'), + y: 49.48 + }, + { + x: moment().subtract(6, 'minutes').format('HH:mm'), + y: 45.47 + }, + { + x: moment().subtract(5, 'minutes').format('HH:mm'), + y: 51.42 + }, + { + x: moment().subtract(4, 'minutes').format('HH:mm'), + y: 49.49 + }, + { + x: moment().subtract(3, 'minutes').format('HH:mm'), + y: 46.51 + }, + { + x: moment().subtract(2, 'minutes').format('HH:mm'), + y: 41.51 + }, + { + x: moment().subtract(1, 'minutes').format('HH:mm'), + y: 44.25 + } + ] + } + ] + }, + { + title : 'Bitcoin Gold', + iso : 'BTG', + amount: 12.23, + trend : { + dir : 'down', + amount: 4.42 + }, + series: [ + { + name: 'Price', + data: [ + { + x: moment().subtract(20, 'minutes').format('HH:mm'), + y: 14.77 + }, + { + x: moment().subtract(19, 'minutes').format('HH:mm'), + y: 14.41 + }, + { + x: moment().subtract(18, 'minutes').format('HH:mm'), + y: 15.08 + }, + { + x: moment().subtract(17, 'minutes').format('HH:mm'), + y: 15.08 + }, + { + x: moment().subtract(16, 'minutes').format('HH:mm'), + y: 14.09 + }, + { + x: moment().subtract(15, 'minutes').format('HH:mm'), + y: 18.84 + }, + { + x: moment().subtract(14, 'minutes').format('HH:mm'), + y: 17.49 + }, + { + x: moment().subtract(13, 'minutes').format('HH:mm'), + y: 19.75 + }, + { + x: moment().subtract(12, 'minutes').format('HH:mm'), + y: 16.65 + }, + { + x: moment().subtract(11, 'minutes').format('HH:mm'), + y: 17.52 + }, + { + x: moment().subtract(10, 'minutes').format('HH:mm'), + y: 17.59 + }, + { + x: moment().subtract(9, 'minutes').format('HH:mm'), + y: 14.18 + }, + { + x: moment().subtract(8, 'minutes').format('HH:mm'), + y: 10.11 + }, + { + x: moment().subtract(7, 'minutes').format('HH:mm'), + y: 12.70 + }, + { + x: moment().subtract(6, 'minutes').format('HH:mm'), + y: 12.70 + }, + { + x: moment().subtract(5, 'minutes').format('HH:mm'), + y: 12.77 + }, + { + x: moment().subtract(4, 'minutes').format('HH:mm'), + y: 19.46 + }, + { + x: moment().subtract(3, 'minutes').format('HH:mm'), + y: 11.04 + }, + { + x: moment().subtract(2, 'minutes').format('HH:mm'), + y: 11.48 + }, + { + x: moment().subtract(1, 'minutes').format('HH:mm'), + y: 11.30 + } + ] + } + ] + } + ] +}; + diff --git a/src/app/mock-api/dashboards/finance/api.ts b/src/app/mock-api/dashboards/finance/api.ts new file mode 100644 index 00000000..cc9bede7 --- /dev/null +++ b/src/app/mock-api/dashboards/finance/api.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { cloneDeep } from 'lodash-es'; +import { FuseMockApiService } from '@fuse/lib/mock-api'; +import { finance as financeData } from 'app/mock-api/dashboards/finance/data'; + +@Injectable({ + providedIn: 'root' +}) +export class FinanceMockApi +{ + private _finance: any = financeData; + + /** + * Constructor + */ + constructor(private _fuseMockApiService: FuseMockApiService) + { + // Register Mock API handlers + this.registerHandlers(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Register Mock API handlers + */ + registerHandlers(): void + { + // ----------------------------------------------------------------------------------------------------- + // @ Sales - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/dashboards/finance') + .reply(() => [200, cloneDeep(this._finance)]); + } +} diff --git a/src/app/mock-api/dashboards/finance/data.ts b/src/app/mock-api/dashboards/finance/data.ts new file mode 100644 index 00000000..77b3334e --- /dev/null +++ b/src/app/mock-api/dashboards/finance/data.ts @@ -0,0 +1,1045 @@ +import * as moment from 'moment'; + +/* tslint:disable:max-line-length */ +export const finance = { + accountBalance : { + growRate: 38.33, + ami : 45332, + series : [ + { + name: 'Predicted', + data: [ + { + x: moment().subtract(12, 'months').day(1).toDate(), + y: 48.84 + }, + { + x: moment().subtract(12, 'months').day(4).toDate(), + y: 53.51 + }, + { + x: moment().subtract(12, 'months').day(7).toDate(), + y: 52.93 + }, + { + x: moment().subtract(12, 'months').day(10).toDate(), + y: 49.08 + }, + { + x: moment().subtract(12, 'months').day(13).toDate(), + y: 50.27 + }, + { + x: moment().subtract(12, 'months').day(16).toDate(), + y: 48.37 + }, + { + x: moment().subtract(12, 'months').day(19).toDate(), + y: 44.84 + }, + { + x: moment().subtract(12, 'months').day(22).toDate(), + y: 40.71 + }, + { + x: moment().subtract(12, 'months').day(25).toDate(), + y: 41.24 + }, + { + x: moment().subtract(12, 'months').day(28).toDate(), + y: 45.63 + }, + { + x: moment().subtract(11, 'months').day(1).toDate(), + y: 38.20 + }, + { + x: moment().subtract(11, 'months').day(4).toDate(), + y: 39.68 + }, + { + x: moment().subtract(11, 'months').day(7).toDate(), + y: 41.02 + }, + { + x: moment().subtract(11, 'months').day(10).toDate(), + y: 39.41 + }, + { + x: moment().subtract(11, 'months').day(13).toDate(), + y: 35.66 + }, + { + x: moment().subtract(11, 'months').day(16).toDate(), + y: 38.53 + }, + { + x: moment().subtract(11, 'months').day(19).toDate(), + y: 38.53 + }, + { + x: moment().subtract(11, 'months').day(22).toDate(), + y: 40.69 + }, + { + x: moment().subtract(11, 'months').day(25).toDate(), + y: 38.79 + }, + { + x: moment().subtract(11, 'months').day(28).toDate(), + y: 42.98 + }, + { + x: moment().subtract(10, 'months').day(1).toDate(), + y: 43.55 + }, + { + x: moment().subtract(10, 'months').day(4).toDate(), + y: 40.65 + }, + { + x: moment().subtract(10, 'months').day(7).toDate(), + y: 36.50 + }, + { + x: moment().subtract(10, 'months').day(10).toDate(), + y: 33.79 + }, + { + x: moment().subtract(10, 'months').day(13).toDate(), + y: 31.91 + }, + { + x: moment().subtract(10, 'months').day(16).toDate(), + y: 29.68 + }, + { + x: moment().subtract(10, 'months').day(19).toDate(), + y: 29.57 + }, + { + x: moment().subtract(10, 'months').day(22).toDate(), + y: 33.13 + }, + { + x: moment().subtract(10, 'months').day(25).toDate(), + y: 37.08 + }, + { + x: moment().subtract(10, 'months').day(28).toDate(), + y: 35.86 + }, + { + x: moment().subtract(9, 'months').day(1).toDate(), + y: 39.65 + }, + { + x: moment().subtract(9, 'months').day(4).toDate(), + y: 39.01 + }, + { + x: moment().subtract(9, 'months').day(7).toDate(), + y: 34.10 + }, + { + x: moment().subtract(9, 'months').day(10).toDate(), + y: 37.48 + }, + { + x: moment().subtract(9, 'months').day(13).toDate(), + y: 39.29 + }, + { + x: moment().subtract(9, 'months').day(16).toDate(), + y: 38.46 + }, + { + x: moment().subtract(9, 'months').day(19).toDate(), + y: 37.71 + }, + { + x: moment().subtract(9, 'months').day(22).toDate(), + y: 40.15 + }, + { + x: moment().subtract(9, 'months').day(25).toDate(), + y: 35.89 + }, + { + x: moment().subtract(9, 'months').day(28).toDate(), + y: 31.50 + }, + { + x: moment().subtract(8, 'months').day(1).toDate(), + y: 30.50 + }, + { + x: moment().subtract(8, 'months').day(4).toDate(), + y: 25.74 + }, + { + x: moment().subtract(8, 'months').day(7).toDate(), + y: 28.23 + }, + { + x: moment().subtract(8, 'months').day(10).toDate(), + y: 28.48 + }, + { + x: moment().subtract(8, 'months').day(13).toDate(), + y: 30.00 + }, + { + x: moment().subtract(8, 'months').day(16).toDate(), + y: 32.16 + }, + { + x: moment().subtract(8, 'months').day(19).toDate(), + y: 32.99 + }, + { + x: moment().subtract(8, 'months').day(22).toDate(), + y: 37.68 + }, + { + x: moment().subtract(8, 'months').day(25).toDate(), + y: 35.24 + }, + { + x: moment().subtract(8, 'months').day(28).toDate(), + y: 39.18 + }, + { + x: moment().subtract(7, 'months').day(1).toDate(), + y: 41.45 + }, + { + x: moment().subtract(7, 'months').day(4).toDate(), + y: 43.78 + }, + { + x: moment().subtract(7, 'months').day(7).toDate(), + y: 39.41 + }, + { + x: moment().subtract(7, 'months').day(10).toDate(), + y: 39.32 + }, + { + x: moment().subtract(7, 'months').day(13).toDate(), + y: 43.80 + }, + { + x: moment().subtract(7, 'months').day(16).toDate(), + y: 42.43 + }, + { + x: moment().subtract(7, 'months').day(19).toDate(), + y: 43.67 + }, + { + x: moment().subtract(7, 'months').day(22).toDate(), + y: 38.79 + }, + { + x: moment().subtract(7, 'months').day(25).toDate(), + y: 43.57 + }, + { + x: moment().subtract(7, 'months').day(28).toDate(), + y: 41.81 + }, + { + x: moment().subtract(6, 'months').day(1).toDate(), + y: 46.19 + }, + { + x: moment().subtract(6, 'months').day(4).toDate(), + y: 47.69 + }, + { + x: moment().subtract(6, 'months').day(7).toDate(), + y: 49.01 + }, + { + x: moment().subtract(6, 'months').day(10).toDate(), + y: 46.40 + }, + { + x: moment().subtract(6, 'months').day(13).toDate(), + y: 51.28 + }, + { + x: moment().subtract(6, 'months').day(16).toDate(), + y: 50.15 + }, + { + x: moment().subtract(6, 'months').day(19).toDate(), + y: 53.60 + }, + { + x: moment().subtract(6, 'months').day(22).toDate(), + y: 56.08 + }, + { + x: moment().subtract(6, 'months').day(25).toDate(), + y: 52.72 + }, + { + x: moment().subtract(6, 'months').day(28).toDate(), + y: 56.60 + }, + { + x: moment().subtract(5, 'months').day(1).toDate(), + y: 58.36 + }, + { + x: moment().subtract(5, 'months').day(4).toDate(), + y: 56.59 + }, + { + x: moment().subtract(5, 'months').day(7).toDate(), + y: 55.75 + }, + { + x: moment().subtract(5, 'months').day(10).toDate(), + y: 54.74 + }, + { + x: moment().subtract(5, 'months').day(13).toDate(), + y: 54.27 + }, + { + x: moment().subtract(5, 'months').day(16).toDate(), + y: 58.65 + }, + { + x: moment().subtract(5, 'months').day(19).toDate(), + y: 57.00 + }, + { + x: moment().subtract(5, 'months').day(22).toDate(), + y: 60.52 + }, + { + x: moment().subtract(5, 'months').day(25).toDate(), + y: 57.60 + }, + { + x: moment().subtract(5, 'months').day(28).toDate(), + y: 56.48 + }, + { + x: moment().subtract(4, 'months').day(1).toDate(), + y: 54.35 + }, + { + x: moment().subtract(4, 'months').day(4).toDate(), + y: 52.39 + }, + { + x: moment().subtract(4, 'months').day(7).toDate(), + y: 54.52 + }, + { + x: moment().subtract(4, 'months').day(10).toDate(), + y: 54.16 + }, + { + x: moment().subtract(4, 'months').day(13).toDate(), + y: 51.95 + }, + { + x: moment().subtract(4, 'months').day(16).toDate(), + y: 51.19 + }, + { + x: moment().subtract(4, 'months').day(19).toDate(), + y: 46.35 + }, + { + x: moment().subtract(4, 'months').day(22).toDate(), + y: 48.33 + }, + { + x: moment().subtract(4, 'months').day(25).toDate(), + y: 45.84 + }, + { + x: moment().subtract(4, 'months').day(28).toDate(), + y: 48.22 + }, + { + x: moment().subtract(3, 'months').day(1).toDate(), + y: 45.82 + }, + { + x: moment().subtract(3, 'months').day(4).toDate(), + y: 43.48 + }, + { + x: moment().subtract(3, 'months').day(7).toDate(), + y: 41.32 + }, + { + x: moment().subtract(3, 'months').day(10).toDate(), + y: 40.99 + }, + { + x: moment().subtract(3, 'months').day(13).toDate(), + y: 38.49 + }, + { + x: moment().subtract(3, 'months').day(16).toDate(), + y: 40.10 + }, + { + x: moment().subtract(3, 'months').day(19).toDate(), + y: 44.86 + }, + { + x: moment().subtract(3, 'months').day(22).toDate(), + y: 44.03 + }, + { + x: moment().subtract(3, 'months').day(25).toDate(), + y: 41.41 + }, + { + x: moment().subtract(3, 'months').day(28).toDate(), + y: 37.80 + }, + { + x: moment().subtract(2, 'months').day(1).toDate(), + y: 35.24 + }, + { + x: moment().subtract(2, 'months').day(4).toDate(), + y: 32.12 + }, + { + x: moment().subtract(2, 'months').day(7).toDate(), + y: 35.68 + }, + { + x: moment().subtract(2, 'months').day(10).toDate(), + y: 38.00 + }, + { + x: moment().subtract(2, 'months').day(13).toDate(), + y: 37.96 + }, + { + x: moment().subtract(2, 'months').day(16).toDate(), + y: 38.70 + }, + { + x: moment().subtract(2, 'months').day(19).toDate(), + y: 37.45 + }, + { + x: moment().subtract(2, 'months').day(22).toDate(), + y: 37.51 + }, + { + x: moment().subtract(2, 'months').day(25).toDate(), + y: 33.10 + }, + { + x: moment().subtract(2, 'months').day(28).toDate(), + y: 35.09 + }, + { + x: moment().subtract(1, 'months').day(1).toDate(), + y: 31.87 + }, + { + x: moment().subtract(1, 'months').day(4).toDate(), + y: 29.18 + }, + { + x: moment().subtract(1, 'months').day(7).toDate(), + y: 31.91 + }, + { + x: moment().subtract(1, 'months').day(10).toDate(), + y: 34.37 + }, + { + x: moment().subtract(1, 'months').day(13).toDate(), + y: 32.91 + }, + { + x: moment().subtract(1, 'months').day(16).toDate(), + y: 33.17 + }, + { + x: moment().subtract(1, 'months').day(19).toDate(), + y: 37.16 + }, + { + x: moment().subtract(1, 'months').day(22).toDate(), + y: 32.60 + }, + { + x: moment().subtract(1, 'months').day(25).toDate(), + y: 36.94 + }, + { + x: moment().subtract(1, 'months').day(28).toDate(), + y: 35.98 + } + ] + }, + { + name: 'Actual', + data: [ + { + x: moment().subtract(12, 'months').day(1).toDate(), + y: 20.21 + }, + { + x: moment().subtract(12, 'months').day(4).toDate(), + y: 17.49 + }, + { + x: moment().subtract(12, 'months').day(7).toDate(), + y: 16.54 + }, + { + x: moment().subtract(12, 'months').day(10).toDate(), + y: 19.00 + }, + { + x: moment().subtract(12, 'months').day(13).toDate(), + y: 16.47 + }, + { + x: moment().subtract(12, 'months').day(16).toDate(), + y: 13.15 + }, + { + x: moment().subtract(12, 'months').day(19).toDate(), + y: 18.07 + }, + { + x: moment().subtract(12, 'months').day(22).toDate(), + y: 17.93 + }, + { + x: moment().subtract(12, 'months').day(25).toDate(), + y: 18.92 + }, + { + x: moment().subtract(12, 'months').day(28).toDate(), + y: 18.46 + }, + { + x: moment().subtract(11, 'months').day(1).toDate(), + y: 18.04 + }, + { + x: moment().subtract(11, 'months').day(4).toDate(), + y: 17.78 + }, + { + x: moment().subtract(11, 'months').day(7).toDate(), + y: 20.15 + }, + { + x: moment().subtract(11, 'months').day(10).toDate(), + y: 18.92 + }, + { + x: moment().subtract(11, 'months').day(13).toDate(), + y: 17.08 + }, + { + x: moment().subtract(11, 'months').day(16).toDate(), + y: 17.11 + }, + { + x: moment().subtract(11, 'months').day(19).toDate(), + y: 15.70 + }, + { + x: moment().subtract(11, 'months').day(22).toDate(), + y: 15.07 + }, + { + x: moment().subtract(11, 'months').day(25).toDate(), + y: 14.51 + }, + { + x: moment().subtract(11, 'months').day(28).toDate(), + y: 15.22 + }, + { + x: moment().subtract(10, 'months').day(1).toDate(), + y: 19.77 + }, + { + x: moment().subtract(10, 'months').day(4).toDate(), + y: 23.67 + }, + { + x: moment().subtract(10, 'months').day(7).toDate(), + y: 27.98 + }, + { + x: moment().subtract(10, 'months').day(10).toDate(), + y: 30.80 + }, + { + x: moment().subtract(10, 'months').day(13).toDate(), + y: 28.56 + }, + { + x: moment().subtract(10, 'months').day(16).toDate(), + y: 27.45 + }, + { + x: moment().subtract(10, 'months').day(19).toDate(), + y: 27.50 + }, + { + x: moment().subtract(10, 'months').day(22).toDate(), + y: 27.28 + }, + { + x: moment().subtract(10, 'months').day(25).toDate(), + y: 24.36 + }, + { + x: moment().subtract(10, 'months').day(28).toDate(), + y: 22.89 + }, + { + x: moment().subtract(9, 'months').day(1).toDate(), + y: 28.04 + }, + { + x: moment().subtract(9, 'months').day(4).toDate(), + y: 27.77 + }, + { + x: moment().subtract(9, 'months').day(7).toDate(), + y: 30.24 + }, + { + x: moment().subtract(9, 'months').day(10).toDate(), + y: 26.57 + }, + { + x: moment().subtract(9, 'months').day(13).toDate(), + y: 22.18 + }, + { + x: moment().subtract(9, 'months').day(16).toDate(), + y: 19.64 + }, + { + x: moment().subtract(9, 'months').day(19).toDate(), + y: 16.74 + }, + { + x: moment().subtract(9, 'months').day(22).toDate(), + y: 17.21 + }, + { + x: moment().subtract(9, 'months').day(25).toDate(), + y: 20.05 + }, + { + x: moment().subtract(9, 'months').day(28).toDate(), + y: 16.13 + }, + { + x: moment().subtract(8, 'months').day(1).toDate(), + y: 10.71 + }, + { + x: moment().subtract(8, 'months').day(4).toDate(), + y: 7.99 + }, + { + x: moment().subtract(8, 'months').day(7).toDate(), + y: 11.33 + }, + { + x: moment().subtract(8, 'months').day(10).toDate(), + y: 15.36 + }, + { + x: moment().subtract(8, 'months').day(13).toDate(), + y: 20.16 + }, + { + x: moment().subtract(8, 'months').day(16).toDate(), + y: 22.56 + }, + { + x: moment().subtract(8, 'months').day(19).toDate(), + y: 19.34 + }, + { + x: moment().subtract(8, 'months').day(22).toDate(), + y: 18.32 + }, + { + x: moment().subtract(8, 'months').day(25).toDate(), + y: 20.75 + }, + { + x: moment().subtract(8, 'months').day(28).toDate(), + y: 17.09 + }, + { + x: moment().subtract(7, 'months').day(1).toDate(), + y: 18.31 + }, + { + x: moment().subtract(7, 'months').day(4).toDate(), + y: 14.34 + }, + { + x: moment().subtract(7, 'months').day(7).toDate(), + y: 9.93 + }, + { + x: moment().subtract(7, 'months').day(10).toDate(), + y: 10.64 + }, + { + x: moment().subtract(7, 'months').day(13).toDate(), + y: 6.18 + }, + { + x: moment().subtract(7, 'months').day(16).toDate(), + y: 10.32 + }, + { + x: moment().subtract(7, 'months').day(19).toDate(), + y: 12.80 + }, + { + x: moment().subtract(7, 'months').day(22).toDate(), + y: 13.44 + }, + { + x: moment().subtract(7, 'months').day(25).toDate(), + y: 18.35 + }, + { + x: moment().subtract(7, 'months').day(28).toDate(), + y: 22.87 + }, + { + x: moment().subtract(6, 'months').day(1).toDate(), + y: 26.92 + }, + { + x: moment().subtract(6, 'months').day(4).toDate(), + y: 22.50 + }, + { + x: moment().subtract(6, 'months').day(7).toDate(), + y: 18.14 + }, + { + x: moment().subtract(6, 'months').day(10).toDate(), + y: 19.06 + }, + { + x: moment().subtract(6, 'months').day(13).toDate(), + y: 19.73 + }, + { + x: moment().subtract(6, 'months').day(16).toDate(), + y: 18.82 + }, + { + x: moment().subtract(6, 'months').day(19).toDate(), + y: 23.33 + }, + { + x: moment().subtract(6, 'months').day(22).toDate(), + y: 20.48 + }, + { + x: moment().subtract(6, 'months').day(25).toDate(), + y: 25.47 + }, + { + x: moment().subtract(6, 'months').day(28).toDate(), + y: 28.84 + }, + { + x: moment().subtract(5, 'months').day(1).toDate(), + y: 27.71 + }, + { + x: moment().subtract(5, 'months').day(4).toDate(), + y: 25.22 + }, + { + x: moment().subtract(5, 'months').day(7).toDate(), + y: 25.43 + }, + { + x: moment().subtract(5, 'months').day(10).toDate(), + y: 24.13 + }, + { + x: moment().subtract(5, 'months').day(13).toDate(), + y: 20.02 + }, + { + x: moment().subtract(5, 'months').day(16).toDate(), + y: 18.38 + }, + { + x: moment().subtract(5, 'months').day(19).toDate(), + y: 18.30 + }, + { + x: moment().subtract(5, 'months').day(22).toDate(), + y: 18.72 + }, + { + x: moment().subtract(5, 'months').day(25).toDate(), + y: 22.46 + }, + { + x: moment().subtract(5, 'months').day(28).toDate(), + y: 21.71 + }, + { + x: moment().subtract(4, 'months').day(1).toDate(), + y: 29.88 + }, + { + x: moment().subtract(4, 'months').day(4).toDate(), + y: 26.94 + }, + { + x: moment().subtract(4, 'months').day(7).toDate(), + y: 28.06 + }, + { + x: moment().subtract(4, 'months').day(10).toDate(), + y: 30.40 + }, + { + x: moment().subtract(4, 'months').day(13).toDate(), + y: 28.98 + }, + { + x: moment().subtract(4, 'months').day(16).toDate(), + y: 30.13 + }, + { + x: moment().subtract(4, 'months').day(19).toDate(), + y: 27.60 + }, + { + x: moment().subtract(4, 'months').day(22).toDate(), + y: 30.21 + }, + { + x: moment().subtract(4, 'months').day(25).toDate(), + y: 26.88 + }, + { + x: moment().subtract(4, 'months').day(28).toDate(), + y: 25.72 + }, + { + x: moment().subtract(3, 'months').day(1).toDate(), + y: 27.89 + }, + { + x: moment().subtract(3, 'months').day(4).toDate(), + y: 30.69 + }, + { + x: moment().subtract(3, 'months').day(7).toDate(), + y: 31.42 + }, + { + x: moment().subtract(3, 'months').day(10).toDate(), + y: 36.14 + }, + { + x: moment().subtract(3, 'months').day(13).toDate(), + y: 32.02 + }, + { + x: moment().subtract(3, 'months').day(16).toDate(), + y: 27.30 + }, + { + x: moment().subtract(3, 'months').day(19).toDate(), + y: 29.51 + }, + { + x: moment().subtract(3, 'months').day(22).toDate(), + y: 32.67 + }, + { + x: moment().subtract(3, 'months').day(25).toDate(), + y: 28.82 + }, + { + x: moment().subtract(3, 'months').day(28).toDate(), + y: 28.85 + }, + { + x: moment().subtract(2, 'months').day(1).toDate(), + y: 29.15 + }, + { + x: moment().subtract(2, 'months').day(4).toDate(), + y: 27.90 + }, + { + x: moment().subtract(2, 'months').day(7).toDate(), + y: 30.71 + }, + { + x: moment().subtract(2, 'months').day(10).toDate(), + y: 28.02 + }, + { + x: moment().subtract(2, 'months').day(13).toDate(), + y: 23.82 + }, + { + x: moment().subtract(2, 'months').day(16).toDate(), + y: 18.83 + }, + { + x: moment().subtract(2, 'months').day(19).toDate(), + y: 14.48 + }, + { + x: moment().subtract(2, 'months').day(22).toDate(), + y: 11.76 + }, + { + x: moment().subtract(2, 'months').day(25).toDate(), + y: 12.75 + }, + { + x: moment().subtract(2, 'months').day(28).toDate(), + y: 11.36 + }, + { + x: moment().subtract(1, 'months').day(1).toDate(), + y: 11.60 + }, + { + x: moment().subtract(1, 'months').day(4).toDate(), + y: 15.24 + }, + { + x: moment().subtract(1, 'months').day(7).toDate(), + y: 13.05 + }, + { + x: moment().subtract(1, 'months').day(10).toDate(), + y: 17.25 + }, + { + x: moment().subtract(1, 'months').day(13).toDate(), + y: 18.50 + }, + { + x: moment().subtract(1, 'months').day(16).toDate(), + y: 23.04 + }, + { + x: moment().subtract(1, 'months').day(19).toDate(), + y: 21.87 + }, + { + x: moment().subtract(1, 'months').day(22).toDate(), + y: 25.97 + }, + { + x: moment().subtract(1, 'months').day(25).toDate(), + y: 22.46 + }, + { + x: moment().subtract(1, 'months').day(28).toDate(), + y: 17.67 + } + ] + } + ] + }, + budget : { + expenses : 11763.34, + expensesLimit: 20000, + savings : 10974.12, + savingsGoal : 250000, + bills : 1789.22, + billsLimit : 1000 + }, + previousStatement : { + status : 'paid', + date : moment().startOf('day').subtract(15, 'days').format('LL'), + limit : 34500, + spent : 27221.21, + minimum: 7331.94 + }, + currentStatement : { + status : 'pending', + date : moment().startOf('day').subtract(15, 'days').add(1, 'month').format('LL'), + limit : 34500, + spent : 39819.41, + minimum: 9112.51 + }, + recentTransactions: [ + { + id : '1b6fd296-bc6a-4d45-bf4f-e45519a58cf5', + transactionId: '528651571NT', + name : 'Morgan Page', + amount : +1358.75, + status : 'completed', + date : '2019-10-07T22:22:37.274Z' + }, + { + id : '2dec6074-98bd-4623-9526-6480e4776569', + transactionId: '421436904YT', + name : 'Nita Hebert', + amount : -1042.82, + status : 'completed', + date : '2019-12-18T14:51:24.461Z' + }, + { + id : 'ae7c065f-4197-4021-a799-7a221822ad1d', + transactionId: '685377421YT', + name : 'Marsha Chambers', + amount : +1828.16, + status : 'pending', + date : '2019-12-25T17:52:14.304Z' + }, + { + id : '0c43dd40-74f6-49d5-848a-57a4a45772ab', + transactionId: '884960091RT', + name : 'Charmaine Jackson', + amount : +1647.55, + status : 'completed', + date : '2019-11-29T06:32:16.111Z' + }, + { + id : 'e5c9f0ed-a64c-4bfe-a113-29f80b4e162c', + transactionId: '361402213NT', + name : 'Maura Carey', + amount : -927.43, + status : 'completed', + date : '2019-11-24T12:13:23.064Z' + } + ] +}; diff --git a/src/app/mock-api/index.ts b/src/app/mock-api/index.ts index 35e24b7d..0673b048 100644 --- a/src/app/mock-api/index.ts +++ b/src/app/mock-api/index.ts @@ -5,8 +5,10 @@ import { AuthMockApi } from 'app/mock-api/common/auth/api'; import { CalendarMockApi } from 'app/mock-api/apps/calendar/api'; import { ChatMockApi } from 'app/mock-api/apps/chat/api'; import { ContactsMockApi } from 'app/mock-api/apps/contacts/api'; +import { CryptoMockApi } from 'app/mock-api/dashboards/crypto/api'; import { ECommerceInventoryMockApi } from 'app/mock-api/apps/ecommerce/inventory/api'; import { FileManagerMockApi } from 'app/mock-api/apps/file-manager/api'; +import { FinanceMockApi } from 'app/mock-api/dashboards/finance/api'; import { HelpCenterMockApi } from 'app/mock-api/apps/help-center/api'; import { IconsMockApi } from 'app/mock-api/ui/icons/api'; import { MailboxMockApi } from 'app/mock-api/apps/mailbox/api'; @@ -29,8 +31,10 @@ export const mockApiServices = [ CalendarMockApi, ChatMockApi, ContactsMockApi, + CryptoMockApi, ECommerceInventoryMockApi, FileManagerMockApi, + FinanceMockApi, HelpCenterMockApi, IconsMockApi, MailboxMockApi, diff --git a/src/app/modules/admin/dashboards/crypto/crypto.component.html b/src/app/modules/admin/dashboards/crypto/crypto.component.html new file mode 100644 index 00000000..530599fd --- /dev/null +++ b/src/app/modules/admin/dashboards/crypto/crypto.component.html @@ -0,0 +1,277 @@ +
+ + + + + + +
+ + +
+
+
+
+
{{item.title}}
+
({{item.iso}})
+
+
+
+ {{item.amount | currency:'USD':'symbol':'1.2-4'}} +
+ +
+ {{item.trend.amount}}% +
+
+
+ +
+
+ + +
+ + +
+ + Action + + + + + + + + + + Buy + Sell + + +
+ + +
+ + Wallet + + + + {{walletSelector.triggerValue}} + - + + {{data.wallets[walletSelector.value]}} + {{walletSelector.value | uppercase}} + + + + Bitcoin + Ethereum + Bitcoin Cash + XRP + + + USD: + + {{data.wallets[walletSelector.value] * data.prices[walletSelector.value] | currency:'USD'}} + + + +
+ + +
+ + Amount + + + {{walletSelector.value | uppercase}} + USD + + + $ + + + + It will cost: + + {{buyAmount.value * data.prices[walletSelector.value] | currency:'USD':'symbol':'1.2-4'}} + + + + You will receive: + + {{buyAmount.value / data.prices[walletSelector.value] | number:'1.2-6'}} {{walletSelector.value | uppercase}} + + + + + +
+ + +
+ + Amount + + + {{walletSelector.value | uppercase}} + USD + + + $ + + + + You will receive: + + {{sellAmount.value * data.prices[walletSelector.value] | currency:'USD':'symbol':'1.2-4'}} + + + + You will sell: + + {{sellAmount.value / data.prices[walletSelector.value] | number:'1.2-6'}} {{walletSelector.value | uppercase}} + + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+
+
Bitcoin
+
(BTC)
+
+
+
{{data.btc.amount | currency:'USD':'symbol':'1.2-2'}}
+ +
+ {{data.btc.trend.amount}}% +
+
+
+ +
+
+ +
+
+ +
+ +
+ +
diff --git a/src/app/modules/admin/dashboards/crypto/crypto.component.ts b/src/app/modules/admin/dashboards/crypto/crypto.component.ts new file mode 100644 index 00000000..2c4b494a --- /dev/null +++ b/src/app/modules/admin/dashboards/crypto/crypto.component.ts @@ -0,0 +1,238 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import * as moment from 'moment'; +import { ApexOptions, ChartComponent } from 'ng-apexcharts'; +import { FuseMediaWatcherService } from '@fuse/services/media-watcher'; +import { CryptoService } from 'app/modules/admin/dashboards/crypto/crypto.service'; + +@Component({ + selector : 'crypto', + templateUrl : './crypto.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class CryptoComponent implements OnInit, OnDestroy +{ + @ViewChild('btcChartComponent') btcChartComponent: ChartComponent; + appConfig: any; + btcOptions: ApexOptions = {}; + data: any; + drawerMode: 'over' | 'side' = 'side'; + drawerOpened: boolean = true; + watchlistChartOptions: ApexOptions = {}; + private _unsubscribeAll: Subject = new Subject(); + + /** + * Constructor + */ + constructor( + private _cryptoService: CryptoService, + private _changeDetectorRef: ChangeDetectorRef, + private _fuseMediaWatcherService: FuseMediaWatcherService + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + // Subscribe to media changes + this._fuseMediaWatcherService.onMediaChange$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe(({matchingAliases}) => { + + // Set the drawerMode and drawerOpened if 'lg' breakpoint is active + if ( matchingAliases.includes('lg') ) + { + this.drawerMode = 'side'; + this.drawerOpened = true; + } + else + { + this.drawerMode = 'over'; + this.drawerOpened = false; + } + + // Mark for check + this._changeDetectorRef.markForCheck(); + }); + + // Get the data + this._cryptoService.data$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((data) => { + + // Store the data + this.data = data; + + // Prepare the chart data + this._prepareChartData(); + }); + } + + /** + * On destroy + */ + ngOnDestroy(): void + { + // Unsubscribe from all subscriptions + this._unsubscribeAll.next(); + this._unsubscribeAll.complete(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Private methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Prepare the chart data from the data + * + * @private + */ + private _prepareChartData(): void + { + // BTC + this.btcOptions = { + chart : { + animations: { + enabled: false + }, + fontFamily: 'inherit', + foreColor : 'inherit', + width : '100%', + height : '100%', + type : 'line', + toolbar : { + show: false + }, + zoom : { + enabled: false + } + }, + colors : ['#5A67D8'], + dataLabels: { + enabled: false + }, + grid : { + borderColor : 'var(--fuse-border)', + position : 'back', + show : true, + strokeDashArray: 6, + xaxis : { + lines: { + show: true + } + }, + yaxis : { + lines: { + show: true + } + } + }, + legend : { + show: false + }, + series : this.data.btc.price.series, + stroke : { + width: 2, + curve: 'straight' + }, + tooltip : { + shared: true, + theme : 'dark', + y : { + formatter: (value: number): string => '$' + value.toFixed(2) + } + }, + xaxis : { + type : 'numeric', + crosshairs: { + show : true, + position: 'back', + fill : { + type : 'color', + color: 'var(--fuse-border)' + }, + width : 3, + stroke : { + dashArray: 0, + width : 0 + }, + opacity : 0.9 + }, + tickAmount: 8, + axisTicks : { + show : true, + color: 'var(--fuse-border)' + }, + axisBorder: { + show: false + }, + tooltip : { + enabled: false + }, + labels : { + show : true, + trim : false, + rotate : 0, + minHeight : 40, + hideOverlappingLabels: true, + formatter : (value): string => moment().subtract(Math.abs(parseInt(value, 10)), 'minutes').format('HH:mm'), + style : { + colors: 'currentColor' + } + } + }, + yaxis : { + axisTicks : { + show : true, + color: 'var(--fuse-border)' + }, + axisBorder : { + show: false + }, + forceNiceScale: true, + labels : { + minWidth : 40, + formatter: (value: number): string => '$' + value.toFixed(0), + style : { + colors: 'currentColor' + } + } + } + }; + + // Watchlist options + this.watchlistChartOptions = { + chart : { + animations: { + enabled: false + }, + width : '100%', + height : '100%', + type : 'line', + sparkline : { + enabled: true + } + }, + colors : ['#A0AEC0'], + stroke : { + width: 2, + curve: 'smooth' + }, + tooltip: { + enabled: false + }, + xaxis : { + type: 'category' + } + }; + } +} diff --git a/src/app/modules/admin/dashboards/crypto/crypto.module.ts b/src/app/modules/admin/dashboards/crypto/crypto.module.ts new file mode 100644 index 00000000..902320b1 --- /dev/null +++ b/src/app/modules/admin/dashboards/crypto/crypto.module.ts @@ -0,0 +1,42 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { MatButtonModule } from '@angular/material/button'; +import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatSelectModule } from '@angular/material/select'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatSortModule } from '@angular/material/sort'; +import { MatTableModule } from '@angular/material/table'; +import { MatTabsModule } from '@angular/material/tabs'; +import { NgApexchartsModule } from 'ng-apexcharts'; +import { SharedModule } from 'app/shared/shared.module'; +import { CryptoComponent } from 'app/modules/admin/dashboards/crypto/crypto.component'; +import { cryptoRoutes } from 'app/modules/admin/dashboards/crypto/crypto.routing'; + +@NgModule({ + declarations: [ + CryptoComponent + ], + imports : [ + RouterModule.forChild(cryptoRoutes), + MatButtonModule, + MatButtonToggleModule, + MatFormFieldModule, + MatIconModule, + MatInputModule, + MatMenuModule, + MatSelectModule, + MatSidenavModule, + MatSortModule, + MatTableModule, + MatTabsModule, + NgApexchartsModule, + SharedModule + ] +}) +export class CryptoModule +{ +} diff --git a/src/app/modules/admin/dashboards/crypto/crypto.resolvers.ts b/src/app/modules/admin/dashboards/crypto/crypto.resolvers.ts new file mode 100644 index 00000000..65184929 --- /dev/null +++ b/src/app/modules/admin/dashboards/crypto/crypto.resolvers.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs'; +import { CryptoService } from 'app/modules/admin/dashboards/crypto/crypto.service'; + +@Injectable({ + providedIn: 'root' +}) +export class CryptoResolver implements Resolve +{ + /** + * Constructor + */ + constructor(private _cryptoService: CryptoService) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resolver + * + * @param route + * @param state + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable + { + return this._cryptoService.getData(); + } +} diff --git a/src/app/modules/admin/dashboards/crypto/crypto.routing.ts b/src/app/modules/admin/dashboards/crypto/crypto.routing.ts new file mode 100644 index 00000000..c248684e --- /dev/null +++ b/src/app/modules/admin/dashboards/crypto/crypto.routing.ts @@ -0,0 +1,13 @@ +import { Route } from '@angular/router'; +import { CryptoComponent } from 'app/modules/admin/dashboards/crypto/crypto.component'; +import { CryptoResolver } from 'app/modules/admin/dashboards/crypto/crypto.resolvers'; + +export const cryptoRoutes: Route[] = [ + { + path : '', + component: CryptoComponent, + resolve : { + data: CryptoResolver + } + } +]; diff --git a/src/app/modules/admin/dashboards/crypto/crypto.service.ts b/src/app/modules/admin/dashboards/crypto/crypto.service.ts new file mode 100644 index 00000000..8908c2bc --- /dev/null +++ b/src/app/modules/admin/dashboards/crypto/crypto.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root' +}) +export class CryptoService +{ + private _data: BehaviorSubject = new BehaviorSubject(null); + + /** + * Constructor + */ + constructor(private _httpClient: HttpClient) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Accessors + // ----------------------------------------------------------------------------------------------------- + + /** + * Getter for data + */ + get data$(): Observable + { + return this._data.asObservable(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Get data + */ + getData(): Observable + { + return this._httpClient.get('api/dashboards/crypto').pipe( + tap((response: any) => { + this._data.next(response); + }) + ); + } +} diff --git a/src/app/modules/admin/dashboards/finance/finance.component.html b/src/app/modules/admin/dashboards/finance/finance.component.html new file mode 100644 index 00000000..ca7a9123 --- /dev/null +++ b/src/app/modules/admin/dashboards/finance/finance.component.html @@ -0,0 +1,526 @@ +
+ +
+ + +
+
+

Finance dashboard

+
Keep track of your financial status
+
+
+ + + + + +
+ + + + + + +
+
+
+ +
+
+ +
+
+ +
+
+
+
Previous Statement
+
+ Paid on {{data.previousStatement.date}} +
+
+
+ + + + + + + + + +
+
+
+
+
Card Limit
+
{{data.previousStatement.limit | currency:'USD'}}
+
+
+
Spent
+
{{data.previousStatement.spent | currency:'USD'}}
+
+
+
Minimum
+
{{data.previousStatement.minimum | currency:'USD'}}
+
+
+
+ +
+
+ +
+
+
+
Current Statement
+
+ Must be paid before {{data.currentStatement.date}} +
+
+
+ + + + + + + + + +
+
+
+
+
Card Limit
+
{{data.currentStatement.limit | currency:'USD'}}
+
+
+
Spent
+
{{data.currentStatement.spent | currency:'USD'}}
+
+
+
Minimum
+
{{data.currentStatement.minimum | currency:'USD'}}
+
+
+
+
+ +
+
+
+
+
Account Balance
+
Monthly balance growth and avg. monthly income
+
+
+ + + + + + + +
+
+
+
+
{{data.accountBalance.growRate}}%
+
Average Monthly Growth
+
+
+
{{data.accountBalance.ami | currency:'USD'}}
+
Average Monthly Income
+
+
+
+
+ +
+
+
+ +
+ +
+
+
Recent transactions
+
1 pending, 4 completed
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Transaction ID + + + {{transaction.transactionId}} + + + Date + + + {{transaction.date | date:'MMM dd, y'}} + + + Name + + + {{transaction.name}} + + + Amount + + + {{transaction.amount | currency:'USD'}} + + + Status + + + {{transaction.status}} + + + +
+
+
+ + +
+
+
+
Budget
+
Monthly budget summary
+
+
+ + + + + + + + + +
+
+
+ Last month; you had 223 expense transactions, 12 savings entries and 4 bills. +
+
+
+
+
+ +
+
+
Expenses
+
{{data.budget.expenses | currency:'USD'}}
+ +
+
+
2.6%
+ +
+
+
+
+
+
+ +
+
+
Savings
+
{{data.budget.savings | currency:'USD'}}
+ +
+
+
12.7%
+ +
+
+
+
+
+
+ +
+
+
Bills
+
{{data.budget.bills | currency:'USD'}}
+ +
+
+
105.7%
+ +
+
+
Exceeded your personal limit! Be careful next month.
+
+
+
+ +
+
+
+ +
+ +
diff --git a/src/app/modules/admin/dashboards/finance/finance.component.ts b/src/app/modules/admin/dashboards/finance/finance.component.ts new file mode 100644 index 00000000..e7f479cb --- /dev/null +++ b/src/app/modules/admin/dashboards/finance/finance.component.ts @@ -0,0 +1,146 @@ +import { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { ApexOptions } from 'ng-apexcharts'; +import { FinanceService } from 'app/modules/admin/dashboards/finance/finance.service'; + +@Component({ + selector : 'finance', + templateUrl : './finance.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class FinanceComponent implements OnInit, AfterViewInit, OnDestroy +{ + @ViewChild('recentTransactionsTable', {read: MatSort}) recentTransactionsTableMatSort: MatSort; + + data: any; + accountBalanceOptions: ApexOptions; + recentTransactionsDataSource: MatTableDataSource = new MatTableDataSource(); + recentTransactionsTableColumns: string[] = ['transactionId', 'date', 'name', 'amount', 'status']; + private _unsubscribeAll: Subject = new Subject(); + + /** + * Constructor + */ + constructor(private _financeService: FinanceService) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + // Get the data + this._financeService.data$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((data) => { + + // Store the data + this.data = data; + + // Store the table data + this.recentTransactionsDataSource.data = data.recentTransactions; + + // Prepare the chart data + this._prepareChartData(); + }); + } + + /** + * After view init + */ + ngAfterViewInit(): void + { + // Make the data source sortable + this.recentTransactionsDataSource.sort = this.recentTransactionsTableMatSort; + } + + /** + * On destroy + */ + ngOnDestroy(): void + { + // Unsubscribe from all subscriptions + this._unsubscribeAll.next(); + this._unsubscribeAll.complete(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Track by function for ngFor loops + * + * @param index + * @param item + */ + trackByFn(index: number, item: any): any + { + return item.id || index; + } + + // ----------------------------------------------------------------------------------------------------- + // @ Private methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Prepare the chart data from the data + * + * @private + */ + private _prepareChartData(): void + { + // Account balance + this.accountBalanceOptions = { + chart : { + animations: { + speed : 400, + animateGradually: { + enabled: false + } + }, + fontFamily: 'inherit', + foreColor : 'inherit', + width : '100%', + height : '100%', + type : 'area', + sparkline : { + enabled: true + } + }, + colors : ['#A3BFFA', '#667EEA'], + fill : { + colors : ['#CED9FB', '#AECDFD'], + opacity: 0.5, + type : 'solid' + }, + series : this.data.accountBalance.series, + stroke : { + curve: 'straight', + width: 2 + }, + tooltip: { + followCursor: true, + theme : 'dark', + x : { + format: 'MMM dd, yyyy' + }, + y : { + formatter: (value): string => value + '%' + } + }, + xaxis : { + type: 'datetime' + } + }; + } +} diff --git a/src/app/modules/admin/dashboards/finance/finance.module.ts b/src/app/modules/admin/dashboards/finance/finance.module.ts new file mode 100644 index 00000000..f3275204 --- /dev/null +++ b/src/app/modules/admin/dashboards/finance/finance.module.ts @@ -0,0 +1,34 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { MatButtonModule } from '@angular/material/button'; +import { MatDividerModule } from '@angular/material/divider'; +import { MatIconModule } from '@angular/material/icon'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatSortModule } from '@angular/material/sort'; +import { MatTableModule } from '@angular/material/table'; +import { NgApexchartsModule } from 'ng-apexcharts'; +import { SharedModule } from 'app/shared/shared.module'; +import { FinanceComponent } from 'app/modules/admin/dashboards/finance/finance.component'; +import { financeRoutes } from 'app/modules/admin/dashboards/finance/finance.routing'; + +@NgModule({ + declarations: [ + FinanceComponent + ], + imports : [ + RouterModule.forChild(financeRoutes), + MatButtonModule, + MatDividerModule, + MatIconModule, + MatMenuModule, + MatProgressBarModule, + MatSortModule, + MatTableModule, + NgApexchartsModule, + SharedModule + ] +}) +export class FinanceModule +{ +} diff --git a/src/app/modules/admin/dashboards/finance/finance.resolvers.ts b/src/app/modules/admin/dashboards/finance/finance.resolvers.ts new file mode 100644 index 00000000..f2505cbc --- /dev/null +++ b/src/app/modules/admin/dashboards/finance/finance.resolvers.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs'; +import { FinanceService } from 'app/modules/admin/dashboards/finance/finance.service'; + +@Injectable({ + providedIn: 'root' +}) +export class FinanceResolver implements Resolve +{ + /** + * Constructor + */ + constructor(private _financeService: FinanceService) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resolver + * + * @param route + * @param state + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable + { + return this._financeService.getData(); + } +} diff --git a/src/app/modules/admin/dashboards/finance/finance.routing.ts b/src/app/modules/admin/dashboards/finance/finance.routing.ts new file mode 100644 index 00000000..2a731558 --- /dev/null +++ b/src/app/modules/admin/dashboards/finance/finance.routing.ts @@ -0,0 +1,13 @@ +import { Route } from '@angular/router'; +import { FinanceComponent } from 'app/modules/admin/dashboards/finance/finance.component'; +import { FinanceResolver } from 'app/modules/admin/dashboards/finance/finance.resolvers'; + +export const financeRoutes: Route[] = [ + { + path : '', + component: FinanceComponent, + resolve : { + data: FinanceResolver + } + } +]; diff --git a/src/app/modules/admin/dashboards/finance/finance.service.ts b/src/app/modules/admin/dashboards/finance/finance.service.ts new file mode 100644 index 00000000..5e07314e --- /dev/null +++ b/src/app/modules/admin/dashboards/finance/finance.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root' +}) +export class FinanceService +{ + private _data: BehaviorSubject = new BehaviorSubject(null); + + /** + * Constructor + */ + constructor(private _httpClient: HttpClient) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Accessors + // ----------------------------------------------------------------------------------------------------- + + /** + * Getter for data + */ + get data$(): Observable + { + return this._data.asObservable(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Get data + */ + getData(): Observable + { + return this._httpClient.get('api/dashboards/finance').pipe( + tap((response: any) => { + this._data.next(response); + }) + ); + } +} From 2c90770d9bb5d2df2928240a2ab910f45b6831d4 Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 23 Jul 2021 22:26:22 +0300 Subject: [PATCH 07/10] (index) Updated the title, description and keywords --- src/index.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/index.html b/src/index.html index 4421ae93..e965ba94 100644 --- a/src/index.html +++ b/src/index.html @@ -1,15 +1,14 @@ - Fuse Angular - Material Design Admin Template + Fuse Angular - Angular Template and Starter Kit + content="Admin Template and Starter Kit with Angular, Angular Material Components and TailwindCSS"> - + content="Fuse,HTML,CSS,Angular,Angular 2,Angular 10,Angular 11,Angular 12,Material,Material 2,Angular Components,Tailwind,Tailwind CSS,TailwindCSS,Admin Template,Admin Starter Kit"> From 8fcb0aea0368c9fb82642d78cb370e49b6c36fc8 Mon Sep 17 00:00:00 2001 From: sercan Date: Thu, 29 Jul 2021 10:14:52 +0300 Subject: [PATCH 08/10] (docs) Updated the multi language guide --- .../guides/customization/multi-language/multi-language.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/modules/admin/docs/guides/customization/multi-language/multi-language.html b/src/app/modules/admin/docs/guides/customization/multi-language/multi-language.html index 596782ba..45800f7f 100644 --- a/src/app/modules/admin/docs/guides/customization/multi-language/multi-language.html +++ b/src/app/modules/admin/docs/guides/customization/multi-language/multi-language.html @@ -65,7 +65,7 @@
  1. Navigate to src/app/core/core.module.ts file and remove imports of TranslocoCoreModule
  2. Remove the src/app/core/transloco directory
  3. -
  4. Do a project wide search for <language></language> and remove all instances
  5. +
  6. Do a project wide search for <languages></languages> and remove all instances
  7. Do a project wide search for LanguageModule and remove all imports
  8. Remove the src/app/layout/common/language directory
  9. Finally navigate to the package.json file, remove the "@ngneat/transloco" from dependencies list and run npm install command
  10. From 6fff259fe3154a24660c175ea05c0d894e165924 Mon Sep 17 00:00:00 2001 From: sercan Date: Thu, 29 Jul 2021 10:15:13 +0300 Subject: [PATCH 09/10] (dependencies) Updated Angular, Angular Material and various other dependencies --- package-lock.json | 752 +++++++++++++++++++++++----------------------- package.json | 48 +-- 2 files changed, 406 insertions(+), 394 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49ebbb46..c396543f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,25 +5,25 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.1201.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.2.tgz", - "integrity": "sha512-hR5kI03WoeEY9dkAsQNLlhL1iEFC2L77ansaKquN+HCAeOGHby4w95suSlZUAg0r6ZhPhPH0tkIRZXU9NMa09g==", + "version": "0.1201.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.4.tgz", + "integrity": "sha512-hGO5NrZxV8Z7sILwokt7H+1sMf+5tJS9PJszvYlIBSzG0LBkOwwLQDb4MD42ATXFru57SXNqMZDVKoi1kTgxAw==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.2", + "@angular-devkit/core": "12.1.4", "rxjs": "6.6.7" } }, "@angular-devkit/build-angular": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.2.tgz", - "integrity": "sha512-tclYPz2fT422D7dCwAY0+NzGlWGaDbOzba4SJs4klbluzfl0vLyBq+mbKGc5HtDj8NMwvd/1yIcBiCJYEYXwiA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.4.tgz", + "integrity": "sha512-9kMdnaU2dr8o7gJpuBsEHLUpa6huF8uZQEd1+jhKfByEY/xTQo8qztvmbhFhrSfDvdYRygNHItpt3pYEoCEOig==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.2", - "@angular-devkit/build-optimizer": "0.1201.2", - "@angular-devkit/build-webpack": "0.1201.2", - "@angular-devkit/core": "12.1.2", + "@angular-devkit/architect": "0.1201.4", + "@angular-devkit/build-optimizer": "0.1201.4", + "@angular-devkit/build-webpack": "0.1201.4", + "@angular-devkit/core": "12.1.4", "@babel/core": "7.14.6", "@babel/generator": "7.14.5", "@babel/helper-annotate-as-pure": "7.14.5", @@ -35,7 +35,7 @@ "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.2", + "@ngtools/webpack": "12.1.4", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", @@ -84,7 +84,7 @@ "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.3.0", - "webpack": "5.42.0", + "webpack": "5.44.0", "webpack-dev-middleware": "5.0.0", "webpack-dev-server": "3.11.2", "webpack-merge": "5.8.0", @@ -188,6 +188,17 @@ "wcwidth": "^1.0.1" } }, + "postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -219,9 +230,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.1201.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.2.tgz", - "integrity": "sha512-ScrxpIiTbexs0iH64TeJv2NUh403X/NK/ConxDojxmQ7a2qZYXYKVm8F1d/AtUNfIPRZpWWmwoFlSmFhHGNWPw==", + "version": "0.1201.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.4.tgz", + "integrity": "sha512-Hq+mDUe4xIyq4939JZaUkptsM89WnZOk8Qel6mS0T/bxMX/qs+nuGD5o+xDKkuayogbiTrLmyZBib0/90eSXEA==", "dev": true, "requires": { "source-map": "0.7.3", @@ -238,19 +249,19 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1201.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.2.tgz", - "integrity": "sha512-dQWInUvuQ5VTBxXGQBamekF4lRkiAlp0LxybYItAnSMRs7tXfPKtILg5RpJet1hnwvP33HFnu1AhNOCeBYu2bg==", + "version": "0.1201.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.4.tgz", + "integrity": "sha512-eMmbyHyWJZMQ1tfwVdja/iAk/eXJFYrF8b27gDV9gGI7MGB3KJ93AhkbPbcvlw4Hhx4+6M11GfeXzbwH0q9pnQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.2", + "@angular-devkit/architect": "0.1201.4", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.2.tgz", - "integrity": "sha512-TeaRbvsNEeAkRJcIBlT6yUNh0vaVVBGBYfXYFIMg/I04ex/HI0ApEowu78GeTzCqlE0r4t+WaGT46m7+NIljKg==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.4.tgz", + "integrity": "sha512-KOzGD8JbP/7EeUwPiU5x+fo3ZEQ5R4IVW5WoH92PaO3mdpqXC7UL2MWLct8PUe9il9nqJMvrBMldSSvP9PCT2w==", "dev": true, "requires": { "ajv": "8.6.0", @@ -262,12 +273,12 @@ } }, "@angular-devkit/schematics": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.2.tgz", - "integrity": "sha512-/UGcAJChq+g7wf46Exr5iIyuVw3j4TxTIntTpuKg/z/xf9Y+8mzJAZgGittu/yFcHAJ9aYcOHctffrfEdV7QSA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.4.tgz", + "integrity": "sha512-yD3y3pK/K5piOgvALFoCCiPp4H8emNa3yZL+vlpEpewVLpF1MM55LeTxc0PI5s0uqtOGVnvcbA5wYgMm3YsUEA==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.2", + "@angular-devkit/core": "12.1.4", "ora": "5.4.1", "rxjs": "6.6.7" }, @@ -462,32 +473,32 @@ } }, "@angular/animations": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.2.tgz", - "integrity": "sha512-gFRObY32h33tHI60NS0A6DXKL/Y9h8Efo3s2leIsInuYdxZBb7/vlJu4i5AJWEdFZNcY6TDBxK1vi37xlLdLlQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.4.tgz", + "integrity": "sha512-6PkVF2HGwmNdG0IUUyXkxwnLdX7xVUCFldKNFap90lWTEPumO7+zcmzP4JELE6jkmHSykTZjPwlWXvuxdP+YJg==", "requires": { "tslib": "^2.2.0" } }, "@angular/cdk": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.1.2.tgz", - "integrity": "sha512-ALupZejZDsVYcbNZcEH1cV8SDgVBL40FAwDnlSZxCgd0HOBHH0ZqQV+8z0uCQeMatoNM+SwmJ8Y1JXYh9Bqfiw==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.1.4.tgz", + "integrity": "sha512-so8HP7jRNkGfdTkPmFVqyW4pj1vU0ASG1NaZMDXnin44PVjbJpaKhQsArhQ/yOmRP9XzP6TR3zHzmxszfGiaKg==", "requires": { "parse5": "^5.0.0", "tslib": "^2.2.0" } }, "@angular/cli": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.2.tgz", - "integrity": "sha512-oBJcSqXJyPzWGYft5/nD3hJhunxTGXlI4++9ehzdF/fRipOLLMqf77vi/4rUA2DGuaPMbYJeunBnIsgXRGIHIg==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.4.tgz", + "integrity": "sha512-LpyhyqWe3bFcuH3MrXeYoIPI1htjwG1b5ehETfq4qsMvNmuFON6QI+F7EWEpX7lItVQc2bES+ogasTZsZue/uw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.2", - "@angular-devkit/core": "12.1.2", - "@angular-devkit/schematics": "12.1.2", - "@schematics/angular": "12.1.2", + "@angular-devkit/architect": "0.1201.4", + "@angular-devkit/core": "12.1.4", + "@angular-devkit/schematics": "12.1.4", + "@schematics/angular": "12.1.4", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.1", @@ -639,25 +650,25 @@ } }, "@angular/common": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.2.tgz", - "integrity": "sha512-/sf8iPZwHceMD4xNH4E8qjxXWAypjxmJBlv+9OczS1pGvYATBB9CaKCJQ73c6Yks9Cqz37q1DMWK3S376YWZMQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.4.tgz", + "integrity": "sha512-cyh2m5veGgWRFsrmPnwB/Ised90bFNZAjZepvW8WXrpEUa/tmi1yWU9+8ayRG7ztE08lyXncJSSut2Ss2PEhTA==", "requires": { "tslib": "^2.2.0" } }, "@angular/compiler": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.2.tgz", - "integrity": "sha512-G0KKpV4jL/qErUN9i/tKHHIO0P6GGtoDyexz4qh4m+K7dxn5WHd9FcqbTTLHbnGg7RnfuKou3muAWhvSoPqhSw==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.4.tgz", + "integrity": "sha512-csei4YTsdwYCWhr94AtW/Q3YyILLhjGVuV/zDZKQx5kB/3ukpUD+DppbblTo+NsLSk2BfsOepGUeCDMkIl9p3w==", "requires": { "tslib": "^2.2.0" } }, "@angular/compiler-cli": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.2.tgz", - "integrity": "sha512-+29dnsU6w5CWkMOCFIUQNAKqI9y1mKT7bPNaVgqEgWWlloY5D2myE9ceBuIt7WDQhxz5kfAOSIgy6Chw1bqpMg==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.4.tgz", + "integrity": "sha512-RMEXJ92KO30waKoAha1qZHGLVyUimgisYVmaTwPlYJ534tAoilILkav8Wa4UMOJx1Dma0wTzbAqMYdghoQJXQA==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -773,57 +784,57 @@ } }, "@angular/core": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.2.tgz", - "integrity": "sha512-+JvM9fNICKMdfXpaKR0zSWMrrMCp78N1056Di2/RxLxvycm/TegjHq0IXVqpY9hMccZXjjCTl0EUNVMFZ2mkcg==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.4.tgz", + "integrity": "sha512-dG7KtW0l3jI8lapmenSu1wV/d3VOphAjDxVqWOrwh+kI0da7677cEg0Ms5YIF8Nf/++WleyNxk6AIHbDIig+Sw==", "requires": { "tslib": "^2.2.0" } }, "@angular/forms": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.2.tgz", - "integrity": "sha512-cJ8zoaQpOtjTwPc0ObH6qXM0k9MWl+8eGL3jDtf01n0ByZXWFZ+2oQHmU64rO8sJntUR8LPvbXFJRMNd0ZpdsQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.4.tgz", + "integrity": "sha512-HlPZH2HllX2/XEdAT7PkAYIEXn69KanvjxFD40++Xx5a0lMsv7HleYqRdRZYkxKUNCJljL3UqvI5sZ5CCOoVGw==", "requires": { "tslib": "^2.2.0" } }, "@angular/material": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.1.2.tgz", - "integrity": "sha512-DpqnvwnVqaudFRXTNyJR8r/gbKG4RtE3RGc6q4FgdN9SOfRh/q/yYyNnOUnbCwPgLTmkfGz+bj7++GA8gzhSkg==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.1.4.tgz", + "integrity": "sha512-lfBuk+3fxOvyIf9PknVIIC1DxYOimru06FpXq74lNcrNZcX3qCdDe/KmNbR50Wy0aEC4cOPXxJuPqm7wT8z2vg==", "requires": { "tslib": "^2.2.0" } }, "@angular/material-moment-adapter": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-12.1.2.tgz", - "integrity": "sha512-Y3v1nqOB7pMS+oWpjyp8n/34bgTnXM8ydGLs6OfoY9ALpEjbJYSEzFBLQEvnYBppHFwJbIn3VNHmo1hulmdlMA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-12.1.4.tgz", + "integrity": "sha512-kSpS3M5YBZ6/DricGWIxP36gjTWh3x4GOKXS7u/arEqEive61ddbaQKIwaNVvPpGsQ+TxqWWnPgj9ElxfsTBYQ==", "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.2.tgz", - "integrity": "sha512-QDtRZQDn0yrcuNoxDLrawCG8Pe5DdhJFy4tmMEpUYBpFZT+9qsRf5RD01QbzvbDKxwxgsce/783WZoPImMqaIA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.4.tgz", + "integrity": "sha512-klJbU75lUGgwZkgyXsHU47JuYh8c7prukw7MIWLw7liHXPK//bLj8kOfKwifSIJ0xzDg9UfdNSGCQqGP5N0SaQ==", "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser-dynamic": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.2.tgz", - "integrity": "sha512-y7O2vu6p2shnO2kKoyaIjsQP1seg73ky3ORur2oaLTIfa1Uxeho2Ow0V6O0RUL230ol4qGetL64TMK7SjyoPhQ==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.4.tgz", + "integrity": "sha512-gEE7F45y+mExb9Bib9SQkWQICHHxbo884AhCw4ZcHWWv2aJl1Y09Rhp+ZE542wjoFFpB2o+BXguc3PcnXB/3Ww==", "requires": { "tslib": "^2.2.0" } }, "@angular/router": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.2.tgz", - "integrity": "sha512-iYf8c5HMdchHiEhZ01HCXyZjUmxUWI+es17V/GnsR1+S1NeF3TeYhGf3X2wdhVDvPfxq/4kZZRSddM0PAm0Lfw==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.4.tgz", + "integrity": "sha512-wbw/w1yM/GiCnQPykQ7rHkywqQA5LPF5/MRa4Khi7BcpJXgutG9h/40HREsQzzYY46+qhXmST8A3E5PNgURsbw==", "requires": { "tslib": "^2.2.0" } @@ -938,14 +949,14 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", + "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.7", "@babel/helper-optimise-call-expression": "^7.14.5", "@babel/helper-replace-supers": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5" @@ -1973,20 +1984,20 @@ "dev": true }, "@es-joy/jsdoccomment": { - "version": "0.9.0-alpha.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz", - "integrity": "sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.7.tgz", + "integrity": "sha512-aNKZEoMESDzOBjKxCWrFuG50mcpMeKVBnBNko4+IZZ5t9zXYs8GT1KB0ZaOq1YUsKumDRc6YII/TQm309MJ0KQ==", "dev": true, "requires": { - "comment-parser": "1.1.6-beta.0", + "comment-parser": "1.2.3", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "1.0.4" + "jsdoc-type-pratt-parser": "1.1.1" } }, "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -2088,15 +2099,6 @@ "@fullcalendar/daygrid": "~4.4.0" } }, - "@fullhuman/postcss-purgecss": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.0.3.tgz", - "integrity": "sha512-/EnQ9UDWGGqHkn1UKAwSgh+gJHPKmD+Z+5dQ4gWT4qq2NUyez3zqAfZNwFH3eSgmgO+wjTXfhlLchx2M9/K+7Q==", - "dev": true, - "requires": { - "purgecss": "^4.0.3" - } - }, "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -2170,9 +2172,9 @@ } }, "@ngtools/webpack": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.2.tgz", - "integrity": "sha512-7anwzgkVz3A6QV7IdtiqYrFRXwjO4jQHYk02EpVA+m6Pk7skpz6MjHpgJqSGUm27z1RRyR9zaLjJ/Zlaot60DA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.4.tgz", + "integrity": "sha512-hXc8dTnRfDB7o1Pd7a07aw0rjGmVLXU28+cTHQJliosgD3obcjfZ4QPA0k97vlQMtqVJawuShRfyiUKrpsJf8Q==", "dev": true, "requires": { "enhanced-resolve": "5.8.2" @@ -2425,13 +2427,13 @@ } }, "@schematics/angular": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.2.tgz", - "integrity": "sha512-nnFPp9uHLinP05r9TFsWT+fwlbwbLHg3yzJr+0aIOX1OsZQFV8hblEFEqdzFQJyx1uGMp4nvBHvCUlYv9GVQLg==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.4.tgz", + "integrity": "sha512-xGqgGI6GWk4EFdKis8FmSESxoLgjnLQbaRE1t1KZCkSKJzqkOj0R9wiDrtZfcrbPxIkLL+3fAk2ThwwPznT6yw==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.2", - "@angular-devkit/schematics": "12.1.2", + "@angular-devkit/core": "12.1.4", + "@angular-devkit/schematics": "12.1.4", "jsonc-parser": "3.0.0" } }, @@ -2522,9 +2524,9 @@ } }, "@types/estree": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", - "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "@types/glob": { @@ -2547,9 +2549,9 @@ } }, "@types/jasmine": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.8.1.tgz", - "integrity": "sha512-ioRNoJvv0eXL1c9BZKpnywZWb5YflhaSiF3IOp9deyoh30MOwkB3bNuzi4UW76EFEhcmqpoEpdWhcUAAilomTw==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.8.2.tgz", + "integrity": "sha512-u5h7dqzy2XpXTzhOzSNQUQpKGFvROF8ElNX9P/TJvsHnTg/JvsAseVsGWQAQQldqanYaM+5kwxW909BBFAUYsg==", "dev": true }, "@types/json-schema": { @@ -2591,9 +2593,9 @@ "dev": true }, "@types/node": { - "version": "12.20.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.16.tgz", - "integrity": "sha512-6CLxw83vQf6DKqXxMPwl8qpF8I7THFZuIwLt4TnNsumxkp1VsRZWT8txQxncT/Rl2UojTsFzWgDG4FRMwafrlA==", + "version": "12.20.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.17.tgz", + "integrity": "sha512-so8EHl4S6MmatPS0f9sE1ND94/ocbcEshW5OpyYthRqeRpiYyW2uXYTo/84kmfdfeNrDycARkvuiXl6nO40NGg==", "dev": true }, "@types/parse-json": { @@ -2627,13 +2629,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz", - "integrity": "sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz", + "integrity": "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.28.3", - "@typescript-eslint/scope-manager": "4.28.3", + "@typescript-eslint/experimental-utils": "4.28.5", + "@typescript-eslint/scope-manager": "4.28.5", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -2642,43 +2644,43 @@ }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz", - "integrity": "sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz", + "integrity": "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.3", - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/typescript-estree": "4.28.3", + "@typescript-eslint/scope-manager": "4.28.5", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/typescript-estree": "4.28.5", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/scope-manager": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz", - "integrity": "sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz", + "integrity": "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/visitor-keys": "4.28.3" + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5" } }, "@typescript-eslint/types": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.3.tgz", - "integrity": "sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz", + "integrity": "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz", - "integrity": "sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz", + "integrity": "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/visitor-keys": "4.28.3", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -2687,12 +2689,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz", - "integrity": "sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz", + "integrity": "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.3", + "@typescript-eslint/types": "4.28.5", "eslint-visitor-keys": "^2.0.0" } } @@ -2713,41 +2715,41 @@ } }, "@typescript-eslint/parser": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.3.tgz", - "integrity": "sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz", + "integrity": "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.28.3", - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/typescript-estree": "4.28.3", + "@typescript-eslint/scope-manager": "4.28.5", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/typescript-estree": "4.28.5", "debug": "^4.3.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz", - "integrity": "sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz", + "integrity": "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/visitor-keys": "4.28.3" + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5" } }, "@typescript-eslint/types": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.3.tgz", - "integrity": "sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz", + "integrity": "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz", - "integrity": "sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz", + "integrity": "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/visitor-keys": "4.28.3", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -2756,12 +2758,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz", - "integrity": "sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz", + "integrity": "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.3", + "@typescript-eslint/types": "4.28.5", "eslint-visitor-keys": "^2.0.0" } } @@ -2809,148 +2811,148 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -3155,9 +3157,9 @@ } }, "apexcharts": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.27.2.tgz", - "integrity": "sha512-FjW0OW6Oq9kbWJiF6wIZEsMNNHme6WNv3eh+p4azuWVELNY/LigXU+01s4TP+Obplhy6byV9bw9x7GhrbN2YsQ==", + "version": "3.27.3", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.27.3.tgz", + "integrity": "sha512-1ZrqiQT0VahkqW0kVjf5QVURYGaHMlGN08BoIZG2c2U/gY2AtnEoFN4r9q4d/pYYYKvI9AyLBHq0otzcVGrHAw==", "requires": { "svg.draggable.js": "^2.2.2", "svg.easing.js": "^2.0.0", @@ -3469,9 +3471,9 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", + "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", @@ -4012,13 +4014,13 @@ } }, "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "color-convert": { @@ -4035,9 +4037,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "dev": true, "requires": { "color-name": "^1.0.0", @@ -4045,9 +4047,9 @@ } }, "colord": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", - "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.4.0.tgz", + "integrity": "sha512-2306/NeTDOykDwvFQK0ctnP+9I5KQdqVm+IJAM6MsAr4vvy1llAdJyax4YmZoqTxdJ/lvRBwR8MqyJi/tupBAw==", "dev": true }, "colorette": { @@ -4077,9 +4079,9 @@ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" }, "comment-parser": { - "version": "1.1.6-beta.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.6-beta.0.tgz", - "integrity": "sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.3.tgz", + "integrity": "sha512-vnqDwBSXSsdAkGS5NjwMIPelE47q+UkEgWKHvCDNhVIIaQSUFY6sNnEYGzdoPGMdpV+7KR3ZkRd7oyWIjtuvJg==", "dev": true }, "commondir": { @@ -4275,12 +4277,12 @@ } }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -4556,9 +4558,9 @@ "dev": true }, "css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", + "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", "dev": true, "requires": { "timsort": "^0.3.0" @@ -4656,12 +4658,12 @@ "dev": true }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -4711,12 +4713,12 @@ } }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -4864,29 +4866,15 @@ "dev": true }, "cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", + "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - } + "is-resolvable": "^1.1.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, "cssnano-preset-default": { @@ -5506,9 +5494,9 @@ } }, "es-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", - "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, "es-to-primitive": { @@ -5540,13 +5528,13 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "version": "7.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", + "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -5979,16 +5967,16 @@ } }, "eslint-plugin-jsdoc": { - "version": "35.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.3.tgz", - "integrity": "sha512-hBEn+VNjVX0IKoZ2OdZs0Z1fU8CqZkBSzLqD8ZpwZEamrdi2TUgKvujvETe8gXYQ/67hpRtbR5iPFTgmWpRevw==", + "version": "36.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.6.tgz", + "integrity": "sha512-vOm27rI2SMfi1bOAYmzzGkanMCD/boquKwvN5ECi8EF9ASsXJwlnCzYtiOYpsDpbC2+6JXEHAmWMkqYNA3BWRw==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "^0.9.0-alpha.1", - "comment-parser": "1.1.6-beta.0", + "@es-joy/jsdoccomment": "0.10.7", + "comment-parser": "1.2.3", "debug": "^4.3.2", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "^1.0.4", + "jsdoc-type-pratt-parser": "^1.1.1", "lodash": "^4.17.21", "regextras": "^0.8.0", "semver": "^7.3.5", @@ -6549,9 +6537,9 @@ } }, "flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "flatten": { @@ -6777,9 +6765,9 @@ } }, "glob-parent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", - "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -8102,9 +8090,9 @@ "dev": true }, "jsdoc-type-pratt-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz", - "integrity": "sha512-jzmW9gokeq9+bHPDR1nCeidMyFUikdZlbOhKzh9+/nJqB75XhpNKec1/UuxW5c4+O+Pi31Gc/dCboyfSm/pSpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", "dev": true }, "jsesc": { @@ -8944,12 +8932,12 @@ "dev": true }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -9894,9 +9882,9 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "perfect-scrollbar": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.1.tgz", - "integrity": "sha512-MrSImINnIh3Tm1hdPT6bji6fmIeRorVEegQvyUnhqko2hDGTHhmjPefHXfxG/Jb8xVbfCwgmUIlIajERGXjVXQ==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.2.tgz", + "integrity": "sha512-McHAinFkyzKbBZrFtb4MT2mxkehp15KvOX/UrjB8C5EZZXHTHgyETo5IGFYtHRTI2Pb2bsV0OE0YnkjT9Cw3aw==" }, "performance-now": { "version": "2.1.0", @@ -10038,9 +10026,9 @@ "dev": true }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -11897,12 +11885,12 @@ "dev": true }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -11927,9 +11915,9 @@ } }, "read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -13378,12 +13366,12 @@ "dev": true }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -13632,22 +13620,21 @@ } }, "tailwindcss": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.4.tgz", - "integrity": "sha512-OdBCPgazNNsknSP+JfrPzkay9aqKjhKtFhbhgxHgvEFdHy/GuRPo2SCJ4w1SFTN8H6FPI4m6qD/Jj20NWY1GkA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.7.tgz", + "integrity": "sha512-jv35rugP5j8PpzbXnsria7ZAry7Evh0KtQ4MZqNd+PhF+oIKPwJTVwe/rmfRx9cZw3W7iPZyzBmeoAoNwfJ1yg==", "dev": true, "requires": { - "@fullhuman/postcss-purgecss": "^4.0.3", "arg": "^5.0.0", "bytes": "^3.0.0", "chalk": "^4.1.1", "chokidar": "^3.5.2", - "color": "^3.1.3", + "color": "^3.2.0", "cosmiconfig": "^7.0.0", "detective": "^5.2.0", - "didyoumean": "^1.2.1", + "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.5", + "fast-glob": "^3.2.7", "fs-extra": "^10.0.0", "glob-parent": "^6.0.0", "html-tags": "^3.1.0", @@ -13664,6 +13651,7 @@ "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0", "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", "quick-lru": "^5.1.1", "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0", @@ -13717,6 +13705,30 @@ "yaml": "^1.10.0" } }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -13777,9 +13789,9 @@ "dev": true }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.2.tgz", + "integrity": "sha512-EwKEgqJ7nJoS+s8QfLYVGMDmAsj+StbI2AM/RTHeUSsOw6Z8bwNBRv5z3CY0m7laC5qUAqruLX5AhMuc5deY3Q==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -13851,12 +13863,12 @@ } }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -14242,9 +14254,9 @@ } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -14362,21 +14374,21 @@ "integrity": "sha512-TOMFWtQdxzjWp8qx4DAraTWTsdhxVSiWa6NkPFSaPtZ1diKUxTn4yTix73A1euG1WbSOMMPcY51cnjTIHrGtDA==" }, "webpack": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.42.0.tgz", - "integrity": "sha512-Ln8HL0F831t1x/yPB/qZEUVmZM4w9BnHZ1EQD/sAUHv8m22hthoPniWTXEzFMh/Sf84mhrahut22TX5KxWGuyQ==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.44.0.tgz", + "integrity": "sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.48", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.6.0", + "es-module-lexer": "^0.7.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -14411,12 +14423,12 @@ "dev": true }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -14428,9 +14440,9 @@ "dev": true }, "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", "dev": true, "requires": { "source-list-map": "^2.0.1", @@ -14472,12 +14484,12 @@ "dev": true }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } diff --git a/package.json b/package.json index b158a778..4108a9cd 100644 --- a/package.json +++ b/package.json @@ -13,17 +13,17 @@ "lint": "ng lint" }, "dependencies": { - "@angular/animations": "12.1.2", - "@angular/cdk": "12.1.2", - "@angular/common": "12.1.2", - "@angular/compiler": "12.1.2", - "@angular/core": "12.1.2", - "@angular/forms": "12.1.2", - "@angular/material": "12.1.2", - "@angular/material-moment-adapter": "12.1.2", - "@angular/platform-browser": "12.1.2", - "@angular/platform-browser-dynamic": "12.1.2", - "@angular/router": "12.1.2", + "@angular/animations": "12.1.4", + "@angular/cdk": "12.1.4", + "@angular/common": "12.1.4", + "@angular/compiler": "12.1.4", + "@angular/core": "12.1.4", + "@angular/forms": "12.1.4", + "@angular/material": "12.1.4", + "@angular/material-moment-adapter": "12.1.4", + "@angular/platform-browser": "12.1.4", + "@angular/platform-browser-dynamic": "12.1.4", + "@angular/router": "12.1.4", "@fullcalendar/angular": "4.4.5-beta", "@fullcalendar/core": "4.4.2", "@fullcalendar/daygrid": "4.4.2", @@ -33,7 +33,7 @@ "@fullcalendar/rrule": "4.4.2", "@fullcalendar/timegrid": "4.4.2", "@ngneat/transloco": "2.22.0", - "apexcharts": "3.27.2", + "apexcharts": "3.27.3", "crypto-js": "3.3.0", "highlight.js": "11.1.0", "lodash-es": "4.17.21", @@ -41,7 +41,7 @@ "ng-apexcharts": "1.5.12", "ngx-markdown": "12.0.1", "ngx-quill": "14.1.2", - "perfect-scrollbar": "1.5.1", + "perfect-scrollbar": "1.5.2", "quill": "1.3.7", "rrule": "2.6.8", "rxjs": "6.6.7", @@ -50,31 +50,31 @@ "zone.js": "0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "12.1.2", + "@angular-devkit/build-angular": "12.1.4", "@angular-eslint/builder": "12.3.1", "@angular-eslint/eslint-plugin": "12.3.1", "@angular-eslint/eslint-plugin-template": "12.3.1", "@angular-eslint/schematics": "12.3.1", "@angular-eslint/template-parser": "12.3.1", - "@angular/cli": "12.1.2", - "@angular/compiler-cli": "12.1.2", + "@angular/cli": "12.1.4", + "@angular/compiler-cli": "12.1.4", "@tailwindcss/aspect-ratio": "0.2.1", "@tailwindcss/line-clamp": "0.2.1", "@tailwindcss/typography": "0.4.1", "@types/chroma-js": "2.1.3", "@types/crypto-js": "3.1.47", "@types/highlight.js": "10.1.0", - "@types/jasmine": "3.8.1", + "@types/jasmine": "3.8.2", "@types/lodash": "4.14.171", "@types/lodash-es": "4.17.4", - "@types/node": "12.20.16", - "@typescript-eslint/eslint-plugin": "4.28.3", - "@typescript-eslint/parser": "4.28.3", + "@types/node": "12.20.17", + "@typescript-eslint/eslint-plugin": "4.28.5", + "@typescript-eslint/parser": "4.28.5", "autoprefixer": "10.3.1", "chroma-js": "2.1.2", - "eslint": "7.30.0", + "eslint": "7.31.0", "eslint-plugin-import": "2.23.4", - "eslint-plugin-jsdoc": "35.4.3", + "eslint-plugin-jsdoc": "36.0.6", "eslint-plugin-prefer-arrow": "1.2.3", "jasmine-core": "3.8.0", "karma": "6.3.4", @@ -83,8 +83,8 @@ "karma-jasmine": "4.0.1", "karma-jasmine-html-reporter": "1.7.0", "lodash": "4.17.21", - "postcss": "8.3.5", - "tailwindcss": "2.2.4", + "postcss": "8.3.6", + "tailwindcss": "2.2.7", "typescript": "4.3.5" } } From b21cdf16556505613a30c4732e529c19108e9c05 Mon Sep 17 00:00:00 2001 From: sercan Date: Thu, 29 Jul 2021 10:19:28 +0300 Subject: [PATCH 10/10] Updated the changelog and increased the version number --- src/@fuse/version/fuse-version.ts | 2 +- src/app/mock-api/common/navigation/data.ts | 2 +- .../modules/admin/docs/changelog/changelog.ts | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/@fuse/version/fuse-version.ts b/src/@fuse/version/fuse-version.ts index 5f462133..11abd439 100644 --- a/src/@fuse/version/fuse-version.ts +++ b/src/@fuse/version/fuse-version.ts @@ -1,3 +1,3 @@ import { Version } from '@fuse/version/version'; -export const FUSE_VERSION = new Version('13.3.1').full; +export const FUSE_VERSION = new Version('13.4.0').full; diff --git a/src/app/mock-api/common/navigation/data.ts b/src/app/mock-api/common/navigation/data.ts index be3cb9b8..fce4e006 100644 --- a/src/app/mock-api/common/navigation/data.ts +++ b/src/app/mock-api/common/navigation/data.ts @@ -981,7 +981,7 @@ export const defaultNavigation: FuseNavigationItem[] = [ icon : 'heroicons_outline:speakerphone', link : '/docs/changelog', badge: { - title : '13.3.1', + title : '13.4.0', classes: 'px-2 bg-yellow-300 text-black rounded-full' } }, diff --git a/src/app/modules/admin/docs/changelog/changelog.ts b/src/app/modules/admin/docs/changelog/changelog.ts index 4cbda5d3..afccc37b 100644 --- a/src/app/modules/admin/docs/changelog/changelog.ts +++ b/src/app/modules/admin/docs/changelog/changelog.ts @@ -11,6 +11,32 @@ export class ChangelogComponent { changelog: any[] = [ + // v13.4.0 + { + version : 'v13.4.0', + releaseDate: 'July 29, 2021', + changes : [ + { + type: 'Added', + list: [ + '(dashboards/finance) Added finance dashboard', + '(dashboards/crypto) Added crypto dashboard' + ] + }, + { + type: 'Changed', + list: [ + '(dependencies) Updated Angular & Angular Material to v12.1.4', + '(dependencies) Updated various other packages', + '(index) Updated the title, description and keywords', + '(dashboards/project) Light header on light themes and small adjustments in various places', + '(apps/contacts) Small adjustments for better consistency', + '(apps/ecommerce/inventory) Small adjustments for better consistency', + '(docs) Updated the multi language guide' + ] + } + ] + }, // v13.3.1 { version : 'v13.3.1',