ngx-firebase-cms
Version:
Angular Content Management System using Google Firebase (Authentication, Storage & Firestore)
509 lines (504 loc) • 553 kB
JavaScript
import { Component, Injectable, Inject, defineInjectable, inject, ViewEncapsulation, ViewChild, HostListener, NgModule, Input, Renderer2, Output, EventEmitter, forwardRef, Pipe } from '@angular/core';
import { AngularFirestore, AngularFirestoreModule } from '@angular/fire/firestore';
import { AngularFireStorage, AngularFireStorageModule } from '@angular/fire/storage';
import { AngularFireAuth, AngularFireAuthModule } from '@angular/fire/auth';
import { DOCUMENT, registerLocaleData, CommonModule } from '@angular/common';
import { NzMessageService, NzModalService, NzNotificationService, NgZorroAntdModule, NZ_I18N, NZ_ICON_DEFAULT_TWOTONE_COLOR, NZ_ICONS, en_US } from 'ng-zorro-antd';
import { BarsOutline, DisconnectOutline, LinkOutline, DeleteOutline, CodeOutline, MenuFoldOutline, MenuUnfoldOutline, UndoOutline, RedoOutline, BoldOutline, ItalicOutline, UnderlineOutline, StrikethroughOutline, AlignLeftOutline, AlignCenterOutline, AlignRightOutline, OrderedListOutline, UnorderedListOutline, FontSizeOutline, LineHeightOutline, BgColorsOutline, PlusOutline, MinusOutline, FontColorsOutline, SecurityScanOutline, HomeOutline, InboxOutline, CloudOutline, CloudUploadOutline, UserOutline, LockOutline, IdcardOutline, TeamOutline, FormOutline, SettingOutline, DesktopOutline, UnlockOutline, HddOutline, PictureOutline, MailOutline, ContactsOutline } from '@ant-design/icons-angular/icons';
import en from '@angular/common/locales/en';
import { trigger, transition, style, animate } from '@angular/animations';
import { Router, ActivatedRoute, RouterModule } from '@angular/router';
import { __values, __assign } from 'tslib';
import { of, ReplaySubject } from 'rxjs';
import { tap, switchMap, takeUntil, map, mergeMap, take } from 'rxjs/operators';
import { firestore } from 'firebase/app';
import { Validators, FormBuilder, FormControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClient, HttpClientModule } from '@angular/common/http';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var DynamicBuilderComponent = /** @class */ (function () {
function DynamicBuilderComponent() {
}
/**
* @return {?}
*/
DynamicBuilderComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
DynamicBuilderComponent.decorators = [
{ type: Component, args: [{
selector: 'aq-dynamic-builder',
template: "<p>\n dynamic-builder works!\n</p>\n",
styles: [""]
}] }
];
/** @nocollapse */
DynamicBuilderComponent.ctorParameters = function () { return []; };
return DynamicBuilderComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var DynamicFormComponent = /** @class */ (function () {
function DynamicFormComponent() {
}
/**
* @return {?}
*/
DynamicFormComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
DynamicFormComponent.decorators = [
{ type: Component, args: [{
selector: 'aq-dynamic-form',
template: "<p>\n dynamic-form works!\n</p>\n",
styles: [""]
}] }
];
/** @nocollapse */
DynamicFormComponent.ctorParameters = function () { return []; };
return DynamicFormComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var AuthService = /** @class */ (function () {
function AuthService(config, afAuth, message, router, afs) {
var _this = this;
this.config = config;
this.afAuth = afAuth;
this.message = message;
this.router = router;
this.afs = afs;
this.user$ = this.afAuth.authState.pipe(tap((/**
* @param {?} res
* @return {?}
*/
function (res) {
if (res) {
_this.uid = res["uid"];
_this.email = res["email"];
_this.emailVerified = res["emailVerified"];
_this.lastLogin = new Date(res["metadata"]["lastSignInTime"]);
}
})), switchMap((/**
* @param {?} user
* @return {?}
*/
function (user) {
if (user) {
return _this.afs.doc("users/" + user.uid).valueChanges();
}
else {
return of(null);
}
})), tap((/**
* @param {?} user
* @return {?}
*/
function (user) {
if (user) {
_this.displayName = user["displayName"];
_this.profileURL = user["profileURL"];
_this.role = user["roles"];
}
})));
}
/**
* @param {?} username
* @param {?} password
* @return {?}
*/
AuthService.prototype.login = /**
* @param {?} username
* @param {?} password
* @return {?}
*/
function (username, password) {
var _this = this;
/** @type {?} */
var adminURL = this.config.adminURL || 'admin';
this.afAuth.auth.signInWithEmailAndPassword(username, password)
.then((/**
* @param {?} res
* @return {?}
*/
function (res) {
_this.router.navigate([adminURL + "/dashboard"]);
})).catch((/**
* @param {?} err
* @return {?}
*/
function (err) {
_this.message.error(err);
}));
};
/**
* @param {?} username
* @param {?} password
* @return {?}
*/
AuthService.prototype.signup = /**
* @param {?} username
* @param {?} password
* @return {?}
*/
function (username, password) {
var _this = this;
/** @type {?} */
var adminURL = this.config.adminURL || 'admin';
this.afAuth.auth.createUserWithEmailAndPassword(username, password).then((/**
* @param {?} res
* @return {?}
*/
function (res) {
/** @type {?} */
var data = {
uid: res['user']['uid'],
email: res['user']['email'],
displayName: res['user']['email'],
emailVerified: false,
createdTime: firestore.FieldValue.serverTimestamp(),
updatedTime: firestore.FieldValue.serverTimestamp(),
lastLoginTime: firestore.FieldValue.serverTimestamp(),
roles: ["Contributor"]
};
if (res['user']['uid']) {
_this.afs.collection("users").doc(res['user']['uid']).set(data)
.then((/**
* @param {?} res
* @return {?}
*/
function (res) {
_this.router.navigate([adminURL + "/dashboard"]);
}))
.catch((/**
* @param {?} err
* @return {?}
*/
function (err) {
_this.message.error(err);
}));
}
}));
};
/**
* @return {?}
*/
AuthService.prototype.signOut = /**
* @return {?}
*/
function () {
return this.afAuth.auth.signOut();
};
/**
* @private
* @param {?} user
* @return {?}
*/
AuthService.prototype.updateUserData = /**
* @private
* @param {?} user
* @return {?}
*/
function (user) {
/** @type {?} */
var userRef = this.afs.doc("users/" + user.uid);
/** @type {?} */
var data = {
uid: user.uid,
email: user.email,
roles: ["Contributor"]
};
return userRef.set(data, { merge: true });
};
///// Role-based Authorization //////
///// Role-based Authorization //////
/**
* @param {?} user
* @return {?}
*/
AuthService.prototype.canRead =
///// Role-based Authorization //////
/**
* @param {?} user
* @return {?}
*/
function (user) {
/** @type {?} */
var allowed = ['Administrator', 'Editor', 'Author', 'Contributor'];
return this.checkAuthorization(user, allowed);
};
/**
* @param {?} user
* @return {?}
*/
AuthService.prototype.canEdit = /**
* @param {?} user
* @return {?}
*/
function (user) {
/** @type {?} */
var allowed = ['Administrator', 'Editor'];
return this.checkAuthorization(user, allowed);
};
/**
* @param {?} user
* @return {?}
*/
AuthService.prototype.canDelete = /**
* @param {?} user
* @return {?}
*/
function (user) {
/** @type {?} */
var allowed = ['Administrator'];
return this.checkAuthorization(user, allowed);
};
// determines if user has matching role
// determines if user has matching role
/**
* @private
* @param {?} user
* @param {?} allowedRoles
* @return {?}
*/
AuthService.prototype.checkAuthorization =
// determines if user has matching role
/**
* @private
* @param {?} user
* @param {?} allowedRoles
* @return {?}
*/
function (user, allowedRoles) {
var e_1, _a;
if (!user)
return false;
try {
for (var allowedRoles_1 = __values(allowedRoles), allowedRoles_1_1 = allowedRoles_1.next(); !allowedRoles_1_1.done; allowedRoles_1_1 = allowedRoles_1.next()) {
var role = allowedRoles_1_1.value;
if (user.roles[role]) {
return true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (allowedRoles_1_1 && !allowedRoles_1_1.done && (_a = allowedRoles_1.return)) _a.call(allowedRoles_1);
}
finally { if (e_1) throw e_1.error; }
}
return false;
};
/**
* @param {?} description
* @return {?}
*/
AuthService.prototype.log = /**
* @param {?} description
* @return {?}
*/
function (description) {
if (this.uid) {
this.afs.collection('log').add({
"description": description,
"uid": this.uid,
"createdTime": firestore.FieldValue.serverTimestamp()
});
}
};
AuthService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
AuthService.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: ['env',] }] },
{ type: AngularFireAuth },
{ type: NzMessageService },
{ type: Router },
{ type: AngularFirestore }
]; };
/** @nocollapse */ AuthService.ngInjectableDef = defineInjectable({ factory: function AuthService_Factory() { return new AuthService(inject("env"), inject(AngularFireAuth), inject(NzMessageService), inject(Router), inject(AngularFirestore)); }, token: AuthService, providedIn: "root" });
return AuthService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var UnsubscriptionService = /** @class */ (function () {
function UnsubscriptionService() {
}
/**
* @param {?} component
* @return {?}
*/
UnsubscriptionService.prototype.componentDestroyed = /**
* @param {?} component
* @return {?}
*/
function (component) {
/** @type {?} */
var modifiedComponent = (/** @type {?} */ (component));
if (modifiedComponent.__componentDestroyed$) {
return modifiedComponent.__componentDestroyed$;
}
/** @type {?} */
var oldNgOnDestroy = component.ngOnDestroy;
/** @type {?} */
var stop$ = new ReplaySubject();
modifiedComponent.ngOnDestroy = (/**
* @return {?}
*/
function () {
oldNgOnDestroy && oldNgOnDestroy.apply(component);
stop$.next(true);
stop$.complete();
});
return modifiedComponent.__componentDestroyed$ = stop$.asObservable();
};
/**
* @template T
* @param {?} component
* @return {?}
*/
UnsubscriptionService.prototype.untilComponentDestroyed = /**
* @template T
* @param {?} component
* @return {?}
*/
function (component) {
var _this = this;
return (/**
* @param {?} source
* @return {?}
*/
function (source) { return source.pipe(takeUntil(_this.componentDestroyed(component))); });
};
UnsubscriptionService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
UnsubscriptionService.ctorParameters = function () { return []; };
/** @nocollapse */ UnsubscriptionService.ngInjectableDef = defineInjectable({ factory: function UnsubscriptionService_Factory() { return new UnsubscriptionService(); }, token: UnsubscriptionService, providedIn: "root" });
return UnsubscriptionService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var DashboardComponent = /** @class */ (function () {
function DashboardComponent(config, afs, unsubscription, modal, router, auth, message) {
this.config = config;
this.afs = afs;
this.unsubscription = unsubscription;
this.modal = modal;
this.router = router;
this.auth = auth;
this.message = message;
this.now = new Date();
this.brand = "";
this.brandURL = "#";
this.isCollapsed = false;
this.isReverseArrow = false;
this.width = 200;
this.isLoginPage = false;
this.brand = this.config.brand || "AppQuick.co";
this.brandURL = this.config.brandURL || "https://appquick.co";
}
/**
* @return {?}
*/
DashboardComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.auth.user$
.pipe(this.unsubscription.untilComponentDestroyed(this))
.subscribe((/**
* @param {?} user
* @return {?}
*/
function (user) { _this.user = user; }), (/**
* @param {?} err
* @return {?}
*/
function (err) { }));
};
/**
* @return {?}
*/
DashboardComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
DashboardComponent.prototype.logout = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var adminURL = this.config.adminURL || 'admin';
this.modal.confirm({
"nzTitle": '<i>Logout</i>',
"nzIconType": "logout",
"nzContent": "<b>Are you sure?</b>",
"nzOnOk": (/**
* @return {?}
*/
function () {
return _this.auth.signOut().then((/**
* @param {?} res
* @return {?}
*/
function (res) {
_this.router.navigate([adminURL + "/login"]);
}));
})
});
};
/**
* @return {?}
*/
DashboardComponent.prototype.getProfilePic = /**
* @return {?}
*/
function () {
return (this.user.profileURL) ? { 'background-image': 'url(\'' + this.user.profileURL + '\')' } : {};
};
DashboardComponent.decorators = [
{ type: Component, args: [{
selector: 'aq-dashboard',
template: "<nz-layout>\n <nz-sider *ngIf=\"user\" [@enterAnimation] nzCollapsible [(nzCollapsed)]=\"isCollapsed\" [nzWidth]=\"width\" [nzReverseArrow]=\"isReverseArrow\">\n <div nz-tooltip=\"Dashboard\" routerLink=\"dashboard\" class=\"logo pointer\" [ngStyle]=\"getProfilePic()\" [ngClass]=\"{'open': !isCollapsed}\"></div>\n <ul nz-menu [nzTheme]=\"'dark'\" [nzMode]=\"'inline'\" [nzInlineCollapsed]=\"isCollapsed\">\n <li nz-submenu nzOpen=\"true\">\n <span title>\n <i nz-icon type=\"form\"></i>\n <span class=\"nav-text\">Content</span>\n </span>\n <ul>\n <li nz-menu-item routerLink=\"posts\">\n <span>\n <i nz-icon type=\"form\" theme=\"outline\"></i>\n <span class=\"nav-text\">Pages</span>\n </span>\n </li>\n <li nz-menu-item routerLink=\"files\">\n <span>\n <i nz-icon type=\"picture\" theme=\"outline\"></i>\n <span class=\"nav-text\">Media</span>\n </span>\n </li>\n <li nz-menu-item routerLink=\"forms\">\n <span>\n <i nz-icon type=\"hdd\" theme=\"outline\"></i>\n <span class=\"nav-text\">Form</span>\n </span>\n </li>\n <li nz-menu-item routerLink=\"emails\">\n <span>\n <i nz-icon type=\"mail\" theme=\"outline\"></i>\n <span class=\"nav-text\">Emails</span>\n </span>\n </li>\n <li nz-menu-item routerLink=\"users\">\n <span title>\n <i nz-icon type=\"team\" theme=\"outline\"></i>\n <span class=\"nav-text\">Users</span>\n </span>\n </li>\n </ul>\n </li>\n <li nz-submenu nzOpen=\"true\">\n <span title>\n <i nz-icon type=\"setting\"></i>\n <span class=\"nav-text\">Account</span>\n </span>\n <ul>\n <li nz-menu-item routerLink=\"profile\">\n <span>\n <i nz-icon type=\"team\" theme=\"outline\"></i>\n <span class=\"nav-text\">Profile</span>\n </span>\n </li>\n <li nz-menu-item (click)=\"logout()\">\n <span title>\n <i nz-icon type=\"unlock\" theme=\"outline\"></i>\n <span class=\"nav-text\">Sign Out</span>\n </span>\n </li>\n </ul>\n </li>\n </ul>\n </nz-sider>\n <nz-layout>\n <nz-content>\n <router-outlet></router-outlet>\n </nz-content>\n <nz-footer>\n <p class=\"text-center footer\">\n <a target=\"_blank\" href=\"{{ brandURL }}\">{{ brand }}</a> \u00A9 {{ now | date : 'yyyy'}}\n </p>\n </nz-footer>\n </nz-layout>\n</nz-layout>",
animations: [
trigger('enterAnimation', [
transition(':enter', [
style({ transform: 'translateX(-100%)', opacity: 0 }),
animate('500ms', style({ transform: 'translateX(0)', opacity: 1 }))
]),
transition(':leave', [
style({ transform: 'translateX(0)', opacity: 1 }),
animate('500ms', style({ transform: 'translateX(-100%)', opacity: 0 }))
])
])
],
encapsulation: ViewEncapsulation.None,
styles: ["dl,ol,p,pre,ul{margin-top:0}address,dl,ol,p,pre,ul{margin-bottom:1em}button,hr,input{overflow:visible}pre,textarea{overflow:auto}article,aside,dialog,figcaption,figure,footer,header,hgroup,legend,main,nav,section{display:block}dd,h1,h2,h3,h4,h5,h6,legend{margin-bottom:.5em}address,legend{line-height:inherit}progress,sub,sup{vertical-align:baseline}[ant-click-animating-without-extra-node=true],[ant-click-animating=true],sub,sup{position:relative}.ant-btn,[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}.ant-fullcalendar table,table{border-collapse:collapse}.ant-calendar-range .ant-calendar-date-panel::after,.ant-card-actions::after,.ant-card-body::after,.ant-card-head .ant-tabs,.ant-card-head::after,.ant-card-meta::after,.ant-carousel .slick-track::after,.ant-divider-horizontal,.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title,.ant-form-explain,.ant-form-extra,.ant-form-item-control::after,.ant-menu-horizontal::after,.ant-menu::after,.ant-modal-confirm-body-wrapper::after,.ant-pagination::after,.ant-row::after,.ant-select-selection--multiple::after,.ant-spin-blur,.ant-table,.ant-table-wrapper::after,.ant-tabs-nav-container::after,.ant-tabs-nav::after,.ant-tabs::after,.ant-time-picker-panel-combobox::after,.ant-upload-list::after,.clearfix::after{clear:both}.ant-carousel .slick-loading .slick-slide,.slick-loading .ant-carousel .slick-track{visibility:hidden}.ant-carousel .slick-slider,.cdk-overlay-backdrop,html{-webkit-tap-highlight-color:transparent}body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar}@-ms-viewport{width:device-width}body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei','Helvetica Neue',Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-variant:tabular-nums;line-height:1.5;background-color:#fff;-webkit-font-feature-settings:'tnum';font-feature-settings:'tnum'}[tabindex='-1']:focus{outline:0!important}hr{box-sizing:content-box;height:0}h1,h2,h3,h4,h5,h6{margin-top:0;color:rgba(0,0,0,.85);font-weight:500}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{font-style:normal}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-left:0}blockquote,figure{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:0;cursor:pointer;transition:color .3s;-webkit-text-decoration-skip:objects}a:focus{text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:SFMono-Regular,Consolas,'Liberation Mono',Menlo,Courier,monospace}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}.ant-avatar,.ant-badge-count,.ant-btn,.anticon{text-align:center}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{width:100%;max-width:100%;padding:0;color:inherit;font-size:1.5em;white-space:normal}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}.ant-alert,.ant-anchor,.ant-select-auto-complete{box-sizing:border-box;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:'tnum';font-feature-settings:'tnum'}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow,.ant-input-number-handler-down-inner,.ant-input-number-handler-up-inner,.anticon{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;text-transform:none}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix{zoom:1}.clearfix::after,.clearfix::before{content:'';display:table}.anticon,.anticon svg{display:inline-block}.anticon{line-height:0;vertical-align:-.125em}.anticon>*{line-height:1}.anticon::before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin::before{display:inline-block;-webkit-animation:1s linear infinite loadingCircle;animation:1s linear infinite loadingCircle}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}@-webkit-keyframes antFadeIn{0%{opacity:0}100%{opacity:1}}@keyframes antFadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}100%{opacity:0}}@keyframes antFadeOut{0%{opacity:1}100%{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loadingCircle{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]::after{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;display:block;border:0 solid #1890ff;border-radius:inherit;opacity:.2;-webkit-animation:2s cubic-bezier(.08,.82,.17,1) fadeEffect,.4s cubic-bezier(.08,.82,.17,1) waveEffect;animation:2s cubic-bezier(.08,.82,.17,1) fadeEffect,.4s cubic-bezier(.08,.82,.17,1) waveEffect;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;pointer-events:none;content:''}@-webkit-keyframes waveEffect{100%{top:-6px;right:-6px;bottom:-6px;left:-6px;border-width:6px}}@keyframes waveEffect{100%{top:-6px;right:-6px;bottom:-6px;left:-6px;border-width:6px}}.ant-alert-close-icon,.ant-alert-close-text{right:16px;position:absolute}@-webkit-keyframes fadeEffect{100%{opacity:0}}@keyframes fadeEffect{100%{opacity:0}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}100%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}100%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}100%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}100%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}100%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}100%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}100%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-s