From deeef323f912b3c303510648a4dd3755403c92bf Mon Sep 17 00:00:00 2001 From: sercan Date: Mon, 26 Apr 2021 15:59:44 +0300 Subject: [PATCH 01/10] (apps/academy) Better error handling on courses that are not exist --- src/app/mock-api/apps/academy/api.ts | 5 +++- .../admin/apps/academy/academy.service.ts | 23 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/app/mock-api/apps/academy/api.ts b/src/app/mock-api/apps/academy/api.ts index 862282c0..cf4abe7c 100644 --- a/src/app/mock-api/apps/academy/api.ts +++ b/src/app/mock-api/apps/academy/api.ts @@ -75,7 +75,10 @@ export class AcademyMockApi // Find the course and attach steps to it const course = courses.find((item) => item.id === id); - course.steps = steps; + if ( course ) + { + course.steps = steps; + } return [ 200, diff --git a/src/app/modules/admin/apps/academy/academy.service.ts b/src/app/modules/admin/apps/academy/academy.service.ts index d639b119..12385626 100644 --- a/src/app/modules/admin/apps/academy/academy.service.ts +++ b/src/app/modules/admin/apps/academy/academy.service.ts @@ -1,8 +1,9 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; +import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; +import { map, switchMap, tap } from 'rxjs/operators'; import { Category, Course } from 'app/modules/admin/apps/academy/academy.types'; +import { Chat } from 'app/modules/admin/apps/chat/chat.types'; @Injectable({ providedIn: 'root' @@ -83,8 +84,22 @@ export class AcademyService getCourseById(id: string): Observable { return this._httpClient.get('api/apps/academy/courses/course', {params: {id}}).pipe( - tap((response: any) => { - this._course.next(response); + map((course) => { + + // Update the course + this._course.next(course); + + // Return the course + return course; + }), + switchMap((course) => { + + if ( !course ) + { + return throwError('Could not found course with id of ' + id + '!'); + } + + return of(course); }) ); } From 88e98d002ddc56761d0001b9b22d3b95c8e937e1 Mon Sep 17 00:00:00 2001 From: sercan Date: Mon, 26 Apr 2021 16:08:19 +0300 Subject: [PATCH 02/10] (apps/mailbox) Removed unused methods --- .../admin/apps/mailbox/list/list.component.ts | 72 ------------------- 1 file changed, 72 deletions(-) diff --git a/src/app/modules/admin/apps/mailbox/list/list.component.ts b/src/app/modules/admin/apps/mailbox/list/list.component.ts index 00b89ed2..938defb9 100644 --- a/src/app/modules/admin/apps/mailbox/list/list.component.ts +++ b/src/app/modules/admin/apps/mailbox/list/list.component.ts @@ -1,7 +1,6 @@ import { Component, ElementRef, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import * as moment from 'moment'; import { MailboxService } from 'app/modules/admin/apps/mailbox/mailbox.service'; import { MailboxComponent } from 'app/modules/admin/apps/mailbox/mailbox.component'; import { Mail, MailCategory } from 'app/modules/admin/apps/mailbox/mailbox.types'; @@ -119,77 +118,6 @@ export class MailboxListComponent implements OnInit, OnDestroy this._mailboxService.selectedMailChanged.next(mail); } - /** - * Generate and return mail list group label if necessary or return false - * - * @param index - */ - mailListGroupLabel(index: number): string | false - { - const previousMail = this.mails[index - 1]; - const currentMail = this.mails[index]; - - // Generate and return label, if there is no previous mail - if ( !previousMail ) - { - return this._generateMailListGroupLabel(this.mails[index].date); - } - - // Return false, if the two dates are equal by day - if ( moment(previousMail.date, moment.ISO_8601).isSame(moment(currentMail.date, moment.ISO_8601), 'day') ) - { - return false; - } - - // Generate and return label - return this._generateMailListGroupLabel(this.mails[index].date); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Private methods - // ----------------------------------------------------------------------------------------------------- - - /** - * Generate a mail list group label based on the date - * - * @param mailDate - * @private - */ - private _generateMailListGroupLabel(mailDate: string): string - { - const date = moment(mailDate, moment.ISO_8601); - const today = moment(); - const yesterday = moment().subtract(1, 'day'); - - // Check if the mail date is today - if ( date.isSame(today, 'day') ) - { - // Return 'Today' - return 'Today'; - } - - // Check if the mail date is yesterday - if ( date.isSame(yesterday, 'day') ) - { - // Return 'Yesterday' - return 'Yesterday'; - } - - // Check if we are in the same year with the mail date... - if ( date.isSame(today, 'year') ) - { - // Return a date without a year - return date.format('MMMM DD'); - } - - // Return a date - return date.format('LL'); - } - - // ----------------------------------------------------------------------------------------------------- - // @ Public methods - // ----------------------------------------------------------------------------------------------------- - /** * Track by function for ngFor loops * From e90fb9e61888971bb219e60775ccf81463c09b35 Mon Sep 17 00:00:00 2001 From: sercan Date: Mon, 26 Apr 2021 16:41:21 +0300 Subject: [PATCH 03/10] (apps/academy) Added missing trackBy functions to '*ngFor's --- .../modules/admin/apps/academy/details/details.component.html | 4 ++-- src/app/modules/admin/apps/academy/list/list.component.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/modules/admin/apps/academy/details/details.component.html b/src/app/modules/admin/apps/academy/details/details.component.html index 2707e992..52aa9125 100644 --- a/src/app/modules/admin/apps/academy/details/details.component.html +++ b/src/app/modules/admin/apps/academy/details/details.component.html @@ -47,7 +47,7 @@
    - +
  1. @@ -120,7 +120,7 @@ class="fuse-mat-no-header" [animationDuration]="'200'" #courseSteps> - +
    All - + {{category.title}} @@ -64,7 +64,7 @@
    - +
    From 5ffe0d0efac2b377750b12c06159aea4f7d77b8b Mon Sep 17 00:00:00 2001 From: sercan Date: Mon, 26 Apr 2021 23:42:16 +0300 Subject: [PATCH 04/10] (pages/pricing) Improved the spacing of the CTA section on all pricing pages --- .../modules/admin/pages/pricing/modern/modern.component.html | 4 ++-- .../modules/admin/pages/pricing/simple/simple.component.html | 4 ++-- .../modules/admin/pages/pricing/single/single.component.html | 4 ++-- .../modules/admin/pages/pricing/table/table.component.html | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/modules/admin/pages/pricing/modern/modern.component.html b/src/app/modules/admin/pages/pricing/modern/modern.component.html index 0e6073b3..21bcc454 100644 --- a/src/app/modules/admin/pages/pricing/modern/modern.component.html +++ b/src/app/modules/admin/pages/pricing/modern/modern.component.html @@ -343,10 +343,10 @@
    -
    +
    Boost your productivity.
    -
    Start using Fuse today.
    +
    Start using Fuse today.
    -
    +
    Boost your productivity.
    -
    Start using Fuse today.
    +
    Start using Fuse today.
    -
    +
    Boost your productivity.
    -
    Start using Fuse today.
    +
    Start using Fuse today.
    -
    +
    Boost your productivity.
    -
    Start using Fuse today.
    +
    Start using Fuse today.
    diff --git a/src/@fuse/components/fullscreen/fullscreen.component.ts b/src/@fuse/components/fullscreen/fullscreen.component.ts new file mode 100644 index 00000000..ff32aa36 --- /dev/null +++ b/src/@fuse/components/fullscreen/fullscreen.component.ts @@ -0,0 +1,164 @@ +import { ChangeDetectionStrategy, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { FSDocument, FSDocumentElement } from '@fuse/components/fullscreen/fullscreen.types'; + +@Component({ + selector : 'fuse-fullscreen', + templateUrl : './fullscreen.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, + exportAs : 'fuseFullscreen' +}) +export class FuseFullscreenComponent implements OnInit +{ + private _fsDoc: FSDocument; + private _fsDocEl: FSDocumentElement; + private _isFullscreen: boolean = false; + + /** + * Constructor + */ + constructor(@Inject(DOCUMENT) private _document: Document) + { + this._fsDoc = _document as FSDocument; + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + this._fsDocEl = document.documentElement as FSDocumentElement; + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Toggle the fullscreen mode + */ + toggleFullscreen(): void + { + // Check if the fullscreen is open + this._isFullscreen = this._getBrowserFullscreenElement() !== null; + + // Toggle the fullscreen + if ( this._isFullscreen ) + { + this._closeFullscreen(); + } + else + { + this._openFullscreen(); + } + } + + // ----------------------------------------------------------------------------------------------------- + // @ Private methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Get browser's fullscreen element + * + * @private + */ + private _getBrowserFullscreenElement(): Element + { + if ( typeof this._fsDoc.fullscreenElement !== 'undefined' ) + { + return this._fsDoc.fullscreenElement; + } + + if ( typeof this._fsDoc.mozFullScreenElement !== 'undefined' ) + { + return this._fsDoc.mozFullScreenElement; + } + + if ( typeof this._fsDoc.msFullscreenElement !== 'undefined' ) + { + return this._fsDoc.msFullscreenElement; + } + + if ( typeof this._fsDoc.webkitFullscreenElement !== 'undefined' ) + { + return this._fsDoc.webkitFullscreenElement; + } + + throw new Error('Fullscreen mode is not supported by this browser'); + } + + /** + * Open the fullscreen + * + * @private + */ + private _openFullscreen(): void + { + if ( this._fsDocEl.requestFullscreen ) + { + this._fsDocEl.requestFullscreen(); + return; + } + + // Firefox + if ( this._fsDocEl.mozRequestFullScreen ) + { + this._fsDocEl.mozRequestFullScreen(); + return; + } + + // Chrome, Safari and Opera + if ( this._fsDocEl.webkitRequestFullscreen ) + { + this._fsDocEl.webkitRequestFullscreen(); + return; + } + + // IE/Edge + if ( this._fsDocEl.msRequestFullscreen ) + { + this._fsDocEl.msRequestFullscreen(); + return; + } + } + + /** + * Close the fullscreen + * + * @private + */ + private _closeFullscreen(): void + { + if ( this._fsDoc.exitFullscreen ) + { + this._fsDoc.exitFullscreen(); + return; + } + + // Firefox + if ( this._fsDoc.mozCancelFullScreen ) + { + this._fsDoc.mozCancelFullScreen(); + return; + } + + // Chrome, Safari and Opera + if ( this._fsDoc.webkitExitFullscreen ) + { + this._fsDoc.webkitExitFullscreen(); + return; + } + + // IE/Edge + else if ( this._fsDoc.msExitFullscreen ) + { + this._fsDoc.msExitFullscreen(); + return; + } + } +} diff --git a/src/@fuse/components/fullscreen/fullscreen.module.ts b/src/@fuse/components/fullscreen/fullscreen.module.ts new file mode 100644 index 00000000..925dabc9 --- /dev/null +++ b/src/@fuse/components/fullscreen/fullscreen.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { FuseFullscreenComponent } from '@fuse/components/fullscreen/fullscreen.component'; + +@NgModule({ + declarations: [ + FuseFullscreenComponent + ], + imports : [ + MatButtonModule, + MatIconModule, + MatTooltipModule + ], + exports : [ + FuseFullscreenComponent + ] +}) +export class FuseFullscreenModule +{ +} diff --git a/src/@fuse/components/fullscreen/fullscreen.types.ts b/src/@fuse/components/fullscreen/fullscreen.types.ts new file mode 100644 index 00000000..0477a1d4 --- /dev/null +++ b/src/@fuse/components/fullscreen/fullscreen.types.ts @@ -0,0 +1,16 @@ +export interface FSDocument extends HTMLDocument +{ + mozFullScreenElement?: Element; + mozCancelFullScreen?: () => void; + msFullscreenElement?: Element; + msExitFullscreen?: () => void; + webkitFullscreenElement?: Element; + webkitExitFullscreen?: () => void; +} + +export interface FSDocumentElement extends HTMLElement +{ + mozRequestFullScreen?: () => void; + msRequestFullscreen?: () => void; + webkitRequestFullscreen?: () => void; +} diff --git a/src/@fuse/components/fullscreen/index.ts b/src/@fuse/components/fullscreen/index.ts new file mode 100644 index 00000000..15b41faf --- /dev/null +++ b/src/@fuse/components/fullscreen/index.ts @@ -0,0 +1 @@ +export * from '@fuse/components/fullscreen/public-api'; diff --git a/src/@fuse/components/fullscreen/public-api.ts b/src/@fuse/components/fullscreen/public-api.ts new file mode 100644 index 00000000..e6264e3c --- /dev/null +++ b/src/@fuse/components/fullscreen/public-api.ts @@ -0,0 +1,3 @@ +export * from '@fuse/components/fullscreen/fullscreen.component'; +export * from '@fuse/components/fullscreen/fullscreen.module'; +export * from '@fuse/components/fullscreen/fullscreen.types'; diff --git a/src/app/layout/layouts/horizontal/centered/centered.component.html b/src/app/layout/layouts/horizontal/centered/centered.component.html index 0b909060..87f3b332 100644 --- a/src/app/layout/layouts/horizontal/centered/centered.component.html +++ b/src/app/layout/layouts/horizontal/centered/centered.component.html @@ -63,6 +63,7 @@
    + diff --git a/src/app/layout/layouts/horizontal/centered/centered.module.ts b/src/app/layout/layouts/horizontal/centered/centered.module.ts index 3b0130b2..450eda48 100644 --- a/src/app/layout/layouts/horizontal/centered/centered.module.ts +++ b/src/app/layout/layouts/horizontal/centered/centered.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { CenteredLayoutComponent } from 'app/layout/layouts/horizontal/centered/ MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/horizontal/enterprise/enterprise.component.html b/src/app/layout/layouts/horizontal/enterprise/enterprise.component.html index fcc99e67..fac87df3 100644 --- a/src/app/layout/layouts/horizontal/enterprise/enterprise.component.html +++ b/src/app/layout/layouts/horizontal/enterprise/enterprise.component.html @@ -46,6 +46,7 @@
    + diff --git a/src/app/layout/layouts/horizontal/enterprise/enterprise.module.ts b/src/app/layout/layouts/horizontal/enterprise/enterprise.module.ts index f3897da1..4fe29e6c 100644 --- a/src/app/layout/layouts/horizontal/enterprise/enterprise.module.ts +++ b/src/app/layout/layouts/horizontal/enterprise/enterprise.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { EnterpriseLayoutComponent } from 'app/layout/layouts/horizontal/enterpr MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/horizontal/material/material.component.html b/src/app/layout/layouts/horizontal/material/material.component.html index c6e8ca7f..6e385702 100644 --- a/src/app/layout/layouts/horizontal/material/material.component.html +++ b/src/app/layout/layouts/horizontal/material/material.component.html @@ -52,6 +52,7 @@
    + diff --git a/src/app/layout/layouts/horizontal/material/material.module.ts b/src/app/layout/layouts/horizontal/material/material.module.ts index f2060f55..1a2de438 100644 --- a/src/app/layout/layouts/horizontal/material/material.module.ts +++ b/src/app/layout/layouts/horizontal/material/material.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { MaterialLayoutComponent } from 'app/layout/layouts/horizontal/material/ MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/horizontal/modern/modern.component.html b/src/app/layout/layouts/horizontal/modern/modern.component.html index 7d27029b..502e0179 100644 --- a/src/app/layout/layouts/horizontal/modern/modern.component.html +++ b/src/app/layout/layouts/horizontal/modern/modern.component.html @@ -55,6 +55,7 @@
    + diff --git a/src/app/layout/layouts/horizontal/modern/modern.module.ts b/src/app/layout/layouts/horizontal/modern/modern.module.ts index 1beb0fb3..9e8a88a6 100644 --- a/src/app/layout/layouts/horizontal/modern/modern.module.ts +++ b/src/app/layout/layouts/horizontal/modern/modern.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { ModernLayoutComponent } from 'app/layout/layouts/horizontal/modern/mode MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/vertical/classic/classic.component.html b/src/app/layout/layouts/vertical/classic/classic.component.html index 274bd165..5eaf76da 100644 --- a/src/app/layout/layouts/vertical/classic/classic.component.html +++ b/src/app/layout/layouts/vertical/classic/classic.component.html @@ -36,6 +36,7 @@
    + diff --git a/src/app/layout/layouts/vertical/classic/classic.module.ts b/src/app/layout/layouts/vertical/classic/classic.module.ts index e9ae97c0..764838e0 100644 --- a/src/app/layout/layouts/vertical/classic/classic.module.ts +++ b/src/app/layout/layouts/vertical/classic/classic.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { ClassicLayoutComponent } from 'app/layout/layouts/vertical/classic/clas MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/vertical/classy/classy.component.html b/src/app/layout/layouts/vertical/classy/classy.component.html index a052742d..d64cee03 100644 --- a/src/app/layout/layouts/vertical/classy/classy.component.html +++ b/src/app/layout/layouts/vertical/classy/classy.component.html @@ -66,6 +66,7 @@
    + diff --git a/src/app/layout/layouts/vertical/classy/classy.module.ts b/src/app/layout/layouts/vertical/classy/classy.module.ts index aa980b28..bde2c852 100644 --- a/src/app/layout/layouts/vertical/classy/classy.module.ts +++ b/src/app/layout/layouts/vertical/classy/classy.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 { FuseNavigationModule } from '@fuse/components/navigation'; +import { FuseFullscreenModule } from '@fuse/components/fullscreen/fullscreen.module'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; import { SearchModule } from 'app/layout/common/search/search.module'; @@ -25,6 +26,7 @@ import { ClassyLayoutComponent } from 'app/layout/layouts/vertical/classy/classy MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/vertical/compact/compact.component.html b/src/app/layout/layouts/vertical/compact/compact.component.html index edc293da..a47272a0 100644 --- a/src/app/layout/layouts/vertical/compact/compact.component.html +++ b/src/app/layout/layouts/vertical/compact/compact.component.html @@ -31,6 +31,7 @@
    + diff --git a/src/app/layout/layouts/vertical/compact/compact.module.ts b/src/app/layout/layouts/vertical/compact/compact.module.ts index 65b4b06c..873a4d15 100644 --- a/src/app/layout/layouts/vertical/compact/compact.module.ts +++ b/src/app/layout/layouts/vertical/compact/compact.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { CompactLayoutComponent } from 'app/layout/layouts/vertical/compact/comp MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/vertical/dense/dense.component.html b/src/app/layout/layouts/vertical/dense/dense.component.html index 6124b399..10e3bcd6 100644 --- a/src/app/layout/layouts/vertical/dense/dense.component.html +++ b/src/app/layout/layouts/vertical/dense/dense.component.html @@ -40,6 +40,7 @@
    + diff --git a/src/app/layout/layouts/vertical/dense/dense.module.ts b/src/app/layout/layouts/vertical/dense/dense.module.ts index 122a3f47..2d3e9f03 100644 --- a/src/app/layout/layouts/vertical/dense/dense.module.ts +++ b/src/app/layout/layouts/vertical/dense/dense.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { DenseLayoutComponent } from 'app/layout/layouts/vertical/dense/dense.co MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/vertical/futuristic/futuristic.component.html b/src/app/layout/layouts/vertical/futuristic/futuristic.component.html index c1373ded..59608b1a 100644 --- a/src/app/layout/layouts/vertical/futuristic/futuristic.component.html +++ b/src/app/layout/layouts/vertical/futuristic/futuristic.component.html @@ -45,6 +45,7 @@
    + diff --git a/src/app/layout/layouts/vertical/futuristic/futuristic.module.ts b/src/app/layout/layouts/vertical/futuristic/futuristic.module.ts index aeffe4b1..c1f0d61f 100644 --- a/src/app/layout/layouts/vertical/futuristic/futuristic.module.ts +++ b/src/app/layout/layouts/vertical/futuristic/futuristic.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { FuturisticLayoutComponent } from 'app/layout/layouts/vertical/futuristi MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, diff --git a/src/app/layout/layouts/vertical/thin/thin.component.html b/src/app/layout/layouts/vertical/thin/thin.component.html index 4a5f783b..5ebc6e43 100644 --- a/src/app/layout/layouts/vertical/thin/thin.component.html +++ b/src/app/layout/layouts/vertical/thin/thin.component.html @@ -32,6 +32,7 @@
    + diff --git a/src/app/layout/layouts/vertical/thin/thin.module.ts b/src/app/layout/layouts/vertical/thin/thin.module.ts index 7eb78060..a9231930 100644 --- a/src/app/layout/layouts/vertical/thin/thin.module.ts +++ b/src/app/layout/layouts/vertical/thin/thin.module.ts @@ -5,6 +5,7 @@ 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 { FuseFullscreenModule } from '@fuse/components/fullscreen'; import { FuseNavigationModule } from '@fuse/components/navigation'; import { MessagesModule } from 'app/layout/common/messages/messages.module'; import { NotificationsModule } from 'app/layout/common/notifications/notifications.module'; @@ -25,6 +26,7 @@ import { ThinLayoutComponent } from 'app/layout/layouts/vertical/thin/thin.compo MatDividerModule, MatIconModule, MatMenuModule, + FuseFullscreenModule, FuseNavigationModule, MessagesModule, NotificationsModule, From 215546cc31ca26500f6e8a79cbd378a73d5d83ba Mon Sep 17 00:00:00 2001 From: sercan Date: Thu, 29 Apr 2021 19:57:58 +0300 Subject: [PATCH 06/10] (apps/academy) Removed a misplaced import --- src/app/modules/admin/apps/academy/academy.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/modules/admin/apps/academy/academy.service.ts b/src/app/modules/admin/apps/academy/academy.service.ts index 12385626..19d05a67 100644 --- a/src/app/modules/admin/apps/academy/academy.service.ts +++ b/src/app/modules/admin/apps/academy/academy.service.ts @@ -3,7 +3,6 @@ import { HttpClient } from '@angular/common/http'; import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; import { Category, Course } from 'app/modules/admin/apps/academy/academy.types'; -import { Chat } from 'app/modules/admin/apps/chat/chat.types'; @Injectable({ providedIn: 'root' From ee48e115488c53d0c0f83073235c072eaec59ba8 Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 30 Apr 2021 19:07:53 +0300 Subject: [PATCH 07/10] Increased the version number (dependencies) Updated Angular, Angular Material and various other packages (changelog) Updated the changelog --- package-lock.json | 2599 +++++------------ package.json | 36 +- src/@fuse/version/fuse-version.ts | 2 +- src/app/mock-api/common/navigation/data.ts | 16 +- .../modules/admin/docs/changelog/changelog.ts | 24 + 5 files changed, 815 insertions(+), 1862 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4cb3b699..32943643 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@fuse/demo", - "version": "12.1.0", + "version": "12.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.1102.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.10.tgz", - "integrity": "sha512-jb/Df6l7XHU7b2hu5gG1WItMo9cDjrqY0i6UzntUQ/QsSMqbnU6yWoRT6orLgN9tGdA4AjIyv+9mfMXHwM2maw==", + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.11.tgz", + "integrity": "sha512-1MoUSz7zNJomUUuzbIyBSprzbWa9eF97SRDEbllYHHXY/IWWetHGNK7gkJPyW0zgKhXIc5Sq4TJKIJKWPNh00Q==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.10", + "@angular-devkit/core": "11.2.11", "rxjs": "6.6.3" }, "dependencies": { @@ -32,15 +32,15 @@ } }, "@angular-devkit/build-angular": { - "version": "0.1102.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1102.10.tgz", - "integrity": "sha512-3WoOAt0DlvxSuRUEyjp2VBXQ8WGDHPytoMEn097/dDwUlw7xbljdgLuzW8yvsDMLJPhSjEy4lZpSNE+NSvQCug==", + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1102.11.tgz", + "integrity": "sha512-oT4eiVs4va5rKE1dsbi9C2kDzTVzLx9PNPGtTiClG5uRPMWGyljXtHNMfDy0gH9H5kjcObwR/a8EPrx7Xd3ZAA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.10", - "@angular-devkit/build-optimizer": "0.1102.10", - "@angular-devkit/build-webpack": "0.1102.10", - "@angular-devkit/core": "11.2.10", + "@angular-devkit/architect": "0.1102.11", + "@angular-devkit/build-optimizer": "0.1102.11", + "@angular-devkit/build-webpack": "0.1102.11", + "@angular-devkit/core": "11.2.11", "@babel/core": "7.12.10", "@babel/generator": "7.12.11", "@babel/plugin-transform-async-to-generator": "7.12.1", @@ -50,7 +50,7 @@ "@babel/template": "7.12.7", "@discoveryjs/json-ext": "0.5.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "11.2.10", + "@ngtools/webpack": "11.2.11", "ansi-colors": "4.1.1", "autoprefixer": "10.2.4", "babel-loader": "8.2.2", @@ -62,7 +62,7 @@ "core-js": "3.8.3", "critters": "0.0.7", "css-loader": "5.0.1", - "cssnano": "4.1.11", + "cssnano": "5.0.1", "file-loader": "6.2.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", @@ -80,7 +80,7 @@ "ora": "5.3.0", "parse5-html-rewriting-stream": "6.0.1", "pnp-webpack-plugin": "1.6.4", - "postcss": "8.2.4", + "postcss": "8.2.13", "postcss-import": "14.0.0", "postcss-loader": "4.2.0", "raw-loader": "4.0.2", @@ -126,25 +126,6 @@ "postcss-value-parser": "^4.1.0" } }, - "postcss": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", - "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", - "dev": true, - "requires": { - "colorette": "^1.2.1", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "rxjs": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", @@ -163,9 +144,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.1102.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1102.10.tgz", - "integrity": "sha512-6EEWq9VDBXtZ6nuHs4ljYrB4JIH+GRhgUm+M4x44Qo9CXxbBmNIswrTpYozdqzdMW4SqqIWVmTqyRzQYSMX+Vg==", + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1102.11.tgz", + "integrity": "sha512-YB9VcImGAuNkaNsDqVWDiBqpyxnAhV0gyHIVAQTEBjyebvzKCSbrmzsnDzvD5eXyDDJQ2InaD6/1HpDGQ5YPQw==", "dev": true, "requires": { "loader-utils": "2.0.0", @@ -184,13 +165,13 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1102.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.10.tgz", - "integrity": "sha512-e0/gAv04qg/fDvYWKMU6ZQzgYcUz1sHxXOh8ZZ/ezdLCzJP0HoCWoVEu/0PkAPwuAhUe+GjfgE8M7qFRZUFh1g==", + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.11.tgz", + "integrity": "sha512-Z8u4/934lFDsT3PFgvf49vDJO/+PhTejERoSFK/3Elq4dzS15Ial7itPUgaQS7nYYJJ8qKvr+dXkboXAv7Gqaw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.10", - "@angular-devkit/core": "11.2.10", + "@angular-devkit/architect": "0.1102.11", + "@angular-devkit/core": "11.2.11", "rxjs": "6.6.3" }, "dependencies": { @@ -212,9 +193,9 @@ } }, "@angular-devkit/core": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.10.tgz", - "integrity": "sha512-3QBluhsnXsntbl0ybHuXtuH/HBChqibXKmzrENj2n+SKlHFOYhE9PJCSfE6q1kwKN+zg6avOETVziI2pP5xtJQ==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.11.tgz", + "integrity": "sha512-6gFrpG0o00Y4kMU7cQeQ5fSlmXRvNlidylM3OfAvpj0qHoRKo1E3q9iVr4fW3oVZxK3fpCSN7RE5Myl5Y7mV0w==", "dev": true, "requires": { "ajv": "6.12.6", @@ -242,12 +223,12 @@ } }, "@angular-devkit/schematics": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.10.tgz", - "integrity": "sha512-T1V6mCwc2GYKAWMtCy2HaCxLw1kydu36tGV+dKjKHEwE+8cDgRRT5FhQ+XZzehVDeK9GvDu8Znur1F6i/WmKgw==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.11.tgz", + "integrity": "sha512-xkw+5P9V7VdV/X3Eko0/oZmEqelenIT1RdaOlFA3ZLCdT6bz+79HjeChMy++JcLjVNRcLYQSw0ULByq2q/S2Pw==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.10", + "@angular-devkit/core": "11.2.11", "ora": "5.3.0", "rxjs": "6.6.3" }, @@ -270,33 +251,33 @@ } }, "@angular/animations": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.11.tgz", - "integrity": "sha512-br6rGBVYlkgJWw9YMTS/TkgJX2zBUr5VNvQRhYVH8PlDjBLPBSHUSzkYHvXOK4hsTvg0tF0QZUpt4xt9PmQ4sQ==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.12.tgz", + "integrity": "sha512-4QZZwC7NVmTgY/NUPJB+QICGCNE7Ebfr/umjJliSrypcmuqcm6K0F4K3pVo7ckvZceOeqre2JY9lQYjvUH5xWg==", "requires": { "tslib": "^2.0.0" } }, "@angular/cdk": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.10.tgz", - "integrity": "sha512-Cq1dTQDGcqfB2ks8q3q4HPf7kEXU3FCB/OC5XYGMhs8tUyFTabhmXAcfkiBA4YO8YPWRc8FKrJsE1q4nV8vPKQ==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.11.tgz", + "integrity": "sha512-INDyO6Vh4WjsWkYAeZN39B4wTs+VqoAcTGdVBA39uij6wdu00ufr7pPRHtjAoNgrOWjEd/SCgDaUMcFEZ2+lcg==", "requires": { "parse5": "^5.0.0", "tslib": "^2.0.0" } }, "@angular/cli": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.10.tgz", - "integrity": "sha512-x7u36KmX1iiyDZhkeB6yXRrNj1no+mf6arnAvJYXH2JxqsZDqp19hP8b1QcGVMSl9CZUT/vA0KT3XuI4aJ6TfQ==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.11.tgz", + "integrity": "sha512-KzpRaCaHUwznlm6Iz/DvWqZs1fQx+NpJsiEOtKz7ijKoktJq+qcxAcBr2A4sNAuuAMgs0Xqy70EHvbMPA1yQ9A==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.10", - "@angular-devkit/core": "11.2.10", - "@angular-devkit/schematics": "11.2.10", - "@schematics/angular": "11.2.10", - "@schematics/update": "0.1102.10", + "@angular-devkit/architect": "0.1102.11", + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", + "@schematics/angular": "11.2.11", + "@schematics/update": "0.1102.11", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.1", @@ -335,25 +316,25 @@ } }, "@angular/common": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.2.11.tgz", - "integrity": "sha512-q2chMuaJxN1994Jm3ptWLIWx/yE0P4LCYAef7H10tYDXEJUWY9Tul+4YAnDeBjLY7om8/x3jUKChhfkuuWJing==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.2.12.tgz", + "integrity": "sha512-PEg2K/gNm7xia4WJn9hDieJiPvaJtfBaI5RGriVuGhvss2rNg3yKjkt8q0+6CoN/PWJ1Yi6BRgdCAOqt25SiWA==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.2.11.tgz", - "integrity": "sha512-8hJcT6oH/XGfE8DrCG9/PJR+FMsAAs2zT40c8mAuXa0qSn3Yrg/g1sHZ1eTwdU3iNIKzpoPj33MkJSoGN26NAQ==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.2.12.tgz", + "integrity": "sha512-//YCDIxNYWNKxIP9ynJAjEuUT3Q3g8XsQnG9vJKkXsBLiQ/WgtX0qQBSm9A6XvnJCUGXnGNgpqTLp8jhN5izqg==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.2.11.tgz", - "integrity": "sha512-RaXldtUmtPFQGmiRM/W9EFQ6C0Wx+llQWrFl+Bo4tcyE9JQ1jaQKYPJStJrv9ljV9RFyiPM3O00kad6QYqUdfQ==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.2.12.tgz", + "integrity": "sha512-hFQ1TBpxk2DVGPJLRfmrG+j46xtRAn5Z33/95a8b13P6kRcCI6WMY1tWYaepicww53UX6U7jndZf71UW6tXAmQ==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -461,63 +442,63 @@ } }, "@angular/core": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.2.11.tgz", - "integrity": "sha512-O6/opXdOwsAznpactC68TfX8RSErELfyzYGSoNpejDEFdflm0E2jSF4CcdCBlk6WtAJlnL587Lyr9o7AemI0TA==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.2.12.tgz", + "integrity": "sha512-YnHzPNFZIfeIUJrVz+AJSNzufshzVIL3qg9CvKIUQPIjiQt2wxGLSi9KHEupxLrxfdh9gZ3C0gc8weASSkbQpg==", "requires": { "tslib": "^2.0.0" } }, "@angular/forms": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.2.11.tgz", - "integrity": "sha512-joSb7XRq8C0nCharAe48suCKO0PgWbLZGc21xJIir7V8HnjdqQS6g+u+GaqEPj01C6Cdfx/zPzuLeLtL1HbZTg==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.2.12.tgz", + "integrity": "sha512-WHUY2jsgzrhhkUKNy4zmaNthf3KwhukSiJtKAcKhVaRdQmMphK3ZMZ2ArCjqVzkiJdnkgUGYgdpszrxNveA/hQ==", "requires": { "tslib": "^2.0.0" } }, "@angular/language-service": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-11.2.11.tgz", - "integrity": "sha512-k8qaG6z/jcobNiwwPhNz4x60qhexTAdWxrQuDK0CK10WQ5zAkjjau6+LriLpwTfXeRBIyjyc/2TbmIP4Yy5v8w==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-11.2.12.tgz", + "integrity": "sha512-7AMEnVbJeeoZnR73zSS87H6W2lZpx8Je+I90weH0hV1/Q9jYz8i2RAioiEAg8pKWvrxwwGGyMdVg9SFSJqSyWw==", "dev": true }, "@angular/material": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-11.2.10.tgz", - "integrity": "sha512-itylLtTloyCrmtotccVzplso7DGoiFdN91ud2sopGacTpfKVkw4tO5nIWRGWDmuu3dvHCqGo3h6EoZN0l9G+Wg==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-11.2.11.tgz", + "integrity": "sha512-B9uehF/TCaH6+nCY3+S8GxSHzFbk1OD4djzyBcSNsLnwtY3UYSCT9j/J05cAahpCSUPxCWkj4MfgnhtduLmMgA==", "requires": { "tslib": "^2.0.0" } }, "@angular/material-moment-adapter": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-11.2.10.tgz", - "integrity": "sha512-EakXTg40g15mldpDr67NYEPqVdTYTeRfoxZK2YiGKaEhaiycrJluYpATg2VBc8aP2ELsT8fleF18oCEMh571hw==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-11.2.11.tgz", + "integrity": "sha512-0dz7Mgiel6ZWBkGUXtF/OBZqJgmuCSlCJXXNU7ntgqx+IGnMeM7q+yVf86ybvj+q92FdjYW35ALRq+YftpqlSw==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.2.11.tgz", - "integrity": "sha512-5DwczcZHRDh9E+hfzoGC+lfbJe95w8C1mg0EFtxxeGbdtaAXGzlfhDWvLceB5cpd8UNRVY7QvOZ/erfH2i3QTw==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.2.12.tgz", + "integrity": "sha512-m3soGtmbdnmsa7CLzN+ggP5AvmL5YpRebZlUxd1P0mCicxuTNUYqpqKOBe0Y1OeKTgARH8McJrrKoxXc4DAojg==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.11.tgz", - "integrity": "sha512-ldySv63ceIU+KvVYqK1RKkaYxolgC859sp31LPlzAoDbAMnCMB1txRGkiiwUZ6pqph5C3LBsxFTqrLZyNcnNKQ==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.12.tgz", + "integrity": "sha512-o/Debr3Lab5sN+re0B/KrKG9YX2Ld/ZNi4HgX3dkm6YZWhFx9rVrU7BrB8Q8NO6aig2Udh19MhMDCtIvCPFecA==", "requires": { "tslib": "^2.0.0" } }, "@angular/router": { - "version": "11.2.11", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.2.11.tgz", - "integrity": "sha512-OPa8+sId5gz21LJqA4Syos/ue/FFxMuIhx4eOlZ5jcv/FEoDVeT4ByCIejg76HfZy8+n1zsWYvo+Mqe6dvRUpQ==", + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.2.12.tgz", + "integrity": "sha512-Y5rM1M6MXhAdRewRDFy/F4OKI58kF/rMOPP/PVYERsH6W2ShkQqMDoHaP7/AFSJ0+x6zT87u669CSv/TlJn+sg==", "requires": { "tslib": "^2.0.0" } @@ -532,9 +513,9 @@ } }, "@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "@babel/core": { @@ -633,15 +614,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", + "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", "dev": true, "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13" } }, @@ -708,45 +690,51 @@ }, "dependencies": { "@babel/generator": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", - "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", "dev": true, "requires": { - "@babel/types": "^7.13.16", + "@babel/types": "^7.14.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, "@babel/parser": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", - "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", "dev": true }, "@babel/traverse": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", - "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.16", - "@babel/types": "^7.13.17", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", - "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -1329,26 +1317,198 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/plugin-transform-modules-systemjs": { @@ -1365,13 +1525,99 @@ } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -1765,12 +2011,12 @@ } }, "@ngtools/webpack": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.10.tgz", - "integrity": "sha512-2TMB2mAH7B5hnF3FgVNmVvt7gEJ9q2heVCAGz4sac31oHpJUe8IKfkZGwXopV26KoJOXQxP0MJvWMf4GfLQ8Tw==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.11.tgz", + "integrity": "sha512-CfWS6mWG8FftHe+LtsIQnzaADtzKd+oy0BjynD8sXeMNy2y37sqCw9iJfoCNONKaeFglszyfFPAB8Xj3u3WXXg==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.10", + "@angular-devkit/core": "11.2.11", "enhanced-resolve": "5.7.0", "webpack-sources": "2.2.0" } @@ -1946,24 +2192,24 @@ } }, "@schematics/angular": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.10.tgz", - "integrity": "sha512-WcqiUl2HcE5E6HbAFKhFOUeqQEqNL++o6UsKcgk8rQkx5RM7ZkT6uksxiwhfpKzSIqUjwx+xe66fP6pweNZ/yQ==", + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.11.tgz", + "integrity": "sha512-Ii7KabU79Jg2zoU7qR9wFd81TOAePQ6jog7OhoTyE2aKpKyBZlHXA4qq1dJfV3GAE5H1JKVm0lRgGEFJLQitGg==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.10", - "@angular-devkit/schematics": "11.2.10", + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", "jsonc-parser": "3.0.0" } }, "@schematics/update": { - "version": "0.1102.10", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.10.tgz", - "integrity": "sha512-aU5fUT9ddw3n5ZOzx/x1W4Xo2fz+sDtDnrRdKI0Jip/9HE1PaoKxWT6gB5ouDnKETrvgDOArn68zIM8eOAVarg==", + "version": "0.1102.11", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.11.tgz", + "integrity": "sha512-SdQ/Zao+huxSFnKXFbf93EEExzyLy5y+BBs14n9uLwnhaFbd5jlH0xO8/Ui1H6oDuOycSRQdnl7gt3sUr8EbaQ==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.10", - "@angular-devkit/schematics": "11.2.10", + "@angular-devkit/core": "11.2.11", + "@angular-devkit/schematics": "11.2.11", "@yarnpkg/lockfile": "1.1.0", "ini": "2.0.0", "npm-package-arg": "^8.0.0", @@ -2002,6 +2248,12 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "dev": true + }, "@types/chroma-js": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@types/chroma-js/-/chroma-js-2.1.3.tgz", @@ -2101,12 +2353,6 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, "@types/selenium-webdriver": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", @@ -3315,28 +3561,10 @@ "get-intrinsic": "^1.0.2" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { @@ -3579,17 +3807,6 @@ "shallow-clone": "^3.0.0" } }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -4035,38 +4252,38 @@ "dev": true }, "core-js-compat": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.0.tgz", - "integrity": "sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", "dev": true, "requires": { - "browserslist": "^4.16.4", + "browserslist": "^4.16.5", "semver": "7.0.0" }, "dependencies": { "browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001214", + "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" } }, "caniuse-lite": { - "version": "1.0.30001216", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001216.tgz", - "integrity": "sha512-1uU+ww/n5WCJRwUcc9UH/W6925Se5aNnem/G5QaSDga2HzvjYMs8vRbekGUN/PnTZ7ezTHcxxTEb9fgiMYwH6Q==", + "version": "1.0.30001219", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", + "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==", "dev": true }, "electron-to-chromium": { - "version": "1.3.720", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.720.tgz", - "integrity": "sha512-B6zLTxxaOFP4WZm6DrvgRk8kLFYWNhQ5TrHMC0l5WtkMXhU5UbnvWoTfeEwqOruUSlNMhVLfYak7REX6oC5Yfw==", + "version": "1.3.723", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz", + "integrity": "sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==", "dev": true }, "semver": { @@ -4094,15 +4311,16 @@ } }, "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@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" } }, "create-ecdh": { @@ -4337,47 +4555,18 @@ } }, "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", "dev": true }, "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz", + "integrity": "sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==", "dev": true, "requires": { - "postcss": "^7.0.1", "timsort": "^0.3.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-loader": { @@ -4456,23 +4645,18 @@ } }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, "css-selector-tokenizer": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", @@ -4484,12 +4668,12 @@ } }, "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" }, "dependencies": { @@ -4508,9 +4692,9 @@ "dev": true }, "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true }, "cssauron": { @@ -4529,164 +4713,57 @@ "dev": true }, "cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.1.tgz", + "integrity": "sha512-5WubEmKcK2cqw43DUAayRBiIlTdX7iX3ZowrWDVxSVcW3hyohVnbJ4K4mbnWtJp5rfJnUwHg5H4mDAGzmuCM3g==", "dev": true, "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.0.0", + "is-resolvable": "^1.1.0" } }, "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz", + "integrity": "sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q==", "dev": true, "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "css-declaration-sorter": "6.0.0", + "cssnano-utils": "^2.0.0", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.0.0", + "postcss-convert-values": "^5.0.0", + "postcss-discard-comments": "^5.0.0", + "postcss-discard-duplicates": "^5.0.0", + "postcss-discard-empty": "^5.0.0", + "postcss-discard-overridden": "^5.0.0", + "postcss-merge-longhand": "^5.0.1", + "postcss-merge-rules": "^5.0.0", + "postcss-minify-font-values": "^5.0.0", + "postcss-minify-gradients": "^5.0.0", + "postcss-minify-params": "^5.0.0", + "postcss-minify-selectors": "^5.0.0", + "postcss-normalize-charset": "^5.0.0", + "postcss-normalize-display-values": "^5.0.0", + "postcss-normalize-positions": "^5.0.0", + "postcss-normalize-repeat-style": "^5.0.0", + "postcss-normalize-string": "^5.0.0", + "postcss-normalize-timing-functions": "^5.0.0", + "postcss-normalize-unicode": "^5.0.0", + "postcss-normalize-url": "^5.0.0", + "postcss-normalize-whitespace": "^5.0.0", + "postcss-ordered-values": "^5.0.0", + "postcss-reduce-initial": "^5.0.0", + "postcss-reduce-transforms": "^5.0.0", + "postcss-svgo": "^5.0.0", + "postcss-unique-selectors": "^5.0.0" } }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "cssnano-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.0.tgz", + "integrity": "sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==", "dev": true }, "csso": { @@ -4696,30 +4773,6 @@ "dev": true, "requires": { "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "custom-event": { @@ -5096,21 +5149,14 @@ } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", "dev": true, "requires": { "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - } } }, "domain-browser": { @@ -5120,19 +5166,29 @@ "dev": true }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dot-prop": { @@ -5371,41 +5427,6 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es5-ext": { "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", @@ -6420,12 +6441,6 @@ } } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -6901,13 +6916,13 @@ "dev": true }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "import-local": { @@ -7112,9 +7127,9 @@ "dev": true }, "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "is-accessor-descriptor": { @@ -7151,12 +7166,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -7166,27 +7175,12 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -7199,6 +7193,14 @@ "hsla-regex": "^1.0.0", "rgb-regex": "^1.0.1", "rgba-regex": "^1.0.0" + }, + "dependencies": { + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + } } }, "is-core-module": { @@ -7254,12 +7256,6 @@ } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -7311,24 +7307,12 @@ "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", "dev": true }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true - }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -7389,21 +7373,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -8353,9 +8322,9 @@ } }, "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "media-typer": { @@ -8869,9 +8838,9 @@ } }, "ngx-quill": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/ngx-quill/-/ngx-quill-13.2.0.tgz", - "integrity": "sha512-X7Nej3/WcyuR4LiO5hSgGohyaz6UnYyW4o2egaN1DU+Lh+9V/68pvZgYybLtZMIXYu1ynzHyXoEo4OTpBkYnxg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/ngx-quill/-/ngx-quill-13.3.1.tgz", + "integrity": "sha512-KKHTTlGYSRGLzypKAf4QX/JTrUP7YQSD3oSFBgVxuwNunPYRbzw3YSHI8rDV9wG6VS51/mIQlU6WHoBM3pWLcw==", "requires": { "tslib": "^2.0.0" } @@ -9030,9 +8999,9 @@ "dev": true }, "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, "npm-bundled": { @@ -9131,12 +9100,12 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "number-is-nan": { @@ -9194,12 +9163,6 @@ "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==", "dev": true }, - "object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", - "dev": true - }, "object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -9235,17 +9198,6 @@ "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -9255,18 +9207,6 @@ "isobject": "^3.0.1" } }, - "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -9551,14 +9491,6 @@ "dev": true, "requires": { "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } } }, "parse-asn1": { @@ -9604,13 +9536,15 @@ } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, "parse-node-version": { @@ -9850,9 +9784,9 @@ "dev": true }, "postcss": { - "version": "8.2.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.12.tgz", - "integrity": "sha512-BJnGT5+0q2tzvs6oQfnY2NpEJ7rIXNfBnZtQOKCIsweeWXBXeDd5k31UgTdS3d/c02ouspufn37mTaHWkJyzMQ==", + "version": "8.2.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz", + "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -9869,282 +9803,58 @@ } }, "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dev": true, "requires": { - "postcss": "^7.0.27", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.0.0.tgz", + "integrity": "sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "browserslist": "^4.16.0", + "color": "^3.1.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz", + "integrity": "sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.1.0" } }, "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz", + "integrity": "sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==", + "dev": true }, "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz", + "integrity": "sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==", + "dev": true }, "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz", + "integrity": "sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==", + "dev": true }, "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz", + "integrity": "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==", + "dev": true }, "postcss-functions": { "version": "3.0.0", @@ -10217,47 +9927,6 @@ "semver": "^7.3.4" }, "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" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, "schema-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", @@ -10272,265 +9941,72 @@ } }, "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz", + "integrity": "sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw==", "dev": true, "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.0" } }, "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz", + "integrity": "sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==", "dev": true, "requires": { - "browserslist": "^4.0.0", + "browserslist": "^4.16.0", "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "postcss-selector-parser": "^6.0.4", + "vendors": "^1.0.3" } }, "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz", + "integrity": "sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.1.0" } }, "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz", + "integrity": "sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz", + "integrity": "sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.0", + "postcss-value-parser": "^4.1.0", "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz", + "integrity": "sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^3.1.2" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -10541,21 +10017,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -10604,533 +10065,117 @@ } }, "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz", + "integrity": "sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==", + "dev": true }, "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz", + "integrity": "sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz", + "integrity": "sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz", + "integrity": "sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz", + "integrity": "sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==", "dev": true, "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz", + "integrity": "sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz", + "integrity": "sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz", + "integrity": "sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "is-absolute-url": "^3.0.3", + "normalize-url": "^4.5.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz", + "integrity": "sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.1.0" } }, "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz", + "integrity": "sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz", + "integrity": "sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz", + "integrity": "sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssnano-utils": "^2.0.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-selector-parser": { @@ -11144,87 +10189,24 @@ } }, "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.0.tgz", + "integrity": "sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" } }, "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz", + "integrity": "sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.2", "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-value-parser": { @@ -11705,12 +10687,6 @@ "postcss-selector-parser": "^6.0.2" } }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, "qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", @@ -12096,12 +11072,20 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url": { @@ -13438,26 +12422,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -13514,53 +12478,13 @@ } }, "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.0.tgz", + "integrity": "sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" } }, "stylus": { @@ -13702,33 +12626,73 @@ } }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", "dev": true, "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" }, "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "minimist": "^1.2.5" + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } @@ -14258,18 +13222,6 @@ "integrity": "sha512-VwIvGlFNmpKbjzRt51jpbbFTrKIEgGHxIwA8Y69K1Bqc6bTIV7TaGGABOkghSFQWsLmcRB4drGvpfv9z2szqoQ==", "dev": true }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -14363,12 +13315,6 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -14487,18 +13433,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -15490,12 +14424,6 @@ } } }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -15733,19 +14661,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", diff --git a/package.json b/package.json index a280f3f6..dd64bf5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fuse/demo", - "version": "12.1.0", + "version": "12.2.0", "license": "https://themeforest.net/licenses/standard", "private": true, "scripts": { @@ -12,17 +12,17 @@ "e2e": "ng e2e" }, "dependencies": { - "@angular/animations": "11.2.11", - "@angular/cdk": "11.2.10", - "@angular/common": "11.2.11", - "@angular/compiler": "11.2.11", - "@angular/core": "11.2.11", - "@angular/forms": "11.2.11", - "@angular/material": "11.2.10", - "@angular/material-moment-adapter": "11.2.10", - "@angular/platform-browser": "11.2.11", - "@angular/platform-browser-dynamic": "11.2.11", - "@angular/router": "11.2.11", + "@angular/animations": "11.2.12", + "@angular/cdk": "11.2.11", + "@angular/common": "11.2.12", + "@angular/compiler": "11.2.12", + "@angular/core": "11.2.12", + "@angular/forms": "11.2.12", + "@angular/material": "11.2.11", + "@angular/material-moment-adapter": "11.2.11", + "@angular/platform-browser": "11.2.12", + "@angular/platform-browser-dynamic": "11.2.12", + "@angular/router": "11.2.12", "@fullcalendar/angular": "4.4.5-beta", "@fullcalendar/core": "4.4.2", "@fullcalendar/daygrid": "4.4.2", @@ -38,7 +38,7 @@ "moment": "2.29.1", "ng-apexcharts": "1.5.9", "ngx-markdown": "11.1.3", - "ngx-quill": "13.2.0", + "ngx-quill": "13.3.1", "perfect-scrollbar": "1.5.0", "quill": "1.3.7", "rrule": "2.6.8", @@ -48,10 +48,10 @@ "zone.js": "0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "0.1102.10", - "@angular/cli": "11.2.10", - "@angular/compiler-cli": "11.2.11", - "@angular/language-service": "11.2.11", + "@angular-devkit/build-angular": "0.1102.11", + "@angular/cli": "11.2.11", + "@angular/compiler-cli": "11.2.12", + "@angular/language-service": "11.2.12", "@tailwindcss/aspect-ratio": "0.2.0", "@tailwindcss/line-clamp": "0.2.0", "@tailwindcss/typography": "0.4.0", @@ -73,7 +73,7 @@ "karma-jasmine": "4.0.1", "karma-jasmine-html-reporter": "1.5.4", "lodash": "4.17.21", - "postcss": "8.2.12", + "postcss": "8.2.13", "protractor": "7.0.0", "tailwindcss": "2.1.2", "ts-node": "8.3.0", diff --git a/src/@fuse/version/fuse-version.ts b/src/@fuse/version/fuse-version.ts index 71492656..3b764131 100644 --- a/src/@fuse/version/fuse-version.ts +++ b/src/@fuse/version/fuse-version.ts @@ -1,4 +1,4 @@ import { Version } from '@fuse/version/version'; -const __FUSE_VERSION__ = '12.1.0'; +const __FUSE_VERSION__ = '12.2.0'; export const FUSE_VERSION = new Version(__FUSE_VERSION__).full; diff --git a/src/app/mock-api/common/navigation/data.ts b/src/app/mock-api/common/navigation/data.ts index 650c6ef6..2c6a0855 100644 --- a/src/app/mock-api/common/navigation/data.ts +++ b/src/app/mock-api/common/navigation/data.ts @@ -47,6 +47,13 @@ export const defaultNavigation: FuseNavigationItem[] = [ icon : 'heroicons_outline:calendar', link : '/apps/calendar' }, + { + id : 'apps.chat', + title: 'Chat', + type : 'basic', + icon : 'heroicons_outline:chat-alt', + link : '/apps/chat' + }, { id : 'apps.contacts', title: 'Contacts', @@ -899,7 +906,7 @@ export const defaultNavigation: FuseNavigationItem[] = [ icon : 'heroicons_outline:speakerphone', link : '/docs/changelog', badge: { - title : '12.1.0', + title : '12.2.0', classes: 'px-2 bg-yellow-300 text-black rounded-full' } }, @@ -1155,6 +1162,13 @@ export const futuristicNavigation: FuseNavigationItem[] = [ icon : 'heroicons_outline:calendar', link : '/apps/calendar' }, + { + id : 'apps.chat', + title: 'Chat', + type : 'basic', + icon : 'heroicons_outline:chat-alt', + link : '/apps/chat' + }, { id : 'apps.contacts', title: 'Contacts', diff --git a/src/app/modules/admin/docs/changelog/changelog.ts b/src/app/modules/admin/docs/changelog/changelog.ts index aa8cf9d0..60840e85 100644 --- a/src/app/modules/admin/docs/changelog/changelog.ts +++ b/src/app/modules/admin/docs/changelog/changelog.ts @@ -10,6 +10,30 @@ export class ChangelogComponent { changelog: any[] = [ + // v12.2.0 + { + version : 'v12.2.0', + releaseDate: 'May 01, 2021', + changes : [ + { + type: 'Added', + list: [ + '(apps/chat) New and improvement version of Chat app', + '(fuse/fullscreen) Added fullscreen toggle component' + ] + }, + { + type: 'Changed', + list: [ + '(dependencies) Updated Angular, Angular Material and various other packages', + '(apps/academy) Better error handling on courses that are not exist', + '(apps/academy) Added missing trackBy functions to ngFor loops', + '(apps/mailbox) Removed unused methods', + '(pages/pricing) Improved the spacing of the CTA section on all pricing pages' + ] + } + ] + }, // v12.1.0 { version : 'v12.1.0', From e3821da077745874e3cec219eb84c23a6a3979bb Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 30 Apr 2021 19:18:09 +0300 Subject: [PATCH 08/10] (apps/chat) New and improved Chat app --- src/app/app.routing.ts | 1 + src/app/mock-api/apps/chat/api.ts | 167 + src/app/mock-api/apps/chat/data.ts | 3007 +++++++++++++++++ src/app/mock-api/index.ts | 2 + .../admin/apps/chat/chat.component.html | 8 + .../modules/admin/apps/chat/chat.component.ts | 17 + .../modules/admin/apps/chat/chat.module.ts | 44 + .../modules/admin/apps/chat/chat.resolvers.ts | 147 + .../modules/admin/apps/chat/chat.routing.ts | 37 + .../modules/admin/apps/chat/chat.service.ts | 202 ++ src/app/modules/admin/apps/chat/chat.types.ts | 55 + .../apps/chat/chats/chats.component.html | 190 ++ .../admin/apps/chat/chats/chats.component.ts | 138 + .../contact-info/contact-info.component.html | 85 + .../contact-info/contact-info.component.ts | 22 + .../conversation/conversation.component.html | 215 ++ .../conversation/conversation.component.ts | 143 + .../chat/new-chat/new-chat.component.html | 51 + .../apps/chat/new-chat/new-chat.component.ts | 68 + .../apps/chat/profile/profile.component.html | 80 + .../apps/chat/profile/profile.component.ts | 53 + 21 files changed, 4732 insertions(+) create mode 100644 src/app/mock-api/apps/chat/api.ts create mode 100644 src/app/mock-api/apps/chat/data.ts create mode 100644 src/app/modules/admin/apps/chat/chat.component.html create mode 100644 src/app/modules/admin/apps/chat/chat.component.ts create mode 100644 src/app/modules/admin/apps/chat/chat.module.ts create mode 100644 src/app/modules/admin/apps/chat/chat.resolvers.ts create mode 100644 src/app/modules/admin/apps/chat/chat.routing.ts create mode 100644 src/app/modules/admin/apps/chat/chat.service.ts create mode 100644 src/app/modules/admin/apps/chat/chat.types.ts create mode 100644 src/app/modules/admin/apps/chat/chats/chats.component.html create mode 100644 src/app/modules/admin/apps/chat/chats/chats.component.ts create mode 100644 src/app/modules/admin/apps/chat/contact-info/contact-info.component.html create mode 100644 src/app/modules/admin/apps/chat/contact-info/contact-info.component.ts create mode 100644 src/app/modules/admin/apps/chat/conversation/conversation.component.html create mode 100644 src/app/modules/admin/apps/chat/conversation/conversation.component.ts create mode 100644 src/app/modules/admin/apps/chat/new-chat/new-chat.component.html create mode 100644 src/app/modules/admin/apps/chat/new-chat/new-chat.component.ts create mode 100644 src/app/modules/admin/apps/chat/profile/profile.component.html create mode 100644 src/app/modules/admin/apps/chat/profile/profile.component.ts diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index f3624eee..4b7bbc28 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -84,6 +84,7 @@ export const appRoutes: Route[] = [ {path: 'apps', children: [ {path: 'academy', loadChildren: () => import('app/modules/admin/apps/academy/academy.module').then(m => m.AcademyModule)}, {path: 'calendar', loadChildren: () => import('app/modules/admin/apps/calendar/calendar.module').then(m => m.CalendarModule)}, + {path: 'chat', loadChildren: () => import('app/modules/admin/apps/chat/chat.module').then(m => m.ChatModule)}, {path: 'contacts', loadChildren: () => import('app/modules/admin/apps/contacts/contacts.module').then(m => m.ContactsModule)}, {path: 'ecommerce', loadChildren: () => import('app/modules/admin/apps/ecommerce/ecommerce.module').then(m => m.ECommerceModule)}, {path: 'file-manager', loadChildren: () => import('app/modules/admin/apps/file-manager/file-manager.module').then(m => m.FileManagerModule)}, diff --git a/src/app/mock-api/apps/chat/api.ts b/src/app/mock-api/apps/chat/api.ts new file mode 100644 index 00000000..4e465962 --- /dev/null +++ b/src/app/mock-api/apps/chat/api.ts @@ -0,0 +1,167 @@ +import { Injectable } from '@angular/core'; +import { assign, cloneDeep, omit } from 'lodash-es'; +import { FuseMockApiService } from '@fuse/lib/mock-api'; +import { chats as chatsData, contacts as contactsData, messages as messagesData, profile as profileData } from 'app/mock-api/apps/chat/data'; + +@Injectable({ + providedIn: 'root' +}) +export class ChatMockApi +{ + private _chats: any[] = chatsData; + private _contacts: any[] = contactsData; + private _messages: any[] = messagesData; + private _profile: any = profileData; + + /** + * Constructor + */ + constructor(private _fuseMockApiService: FuseMockApiService) + { + // Register Mock API handlers + this.registerHandlers(); + + // Modify the chats array to attach certain data to it + this._chats = this._chats.map((chat) => ({ + ...chat, + // Get the actual contact object from the id and attach it to the chat + contact: this._contacts.find((contact) => contact.id === chat.contactId), + // Since we use same set of messages on all chats, we assign them here. + messages: this._messages.map((message) => ({ + ...message, + chatId : chat.id, + contactId: message.contactId === 'me' ? this._profile.id : chat.contactId, + isMine : message.contactId === 'me' + })) + })); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Register Mock API handlers + */ + registerHandlers(): void + { + // ----------------------------------------------------------------------------------------------------- + // @ Chats - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/apps/chat/chats') + .reply(() => { + + // Clone the chats + const chats = cloneDeep(this._chats); + + // Return the response + return [200, chats]; + }); + + // ----------------------------------------------------------------------------------------------------- + // @ Chat - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/apps/chat/chat') + .reply(({request}) => { + + // Get the chat id + const id = request.params.get('id'); + + // Clone the chats + const chats = cloneDeep(this._chats); + + // Find the chat we need + const chat = chats.find((item) => item.id === id); + + // Return the response + return [200, chat]; + }); + + // ----------------------------------------------------------------------------------------------------- + // @ Chat - PATCH + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onPatch('api/apps/chat/chat') + .reply(({request}) => { + + // Get the id and chat + const id = request.body.id; + const chat = cloneDeep(request.body.chat); + + // Prepare the updated chat + let updatedChat = null; + + // Find the chat and update it + this._chats.forEach((item, index, chats) => { + + if ( item.id === id ) + { + // Update the chat + chats[index] = assign({}, chats[index], chat); + + // Store the updated chat + updatedChat = chats[index]; + } + }); + + // Return the response + return [200, updatedChat]; + }); + + // ----------------------------------------------------------------------------------------------------- + // @ Contacts - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/apps/chat/contacts') + .reply(() => { + + // Clone the contacts + let contacts = cloneDeep(this._contacts); + + // Sort the contacts by the name field by default + contacts.sort((a, b) => a.name.localeCompare(b.name)); + + // Omit details and attachments from contacts + contacts = contacts.map((contact) => omit(contact, ['details', 'attachments'])); + + // Return the response + return [200, contacts]; + }); + + // ----------------------------------------------------------------------------------------------------- + // @ Contact Details - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/apps/chat/contact') + .reply(({request}) => { + + // Get the contact id + const id = request.params.get('id'); + + // Clone the contacts + const contacts = cloneDeep(this._contacts); + + // Find the contact + const contact = contacts.find((item) => item.id === id); + + // Return the response + return [200, contact]; + }); + + // ----------------------------------------------------------------------------------------------------- + // @ Profile - GET + // ----------------------------------------------------------------------------------------------------- + this._fuseMockApiService + .onGet('api/apps/chat/profile') + .reply(() => { + + // Clone the profile + const profile = cloneDeep(this._profile); + + // Return the response + return [200, profile]; + }); + } +} diff --git a/src/app/mock-api/apps/chat/data.ts b/src/app/mock-api/apps/chat/data.ts new file mode 100644 index 00000000..0ca269cc --- /dev/null +++ b/src/app/mock-api/apps/chat/data.ts @@ -0,0 +1,3007 @@ +/* tslint:disable:max-line-length */ +import * as moment from 'moment'; + +/** + * Attachments are common and will be filled from here + * to keep the demo data maintainable. + */ +const _attachments = { + media: [ + 'assets/images/cards/01-320x200.jpg', + 'assets/images/cards/02-320x200.jpg', + 'assets/images/cards/03-320x200.jpg', + 'assets/images/cards/04-320x200.jpg', + 'assets/images/cards/05-320x200.jpg', + 'assets/images/cards/06-320x200.jpg', + 'assets/images/cards/07-320x200.jpg', + 'assets/images/cards/08-320x200.jpg' + ], + docs : [], + links: [] +}; + +/** + * If a message belongs to our user, it's marked by setting it as + * 'me'. If it belongs to the user we are chatting with, then it + * left empty. We will be using this same conversation for each chat + * to keep things more maintainable for the demo. + */ +export const messages = [ + { + id : 'e6b2b82f-b199-4a60-9696-5f3e40d2715d', + chatId : '', + contactId: 'me', + value : 'Hi!', + createdAt: moment().subtract(1, 'week').hour(18).minute(56).toISOString() + }, + { + id : 'eb82cf4b-fa93-4bf4-a88a-99e987ddb7ea', + chatId : '', + contactId: '', + value : 'Hey, dude!', + createdAt: moment().subtract(1, 'week').hour(19).minute(4).toISOString() + }, + { + id : '3cf9b2a6-ae54-47db-97b2-ee139a8f84e5', + chatId : '', + contactId: '', + value : 'Long time no see.', + createdAt: moment().subtract(1, 'week').hour(19).minute(4).toISOString() + }, + { + id : '2ab91b0f-fafb-45f3-88df-7efaff29134b', + chatId : '', + contactId: 'me', + value : 'Yeah, man... Things were quite busy for me and my family.', + createdAt: moment().subtract(1, 'week').hour(19).minute(6).toISOString() + }, + { + id : '10e81481-378f-49ac-b06b-7c59dcc639ae', + chatId : '', + contactId: '', + value : 'What\'s up? Anything I can help with?', + createdAt: moment().subtract(1, 'week').hour(19).minute(6).toISOString() + }, + { + id : '3b334e72-6605-4ebd-a4f6-3850067048de', + chatId : '', + contactId: 'me', + value : 'We\'ve been on the move, changed 3 places over 4 months', + createdAt: moment().subtract(1, 'week').hour(19).minute(7).toISOString() + }, + { + id : '25998113-3a96-4dd0-a7b9-4d2bb58db3f3', + chatId : '', + contactId: '', + value : 'Wow! That\'s crazy! 🤯 What happened?', + createdAt: moment().subtract(1, 'week').hour(19).minute(7).toISOString() + }, + { + id : '30adb3da-0e4f-487e-aec2-6d9f31e097f6', + chatId : '', + contactId: 'me', + value : 'You know I got a job in that big software company. First move was because of that.', + createdAt: moment().subtract(1, 'week').hour(19).minute(8).toISOString() + }, + { + id : 'c0d6fd6e-d294-4845-8751-e84b8f2c4d3b', + chatId : '', + contactId: 'me', + value : 'Then they decided to re-locate me after a month', + createdAt: moment().subtract(1, 'week').hour(19).minute(8).toISOString() + }, + { + id : '8d3c442b-62fa-496f-bffa-210ff5c1866b', + chatId : '', + contactId: 'me', + value : 'Which was an absolute pain because we just set up everything, house, kids school and all that.', + createdAt: moment().subtract(1, 'week').hour(19).minute(8).toISOString() + }, + { + id : '3cf26ef0-e81f-4698-ac39-487454413332', + chatId : '', + contactId: 'me', + value : 'So we moved the second time.', + createdAt: moment().subtract(1, 'week').hour(19).minute(9).toISOString() + }, + { + id : '415151b9-9ee9-40a4-a4ad-2d88146bc71b', + chatId : '', + contactId: '', + value : 'It\'s crazy!', + createdAt: moment().subtract(1, 'week').hour(19).minute(9).toISOString() + }, + { + id : '3a2d3a0e-839b-46e7-86ae-ca0826ecda7c', + chatId : '', + contactId: 'me', + value : 'Then this virus thing happened and just after a week we moved in, they decided the whole department will be working remotely.', + createdAt: moment().subtract(1, 'week').hour(19).minute(10).toISOString() + }, + { + id : '5329c20d-6754-47ec-af8c-660c72be3528', + chatId : '', + contactId: 'me', + value : 'And then we decided to move back our first location because, you know, everything was already setup so that\'s the third time.', + createdAt: moment().subtract(1, 'week').hour(19).minute(10).toISOString() + }, + { + id : '415151b9-9ee9-40a4-a4ad-2d88146bc71b', + chatId : '', + contactId: '', + value : 'Ohh dude, I\'m really sorry you had to go through all that in such a short period of time', + createdAt: moment().subtract(1, 'week').hour(19).minute(11).toISOString() + }, + { + id : 'ea7662d5-7b72-4c19-ad6c-f80320541001', + chatId : '', + contactId: '', + value : '😕', + createdAt: moment().subtract(1, 'week').hour(19).minute(11).toISOString() + }, + { + id : '3a2d3a0e-839b-46e7-86ae-ca0826ecda7c', + chatId : '', + contactId: 'me', + value : 'Thanks, man! It was good catching up with you.', + createdAt: moment().subtract(1, 'week').hour(19).minute(11).toISOString() + }, + { + id : '5329c20d-6754-47ec-af8c-660c72be3528', + chatId : '', + contactId: '', + value : 'Yeah dude. Hit me again next week so we can grab a coffee, remotely!', + createdAt: moment().subtract(1, 'week').hour(19).minute(12).toISOString() + }, + { + id : '5329c20d-6754-47ec-af8c-660c72be3528', + chatId : '', + contactId: 'me', + value : ':) Sure, man! See you next week!', + createdAt: moment().subtract(1, 'week').hour(19).minute(12).toISOString() + }, + { + id : '5329c20d-6754-47ec-af8c-660c72be3528', + chatId : '', + contactId: '', + value : 'See you later!', + createdAt: moment().subtract(1, 'week').hour(19).minute(12).toISOString() + }, + { + id : 'bab8ca0e-b8e5-4375-807b-1c91fca25a5d', + chatId : '', + contactId: 'me', + value : 'Hey! Are you available right now? How about if we grab that coffee today? Remotely, of course :)', + createdAt: moment().hour(12).minute(45).toISOString() + }, + { + id : '8445a84d-599d-4e2d-a31c-5f4f29ad2b4c', + chatId : '', + contactId: '', + value : 'Hi!', + createdAt: moment().hour(12).minute(56).toISOString() + }, + { + id : '9f506742-50da-4350-af9d-61e53392fa08', + chatId : '', + contactId: '', + value : 'Sure thing! I\'m gonna call you in 5, is it okay?', + createdAt: moment().hour(12).minute(56).toISOString() + }, + { + id : 'ca8523d8-faed-45f7-af09-f6bd5c3f3875', + chatId : '', + contactId: 'me', + value : 'Awesome! Call me in 5 minutes..', + createdAt: moment().hour(12).minute(58).toISOString() + }, + { + id : '39944b00-1ffe-4ffb-8ca6-13c292812e06', + chatId : '', + contactId: '', + value : '👍🏻', + createdAt: moment().hour(13).minute(0).toISOString() + } +]; +export const chats = [ + { + id : 'ff6bc7f1-449a-4419-af62-b89ce6cae0aa', + contactId : '9d3f0e7f-dcbd-4e56-a5e8-87b8154e9edf', + unreadCount : 2, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '4459a3f0-b65e-4df2-8c37-6ec72fcc4b31', + contactId : '16b9e696-ea95-4dd8-86c4-3caf705a1dc6', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'f73a5a34-a723-4b35-8439-5289e0164c83', + contactId : 'bf172879-423a-4fd6-8df3-6d1938bbfe1f', + unreadCount : 1, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '747f101c-0371-4ca3-9f20-cb913a80fe89', + contactId : 'abd9e78b-9e96-428f-b3ff-4d934c401bee', + unreadCount : 0, + muted : true, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'b3facfc4-dfc2-4ac2-b55d-cb70b3e68419', + contactId : '6519600a-5eaa-45f8-8bed-c46fddb3b26a', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'e3127982-9e53-4611-ac27-eb70c84be4aa', + contactId : 'b62359fd-f2a8-46e6-904e-31052d1cd675', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'a30351f3-bfa6-4ce3-b13a-82748fe0edee', + contactId : '2c37ed00-427a-46d7-8f8f-d711c768d1ee', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '5636c0ba-fa47-42ca-9160-27340583041e', + contactId : 'b8258ccf-48b5-46a2-9c95-e0bd7580c645', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'feddd91a-51af-48d8-99b0-cd99ee060a36', + contactId : 'e2946946-b4b5-4fd7-bab4-62c38cdff2f1', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '89421c2f-1751-4040-b09b-4a4268db47b9', + contactId : '12148fa2-e0a4-49fb-b3c5-daeecdb5180a', + unreadCount : 0, + muted : true, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'ffbbfdb4-0485-44aa-8521-5ce1eda3fd2f', + contactId : '81fdc48c-5572-4123-8a73-71b7892120de', + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : 'a477baea-df90-4e2f-b108-7791bcd50bc8', + contactId : 'a9a9f382-e4c3-42fb-9fe9-65aa534732b5', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '450840c8-aa0b-47a4-b6ca-b864ad9a3a88', + contactId : '7e8e1f1e-d19f-45c7-86bd-6fef599dae71', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '427270f0-841c-47f9-912c-3fd8139db5e6', + contactId : '8141dd08-3a6e-4770-912c-59d0ed06dde6', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + }, + { + id : '491b2918-e71e-4017-919e-0ba009afd003', + contactId : '114642a2-ccb7-4cb1-ad2b-5e9b6a0c1d2e', + unreadCount : 0, + muted : false, + lastMessage : 'See you tomorrow!', + lastMessageAt: '26/04/2021' + } +]; +export const contacts = [ + { + id : 'cd5fa417-b667-482d-b208-798d9da3213c', + avatar : 'assets/images/avatars/male-01.jpg', + name : 'Dejesus Michael', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'dejesusmichael@mail.org', + label: 'Personal' + }, + { + email: 'michael.dejesus@vitricomp.io', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'bs', + number : '984 531 2468', + label : 'Mobile' + }, + { + country: 'bs', + number : '806 470 2693', + label : 'Work' + } + ], + title : 'Track Service Worker', + company : 'Vitricomp', + birthday : '1975-01-10T12:00:00.000Z', + address : '279 Independence Avenue, Calvary, Guam, PO4127' + }, + attachments: _attachments + }, + { + id : 'beec5287-ed50-4504-858a-5dc3f8ce6935', + avatar : null, + name : 'Dena Molina', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'denamolina@mail.us', + label: 'Personal' + }, + { + email: 'molina.dena@envire.tv', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'io', + number : '934 537 3180', + label : 'Mobile' + } + ], + title : 'Weather Analyst', + company : 'Envire', + birthday : '1994-12-05T12:00:00.000Z', + address : '856 Woodside Avenue, Alfarata, Iowa, PO4992' + }, + attachments: _attachments + }, + { + id : '9d3f0e7f-dcbd-4e56-a5e8-87b8154e9edf', + avatar : 'assets/images/avatars/male-02.jpg', + name : 'Bernard Langley', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'bernardlangley@mail.com', + label: 'Personal' + }, + { + email: 'langley.bernard@boilcat.name', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'md', + number : '893 548 2862', + label : 'Mobile' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Boilcat', + birthday : '1988-05-26T12:00:00.000Z', + address : '943 Adler Place, Hamilton, South Dakota, PO5592' + }, + attachments: _attachments + }, + { + id : '42a5da95-5e6d-42fd-a09d-de755d123a47', + background : 'assets/images/cards/16-640x480.jpg', + name : 'Mclaughlin Steele', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'mclaughlinsteele@mail.me', + label: 'Personal' + }, + { + email: 'steele.mclaughlin@accel.info', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'va', + number : '830 484 3813', + label : 'Mobile' + }, + { + country: 'va', + number : '999 475 2789', + label : 'Work' + }, + { + country: 'va', + number : '933 406 3598', + label : 'Home' + } + ], + company : 'Accel', + birthday : '1968-08-13T12:00:00.000Z', + address : '334 Sandford Street, Savage, Virgin Islands, PO1858' + }, + attachments: _attachments + }, + { + id : 'a7806ced-03f1-4197-8b30-00bdd463366b', + avatar : 'assets/images/avatars/male-04.jpg', + name : 'Marsh Cochran', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'marshcochran@mail.biz', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'tz', + number : '864 401 3980', + label : 'Mobile' + }, + { + country: 'tz', + number : '956 546 2589', + label : 'Work' + } + ], + title : 'Fundraising Director', + company : 'Xsports', + birthday : '1983-12-22T12:00:00.000Z', + address : '487 Hamilton Walk, Bergoo, American Samoa, PO5616' + }, + attachments: _attachments + }, + { + id : 'f4ad15d9-5a24-463a-88ea-6189d6bb3a53', + avatar : 'assets/images/avatars/male-05.jpg', + name : 'Parrish Austin', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'parrishaustin@mail.co.uk', + label: 'Personal' + }, + { + email: 'austin.parrish@insource.net', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'lv', + number : '834 426 3574', + label : 'Mobile' + }, + { + country: 'lv', + number : '816 573 3694', + label : 'Work' + }, + { + country: 'lv', + number : '967 515 2009', + label : 'Home' + } + ], + title : 'Motor Winder', + company : 'Insource', + birthday : '1963-08-24T12:00:00.000Z', + address : '610 Harbor Lane, Cascades, Minnesota, PO8639' + }, + attachments: _attachments + }, + { + id : '780d0111-5e5c-4694-8d1d-0ea421971fbf', + avatar : 'assets/images/avatars/female-02.jpg', + name : 'Laverne Dodson', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'lavernedodson@mail.ca', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'ar', + number : '964 417 2318', + label : 'Mobile' + }, + { + country: 'ar', + number : '830 410 2506', + label : 'Work' + } + ], + title : 'Television News Producer', + company : 'Lovepad', + birthday : '1973-09-25T12:00:00.000Z', + address : '428 Newport Street, Neahkahnie, Arkansas, PO8324' + }, + attachments: _attachments + }, + { + id : 'bf172879-423a-4fd6-8df3-6d1938bbfe1f', + avatar : 'assets/images/avatars/male-06.jpg', + name : 'Edwards Mckenzie', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'edwardsmckenzie@mail.org', + label: 'Personal' + }, + { + email: 'mckenzie.edwards@bugsall.io', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'pe', + number : '934 519 2903', + label : 'Mobile' + }, + { + country: 'pe', + number : '989 489 3662', + label : 'Work' + }, + { + country: 'pe', + number : '813 461 2790', + label : 'Home' + } + ], + title : 'Legal Assistant', + company : 'Bugsall', + birthday : '1988-07-27T12:00:00.000Z', + address : '384 Polhemus Place, Dalton, Palau, PO6038' + }, + attachments: _attachments + }, + { + id : '1eaa3213-ece2-4ba6-8e15-eb36ca388f50', + avatar : 'assets/images/avatars/female-03.jpg', + name : 'Trudy Berg', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'trudyberg@mail.us', + label: 'Personal' + }, + { + email: 'berg.trudy@satiance.tv', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'ls', + number : '912 539 2770', + label : 'Mobile' + } + ], + title : 'Meteorologist', + company : 'Satiance', + birthday : '1989-12-15T12:00:00.000Z', + address : '945 Jerome Avenue, Riceville, North Carolina, PO1625' + }, + attachments: _attachments + }, + { + id : 'abd9e78b-9e96-428f-b3ff-4d934c401bee', + avatar : 'assets/images/avatars/female-04.jpg', + name : 'Elsie Melendez', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'elsiemelendez@mail.com', + label: 'Personal' + }, + { + email: 'melendez.elsie@chillium.name', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'tg', + number : '907 515 3007', + label : 'Mobile' + }, + { + country: 'tg', + number : '967 534 2803', + label : 'Work' + } + ], + title : 'Fundraising Director', + company : 'Chillium', + birthday : '1980-06-28T12:00:00.000Z', + address : '428 Varanda Place, Veyo, Oklahoma, PO6188' + }, + attachments: _attachments + }, + { + id : 'efae92cc-3bd1-4c6a-a395-b6760c69bd55', + avatar : 'assets/images/avatars/male-07.jpg', + name : 'Lamb Underwood', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'lambunderwood@mail.me', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'pf', + number : '855 517 2767', + label : 'Mobile' + }, + { + country: 'pf', + number : '906 442 3593', + label : 'Work' + }, + { + country: 'pf', + number : '905 402 2121', + label : 'Home' + } + ], + title : 'Legal Assistant', + company : 'Exotechno', + birthday : '1990-07-26T12:00:00.000Z', + address : '609 Greenpoint Avenue, Beason, Vermont, PO5229' + }, + attachments: _attachments + }, + { + id : 'bde636a7-c3d2-4bff-939a-aab11df1516b', + avatar : null, + name : 'Tessa Valdez', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'tessavaldez@mail.info', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'dz', + number : '892 430 2631', + label : 'Mobile' + }, + { + country: 'dz', + number : '997 525 2354', + label : 'Work' + }, + { + country: 'dz', + number : '907 472 2857', + label : 'Home' + } + ], + title : 'Banker Mason', + company : 'Securia', + birthday : '1994-01-10T12:00:00.000Z', + address : '183 Crosby Avenue, Blanco, Mississippi, PO3463' + }, + attachments: _attachments + }, + { + id : '6519600a-5eaa-45f8-8bed-c46fddb3b26a', + background : 'assets/images/cards/24-640x480.jpg', + name : 'Mcleod Wagner', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'mcleodwagner@mail.biz', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'at', + number : '977 590 2773', + label : 'Mobile' + }, + { + country: 'at', + number : '828 496 3813', + label : 'Work' + }, + { + country: 'at', + number : '831 432 2512', + label : 'Home' + } + ], + company : 'Inrt', + birthday : '1980-12-03T12:00:00.000Z', + address : '736 Glen Street, Kaka, West Virginia, PO9350' + }, + attachments: _attachments + }, + { + id : '6d80a6f6-2884-4ac4-9c73-06b82c220017', + avatar : 'assets/images/avatars/female-06.jpg', + name : 'Kristie Hall', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'kristiehall@mail.co.uk', + label: 'Personal' + }, + { + email: 'hall.kristie@austech.net', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'tn', + number : '841 530 3641', + label : 'Mobile' + }, + { + country: 'tn', + number : '941 410 3743', + label : 'Work' + }, + { + country: 'tn', + number : '938 599 3850', + label : 'Home' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Austech', + birthday : '1975-08-31T12:00:00.000Z', + address : '547 Revere Place, Hoehne, New Hampshire, PO2125' + }, + attachments: _attachments + }, + { + id : '35190d23-036e-44ef-b545-cc744c626edd', + avatar : 'assets/images/avatars/female-07.jpg', + name : 'Shannon Kennedy', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'shannonkennedy@mail.ca', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'gb', + number : '899 508 2992', + label : 'Mobile' + }, + { + country: 'gb', + number : '834 499 3354', + label : 'Work' + }, + { + country: 'gb', + number : '834 526 3388', + label : 'Home' + } + ], + title : 'Gas Meter Mechanic', + company : 'Eventix', + birthday : '1994-09-07T12:00:00.000Z', + address : '480 Chase Court, Edinburg, Kansas, PO5357' + }, + attachments: _attachments + }, + { + id : 'b018c194-68ec-4915-ab56-e9f3bd2d98db', + avatar : 'assets/images/avatars/female-08.jpg', + name : 'Martha Swanson', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'marthaswanson@mail.org', + label: 'Personal' + }, + { + email: 'swanson.martha@sequitur.io', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'gb', + number : '844 480 3309', + label : 'Mobile' + }, + { + country: 'gb', + number : '981 591 3239', + label : 'Work' + }, + { + country: 'gb', + number : '923 484 3147', + label : 'Home' + } + ], + title : 'Short Story Writer', + company : 'Sequitur', + birthday : '1993-12-31T12:00:00.000Z', + address : '595 Howard Place, Convent, Rhode Island, PO6993' + }, + attachments: _attachments + }, + { + id : 'b7c355e9-e003-467e-82d2-4f6978c1a696', + avatar : 'assets/images/avatars/female-09.jpg', + name : 'Jacklyn Morgan', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'jacklynmorgan@mail.us', + label: 'Personal' + }, + { + email: 'morgan.jacklyn@shopabout.tv', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'so', + number : '974 542 2061', + label : 'Mobile' + } + ], + title : 'Animal Sitter', + company : 'Shopabout', + birthday : '1976-09-30T12:00:00.000Z', + address : '971 Conover Street, Statenville, Louisiana, PO6622' + }, + attachments: _attachments + }, + { + id : 'cfa07b7c-93d1-42e7-9592-493d9efc78ae', + avatar : 'assets/images/avatars/female-10.jpg', + name : 'Tonya Bowers', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'tonyabowers@mail.com', + label: 'Personal' + }, + { + email: 'bowers.tonya@tourmania.name', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'tv', + number : '922 585 2914', + label : 'Mobile' + }, + { + country: 'tv', + number : '913 538 2961', + label : 'Work' + } + ], + title : 'Track Service Worker', + company : 'Tourmania', + birthday : '1976-06-14T12:00:00.000Z', + address : '197 Marconi Place, Welda, Delaware, PO6061' + }, + attachments: _attachments + }, + { + id : '00feeb63-c83a-4655-a37e-a07da10cfa1c', + avatar : 'assets/images/avatars/female-11.jpg', + name : 'Latonya Cruz', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'latonyacruz@mail.me', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'tm', + number : '981 508 2080', + label : 'Mobile' + }, + { + country: 'tm', + number : '817 425 2052', + label : 'Work' + }, + { + country: 'tm', + number : '939 434 3805', + label : 'Home' + } + ], + title : 'Motor Winder', + company : 'Zilch', + birthday : '1967-11-28T12:00:00.000Z', + address : '775 Dahill Road, Iberia, California, PO2169' + }, + attachments: _attachments + }, + { + id : '142abf21-e635-4a7d-9330-e57f66adcdbe', + avatar : 'assets/images/avatars/female-12.jpg', + name : 'Evangelina Mcclain', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'evangelinamcclain@mail.info', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'ck', + number : '992 583 3187', + label : 'Mobile' + }, + { + country: 'ck', + number : '881 472 3297', + label : 'Work' + }, + { + country: 'ck', + number : '846 477 3596', + label : 'Home' + } + ], + title : 'Congressional Representative', + company : 'Straloy', + birthday : '1976-02-15T12:00:00.000Z', + address : '305 Columbia Street, Dupuyer, Puerto Rico, PO8744' + }, + attachments: _attachments + }, + { + id : 'e4f255a3-b5dd-45a7-975f-c399604a399a', + avatar : 'assets/images/avatars/male-09.jpg', + name : 'Herring Gonzales', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'herringgonzales@mail.biz', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'ai', + number : '995 411 2513', + label : 'Mobile' + }, + { + country: 'ai', + number : '839 492 2760', + label : 'Work' + } + ], + title : 'Gas Meter Mechanic', + company : 'Cubix', + birthday : '1995-02-16T12:00:00.000Z', + address : '195 Brooklyn Road, Jeff, Marshall Islands, PO2943' + }, + attachments: _attachments + }, + { + id : 'ab4f712d-d712-41a8-b567-be4c66c349a3', + avatar : 'assets/images/avatars/female-13.jpg', + name : 'Alyce Cash', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'alycecash@mail.co.uk', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'ht', + number : '969 499 3077', + label : 'Mobile' + }, + { + country: 'ht', + number : '907 513 2784', + label : 'Work' + } + ], + title : 'Weather Analyst', + company : 'Qnekt', + birthday : '1973-12-19T12:00:00.000Z', + address : '964 Henry Street, Eureka, Indiana, PO1035' + }, + attachments: _attachments + }, + { + id : '5d067800-c301-46c6-a7f7-28dc89d9a554', + avatar : null, + name : 'Kristine Pacheco', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'kristinepacheco@mail.net', + label: 'Personal' + }, + { + email: 'pacheco.kristine@vurbo.ca', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'mm', + number : '977 516 2492', + label : 'Mobile' + } + ], + title : 'Short Story Writer', + company : 'Vurbo', + birthday : '1985-10-22T12:00:00.000Z', + address : '622 Dodworth Street, Rose, Arizona, PO9530' + }, + attachments: _attachments + }, + { + id : 'c500255a-1173-47d0-a0e4-4944d48fc12a', + avatar : 'assets/images/avatars/male-10.jpg', + name : 'English Haney', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'englishhaney@mail.org', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'lb', + number : '989 567 3834', + label : 'Mobile' + } + ], + title : 'Meteorologist', + company : 'Photobin', + birthday : '1969-09-05T12:00:00.000Z', + address : '579 Pooles Lane, Belleview, Montana, PO4106' + }, + attachments: _attachments + }, + { + id : 'b62359fd-f2a8-46e6-904e-31052d1cd675', + avatar : 'assets/images/avatars/male-11.jpg', + name : 'Joseph Strickland', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'josephstrickland@mail.io', + label: 'Personal' + }, + { + email: 'strickland.joseph@bytrex.us', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'jo', + number : '990 450 2729', + label : 'Mobile' + } + ], + title : 'Hotel Manager', + company : 'Bytrex', + birthday : '1991-09-08T12:00:00.000Z', + address : '844 Ellery Street, Hondah, Texas, PO1272' + }, + attachments: _attachments + }, + { + id : '16b9e696-ea95-4dd8-86c4-3caf705a1dc6', + avatar : 'assets/images/avatars/male-12.jpg', + name : 'Nunez Faulkner', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'nunezfaulkner@mail.tv', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'xk', + number : '909 552 3327', + label : 'Mobile' + } + ], + title : 'Hotel Manager', + company : 'Buzzopia', + birthday : '1982-01-23T12:00:00.000Z', + address : '614 Herkimer Court, Darrtown, Nebraska, PO9308' + }, + attachments: _attachments + }, + { + id : '19662ecf-0686-4aad-a46c-24b552eb2ff5', + avatar : 'assets/images/avatars/female-15.jpg', + name : 'Juana Morrow', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'juanamorrow@mail.com', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'ee', + number : '868 438 3943', + label : 'Mobile' + } + ], + title : 'Meteorologist', + company : 'Lyria', + birthday : '1992-03-29T12:00:00.000Z', + address : '663 Drew Street, Juntura, Georgia, PO9857' + }, + attachments: _attachments + }, + { + id : '26dfe954-8bf3-45ee-b285-1d0a88c8d3ea', + avatar : 'assets/images/avatars/male-13.jpg', + name : 'Lara Gaines', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'laragaines@mail.name', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'mr', + number : '891 498 2043', + label : 'Mobile' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Acruex', + birthday : '1961-06-07T12:00:00.000Z', + address : '762 Troutman Street, Drummond, Oregon, PO6973' + }, + attachments: _attachments + }, + { + id : 'd6462af2-c488-4de7-9b26-3845bd2983f9', + avatar : 'assets/images/avatars/male-14.jpg', + name : 'Johnston Riddle', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'johnstonriddle@mail.me', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bt', + number : '979 541 2691', + label : 'Mobile' + }, + { + country: 'bt', + number : '909 407 3887', + label : 'Work' + }, + { + country: 'bt', + number : '864 557 3128', + label : 'Home' + } + ], + title : 'Hotel Manager', + company : 'Xleen', + birthday : '1972-09-13T12:00:00.000Z', + address : '674 Bryant Street, Grahamtown, Federated States Of Micronesia, PO2757' + }, + attachments: _attachments + }, + { + id : 'a1723c04-69fe-4573-a135-6645658afe76', + avatar : null, + name : 'Vargas Gardner', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'vargasgardner@mail.info', + label: 'Personal' + }, + { + email: 'gardner.vargas@cosmosis.biz', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'bi', + number : '855 456 2754', + label : 'Mobile' + } + ], + title : 'Bindery Machine Operator', + company : 'Cosmosis', + birthday : '1979-10-21T12:00:00.000Z', + address : '869 Seton Place, Chemung, Maine, PO8109' + }, + attachments: _attachments + }, + { + id : '823e6166-c0c8-4373-9270-8a0d17489a08', + avatar : 'assets/images/avatars/male-16.jpg', + name : 'Mccall Day', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'mccallday@mail.co.uk', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'se', + number : '993 504 3286', + label : 'Mobile' + }, + { + country: 'se', + number : '924 434 2238', + label : 'Work' + }, + { + country: 'se', + number : '816 466 2634', + label : 'Home' + } + ], + title : 'Historiographer', + company : 'Nipaz', + birthday : '1964-03-05T12:00:00.000Z', + address : '854 Hanover Place, Harleigh, New Jersey, PO9459' + }, + attachments: _attachments + }, + { + id : '2c37ed00-427a-46d7-8f8f-d711c768d1ee', + avatar : 'assets/images/avatars/male-17.jpg', + name : 'Silva Foster', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'silvafoster@mail.net', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bn', + number : '916 511 3837', + label : 'Mobile' + }, + { + country: 'bn', + number : '949 564 3247', + label : 'Work' + } + ], + title : 'Insurance Analyst', + company : 'Extrawear', + birthday : '1980-04-29T12:00:00.000Z', + address : '137 Bridge Street, Sisquoc, District Of Columbia, PO4105' + }, + attachments: _attachments + }, + { + id : '944764c0-b261-4428-9188-bbd3022d66a8', + avatar : 'assets/images/avatars/female-16.jpg', + name : 'Cathryn Snider', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'cathrynsnider@mail.ca', + label: 'Personal' + }, + { + email: 'snider.cathryn@phormula.org', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'na', + number : '896 471 3036', + label : 'Mobile' + }, + { + country: 'na', + number : '851 491 3567', + label : 'Work' + }, + { + country: 'na', + number : '805 487 2016', + label : 'Home' + } + ], + title : 'Short Story Writer', + company : 'Phormula', + birthday : '1981-06-09T12:00:00.000Z', + address : '528 Glenmore Avenue, Elrama, Illinois, PO2952' + }, + attachments: _attachments + }, + { + id : 'f2b3c756-5ad2-4d4b-aee5-b32c91457128', + avatar : null, + name : 'Mooney Cantrell', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'mooneycantrell@mail.io', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bh', + number : '915 577 3020', + label : 'Mobile' + }, + { + country: 'bh', + number : '923 431 3594', + label : 'Work' + } + ], + title : 'Fundraising Director', + company : 'Crustatia', + birthday : '1968-12-07T12:00:00.000Z', + address : '277 Coventry Road, Fairforest, Nevada, PO6031' + }, + attachments: _attachments + }, + { + id : '54b1c201-4b2b-4be0-ad70-a6413e9628cd', + avatar : 'assets/images/avatars/female-17.jpg', + name : 'Saundra Murphy', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'saundramurphy@mail.us', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'mt', + number : '902 529 2999', + label : 'Mobile' + } + ], + title : 'Dental Laboratory Worker', + company : 'Zilencio', + birthday : '1983-11-07T12:00:00.000Z', + address : '557 Monroe Street, Mayfair, Maryland, PO7200' + }, + attachments: _attachments + }, + { + id : 'faf979c7-a13b-445a-b30a-08845f5fa90e', + avatar : 'assets/images/avatars/female-18.jpg', + name : 'Enid Sparks', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'enidsparks@mail.tv', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bh', + number : '813 410 3258', + label : 'Mobile' + }, + { + country: 'bh', + number : '877 501 2767', + label : 'Work' + } + ], + title : 'Historiographer', + company : 'Skybold', + birthday : '1984-05-04T12:00:00.000Z', + address : '219 Village Court, Keyport, Alabama, PO7776' + }, + attachments: _attachments + }, + { + id : '2bfa2be5-7688-48d5-b5ac-dc0d9ac97f14', + avatar : null, + name : 'Nadia Mcknight', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'nadiamcknight@mail.com', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'tk', + number : '943 511 2203', + label : 'Mobile' + }, + { + country: 'tk', + number : '817 578 2993', + label : 'Work' + } + ], + title : 'Legal Assistant', + company : 'Pearlesex', + birthday : '1973-10-06T12:00:00.000Z', + address : '448 Berriman Street, Reinerton, Washington, PO6704' + }, + attachments: _attachments + }, + { + id : '77a4383b-b5a5-4943-bc46-04c3431d1566', + avatar : 'assets/images/avatars/male-19.jpg', + name : 'Best Blackburn', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'bestblackburn@mail.name', + label: 'Personal' + }, + { + email: 'blackburn.best@beadzza.me', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'gl', + number : '814 498 3701', + label : 'Mobile' + } + ], + title : 'Hotel Manager', + company : 'Beadzza', + birthday : '1987-06-07T12:00:00.000Z', + address : '578 Tampa Court, Wescosville, Ohio, PO4108' + }, + attachments: _attachments + }, + { + id : '8bb0f597-673a-47ca-8c77-2f83219cb9af', + avatar : null, + name : 'Duncan Carver', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'duncancarver@mail.info', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'jm', + number : '968 547 2111', + label : 'Mobile' + }, + { + country: 'jm', + number : '968 433 3120', + label : 'Work' + }, + { + country: 'jm', + number : '905 425 2777', + label : 'Home' + } + ], + title : 'Historiographer', + company : 'Hotcakes', + birthday : '1980-09-15T12:00:00.000Z', + address : '931 Bristol Street, Why, South Carolina, PO9700' + }, + attachments: _attachments + }, + { + id : 'c318e31f-1d74-49c5-8dae-2bc5805e2fdb', + avatar : 'assets/images/avatars/male-01.jpg', + name : 'Martin Richards', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'martinrichards@mail.biz', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'mg', + number : '902 500 2668', + label : 'Mobile' + }, + { + country: 'mg', + number : '947 559 2919', + label : 'Work' + }, + { + country: 'mg', + number : '934 434 3768', + label : 'Home' + } + ], + title : 'Dental Laboratory Worker', + company : 'Overfork', + birthday : '1977-04-12T12:00:00.000Z', + address : '268 Hutchinson Court, Drytown, Florida, PO3041' + }, + attachments: _attachments + }, + { + id : '0a8bc517-631a-4a93-aacc-000fa2e8294c', + avatar : 'assets/images/avatars/female-20.jpg', + name : 'Candice Munoz', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'candicemunoz@mail.co.uk', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'fm', + number : '838 562 2769', + label : 'Mobile' + } + ], + title : 'Legal Assistant', + company : 'Eclipto', + birthday : '1976-09-09T12:00:00.000Z', + address : '946 Remsen Street, Caroline, New Mexico, PO3247' + }, + attachments: _attachments + }, + { + id : 'a4c9945a-757b-40b0-8942-d20e0543cabd', + avatar : 'assets/images/avatars/female-01.jpg', + name : 'Vickie Mosley', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'vickiemosley@mail.net', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'tr', + number : '939 555 3054', + label : 'Mobile' + }, + { + country: 'tr', + number : '852 486 2053', + label : 'Work' + } + ], + title : 'Bindery Machine Operator', + company : 'Strozen', + birthday : '1989-06-21T12:00:00.000Z', + address : '397 Vandalia Avenue, Rockingham, Michigan, PO8089' + }, + attachments: _attachments + }, + { + id : 'b8258ccf-48b5-46a2-9c95-e0bd7580c645', + avatar : 'assets/images/avatars/female-02.jpg', + name : 'Tina Harris', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'tinaharris@mail.ca', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'gp', + number : '933 464 2431', + label : 'Mobile' + }, + { + country: 'gp', + number : '894 535 3609', + label : 'Work' + } + ], + title : 'Short Story Writer', + company : 'Gallaxia', + birthday : '1976-09-10T12:00:00.000Z', + address : '821 Beverly Road, Tyro, Colorado, PO4248' + }, + attachments: _attachments + }, + { + id : 'f004ea79-98fc-436c-9ba5-6cfe32fe583d', + avatar : 'assets/images/avatars/male-02.jpg', + name : 'Holt Manning', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'holtmanning@mail.org', + label: 'Personal' + }, + { + email: 'manning.holt@idetica.io', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'nz', + number : '822 531 2600', + label : 'Mobile' + }, + { + country: 'nz', + number : '922 549 2094', + label : 'Work' + } + ], + title : 'Fundraising Director', + company : 'Idetica', + birthday : '1973-11-08T12:00:00.000Z', + address : '364 Porter Avenue, Delshire, Missouri, PO8911' + }, + attachments: _attachments + }, + { + id : '8b69fe2d-d7cc-4a3d-983d-559173e37d37', + background : 'assets/images/cards/28-640x480.jpg', + name : 'Misty Ramsey', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'mistyramsey@mail.us', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'kp', + number : '990 457 2106', + label : 'Mobile' + }, + { + country: 'kp', + number : '918 550 2946', + label : 'Work' + } + ], + company : 'Grupoli', + birthday : '1969-08-10T12:00:00.000Z', + address : '101 Sackett Street, Naomi, Tennessee, PO6335' + }, + attachments: _attachments + }, + { + id : 'cdcc62e4-1520-4ccc-803d-52868c7e01ba', + avatar : 'assets/images/avatars/female-04.jpg', + name : 'Dee Alvarado', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'deealvarado@mail.tv', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'nu', + number : '855 445 2483', + label : 'Mobile' + }, + { + country: 'nu', + number : '858 415 2860', + label : 'Work' + }, + { + country: 'nu', + number : '968 587 2752', + label : 'Home' + } + ], + title : 'Dental Laboratory Worker', + company : 'Tsunamia', + birthday : '1996-06-17T12:00:00.000Z', + address : '956 Pierrepont Street, Crumpler, Hawaii, PO3299' + }, + attachments: _attachments + }, + { + id : 'e2946946-b4b5-4fd7-bab4-62c38cdff2f1', + avatar : 'assets/images/avatars/female-05.jpg', + name : 'Samantha Jacobson', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'samanthajacobson@mail.com', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'es', + number : '879 591 3327', + label : 'Mobile' + } + ], + title : 'Dental Laboratory Worker', + company : 'Emoltra', + birthday : '1972-02-04T12:00:00.000Z', + address : '384 Love Lane, Dyckesville, New York, PO4115' + }, + attachments: _attachments + }, + { + id : 'fdc77706-6ba2-4397-b2f8-a9a0b6495153', + avatar : 'assets/images/avatars/female-06.jpg', + name : 'Rhea Landry', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'rhealandry@mail.name', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'jp', + number : '906 579 3698', + label : 'Mobile' + }, + { + country: 'jp', + number : '841 475 2681', + label : 'Work' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Comtent', + birthday : '1988-05-22T12:00:00.000Z', + address : '725 Arlington Avenue, Mathews, Wyoming, PO4562' + }, + attachments: _attachments + }, + { + id : '12148fa2-e0a4-49fb-b3c5-daeecdb5180a', + avatar : 'assets/images/avatars/female-07.jpg', + name : 'Olga Rhodes', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'olgarhodes@mail.me', + label: 'Personal' + }, + { + email: 'rhodes.olga@moreganic.info', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'tl', + number : '971 514 3366', + label : 'Mobile' + }, + { + country: 'tl', + number : '807 480 2033', + label : 'Work' + }, + { + country: 'tl', + number : '810 528 3783', + label : 'Home' + } + ], + title : 'Pastry Baker', + company : 'Moreganic', + birthday : '1971-08-13T12:00:00.000Z', + address : '253 Beard Street, Staples, Massachusetts, PO8089' + }, + attachments: _attachments + }, + { + id : '07dd64eb-8b8f-4765-a16c-8db083c45096', + avatar : 'assets/images/avatars/female-08.jpg', + name : 'Lorraine Pennington', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'lorrainepennington@mail.biz', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'fm', + number : '932 404 3308', + label : 'Mobile' + }, + { + country: 'fm', + number : '979 550 3200', + label : 'Work' + }, + { + country: 'fm', + number : '868 557 3568', + label : 'Home' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Marvane', + birthday : '1967-06-10T12:00:00.000Z', + address : '962 Whitney Avenue, Sussex, North Dakota, PO5796' + }, + attachments: _attachments + }, + { + id : '81fdc48c-5572-4123-8a73-71b7892120de', + avatar : 'assets/images/avatars/female-09.jpg', + name : 'Earlene Rosales', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'earlenerosales@mail.co.uk', + label: 'Personal' + }, + { + email: 'rosales.earlene@softmicro.net', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'ki', + number : '927 589 3619', + label : 'Mobile' + } + ], + title : 'Historiographer', + company : 'Softmicro', + birthday : '1960-11-13T12:00:00.000Z', + address : '981 Kingston Avenue, Topaz, Connecticut, PO6866' + }, + attachments: _attachments + }, + { + id : 'f8bbf6be-d49a-41a3-bb80-3d51df84c12b', + avatar : 'assets/images/avatars/female-10.jpg', + name : 'Marcia Hatfield', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'marciahatfield@mail.ca', + label: 'Personal' + }, + { + email: 'hatfield.marcia@datagen.org', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'no', + number : '883 432 3718', + label : 'Mobile' + }, + { + country: 'no', + number : '934 516 2135', + label : 'Work' + }, + { + country: 'no', + number : '923 596 3843', + label : 'Home' + } + ], + title : 'Track Service Worker', + company : 'Datagen', + birthday : '1980-02-26T12:00:00.000Z', + address : '802 Preston Court, Waikele, Pennsylvania, PO7421' + }, + attachments: _attachments + }, + { + id : 'cd482941-3eaf-4560-ac37-56a9296025df', + avatar : 'assets/images/avatars/female-11.jpg', + name : 'Liliana Ayala', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'lilianaayala@mail.io', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bd', + number : '936 590 2412', + label : 'Mobile' + } + ], + title : 'Insurance Analyst', + company : 'Pharmex', + birthday : '1988-04-27T12:00:00.000Z', + address : '935 Guider Avenue, Kipp, Wisconsin, PO5282' + }, + attachments: _attachments + }, + { + id : '22f18d47-ff8d-440e-888d-a1747c093052', + avatar : 'assets/images/avatars/female-12.jpg', + name : 'Alice Harding', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'aliceharding@mail.us', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'sx', + number : '881 472 3113', + label : 'Mobile' + }, + { + country: 'sx', + number : '974 548 3124', + label : 'Work' + }, + { + country: 'sx', + number : '800 518 3615', + label : 'Home' + } + ], + title : 'Track Service Worker', + company : 'Futurity', + birthday : '1985-09-17T12:00:00.000Z', + address : '387 Holt Court, Thomasville, Alaska, PO2867' + }, + attachments: _attachments + }, + { + id : 'a9a9f382-e4c3-42fb-9fe9-65aa534732b5', + avatar : 'assets/images/avatars/female-13.jpg', + name : 'Francisca Perkins', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'franciscaperkins@mail.tv', + label: 'Personal' + }, + { + email: 'perkins.francisca@overplex.com', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'au', + number : '830 430 3437', + label : 'Mobile' + }, + { + country: 'au', + number : '868 538 2886', + label : 'Work' + } + ], + title : 'Dental Laboratory Worker', + company : 'Overplex', + birthday : '1966-08-14T12:00:00.000Z', + address : '733 Delmonico Place, Belvoir, Virginia, PO7102' + }, + attachments: _attachments + }, + { + id : '0222b24b-c288-48d1-b356-0f087fa172f8', + avatar : null, + name : 'Warren Gates', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'warrengates@mail.name', + label: 'Personal' + }, + { + email: 'gates.warren@qualitex.me', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'gt', + number : '847 513 2248', + label : 'Mobile' + }, + { + country: 'gt', + number : '866 591 3665', + label : 'Work' + }, + { + country: 'gt', + number : '877 539 3840', + label : 'Home' + } + ], + title : 'Banker Mason', + company : 'Qualitex', + birthday : '1977-02-23T12:00:00.000Z', + address : '713 Fane Court, Lemoyne, Kentucky, PO3601' + }, + attachments: _attachments + }, + { + id : '0630f1ca-cdb9-405d-b134-68f733334089', + avatar : 'assets/images/avatars/female-14.jpg', + name : 'Maryann Mcintyre', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'maryannmcintyre@mail.info', + label: 'Personal' + }, + { + email: 'mcintyre.maryann@aquafire.biz', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'bf', + number : '861 419 2752', + label : 'Mobile' + }, + { + country: 'bf', + number : '935 553 3031', + label : 'Work' + } + ], + title : 'Fundraising Director', + company : 'Aquafire', + birthday : '1963-04-07T12:00:00.000Z', + address : '698 Brooklyn Avenue, Dixonville, Utah, PO2712' + }, + attachments: _attachments + }, + { + id : '999c24f3-7bb8-4a01-85ca-2fca7863c57e', + avatar : 'assets/images/avatars/female-15.jpg', + name : 'Sharon Marshall', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'sharonmarshall@mail.co.uk', + label: 'Personal' + }, + { + email: 'marshall.sharon@utara.net', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'fo', + number : '947 441 2999', + label : 'Mobile' + }, + { + country: 'fo', + number : '984 441 2615', + label : 'Work' + }, + { + country: 'fo', + number : '824 541 2714', + label : 'Home' + } + ], + title : 'Legal Assistant', + company : 'Utara', + birthday : '1960-01-26T12:00:00.000Z', + address : '923 Ivan Court, Hatteras, Idaho, PO7573' + }, + attachments: _attachments + }, + { + id : '7e8e1f1e-d19f-45c7-86bd-6fef599dae71', + avatar : 'assets/images/avatars/female-16.jpg', + name : 'Margo Witt', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'margowitt@mail.ca', + label: 'Personal' + }, + { + email: 'witt.margo@norsul.org', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'ao', + number : '992 596 3391', + label : 'Mobile' + }, + { + country: 'ao', + number : '950 489 2505', + label : 'Work' + }, + { + country: 'ao', + number : '891 540 2231', + label : 'Home' + } + ], + title : 'Television News Producer', + company : 'Norsul', + birthday : '1975-08-31T12:00:00.000Z', + address : '539 Rockaway Avenue, Whitmer, Guam, PO4871' + }, + attachments: _attachments + }, + { + id : 'bedcb6a2-da83-4631-866a-77d10d239477', + avatar : 'assets/images/avatars/male-04.jpg', + name : 'Alvarado Turner', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'alvaradoturner@mail.io', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'lv', + number : '961 537 3956', + label : 'Mobile' + } + ], + title : 'Fundraising Director', + company : 'Geologix', + birthday : '1985-12-08T12:00:00.000Z', + address : '233 Willmohr Street, Cressey, Iowa, PO1962' + }, + attachments: _attachments + }, + { + id : '66f9de1b-f842-4d4c-bb59-f97e91db0462', + avatar : 'assets/images/avatars/male-05.jpg', + name : 'Maldonado Rodriquez', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'maldonadorodriquez@mail.us', + label: 'Personal' + }, + { + email: 'rodriquez.maldonado@zentility.tv', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'et', + number : '811 502 3398', + label : 'Mobile' + }, + { + country: 'et', + number : '877 402 2443', + label : 'Work' + }, + { + country: 'et', + number : '949 536 3451', + label : 'Home' + } + ], + title : 'Dental Laboratory Worker', + company : 'Zentility', + birthday : '1993-06-01T12:00:00.000Z', + address : '916 Cobek Court, Morningside, South Dakota, PO2019' + }, + attachments: _attachments + }, + { + id : '9cb0ea57-3461-4182-979b-593b0c1ec6c3', + avatar : 'assets/images/avatars/male-06.jpg', + name : 'Tran Duke', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'tranduke@mail.com', + label: 'Personal' + }, + { + email: 'duke.tran@splinx.name', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'si', + number : '837 503 2254', + label : 'Mobile' + }, + { + country: 'si', + number : '893 405 3190', + label : 'Work' + }, + { + country: 'si', + number : '931 402 3874', + label : 'Home' + } + ], + title : 'Legal Assistant', + company : 'Splinx', + birthday : '1976-04-27T12:00:00.000Z', + address : '405 Canarsie Road, Richville, Virgin Islands, PO2744' + }, + attachments: _attachments + }, + { + id : '2fb89a90-5622-4b5b-8df3-d49b85905392', + avatar : null, + name : 'Estela Lyons', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'estelalyons@mail.me', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'vg', + number : '864 459 3205', + label : 'Mobile' + }, + { + country: 'vg', + number : '886 524 2880', + label : 'Work' + }, + { + country: 'vg', + number : '815 484 3420', + label : 'Home' + } + ], + title : 'Animal Sitter', + company : 'Gonkle', + birthday : '1968-03-11T12:00:00.000Z', + address : '540 Metrotech Courtr, Garfield, American Samoa, PO2290' + }, + attachments: _attachments + }, + { + id : '8141dd08-3a6e-4770-912c-59d0ed06dde6', + avatar : null, + name : 'Madeleine Fletcher', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'madeleinefletcher@mail.info', + label: 'Personal' + }, + { + email: 'fletcher.madeleine@genmom.biz', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'uy', + number : '898 554 3354', + label : 'Mobile' + } + ], + title : 'Fundraising Director', + company : 'Genmom', + birthday : '1970-07-15T12:00:00.000Z', + address : '825 Cherry Street, Foscoe, Minnesota, PO7290' + }, + attachments: _attachments + }, + { + id : '7585015c-ada2-4f88-998d-9646865d1ad2', + avatar : 'assets/images/avatars/male-07.jpg', + name : 'Meyer Roach', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'meyerroach@mail.co.uk', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'uz', + number : '891 543 2053', + label : 'Mobile' + }, + { + country: 'uz', + number : '842 564 3671', + label : 'Work' + }, + { + country: 'uz', + number : '992 491 3514', + label : 'Home' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Zentime', + birthday : '1968-10-16T12:00:00.000Z', + address : '315 Albemarle Road, Allison, Arkansas, PO6008' + }, + attachments: _attachments + }, + { + id : '32c73a6a-67f2-48a9-b2a1-b23da83187bb', + avatar : null, + name : 'Bolton Obrien', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'boltonobrien@mail.net', + label: 'Personal' + }, + { + email: 'obrien.bolton@enersol.ca', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'tn', + number : '860 472 2458', + label : 'Mobile' + }, + { + country: 'tn', + number : '887 499 3580', + label : 'Work' + } + ], + title : 'Banker Mason', + company : 'Enersol', + birthday : '1968-09-08T12:00:00.000Z', + address : '818 Aviation Road, Geyserville, Palau, PO9655' + }, + attachments: _attachments + }, + { + id : '114642a2-ccb7-4cb1-ad2b-5e9b6a0c1d2e', + avatar : 'assets/images/avatars/male-09.jpg', + name : 'Barber Johnson', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'barberjohnson@mail.org', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'az', + number : '928 567 2521', + label : 'Mobile' + }, + { + country: 'az', + number : '898 515 2048', + label : 'Work' + }, + { + country: 'az', + number : '935 495 3348', + label : 'Home' + } + ], + title : 'Talent Manager', + company : 'Zounds', + birthday : '1967-03-02T12:00:00.000Z', + address : '386 Vernon Avenue, Dragoon, North Carolina, PO4559' + }, + attachments: _attachments + }, + { + id : '310ece7d-dbb0-45d6-9e69-14c24e50fe3d', + avatar : 'assets/images/avatars/male-10.jpg', + name : 'Cervantes Kramer', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'cervanteskramer@mail.io', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'vg', + number : '998 498 2507', + label : 'Mobile' + }, + { + country: 'vg', + number : '856 477 3445', + label : 'Work' + } + ], + title : 'Motor Winder', + company : 'Xeronk', + birthday : '1992-09-04T12:00:00.000Z', + address : '238 Rochester Avenue, Lydia, Oklahoma, PO3914' + }, + attachments: _attachments + }, + { + id : 'dcc673f6-de59-4715-94ed-8f64663d449b', + avatar : 'assets/images/avatars/female-19.jpg', + name : 'Megan Suarez', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'megansuarez@mail.us', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bb', + number : '875 422 2053', + label : 'Mobile' + }, + { + country: 'bb', + number : '861 487 2597', + label : 'Work' + }, + { + country: 'bb', + number : '873 414 3953', + label : 'Home' + } + ], + title : 'Bindery Machine Operator', + company : 'Cemention', + birthday : '1984-09-08T12:00:00.000Z', + address : '112 Tillary Street, Camptown, Vermont, PO8827' + }, + attachments: _attachments + }, + { + id : '3e4ca731-d39b-4ad9-b6e0-f84e67f4b74a', + background : 'assets/images/cards/26-640x480.jpg', + name : 'Ofelia Ratliff', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'ofeliaratliff@mail.tv', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'vu', + number : '978 546 3699', + label : 'Mobile' + }, + { + country: 'vu', + number : '892 551 2229', + label : 'Work' + }, + { + country: 'vu', + number : '949 495 3479', + label : 'Home' + } + ], + company : 'Buzzmaker', + birthday : '1988-11-11T12:00:00.000Z', + address : '951 Hampton Avenue, Bartonsville, Mississippi, PO4232' + }, + attachments: _attachments + }, + { + id : '2012d4a5-19e4-444d-aaff-1d8b1d853650', + avatar : 'assets/images/avatars/female-01.jpg', + name : 'Laurel Parker', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'laurelparker@mail.com', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'lu', + number : '805 502 3677', + label : 'Mobile' + }, + { + country: 'lu', + number : '925 527 2973', + label : 'Work' + }, + { + country: 'lu', + number : '975 495 2977', + label : 'Home' + } + ], + title : 'Fundraising Director', + company : 'Omnigog', + birthday : '1987-05-17T12:00:00.000Z', + address : '157 Woodhull Street, Rutherford, West Virginia, PO6646' + }, + attachments: _attachments + }, + { + id : '012b8219-74bf-447c-af2c-66904d90a956', + avatar : 'assets/images/avatars/female-02.jpg', + name : 'Tracy Delacruz', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'tracydelacruz@mail.name', + label: 'Personal' + }, + { + email: 'delacruz.tracy@shepard.me', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'co', + number : '974 428 2886', + label : 'Mobile' + } + ], + title : 'Bindery Machine Operator', + company : 'Shepard', + birthday : '1963-08-10T12:00:00.000Z', + address : '604 Merit Court, Wyano, New Hampshire, PO1641' + }, + attachments: _attachments + }, + { + id : '8b1befd2-66a7-4981-ae52-77f01b382d18', + avatar : 'assets/images/avatars/female-03.jpg', + name : 'Jeannette Stanton', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'jeannettestanton@mail.info', + label: 'Personal' + }, + { + email: 'stanton.jeannette@zentury.biz', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'dz', + number : '947 561 3783', + label : 'Mobile' + }, + { + country: 'dz', + number : '917 463 3737', + label : 'Work' + }, + { + country: 'dz', + number : '835 510 2059', + label : 'Home' + } + ], + title : 'Hotel Manager', + company : 'Zentury', + birthday : '1975-09-02T12:00:00.000Z', + address : '100 Menahan Street, Snyderville, Kansas, PO1006' + }, + attachments: _attachments + }, + { + id : '844668c3-5e20-4fed-9e3a-7d274f696e61', + avatar : 'assets/images/avatars/female-04.jpg', + name : 'Johnnie Cleveland', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'johnniecleveland@mail.co.uk', + label: 'Personal' + }, + { + email: 'cleveland.johnnie@viasia.net', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'au', + number : '947 468 2942', + label : 'Mobile' + } + ], + title : 'Fundraising Director', + company : 'Viasia', + birthday : '1986-03-15T12:00:00.000Z', + address : '283 Albany Avenue, Jennings, Rhode Island, PO1646' + }, + attachments: _attachments + }, + { + id : '5a01e870-8be1-45a5-b58a-ec09c06e8f28', + avatar : 'assets/images/avatars/female-05.jpg', + name : 'Staci Hyde', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'stacihyde@mail.ca', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'id', + number : '944 525 2944', + label : 'Mobile' + }, + { + country: 'id', + number : '877 500 2506', + label : 'Work' + } + ], + title : 'Banker Mason', + company : 'Zilla', + birthday : '1975-04-22T12:00:00.000Z', + address : '560 Dooley Street, Ellerslie, Louisiana, PO1005' + }, + attachments: _attachments + }, + { + id : '5ac1f193-f150-45f9-bfe4-b7b4e1a83ff9', + avatar : 'assets/images/avatars/female-06.jpg', + name : 'Angela Gallagher', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'angelagallagher@mail.org', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'et', + number : '996 514 3856', + label : 'Mobile' + }, + { + country: 'et', + number : '903 539 2049', + label : 'Work' + }, + { + country: 'et', + number : '938 463 3685', + label : 'Home' + } + ], + title : 'Electromedical Equipment Technician', + company : 'Zenolux', + birthday : '1965-08-02T12:00:00.000Z', + address : '445 Remsen Avenue, Ruckersville, Delaware, PO2712' + }, + attachments: _attachments + }, + { + id : '995df091-d78a-4bb7-840c-ba6a7d14a1bd', + avatar : 'assets/images/avatars/male-11.jpg', + name : 'Hutchinson Levy', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'hutchinsonlevy@mail.io', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'et', + number : '970 546 3452', + label : 'Mobile' + }, + { + country: 'et', + number : '894 438 2430', + label : 'Work' + } + ], + title : 'Congressional Representative', + company : 'Zytrek', + birthday : '1978-03-22T12:00:00.000Z', + address : '911 Lois Avenue, Epworth, California, PO6557' + }, + attachments: _attachments + }, + { + id : '7184be71-a28f-4f2b-8c45-15f78cf2f825', + avatar : 'assets/images/avatars/female-05.jpg', + name : 'Alissa Nelson', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'alissanelson@mail.us', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'lu', + number : '893 600 2639', + label : 'Mobile' + } + ], + title : 'Bindery Machine Operator', + company : 'Emtrak', + birthday : '1993-10-19T12:00:00.000Z', + address : '514 Sutter Avenue, Shindler, Puerto Rico, PO3862' + }, + attachments: _attachments + }, + { + id : '325d508c-ca49-42bf-b0d5-c4a6b8da3d5c', + avatar : null, + name : 'Oliver Head', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'oliverhead@mail.tv', + label: 'Personal' + } + ], + phoneNumbers: [ + { + country: 'bn', + number : '977 528 3294', + label : 'Mobile' + } + ], + title : 'Meteorologist', + company : 'Rameon', + birthday : '1967-01-05T12:00:00.000Z', + address : '569 Clermont Avenue, Movico, Marshall Islands, PO7293' + }, + attachments: _attachments + }, + { + id : 'c674b6e1-b846-4bba-824b-0b4df0cdec48', + avatar : 'assets/images/avatars/male-13.jpg', + name : 'Duran Barr', + about : 'Hi there! I\'m using FuseChat.', + details : { + emails : [ + { + email: 'duranbarr@mail.com', + label: 'Personal' + }, + { + email: 'barr.duran@hinway.name', + label: 'Work' + } + ], + phoneNumbers: [ + { + country: 'sr', + number : '857 457 2508', + label : 'Mobile' + }, + { + country: 'sr', + number : '887 522 2146', + label : 'Work' + }, + { + country: 'sr', + number : '947 574 3174', + label : 'Home' + } + ], + title : 'Insurance Analyst', + company : 'Hinway', + birthday : '1977-11-06T12:00:00.000Z', + address : '103 Chestnut Avenue, Glenbrook, Indiana, PO2578' + }, + attachments: _attachments + } +]; +export const profile: any = { + id : 'cfaad35d-07a3-4447-a6c3-d8c3d54fd5df', + name : 'Brian Hughes', + email : 'hughes.brian@company.com', + avatar: 'assets/images/avatars/brian-hughes.jpg', + about : 'Hi there! I\'m using FuseChat.' +}; diff --git a/src/app/mock-api/index.ts b/src/app/mock-api/index.ts index 0b83a2f3..4b312390 100644 --- a/src/app/mock-api/index.ts +++ b/src/app/mock-api/index.ts @@ -2,6 +2,7 @@ import { AcademyMockApi } from 'app/mock-api/apps/academy/api'; import { AnalyticsMockApi } from 'app/mock-api/dashboards/analytics/api'; 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 { ECommerceInventoryMockApi } from 'app/mock-api/apps/ecommerce/inventory/api'; import { FileManagerMockApi } from 'app/mock-api/apps/file-manager/api'; @@ -22,6 +23,7 @@ export const mockApiServices = [ AnalyticsMockApi, AuthMockApi, CalendarMockApi, + ChatMockApi, ContactsMockApi, ECommerceInventoryMockApi, FileManagerMockApi, diff --git a/src/app/modules/admin/apps/chat/chat.component.html b/src/app/modules/admin/apps/chat/chat.component.html new file mode 100644 index 00000000..09f50e82 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.component.html @@ -0,0 +1,8 @@ +
    + + +
    + +
    + +
    diff --git a/src/app/modules/admin/apps/chat/chat.component.ts b/src/app/modules/admin/apps/chat/chat.component.ts new file mode 100644 index 00000000..15583229 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.component.ts @@ -0,0 +1,17 @@ +import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector : 'chat', + templateUrl : './chat.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ChatComponent +{ + /** + * Constructor + */ + constructor() + { + } +} diff --git a/src/app/modules/admin/apps/chat/chat.module.ts b/src/app/modules/admin/apps/chat/chat.module.ts new file mode 100644 index 00000000..42125e37 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.module.ts @@ -0,0 +1,44 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +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 { MatSidenavModule } from '@angular/material/sidenav'; +import { FuseAutogrowModule } from '@fuse/directives/autogrow'; +import { SharedModule } from 'app/shared/shared.module'; +import { chatRoutes } from 'app/modules/admin/apps/chat/chat.routing'; +import { ChatComponent } from 'app/modules/admin/apps/chat/chat.component'; +import { ChatsComponent } from 'app/modules/admin/apps/chat/chats/chats.component'; +import { ContactInfoComponent } from 'app/modules/admin/apps/chat/contact-info/contact-info.component'; +import { ConversationComponent } from 'app/modules/admin/apps/chat/conversation/conversation.component'; +import { NewChatComponent } from 'app/modules/admin/apps/chat/new-chat/new-chat.component'; +import { ProfileComponent } from 'app/modules/admin/apps/chat/profile/profile.component'; + +@NgModule({ + declarations: [ + ChatComponent, + ChatsComponent, + ContactInfoComponent, + ConversationComponent, + NewChatComponent, + ProfileComponent + ], + imports: [ + RouterModule.forChild(chatRoutes), + MatButtonModule, + MatCheckboxModule, + MatFormFieldModule, + MatIconModule, + MatInputModule, + MatMenuModule, + MatSidenavModule, + FuseAutogrowModule, + SharedModule, + ] +}) +export class ChatModule +{ +} diff --git a/src/app/modules/admin/apps/chat/chat.resolvers.ts b/src/app/modules/admin/apps/chat/chat.resolvers.ts new file mode 100644 index 00000000..54a377f6 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.resolvers.ts @@ -0,0 +1,147 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; +import { Observable, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { ChatService } from 'app/modules/admin/apps/chat/chat.service'; +import { Chat, Contact, Profile } from 'app/modules/admin/apps/chat/chat.types'; + +@Injectable({ + providedIn: 'root' +}) +export class ChatChatsResolver implements Resolve +{ + /** + * Constructor + */ + constructor( + private _chatService: ChatService, + private _router: Router + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resolver + * + * @param route + * @param state + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | any + { + return this._chatService.getChats(); + } +} + +@Injectable({ + providedIn: 'root' +}) +export class ChatChatResolver implements Resolve +{ + /** + * Constructor + */ + constructor( + private _chatService: ChatService, + private _router: Router + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resolver + * + * @param route + * @param state + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable + { + return this._chatService.getChatById(route.paramMap.get('id')) + .pipe( + // Error here means the requested chat is not available + catchError((error) => { + + // Log the error + console.error(error); + + // Get the parent url + const parentUrl = state.url.split('/').slice(0, -1).join('/'); + + // Navigate to there + this._router.navigateByUrl(parentUrl); + + // Throw an error + return throwError(error); + }) + ); + } +} + +@Injectable({ + providedIn: 'root' +}) +export class ChatContactsResolver implements Resolve +{ + /** + * Constructor + */ + constructor( + private _chatService: ChatService, + private _router: Router + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resolver + * + * @param route + * @param state + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | any + { + return this._chatService.getContacts(); + } +} + +@Injectable({ + providedIn: 'root' +}) +export class ChatProfileResolver implements Resolve +{ + /** + * Constructor + */ + constructor( + private _chatService: ChatService, + private _router: Router + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resolver + * + * @param route + * @param state + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | any + { + return this._chatService.getProfile(); + } +} diff --git a/src/app/modules/admin/apps/chat/chat.routing.ts b/src/app/modules/admin/apps/chat/chat.routing.ts new file mode 100644 index 00000000..caa84979 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.routing.ts @@ -0,0 +1,37 @@ +import { Route } from '@angular/router'; +import { ChatChatResolver, ChatChatsResolver, ChatContactsResolver, ChatProfileResolver } from 'app/modules/admin/apps/chat/chat.resolvers'; +import { ChatComponent } from 'app/modules/admin/apps/chat/chat.component'; +import { ChatsComponent } from 'app/modules/admin/apps/chat/chats/chats.component'; +import { ConversationComponent } from 'app/modules/admin/apps/chat/conversation/conversation.component'; + +export const chatRoutes: Route[] = [ + { + path : '', + component: ChatComponent, + resolve : { + chats : ChatChatsResolver, + contacts: ChatContactsResolver, + profile : ChatProfileResolver + }, + children : [ + { + path : '', + component: ChatsComponent, + children : [ + { + path : '', + component: ConversationComponent, + children : [ + { + path : ':id', + resolve: { + conversation: ChatChatResolver + } + } + ] + } + ] + } + ] + } +]; diff --git a/src/app/modules/admin/apps/chat/chat.service.ts b/src/app/modules/admin/apps/chat/chat.service.ts new file mode 100644 index 00000000..057e0061 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.service.ts @@ -0,0 +1,202 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; +import { filter, map, switchMap, take, tap } from 'rxjs/operators'; +import { Chat, Contact, Profile } from 'app/modules/admin/apps/chat/chat.types'; + +@Injectable({ + providedIn: 'root' +}) +export class ChatService +{ + private _chat: BehaviorSubject = new BehaviorSubject(null); + private _chats: BehaviorSubject = new BehaviorSubject(null); + private _contact: BehaviorSubject = new BehaviorSubject(null); + private _contacts: BehaviorSubject = new BehaviorSubject(null); + private _profile: BehaviorSubject = new BehaviorSubject(null); + + /** + * Constructor + */ + constructor(private _httpClient: HttpClient) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Accessors + // ----------------------------------------------------------------------------------------------------- + + /** + * Getter for chat + */ + get chat$(): Observable + { + return this._chat.asObservable(); + } + + /** + * Getter for chats + */ + get chats$(): Observable + { + return this._chats.asObservable(); + } + + /** + * Getter for contact + */ + get contact$(): Observable + { + return this._contact.asObservable(); + } + + /** + * Getter for contacts + */ + get contacts$(): Observable + { + return this._contacts.asObservable(); + } + + /** + * Getter for profile + */ + get profile$(): Observable + { + return this._profile.asObservable(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Get chats + */ + getChats(): Observable + { + return this._httpClient.get('api/apps/chat/chats').pipe( + tap((response: Chat[]) => { + this._chats.next(response); + }) + ); + } + + /** + * Get contact + * + * @param id + */ + getContact(id: string): Observable + { + return this._httpClient.get('api/apps/chat/contacts', {params: {id}}).pipe( + tap((response: Contact) => { + this._contact.next(response); + }) + ); + } + + /** + * Get contacts + */ + getContacts(): Observable + { + return this._httpClient.get('api/apps/chat/contacts').pipe( + tap((response: Contact[]) => { + this._contacts.next(response); + }) + ); + } + + /** + * Get profile + */ + getProfile(): Observable + { + return this._httpClient.get('api/apps/chat/profile').pipe( + tap((response: Profile) => { + this._profile.next(response); + }) + ); + } + + /** + * Get chat + * + * @param id + */ + getChatById(id: string): Observable + { + return this._httpClient.get('api/apps/chat/chat', {params: {id}}).pipe( + map((chat) => { + + // Update the chat + this._chat.next(chat); + + // Return the chat + return chat; + }), + switchMap((chat) => { + + if ( !chat ) + { + return throwError('Could not found chat with id of ' + id + '!'); + } + + return of(chat); + }) + ); + } + + /** + * Update chat + * + * @param id + * @param chat + */ + updateChat(id: string, chat: Chat): Observable + { + return this.chats$.pipe( + take(1), + switchMap(chats => this._httpClient.patch('api/apps/chat/chat', { + id, + chat + }).pipe( + map((updatedChat) => { + + // Find the index of the updated chat + const index = chats.findIndex(item => item.id === id); + + // Update the chat + chats[index] = updatedChat; + + // Update the chats + this._chats.next(chats); + + // Return the updated contact + return updatedChat; + }), + switchMap(updatedChat => this.chat$.pipe( + take(1), + filter(item => item && item.id === id), + tap(() => { + + // Update the chat if it's selected + this._chat.next(updatedChat); + + // Return the updated chat + return updatedChat; + }) + )) + )) + ); + } + + /** + * Reset the selected chat + */ + resetChat(): void + { + this._chat.next(null); + } +} diff --git a/src/app/modules/admin/apps/chat/chat.types.ts b/src/app/modules/admin/apps/chat/chat.types.ts new file mode 100644 index 00000000..dededb11 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chat.types.ts @@ -0,0 +1,55 @@ +export interface Profile +{ + id?: string; + name?: string; + email?: string; + avatar?: string; + about?: string; +} + +export interface Contact +{ + id?: string; + avatar?: string; + name?: string; + about?: string; + details?: { + emails?: { + email?: string; + label?: string; + }[]; + phoneNumbers?: { + country?: string; + number?: string; + label?: string; + }[]; + title?: string; + company?: string; + birthday?: string; + address?: string; + }; + attachments?: { + media?: any[] + docs?: any[] + links?: any[] + }; +} + +export interface Chat +{ + id?: string; + contactId?: string; + contact?: Contact; + unreadCount?: number; + muted?: boolean; + lastMessage?: string; + lastMessageAt?: string; + messages?: { + id?: string; + chatId?: string; + contactId?: string; + isMine?: boolean; + value?: string; + createdAt?: string; + }[]; +} diff --git a/src/app/modules/admin/apps/chat/chats/chats.component.html b/src/app/modules/admin/apps/chat/chats/chats.component.html new file mode 100644 index 00000000..db07453c --- /dev/null +++ b/src/app/modules/admin/apps/chat/chats/chats.component.html @@ -0,0 +1,190 @@ +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    +
    +
    + + Profile avatar + + +
    + {{profile.name.charAt(0)}} +
    +
    +
    +
    {{profile.name}}
    +
    + + + + + + + + + +
    + +
    + + + + +
    +
    + + +
    + + +
    +
    + +
    +
    + + Contact avatar + + +
    + {{chat.contact.name.charAt(0)}} +
    +
    +
    +
    +
    {{chat.contact.name}}
    +
    + {{chat.lastMessage}} +
    +
    +
    +
    {{chat.lastMessageAt}}
    + + + +
    +
    +
    +
    +
    + +
    + +
    + + + +
    + +
    No chats
    +
    +
    + + + +
    + +
    +
    + +
    + +
    + +
    diff --git a/src/app/modules/admin/apps/chat/chats/chats.component.ts b/src/app/modules/admin/apps/chat/chats/chats.component.ts new file mode 100644 index 00000000..2d4c6571 --- /dev/null +++ b/src/app/modules/admin/apps/chat/chats/chats.component.ts @@ -0,0 +1,138 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Chat, Profile } from 'app/modules/admin/apps/chat/chat.types'; +import { ChatService } from 'app/modules/admin/apps/chat/chat.service'; + +@Component({ + selector : 'chat-chats', + templateUrl : './chats.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ChatsComponent implements OnInit, OnDestroy +{ + chats: Chat[]; + drawerComponent: 'profile' | 'new-chat'; + drawerOpened: boolean = false; + filteredChats: Chat[]; + profile: Profile; + selectedChat: Chat; + private _unsubscribeAll: Subject = new Subject(); + + /** + * Constructor + */ + constructor( + private _chatService: ChatService, + private _changeDetectorRef: ChangeDetectorRef + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + // Chats + this._chatService.chats$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((chats: Chat[]) => { + this.chats = this.filteredChats = chats; + + // Mark for check + this._changeDetectorRef.markForCheck(); + }); + + // Profile + this._chatService.profile$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((profile: Profile) => { + this.profile = profile; + + // Mark for check + this._changeDetectorRef.markForCheck(); + }); + + // Selected chat + this._chatService.chat$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((chat: Chat) => { + this.selectedChat = chat; + + // Mark for check + this._changeDetectorRef.markForCheck(); + }); + } + + /** + * On destroy + */ + ngOnDestroy(): void + { + // Unsubscribe from all subscriptions + this._unsubscribeAll.next(); + this._unsubscribeAll.complete(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Filter the chats + * + * @param query + */ + filterChats(query: string): void + { + // Reset the filter + if ( !query ) + { + this.filteredChats = this.chats; + return; + } + + this.filteredChats = this.chats.filter((chat) => chat.contact.name.toLowerCase().includes(query.toLowerCase())); + } + + /** + * Open the new chat sidebar + */ + openNewChat(): void + { + this.drawerComponent = 'new-chat'; + this.drawerOpened = true; + + // Mark for check + this._changeDetectorRef.markForCheck(); + } + + /** + * Open the profile sidebar + */ + openProfile(): void + { + this.drawerComponent = 'profile'; + this.drawerOpened = true; + + // Mark for check + this._changeDetectorRef.markForCheck(); + } + + /** + * Track by function for ngFor loops + * + * @param index + * @param item + */ + trackByFn(index: number, item: any): any + { + return item.id || index; + } +} diff --git a/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html b/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html new file mode 100644 index 00000000..556da3c7 --- /dev/null +++ b/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html @@ -0,0 +1,85 @@ +
    + + +
    + +
    Contact info
    +
    + + +
    +
    + + + + +
    + {{chat.contact.name.charAt(0)}} +
    +
    +
    +
    {{chat.contact.name}}
    +
    {{chat.contact.about}}
    +
    + +
    + +
    Media
    +
    + + + +
    + +
    +
    Details
    + +
    +
    Email
    +
    {{chat.contact.details.emails[0].email}}
    +
    +
    + +
    +
    Phone number
    +
    {{chat.contact.details.phoneNumbers[0].number}}
    +
    +
    + +
    +
    Title
    +
    {{chat.contact.details.title}}
    +
    +
    + +
    +
    Company
    +
    {{chat.contact.details.company}}
    +
    +
    + +
    +
    Birthday
    +
    {{chat.contact.details.birthday}}
    +
    +
    + +
    +
    Address
    +
    {{chat.contact.details.address}}
    +
    +
    +
    +
    + + +
    diff --git a/src/app/modules/admin/apps/chat/contact-info/contact-info.component.ts b/src/app/modules/admin/apps/chat/contact-info/contact-info.component.ts new file mode 100644 index 00000000..9e7d014f --- /dev/null +++ b/src/app/modules/admin/apps/chat/contact-info/contact-info.component.ts @@ -0,0 +1,22 @@ +import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core'; +import { MatDrawer } from '@angular/material/sidenav'; +import { Chat, Contact } from 'app/modules/admin/apps/chat/chat.types'; + +@Component({ + selector : 'chat-contact-info', + templateUrl : './contact-info.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContactInfoComponent +{ + @Input() chat: Chat; + @Input() drawer: MatDrawer; + + /** + * Constructor + */ + constructor() + { + } +} diff --git a/src/app/modules/admin/apps/chat/conversation/conversation.component.html b/src/app/modules/admin/apps/chat/conversation/conversation.component.html new file mode 100644 index 00000000..136da840 --- /dev/null +++ b/src/app/modules/admin/apps/chat/conversation/conversation.component.html @@ -0,0 +1,215 @@ +
    + + + + + + + + + + + + + + + + +
    + + + + + + + +
    +
    + + Contact avatar + + +
    + {{chat.contact.name.charAt(0)}} +
    +
    +
    +
    {{chat.contact.name}}
    +
    + + + + + + + + + +
    + + +
    +
    + + + +
    +
    +
    + {{message.createdAt | date: 'longDate'}} +
    +
    +
    +
    +
    + +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    + {{message.createdAt | date:'HH:mm'}} +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    + + + +
    + +
    +
    + +
    + +
    + +
    + + + +
    + +
    Select a conversation or start a new chat
    +
    +
    + + + + + + + + + + + + +
    diff --git a/src/app/modules/admin/apps/chat/conversation/conversation.component.ts b/src/app/modules/admin/apps/chat/conversation/conversation.component.ts new file mode 100644 index 00000000..89ce4752 --- /dev/null +++ b/src/app/modules/admin/apps/chat/conversation/conversation.component.ts @@ -0,0 +1,143 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, NgZone, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Chat } from 'app/modules/admin/apps/chat/chat.types'; +import { ChatService } from 'app/modules/admin/apps/chat/chat.service'; + +@Component({ + selector : 'chat-conversation', + templateUrl : './conversation.component.html', + encapsulation : ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ConversationComponent implements OnInit, OnDestroy +{ + @ViewChild('messageInput') messageInput: ElementRef; + chat: Chat; + drawerOpened: boolean = false; + private _unsubscribeAll: Subject = new Subject(); + + /** + * Constructor + */ + constructor( + private _changeDetectorRef: ChangeDetectorRef, + private _chatService: ChatService, + private _ngZone: NgZone + ) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + // Chat + this._chatService.chat$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((chat: Chat) => { + this.chat = chat; + + // Mark for check + this._changeDetectorRef.markForCheck(); + }); + } + + /** + * On destroy + */ + ngOnDestroy(): void + { + // Unsubscribe from all subscriptions + this._unsubscribeAll.next(); + this._unsubscribeAll.complete(); + } + + // ----------------------------------------------------------------------------------------------------- + // @ Public methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Open the contact info + */ + openContactInfo(): void + { + // Open the drawer + this.drawerOpened = true; + + // Mark for check + this._changeDetectorRef.markForCheck(); + } + + /** + * Reset the chat + */ + resetChat(): void + { + this._chatService.resetChat(); + + // Mark for check + this._changeDetectorRef.markForCheck(); + } + + /** + * Toggle mute notifications + */ + toggleMuteNotifications(): void + { + // Toggle the muted + this.chat.muted = !this.chat.muted; + + // Update the chat on the server + this._chatService.updateChat(this.chat.id, this.chat).subscribe(); + } + + /** + * Track by function for ngFor loops + * + * @param index + * @param item + */ + trackByFn(index: number, item: any): any + { + return item.id || index; + } + + // ----------------------------------------------------------------------------------------------------- + // @ Private methods + // ----------------------------------------------------------------------------------------------------- + + /** + * Resize on 'input' and 'ngModelChange' events + * + * @private + */ + @HostListener('input') + @HostListener('ngModelChange') + private _resizeMessageInput(): void + { + // This doesn't need to trigger Angular's change detection by itself + this._ngZone.runOutsideAngular(() => { + + setTimeout(() => { + + // Set the height to 'auto' so we can correctly read the scrollHeight + this.messageInput.nativeElement.style.height = 'auto'; + + // Detect the changes so the height is applied + this._changeDetectorRef.detectChanges(); + + // Get the scrollHeight and subtract the vertical padding + this.messageInput.nativeElement.style.height = `${this.messageInput.nativeElement.scrollHeight}px`; + + // Detect the changes one more time to apply the final height + this._changeDetectorRef.detectChanges(); + }); + }); + } +} diff --git a/src/app/modules/admin/apps/chat/new-chat/new-chat.component.html b/src/app/modules/admin/apps/chat/new-chat/new-chat.component.html new file mode 100644 index 00000000..13b5ef73 --- /dev/null +++ b/src/app/modules/admin/apps/chat/new-chat/new-chat.component.html @@ -0,0 +1,51 @@ +
    + + +
    + +
    New chat
    +
    + +
    + + + + +
    + {{contact.name.charAt(0)}} +
    +
    + +
    +
    + + Contact avatar + + +
    + {{contact.name.charAt(0)}} +
    +
    +
    +
    +
    {{contact.name}}
    +
    {{contact.about}}
    +
    +
    +
    +
    +
    + + + +
    There are no contacts!
    +
    + +
    diff --git a/src/app/modules/admin/apps/chat/new-chat/new-chat.component.ts b/src/app/modules/admin/apps/chat/new-chat/new-chat.component.ts new file mode 100644 index 00000000..8492671f --- /dev/null +++ b/src/app/modules/admin/apps/chat/new-chat/new-chat.component.ts @@ -0,0 +1,68 @@ +import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; +import { MatDrawer } from '@angular/material/sidenav'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Contact } from 'app/modules/admin/apps/chat/chat.types'; +import { ChatService } from 'app/modules/admin/apps/chat/chat.service'; + +@Component({ + selector : 'chat-new-chat', + templateUrl : './new-chat.component.html', + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class NewChatComponent implements OnInit, OnDestroy +{ + @Input() drawer: MatDrawer; + contacts: Contact[] = []; + private _unsubscribeAll: Subject = new Subject(); + + /** + * Constructor + */ + constructor(private _chatService: ChatService) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + // Contacts + this._chatService.contacts$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((contacts: Contact[]) => { + this.contacts = contacts; + }); + } + + /** + * 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; + } +} diff --git a/src/app/modules/admin/apps/chat/profile/profile.component.html b/src/app/modules/admin/apps/chat/profile/profile.component.html new file mode 100644 index 00000000..017ce60c --- /dev/null +++ b/src/app/modules/admin/apps/chat/profile/profile.component.html @@ -0,0 +1,80 @@ +
    + + +
    + +
    Profile
    +
    + +
    + +
    + + + + + +
    + {{profile.name.charAt(0)}} +
    +
    +
    + + +
    + + Name + + + + + Email + + + + + About + + + +
    + + +
    +
    +
    +
    diff --git a/src/app/modules/admin/apps/chat/profile/profile.component.ts b/src/app/modules/admin/apps/chat/profile/profile.component.ts new file mode 100644 index 00000000..18cf4e29 --- /dev/null +++ b/src/app/modules/admin/apps/chat/profile/profile.component.ts @@ -0,0 +1,53 @@ +import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; +import { MatDrawer } from '@angular/material/sidenav'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Profile } from 'app/modules/admin/apps/chat/chat.types'; +import { ChatService } from 'app/modules/admin/apps/chat/chat.service'; + +@Component({ + selector : 'chat-profile', + templateUrl : './profile.component.html', + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ProfileComponent implements OnInit, OnDestroy +{ + @Input() drawer: MatDrawer; + profile: Profile; + private _unsubscribeAll: Subject = new Subject(); + + /** + * Constructor + */ + constructor(private _chatService: ChatService) + { + } + + // ----------------------------------------------------------------------------------------------------- + // @ Lifecycle hooks + // ----------------------------------------------------------------------------------------------------- + + /** + * On init + */ + ngOnInit(): void + { + // Profile + this._chatService.profile$ + .pipe(takeUntil(this._unsubscribeAll)) + .subscribe((profile: Profile) => { + this.profile = profile; + }); + } + + /** + * On destroy + */ + ngOnDestroy(): void + { + // Unsubscribe from all subscriptions + this._unsubscribeAll.next(); + this._unsubscribeAll.complete(); + } +} From 0ac967a94581ca833e8a9546c0ef0cddd67cb0e4 Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 30 Apr 2021 19:27:40 +0300 Subject: [PATCH 09/10] Removed optional chaining operators to support Node v12 Set the version on .nvmrc to 12 --- .nvmrc | 2 +- src/@fuse/tailwind/plugins/theming.js | 10 +++++++--- tailwind.config.js | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.nvmrc b/.nvmrc index 8351c193..48082f72 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -14 +12 diff --git a/src/@fuse/tailwind/plugins/theming.js b/src/@fuse/tailwind/plugins/theming.js index 1bedd0e7..c14b09c0 100644 --- a/src/@fuse/tailwind/plugins/theming.js +++ b/src/@fuse/tailwind/plugins/theming.js @@ -72,13 +72,17 @@ function generateThemesObject(themes) return _.map(_.cloneDeep(themes), (value, key) => { const theme = normalizeTheme(value); + const primary = (theme && theme.primary && theme.primary.DEFAULT) ? theme.primary.DEFAULT : normalizedDefaultTheme.primary.DEFAULT; + const accent = (theme && theme.accent && theme.accent.DEFAULT) ? theme.accent.DEFAULT : normalizedDefaultTheme.accent.DEFAULT; + const warn = (theme && theme.warn && theme.warn.DEFAULT) ? theme.warn.DEFAULT : normalizedDefaultTheme.warn.DEFAULT; + return _.fromPairs([ [ key, { - primary: theme?.primary?.DEFAULT ?? normalizedDefaultTheme.primary.DEFAULT, - accent : theme?.accent?.DEFAULT ?? normalizedDefaultTheme.accent.DEFAULT, - warn : theme?.warn?.DEFAULT ?? normalizedDefaultTheme.warn.DEFAULT + primary, + accent, + warn } ] ]); diff --git a/tailwind.config.js b/tailwind.config.js index f2986418..75d82c49 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -78,7 +78,7 @@ const config = { // development and production, we will decide whether to purge or not // by looking at the process arguments. If there is a "build" argument // with the "ng" command then we will enable the purge. - enabled: process?.argv?.find(arg => arg.includes('ng')) && process?.argv?.indexOf('build') !== -1, + enabled: process && process.argv && process.argv.find(arg => arg.includes('ng')) && process.argv.indexOf('build') !== -1, content: ['./src/**/*.{html,scss,ts}'], options: { safelist: { From 5dd60c816c7cfafa38e0e3b20681c4c2e56e447a Mon Sep 17 00:00:00 2001 From: sercan Date: Fri, 30 Apr 2021 19:39:02 +0300 Subject: [PATCH 10/10] (apps/chat) Small adjustments and tweaks for Dark mode --- .../apps/chat/chats/chats.component.html | 2 +- .../contact-info/contact-info.component.html | 137 +++++++++--------- .../conversation/conversation.component.html | 2 +- 3 files changed, 71 insertions(+), 70 deletions(-) diff --git a/src/app/modules/admin/apps/chat/chats/chats.component.html b/src/app/modules/admin/apps/chat/chats/chats.component.html index db07453c..bcab6292 100644 --- a/src/app/modules/admin/apps/chat/chats/chats.component.html +++ b/src/app/modules/admin/apps/chat/chats/chats.component.html @@ -28,7 +28,7 @@ -
    +
    diff --git a/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html b/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html index 556da3c7..9ea099c8 100644 --- a/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html +++ b/src/app/modules/admin/apps/chat/contact-info/contact-info.component.html @@ -1,4 +1,4 @@ -
    +
    @@ -10,76 +10,77 @@
    Contact info
    - -
    -
    - - - - -
    - {{chat.contact.name.charAt(0)}} -
    -
    +
    + +
    +
    + + + + +
    + {{chat.contact.name.charAt(0)}} +
    +
    +
    +
    {{chat.contact.name}}
    +
    {{chat.contact.about}}
    -
    {{chat.contact.name}}
    -
    {{chat.contact.about}}
    -
    -
    - -
    Media
    -
    - - - -
    - -
    -
    Details
    - -
    -
    Email
    -
    {{chat.contact.details.emails[0].email}}
    -
    -
    - -
    -
    Phone number
    -
    {{chat.contact.details.phoneNumbers[0].number}}
    -
    -
    - -
    -
    Title
    -
    {{chat.contact.details.title}}
    -
    -
    - -
    -
    Company
    -
    {{chat.contact.details.company}}
    -
    -
    - -
    -
    Birthday
    -
    {{chat.contact.details.birthday}}
    -
    -
    - -
    -
    Address
    -
    {{chat.contact.details.address}}
    -
    -
    +
    + +
    Media
    +
    + + + +
    + +
    +
    Details
    + +
    +
    Email
    +
    {{chat.contact.details.emails[0].email}}
    +
    +
    + +
    +
    Phone number
    +
    {{chat.contact.details.phoneNumbers[0].number}}
    +
    +
    + +
    +
    Title
    +
    {{chat.contact.details.title}}
    +
    +
    + +
    +
    Company
    +
    {{chat.contact.details.company}}
    +
    +
    + +
    +
    Birthday
    +
    {{chat.contact.details.birthday}}
    +
    +
    + +
    +
    Address
    +
    {{chat.contact.details.address}}
    +
    +
    +
    -
    diff --git a/src/app/modules/admin/apps/chat/conversation/conversation.component.html b/src/app/modules/admin/apps/chat/conversation/conversation.component.html index 136da840..9c3fa082 100644 --- a/src/app/modules/admin/apps/chat/conversation/conversation.component.html +++ b/src/app/modules/admin/apps/chat/conversation/conversation.component.html @@ -156,7 +156,7 @@
    -
    +