{"version":3,"file":"inet-ui.mjs","sources":["../../../projects/inet-ui/src/lib/model/system-application.ts","../../../projects/inet-ui/src/lib/model/user-role.ts","../../../projects/inet-ui/src/lib/model/chat-message.ts","../../../projects/inet-ui/src/lib/model/notify-message.ts","../../../projects/inet-ui/src/lib/model/address.ts","../../../projects/inet-ui/src/lib/model/contact.ts","../../../projects/inet-ui/src/lib/model/organization.ts","../../../projects/inet-ui/src/lib/model/organization-information.ts","../../../projects/inet-ui/src/lib/model/response-upload-file.ts","../../../projects/inet-ui/src/lib/decorator/auto-unsubscribe.decorator.ts","../../../projects/inet-ui/src/lib/decorator/logger.decorator.ts","../../../projects/inet-ui/src/lib/pipes/safe.pipe.ts","../../../projects/inet-ui/src/lib/pipes/safe-html.pipe.ts","../../../projects/inet-ui/src/lib/pipes/safe-pipe.module.ts","../../../projects/inet-ui/src/lib/common/authenticate.guard.ts","../../../projects/inet-ui/src/lib/common/location.service.ts","../../../projects/inet-ui/src/lib/common/dictionary.service.ts","../../../projects/inet-ui/src/lib/common/notify-message.service.ts","../../../projects/inet-ui/src/lib/interceptor/interceptor.module.ts","../../../projects/inet-ui/src/lib/translate/system-vi.ts","../../../projects/inet-ui/src/lib/translate/system-en.ts","../../../projects/inet-ui/src/lib/translate/cloud-trans-loader.ts","../../../projects/inet-ui/src/lib/translate/cloud-translate.service.ts","../../../projects/inet-ui/src/lib/translate/cloud-translate.module.ts","../../../projects/inet-ui/src/lib/web-socket/websocket.module.ts","../../../projects/inet-ui/src/lib/collapse/collapse.directive.ts","../../../projects/inet-ui/src/lib/collapse/collapse.module.ts","../../../projects/inet-ui/src/lib/dialog/dialog-action.ts","../../../projects/inet-ui/src/lib/dialog/modal-content.directive.ts","../../../projects/inet-ui/src/lib/dialog/modal-action.directive.ts","../../../projects/inet-ui/src/lib/dialog/modal-header.directive.ts","../../../projects/inet-ui/src/lib/dialog/confirm-dialog.component.ts","../../../projects/inet-ui/src/lib/dialog/confirm-dialog.component.html","../../../projects/inet-ui/src/lib/dialog/dialog.module.ts","../../../projects/inet-ui/src/lib/list-view/list-view-row.ts","../../../projects/inet-ui/src/lib/list-view/list-view.component.ts","../../../projects/inet-ui/src/lib/list-view/list-view.component.html","../../../projects/inet-ui/src/lib/list-view/list-view.directive.ts","../../../projects/inet-ui/src/lib/list-view/list-view.module.ts","../../../projects/inet-ui/src/lib/file/file-format.service.ts","../../../projects/inet-ui/src/lib/file/file-ext.pipe.ts","../../../projects/inet-ui/src/lib/file/file-icon.pipe.ts","../../../projects/inet-ui/src/lib/file/viewer.service.ts","../../../projects/inet-ui/src/lib/file/viewer.directive.ts","../../../projects/inet-ui/src/lib/file/list/file-list.component.ts","../../../projects/inet-ui/src/lib/file/list/file-list.component.html","../../../projects/inet-ui/src/lib/file/file.module.ts","../../../projects/inet-ui/src/lib/file-upload/file-drop.directive.ts","../../../projects/inet-ui/src/lib/file-upload/file-select.directive.ts","../../../projects/inet-ui/src/lib/file-upload/file-type.class.ts","../../../projects/inet-ui/src/lib/file-upload/file-like-object.class.ts","../../../projects/inet-ui/src/lib/file-upload/file-item.class.ts","../../../projects/inet-ui/src/lib/file-upload/file-uploader.class.ts","../../../projects/inet-ui/src/lib/file-upload/file-upload.module.ts","../../../projects/inet-ui/src/lib/open-graph/open-graph.service.ts","../../../projects/inet-ui/src/lib/open-graph/link-preview/link-preview.component.ts","../../../projects/inet-ui/src/lib/open-graph/link-preview/link-preview.component.html","../../../projects/inet-ui/src/lib/open-graph/open-graph.module.ts","../../../projects/inet-ui/src/lib/image-cropper/image.utils.ts","../../../projects/inet-ui/src/lib/image-cropper/image-cropper.component.ts","../../../projects/inet-ui/src/lib/image-cropper/image-cropper.component.html","../../../projects/inet-ui/src/lib/image-cropper/cropper-avatar/cropper-avatar-dialog.component.ts","../../../projects/inet-ui/src/lib/image-cropper/cropper-avatar/cropper-avatar-dialog.component.html","../../../projects/inet-ui/src/lib/image-cropper/image-cropper.module.ts","../../../projects/inet-ui/src/lib/pagination/pagination-list/pagination-list.component.ts","../../../projects/inet-ui/src/lib/pagination/pagination-list/pagination-list.component.html","../../../projects/inet-ui/src/lib/pagination/pagination-list.module.ts","../../../projects/inet-ui/src/lib/datetime/timeago.pipe.ts","../../../projects/inet-ui/src/lib/datetime/datetime.module.ts","../../../projects/inet-ui/src/lib/plugin-manager/plugin-manager.service.ts","../../../projects/inet-ui/src/lib/plugin-manager/cloud-plugin.component.ts","../../../projects/inet-ui/src/lib/plugin-manager/plugin-toolbar.directive.ts","../../../projects/inet-ui/src/lib/plugin-manager/plugin-manager.module.ts","../../../projects/inet-ui/src/lib/notify/toastr/toast.directive.ts","../../../projects/inet-ui/src/lib/notify/portal/portal.ts","../../../projects/inet-ui/src/lib/notify/toastr/toastr-config.ts","../../../projects/inet-ui/src/lib/notify/toastr/toast-injector.ts","../../../projects/inet-ui/src/lib/notify/portal/dom-portal-host.ts","../../../projects/inet-ui/src/lib/notify/overlay/overlay-ref.ts","../../../projects/inet-ui/src/lib/notify/overlay/overlay-container.ts","../../../projects/inet-ui/src/lib/notify/overlay/overlay.ts","../../../projects/inet-ui/src/lib/notify/toastr/toastr.service.ts","../../../projects/inet-ui/src/lib/notify/toastr/toast.component.ts","../../../projects/inet-ui/src/lib/notify/toastr/toastr.module.ts","../../../projects/inet-ui/src/lib/notify/notify.service.ts","../../../projects/inet-ui/src/lib/notify/notify.module.ts","../../../projects/inet-ui/src/lib/custom-pagination/custom-pagination.component.ts","../../../projects/inet-ui/src/lib/custom-pagination/custom-pagination.component.html","../../../projects/inet-ui/src/lib/custom-pagination/custom-pagination.module.ts","../../../projects/inet-ui/src/lib/ngx-editor/common/services/message.service.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor-message/ngx-editor-message.component.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor-message/ngx-editor-message.component.html","../../../projects/inet-ui/src/lib/ngx-editor/common/utils/ngx-editor.utils.ts","../../../projects/inet-ui/src/lib/ngx-editor/common/services/command-executor.service.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor-toolbar/ngx-editor-toolbar.component.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor-toolbar/ngx-editor-toolbar.component.html","../../../projects/inet-ui/src/lib/ngx-editor/ngx-grippie/ngx-grippie.component.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-grippie/ngx-grippie.component.html","../../../projects/inet-ui/src/lib/ngx-editor/common/ngx-editor.defaults.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor.component.ts","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor.component.html","../../../projects/inet-ui/src/lib/ngx-editor/ngx-editor.module.ts","../../../projects/inet-ui/src/lib/grid/utils/drag.ts","../../../projects/inet-ui/src/lib/grid/utils/px.ts","../../../projects/inet-ui/src/lib/grid/utils/hide.ts","../../../projects/inet-ui/src/lib/grid/utils/min.ts","../../../projects/inet-ui/src/lib/grid/components/column/column.component.ts","../../../projects/inet-ui/src/lib/grid/components/row/row.component.ts","../../../projects/inet-ui/src/lib/grid/components/row/row.component.html","../../../projects/inet-ui/src/lib/grid/types/default-translations.type.ts","../../../projects/inet-ui/src/lib/grid/components/pagination/pagination.component.ts","../../../projects/inet-ui/src/lib/grid/components/pagination/pagination.component.html","../../../projects/inet-ui/src/lib/grid/components/header/header.component.ts","../../../projects/inet-ui/src/lib/grid/components/header/header.component.html","../../../projects/inet-ui/src/lib/grid/components/table/table.component.ts","../../../projects/inet-ui/src/lib/grid/components/table/table.component.html","../../../projects/inet-ui/src/lib/grid/datasource/data-table-resource.ts","../../../projects/inet-ui/src/lib/grid/grid-module.ts","../../../projects/inet-ui/src/lib/grid/index.ts","../../../projects/inet-ui/src/lib/utils/date-utils.ts","../../../projects/inet-ui/src/lib/number-format/number-utils.service.ts","../../../projects/inet-ui/src/lib/number-format/number-separator.directive.ts","../../../projects/inet-ui/src/lib/number-format/number-format.module.ts","../../../projects/inet-ui/src/lib/web-token/lib/Constants.ts","../../../projects/inet-ui/src/lib/web-token/lib/CertUtils.ts","../../../projects/inet-ui/src/lib/web-token/lib/WebTokenSigner.ts","../../../projects/inet-ui/src/lib/web-token/lib/TokenSimulator.ts","../../../projects/inet-ui/src/lib/web-token/web-token.service.ts","../../../projects/inet-ui/src/lib/web-token/web-token.module.ts","../../../projects/inet-ui/src/lib/navigation-tab/navigation-tab.component.ts","../../../projects/inet-ui/src/lib/navigation-tab/navigation-tab.component.html","../../../projects/inet-ui/src/lib/navigation-tab/navigation-tab.module.ts","../../../projects/inet-ui/src/lib/pipe-common/truncate.pipe.ts","../../../projects/inet-ui/src/lib/pipe-common/pipe-common.module.ts","../../../projects/inet-ui/src/lib/naming-convetion/naming-convention.directive.ts","../../../projects/inet-ui/src/lib/naming-convetion/naming-convention.module.ts","../../../projects/inet-ui/src/public-api.ts","../../../projects/inet-ui/src/inet-ui.ts"],"sourcesContent":["export class SystemApplication {\n    domain?: string;\n    firmContext?: string;\n    homepage?: string;\n    icon?: string;\n    module?: string;\n    name?: string;\n    organId?: string;\n    pattern?: string;\n    prefixUri?: string;\n    webContext?: string;\n    widget?: string //title bar\n}\n","export class UserRole {\n    user: boolean =false;\n    admin: boolean = false;\n    community: boolean = false\n}\n","export class Message {\n  application?: string;\n  alert?: string;\n  sender?: string;\n  content?: string;\n  badge: number = 1;\n  sound: string = 'default';\n}\nexport class ChatMessage {\n  application?: string;\n  organization?: string;\n  sender?: string;\n  sent?: number;\n  message?: Message;\n  messageType?: string;\n  alias: string[] = [];\n}\n","export class NotifyMessage {\n  uuid?: string;\n  application?: string;\n  context?: string;\n  activityID?: string;\n  message?: string;\n  sender?: string;\n  fullname?: string;\n  usercode?: string;\n  created?: number;\n  read?: boolean;\n  mredirectURL?: string;\n  mshortcutURL?: string;\n  redirectURL?: string;\n  shortcutURL?: string;\n  params?: any\n}\n\nexport class NotifyMessageContent {\n  action?: string;\n  alert?: string;\n  badge?: string;\n  content?: string;\n  msgID?: string;\n  sound: string = 'default';\n  ttl?: string;\n}\n\nexport class NotifyMessageItem {\n  uuid?: string;\n  alias?: string[];\n  application?: string;\n  channelIds?:  string[];\n  deviceTypes?: string[];\n  message?: NotifyMessageContent;\n  messageType?: string;\n  organization?: string;\n  sender?: string;\n  sent?: number;\n  variants?: any[];\n}\n","export class Address {\n    address?: string;\n    districtCode?: string;\n    districtName?: string;\n    provinceCode?: string;\n    provinceName?: string;\n    countryCode?: string;\n    countryName?: string;\n    stateCode?: string;\n    stateName?: string;\n    state?: string;\n    postcode?: string;\n}\n","import {Address} from './address';\n\nexport class Contact {\n    salutationType?: string;\n    sex?: string;\n    firstName?: string;\n    lastName?: string;\n    middleName?: string;\n    fullName?: string;\n    primaryEmail?: string;\n    officePhone?: number;\n    mobilePhone?: string;\n    homePhone?: string;\n    fax?: number;\n    dateOfBirth?: number;\n    fullDateOfBirth?: any;\n    organId?: string;\n    organName?: string;\n    title?: string;\n    department?: string;\n    contactType?: string;\n    leadSource?: string;\n    address?: Address;\n    addressStr?: string;\n    description?: string;\n    status?: string;\n    uuid?: string;\n    type?: string;\n    avatar?: string;\n    readonly userCode?: string;\n\n    constructor() {\n        this.address = new Address();\n    }\n}\n","import {Address} from './address';\n\nexport class Organization {\n    readonly uuid?: string;\n    readonly organId?: string;\n    createdDate?: number;\n    name?: string;\n    primaryEmail?: string;\n    type?: string;\n    address?: string;\n    officeAddress: Address;\n    description?: string;\n    officeAddressStr?: string; // For Update\n    taxCode?: string;\n    foreignName?: string;\n    abbreviationName?: string;\n    website?: string;\n    primaryPhone?: string;\n    companySize?: string;\n    industry?: string;\n    legalRepName?: string;\n    legalRepCanonId?: string;  // Link to contact\n    createdBy?: string;\n    logo?: string; // For View Logo\n    readonly ownerId?: string;\n    readonly memberOfId?: string;\n    readonly ownerShip?: string;\n    readonly region?: string;\n    readonly modifiedBy?: string;\n    readonly modifiedDate?: number;\n    banks?: Array<any>;\n    busAces?: Array<any>;\n\n    constructor() {\n        this.officeAddress = new Address();\n    }\n}\n","import {Organization} from \"./organization\";\r\nexport class OrganizationInformation {\r\n    readonly organId?: string;\r\n    readonly secret?: string;\r\n    readonly mercuryAPIKey?: string;\r\n    readonly mercurySecret?: string;\r\n    orgName?: string;\r\n    email?: string;\r\n    address1?: string;\r\n    phone?: string;\r\n    city?: string;\r\n    fax?: string;\r\n    country?: string;\r\n    languageUsed?: string;\r\n    readonly logo?: string;\r\n    readonly uriPrefix?: string;\r\n    readonly acctPrxDomain?: string;\r\n    readonly byteDataUsed?: number;\r\n    readonly expiredDate?: number;\r\n    readonly activedDate?: number;\r\n    readonly status?: string;\r\n    readonly glorganprofileload?: Organization;\r\n\r\n}\r\n","export class ResponseUploadFile {\n    elements: ResponseFileItem[] = []\n}\n\nexport class ResponseFileItem {\n    uuid?: string;\n    name?: string;\n    mimetype?: string;\n    filesize: number = 0\n}\n","export function AutoUnsubscribe(): ClassDecorator {\n    return function (constructor: any) {\n        const original = constructor.prototype.ngOnDestroy;\n\n        constructor.prototype.ngOnDestroy = function () {\n            for (let prop in this) {\n                const property = this[prop];\n                if (property && (typeof property.unsubscribe === \"function\")) {\n                    property.unsubscribe();\n                }\n            }\n            original && typeof original === \"function\" && original.apply(this, arguments);\n        };\n    }\n\n}","export function Logger(hooks: string[] = []): ClassDecorator {\n    return function (constructor: any) {\n        const component = constructor.name;\n        const log = function (hook: string) {\n            try {\n                const original = constructor.prototype[hook];\n                if (original && (typeof original === \"function\")) {\n                    constructor.prototype[hook] = function (...args: any) {\n                        console.log(`%c ${component} - ${hook}`, `color: #4CAF50; font-weight: bold`, ...args);\n                        const result = original && original.apply(this, args);\n                        if (result) {\n                            console.log(`%c ${component} - ${hook} - return`, `color: #4CAF50; font-weight: bold`, result);\n                        }\n                    }\n                }\n            } catch (e) {\n                console.error(e);\n            }\n        };\n\n        if (hooks.length > 0) {\n            hooks.forEach(hook => {\n                log(hook);\n            });\n        } else {\n            for (let hook in constructor.prototype) {\n                log(hook);\n            }\n        }\n    }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {DomSanitizer, SafeUrl} from '@angular/platform-browser';\n\n@Pipe({\n    name: 'safe'\n})\nexport class SafePipe implements PipeTransform {\n    constructor(private sanitizer: DomSanitizer) {\n    }\n\n    transform(url: string): SafeUrl {\n        return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n    }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {DomSanitizer} from \"@angular/platform-browser\";\n\n@Pipe({\n    name: 'safeHtml'\n})\nexport class SafeHtmlPipe implements PipeTransform {\n    constructor(private sanitized: DomSanitizer) {\n    }\n    transform(value: string) {\n        return this.sanitized.bypassSecurityTrustHtml(value);\n    }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SafePipe} from \"./safe.pipe\";\nimport {SafeHtmlPipe} from \"./safe-html.pipe\";\n\n@NgModule({\n    declarations: [SafePipe, SafeHtmlPipe],\n    imports: [\n        CommonModule\n    ],\n    exports: [SafePipe, SafeHtmlPipe]\n})\nexport class SafePipeModule {\n}\n","import {Injectable} from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport {Observable} from 'rxjs';\nimport {SecurityService} from \"inet-core\";\n\n@Injectable()\nexport class AuthenticateGuard  {\n    constructor(private securityService: SecurityService) {\n\n    }\n\n    canActivate(\n        next: ActivatedRouteSnapshot,\n        state: RouterStateSnapshot):  Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n        const roles = next.data[\"roles\"] as Array<string>;\n        //console.log('[canActivate][with roles]', roles);\n        return this.securityService.hasRole(roles.join(','));\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClientService, ResponseData} from 'inet-core';\nimport {Observable, of} from 'rxjs';\nimport {shareReplay, tap} from 'rxjs/operators';\n\ndeclare let iNet: any;\n\n@Injectable({\n    providedIn: 'platform'\n})\nexport class LocationService {\n    private url = {\n        // list_country: iNet.getPUrl('cloudapp/country/list'),\n        // list_city: iNet.getPUrl('cloudapp/city/list'),\n        // list_district: iNet.getPUrl('cloudapp/district/list'),\n        list_country: iNet.getPUrl('gl/country/list'),\n        list_city: iNet.getPUrl('gl/city/list'),\n        list_district: iNet.getPUrl('gl/district/list')\n    };\n    private $countryCache: Observable<Object> | undefined;\n    private $provinceCache: any = {};\n    private $districtCache: any = {};\n    private countries: Array<any> | undefined;\n    private provinceData: any = {}; // store province by country code\n    private districtData: any = {};  // store district by province code\n\n    constructor(private http: HttpClientService) {\n    }\n\n    private getCountry(): Observable<any> {\n        return this.http.getJSON(this.url.list_country).pipe(tap((res) => this.countries = res['items']));\n    }\n\n    private _getProvinceByCountryCode(countryCode: string): Observable<any> {\n        return this.http.getJSON(this.url.list_city, {countryCode: countryCode}).pipe(\n            tap(res => this.provinceData[countryCode] = res['items'])\n        );\n    }\n\n    private _getDistrictByCode(countryCode: string, provinceCode: string): Observable<any> {\n        const key = countryCode + '_' + provinceCode;\n        return this.http.getJSON(this.url.list_district, {countryCode: countryCode, cityCode: provinceCode}).pipe(\n            tap(res => this.districtData[key] = res['items'])\n        );\n    }\n\n    listCountry(): Observable<Object> {\n        if (this.countries) {\n            const responseData = new ResponseData();\n            responseData.items = this.countries;\n            return of(responseData);\n        }\n        if (!this.$countryCache) {\n            this.$countryCache = this.getCountry().pipe(shareReplay(1));\n        }\n        return this.$countryCache;\n    }\n\n    /*\n     * @deprecated Use getProvinceByCountryCode(countryCode) instead\n     */\n\n    getProvinceByCountryId(countryId: string): Observable<any> {\n        return this.http.getJSON(this.url.list_city, {country: countryId});\n    }\n\n    /*\n     * @deprecated Use getDistrictByCode(countryCode, provinceCode) instead\n     */\n\n    getDistrictByProvinceId(uuid: string): Observable<any> {\n        return this.http.getJSON(this.url.list_district, {city: uuid});\n    }\n\n    getProvinceByCountryCode(countryCode: string): Observable<any> {\n        if (this.provinceData[countryCode]) {\n            const responseData = new ResponseData();\n            responseData.items = this.provinceData[countryCode];\n            return of(responseData);\n        }\n        if (!this.$provinceCache[countryCode]) {\n            this.$provinceCache[countryCode] = this._getProvinceByCountryCode(countryCode).pipe(shareReplay(1));\n        }\n        return this.$provinceCache[countryCode];\n    }\n\n    getDistrictByCode(countryCode: string, provinceCode: string): Observable<any> {\n        const key = countryCode + '_' + provinceCode;\n        if (this.districtData[key]) {\n            const responseData = new ResponseData();\n            responseData.items = this.districtData[key];\n            return of(responseData);\n        }\n        if (!this.$districtCache[key]) {\n            this.$districtCache[key] = this._getDistrictByCode(countryCode, provinceCode).pipe(shareReplay(1));\n        }\n        return this.$districtCache[key];\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClientService} from 'inet-core';\nimport {Observable, of} from 'rxjs';\nimport {shareReplay, tap} from 'rxjs/operators';\n\ndeclare let iNet: any;\n\n@Injectable({\n    providedIn: 'platform'\n})\nexport class DictionaryService {\n    private url = {\n        find_by_key: iNet.getPUrl('global/category/dicts/fbykeys'),\n        get_sex: iNet.getPUrl('gl/contact/profile/sex')\n    };\n    private $findObservableCache: any = {};\n    private store: any = {};\n    private inventory: any = {};\n\n    constructor(private http: HttpClientService) {\n    }\n\n    findByKeys(keyStr: string): Observable<Object> {\n        const keys = keyStr.split(';');\n        if (keys.length === 1 && this.inventory.hasOwnProperty(keyStr)) { // single key\n            return of({data: this.inventory[keyStr]});\n        }\n        if (this.store[keyStr]) { // multiple keys\n            return of({data: this.store[keyStr]});\n        }\n        if (!this.$findObservableCache[keyStr]) {\n            this.$findObservableCache[keyStr] = this.http.getJSON(this.url.find_by_key, {keys: keyStr}).pipe(\n                tap(res => this.store[keyStr] = res['data']),\n                tap(res => Object.assign(this.inventory, res['data'])),\n                shareReplay(1)\n            )\n        }\n        return this.$findObservableCache[keyStr];\n    }\n\n    getSex(params?: any): Observable<any> {\n        return this.http.postJSON(this.url.get_sex, params);\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClientService} from 'inet-core';\nimport {HttpErrorResponse} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\n\ndeclare let iNet: any;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NotifyMessageService {\n    private url = {\n        list: iNet.getPUrl('social/activity/notify'),\n        clear: iNet.getPUrl('social/activity/clearnotify'),\n        load_notify: iNet.getPUrl('social/activity/loadnotify')\n    };\n\n    constructor(private http: HttpClientService) {\n    }\n\n    getMessages(params: any = {}): Observable<any> {\n        return this.http.getJSON(this.url.list, params);\n    }\n\n    count(params?: any): Promise<number> {\n        return new Promise(resolve => {\n            this.http.getJSON(this.url.list, params).subscribe((v: any) => {\n                resolve(v);\n            }, (err: HttpErrorResponse) => {\n                resolve(0);\n            });\n        });\n    }\n\n    clearAll(params: any = {}) {\n        return this.http.postJSON(this.url.clear, params);\n    }\n\n    loadNotify(app: string, activityId: string): Observable<any> {\n        return this.http.getJSON(this.url.load_notify, {activity: activityId, application: app});\n    }\n\n    clearByActivityId(activityId: string): Observable<any> {\n        return this.http.postJSON(this.url.clear, {activity: activityId});\n    }\n\n}\n\n","import {Injectable, NgModule} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {\n    HttpEvent,\n    HttpInterceptor,\n    HttpHandler,\n    HttpRequest,\n    HttpResponse,\n    HttpErrorResponse\n} from '@angular/common/http';\nimport {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {CoreService, HttpClientService, NotificationService, SecurityService} from \"inet-core\";\nimport {catchError, tap} from \"rxjs/operators\";\n\n@Injectable()\nexport class HttpsRequestInterceptor implements HttpInterceptor {\n    constructor(private securityService: SecurityService,\n                private coreService: CoreService,\n                private httpClientService: HttpClientService) {\n    }\n\n    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n        return next.handle(req).pipe(\n            tap((event: HttpEvent<any>) => {\n                if (event instanceof HttpResponse && !req.reportProgress) {\n                    this.httpClientService.hideLoading();\n                }\n            }),\n            catchError((err: any) => {\n                if (err instanceof HttpErrorResponse) {\n                    this.httpClientService.hideLoading();\n                    if (this.coreService.getEnvironment().production) {\n                        this.securityService.ping();\n                    }\n                }\n                throw err;\n            })\n        );\n    }\n}\n\n@NgModule({\n    providers: [\n        {provide: HTTP_INTERCEPTORS, useClass: HttpsRequestInterceptor, multi: true}\n    ]\n})\nexport class InterceptorModule {\n}\n","export const systemViLocale = {\n    abbr: 'vi',\n    vi: 'Tiếng Việt',\n    en: 'Tiếng Anh',\n    months: 'Tháng 1_Tháng 2_Tháng 3_Tháng 4_Tháng 5_Tháng 6_Tháng 7_Tháng 8_Tháng 9_Tháng 10_Tháng 11_Tháng 12'.split('_'),\n    monthsShort: 'TH1_TH2_TH3_TH4_TH5_TH6_TH7_TH8_TH9_TH10_TH11_TH12'.split('_'),\n    weekdays: 'Chủ nhật_Thứ 2_Thứ 3_Thứ 4_Thứ 5_Thứ 6_Thứ 7'.split('_'),\n    weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[Hôm nay lúc] LT',\n        nextDay: '[Ngày mai lúc] LT',\n        nextWeek: 'dddd [lúc] LT',\n        lastDay: '[Hôm qua lúc] LT',\n        lastWeek: '[Tuần trước] dddd [lúc] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'trong %s',\n        past: '%s trước',\n        s: '1 vài giây',\n        ss: '%d giây',\n        m: '1 phút',\n        mm: '%d phút',\n        h: '1 giờ',\n        hh: '%d giờ',\n        d: '1 ngày',\n        dd: '%d ngày',\n        M: '1 tháng',\n        MM: '%d tháng',\n        y: '1 năm',\n        yy: '%d năm'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (_num: string) {\n        let num: number = Number(_num);\n        let b = num % 10, output = (~~(num % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                    (b === 3) ? 'rd' : 'th';\n        return num + output;\n    },\n    week: {\n        dow: 1,\n        doy: 4 // The week that contains Jan 4th is the first week of the year.\n    },\n    grid: {\n        displayMsg: ' Hiển thị <b>{0}</b> - <b>{1}</b> trong tổng số <b>{2}</b>',\n        emptyMsg: 'Không có dữ liệu để hiển thị',\n        beforePageText: 'Trang',\n        afterPageText: 'của {0}',\n        firstText: 'Trang đầu',\n        prevText: 'Trang trước',\n        nextText: 'Trang sau',\n        lastText: 'Trang cuối',\n        refreshText: 'Làm tươi',\n        searchText: 'Tìm kiếm',\n        searchPlaceholder: 'Từ khóa',\n        downloadText: 'Tải về',\n        translations: {\n            headerReload: 'Nạp lại',\n            headerColumnSelector: 'Chọn cột hiển thị',\n            indexColumn: 'Thứ tự hiển thị',\n            selectColumn: 'Cột chọn',\n            selectRow: 'Chọn dòng',\n            selectAllRows: 'Chọn',\n            expandColumn: 'Mở rộng',\n            expandRow: 'Xem nhiều hơn',\n            paginationLimit: 'Phần tử',\n            paginationRange: 'Hiển thị',\n            firstText: 'Trang đầu',\n            prevText: 'Trang trước',\n            nextText: 'Trang sau',\n            lastText: 'Trang cuối'\n        }\n    },\n    TOOLBAR: {\n        ADD: 'Thêm mới',\n        EDIT: 'Sửa',\n        SAVE: 'Lưu',\n        UPDATE: 'Cập nhật',\n        DELETE: 'Xóa',\n        SEARCH: 'Tìm kiếm',\n        OK: 'Đồng ý',\n        CANCEL: 'Bỏ qua',\n        RESET: 'Nhập lại',\n        BACK: 'Quay lại',\n        CLOSE: 'Đóng',\n        DOWNLOAD: 'Tải về'\n    },\n    COMMON: {\n        WELCOME: 'Xin chào',\n        PLACEHOLDER_SEARCH: 'Tìm kiếm ...',\n        NOTIFICATION: {\n            TITLE: 'Thông báo',\n            EMPTY_MSG: 'Không có dữ liệu để hiển thị',\n            LOAD_MORE: 'Tải thêm',\n            ITEMS: 'thông báo',\n            CLEAR_ALL: 'Xóa tất cả thông báo'\n        },\n        APPLICATION: {\n            TITLE: 'Ứng dụng',\n            EVENTS_TODAY: 'Sự kiện hôm nay',\n            NEW_ACTIVITY: 'Tương tác mới'\n        },\n        MENU: {\n            LANGUAGE: 'Ngôn ngữ',\n            HOME: 'Trang chủ',\n            USER_PROFILE: 'Thông tin cá nhân',\n            ORGANIZATION_INFORMATION: 'Thông tin công ty',\n            CONFIG: 'Cấu hình',\n            SIGNATURE: 'Chữ ký số',\n            ABOUT: 'Thông tin hệ thống',\n            BACK: 'Quay lại',\n            LOGOUT: 'Đăng xuất',\n            WORKSPACE: 'Không gian làm việc'\n        },\n        SELECTION: {\n            DEFAULT_VALUE: '- Chọn -'\n        },\n        MODULE: {\n            ADDRESS: {\n                CITY: 'Tỉnh/Thành phố',\n                DISTRICT: 'Quận/Huyện',\n                COUNTRY: 'Quốc gia',\n                ADDRESS: 'Địa chỉ',\n                STREET: 'Địa chỉ',\n                ADDRESS_REQUIRED_MSG: 'Địa chỉ không được rỗng',\n                COUNTRY_REQUIRED_MSG: 'Quốc gia không được rỗng'\n            },\n            ORGANIZATION: {\n                TITLE: 'Công ty',\n                CODE: 'Mã công ty',\n                NAME: 'Tên công ty',\n                FOREIGN_NAME: 'Tên quốc tế',\n                ABBREVIATION_NAME: 'Tên viết tắt',\n                TAX_CODE: 'Mã số thuế',\n                BILLING_ADDRESS: 'Địa chỉ trên hóa đơn',\n                LEGAL_REPRESENTATIVE: 'Đại diện pháp luật',\n                WEBSITE: 'Website',\n                INDUSTRY: 'Ngành nghề',\n                COMPANY_SIZE: 'Quy mô công ty',\n                DESCRIPTION: 'Mô tả',\n                LINK: 'Địa chỉ truy cập',\n                CODE_REQUIRED_MSG: 'Mã công ty không được rỗng',\n                NAME_REQUIRED_MSG: 'Tên công ty không được rỗng',\n                EMAIL: 'Thư điện tử',\n                EMAIL_INVALID_MSG: 'Địa chỉ thư điện tử không hợp lệ',\n                PHONE: 'Điện thoại',\n                FAX: 'Fax',\n                CITY: 'Tỉnh/Thành phố',\n                LANGUAGE: 'Ngôn ngữ',\n                CHOSEN_IMAGE: 'Chọn Logo ...',\n                STANDARD_IMAGE_SIZE: 'Kích thước chuẩn',\n                UPDATE_LOGO_ERROR_MSG: 'Có lỗi xảy ra khi cập nhật Logo',\n                EMPLOYEES: 'nhân viên',\n                SELF_EMPLOYED: 'Tự làm chủ',\n                REMOVE_LOGO: 'Xóa Logo',\n                SAVE_LOGO: 'Lưu Logo',\n                REMOVE_LOGO_SUCCESSFUL_MSG: 'Logo đã được xóa',\n                REMOVE_LOGO_ERROR_MSG: 'Có lỗi xảy ra khi xóa Logo',\n                UPDATE_SUCCESSFUL_MSG: 'Thông tin đã được cập nhật',\n                UPDATE_ERROR_MSG: 'Có lỗi xảy ra khi cập nhật thông tin',\n                TAXCODE_REQUIRED_MSG: 'Mã số thuế không được rỗng',\n            },\n            USER_PROFILE: {\n                TITLE: 'Thông tin tài khoản',\n                USERNAME: 'Tài khoản',\n                LAST_NAME: 'Họ',\n                MIDDLE_NAME: 'Tên đệm',\n                FIRST_NAME: 'Tên',\n                BIRTHDAY: 'Ngày sinh',\n                PHONE: 'Điện thoại',\n                MOBILE: 'Di động',\n                FULL_NAME: 'Họ và tên',\n                EMAIL: 'Thư điện tử',\n                GROUP_NAME: 'Tên nhóm quyền',\n                DESCRIPTION: 'Mô tả nhóm quyền',\n                GENDER: 'Giới tính',\n                MALE: 'Nam',\n                FEMALE: 'Nữ',\n                OTHER: 'Khác',\n                FIRST_NAME_REQUIRED_MSG: 'Tên không được rỗng',\n                LAST_NAME_REQUIRED_MSG: 'Họ không được rỗng',\n                EMAIL_REQUIRED_MSG: 'Địa chỉ thư điện tử không được rỗng',\n                EMAIL_INVALID_MSG: 'Địa chỉ thư điện tử không hợp lệ',\n                GENERAL_INFORMATION: 'Thông tin tài khoản',\n                CHOSEN_IMAGE: 'Chọn ảnh ...',\n                SECURITY_INFORMATION: 'Thông tin bảo mật',\n                CURRENT_PASSWORD: 'Mật khẩu',\n                NEW_PASSWORD: 'Mật khẩu mới',\n                CONFIRM_NEW_PASSWORD: ' Xác nhận mật khẩu',\n                CHANGE_PASSWORD: 'Đổi mật khẩu',\n                CURRENT_PASSWORD_REQUIRED_MSG: 'Vui lòng nhập mật khẩu hiện tại',\n                NEW_PASSWORD_REQUIRED_MSG: 'Vui lòng nhập mật khẩu mới',\n                CONFIRM_NEW_PASSWORD_REQUIRED_MSG: 'Vui lòng nhập xác nhận mật khẩu mới',\n                PASSWORD_DO_NOT_MATCH: 'Xác nhận mật khẩu mới chưa đúng',\n                CHANGE_PASSWORD_INFO_MSG: 'Để đổi mật khẩu, vui lòng nhập mật khẩu hiện tại của bạn, sau đó nhập mật khẩu mới của bạn hai lần',\n                CHANGE_PASSWORD_SUCCESSFUL_MSG: 'Mật khẩu đã được thay đổi',\n                CHANGE_PASSWORD_ERROR_MSG: 'Có lỗi xảy ra khi đổi mật khẩu',\n                CURRENT_PASSWORD_INCORRECT: 'Mật khẩu hiện tại không đúng. Vui lòng nhập lại',\n                UPDATE_PROFILE_SUCCESSFUL_MSG: 'Thông tin tài khoản đã được thay đổi',\n                UPDATE_PROFILE_ERROR_MSG: 'Có lỗi xảy ra khi cập nhật thông tin tài khoản',\n                AVATAR: 'Ảnh đại diện',\n                SAVE_IMAGE: 'Lưu ảnh',\n                REMOVE_IMAGE: 'Xóa ảnh',\n                IMAGE_UPDATE_SUCCESSFUL_MSG: 'Ảnh đại diện đã được cập nhật',\n                IMAGE_UPDATE_ERROR_MSG: 'Có lỗi xảy ra khi cập nhật ảnh đại diện',\n                IMAGE_REMOVE_SUCCESSFUL_MSG: 'Ảnh đại diện đã được xóa',\n                IMAGE_REMOVE_ERROR_MSG: 'Có lỗi xảy ra khi xóa ảnh đại diện',\n                SIGNATURE_INFORMATION: 'Chữ ký số',\n                ACCESS_ROLE: 'Quyền truy cập',\n                SIGNATURE_VERIFY: 'Số điện thoại',\n                SIGNATURE_FILE: 'Tệp ảnh chữ ký',\n                SIGNATURE_VERIFY_REQUIRED_MSG: 'Số điện thoại không được để rỗng',\n                UPDATE_SIGNATURE_SUCCESSFUL_MSG: 'Thông tin chữ ký số đã được cập nhật',\n                UPDATE_SIGNATURE_ERROR_MSG: 'Có lỗi xảy ra khi cập nhật thông tin chữ ký số',\n                SIGNATURE_FILE_REQUIRED_MSG: 'Vui lòng chọn ảnh chữ ký để cập nhật',\n                UPDATE_SIGNATURE: 'Cập nhật chữ ký số',\n                NO_FILE: 'Không có tệp tin ...',\n                CHOOSE: 'Chọn tệp'\n            },\n            VIEWER: {\n                UNSUPPORTED: 'Rất tiếc, định dạng không được hỗ trợ xem trực tuyến <br /> trên trình duyệt này'\n            },\n            CROPPER: {\n                TITLE: 'Công cụ cắt ảnh',\n                SELECT_NEW_IMAGE: 'Chọn ảnh khác ...'\n            },\n            SIGNATURE_MANAGE: {\n                CREATE_SIGN: 'Thêm chữ ký số',\n                TITLE: 'Chữ ký',\n                NAME: 'Tên',\n                NAME_REQUIRED_MSG: 'Tên chữ ký không được rỗng',\n                MOBILE: 'Di động',\n                ISSUED: 'Đơn vị phát hành',\n                FILE: 'Tệp ảnh',\n                FILE_REQUIRED_MSG: 'Chưa chọn ảnh',\n                PHOTO: 'Ảnh',\n                RESULTS: 'Hiển thị',\n                DELETE_SUCCESSFUL_MSG: 'Chữ ký đã được xóa',\n                DELETE_ERROR_MSG: 'Có lỗi xảy ra khi xóa chữ ký',\n                SAVE_SUCCESSFUL_MSG: 'Chữ ký đã được tạo',\n                SAVE_ERROR_MSG: 'Có lỗi xảy ra khi tạo chữ ký',\n                NO_INFORMATION: 'Không tìm thấy kết quả phù hợp',\n                KEY_SEARCH: 'Hãy chắc rằng từ khóa bạn cần tìm kiếm là chính xác.'\n            },\n            EMAIL_TEMPLATE: {\n                \"SEND_TEST\": \"Gửi test\",\n                \"EMAIL\": \"Mẫu email\",\n                \"LIST\": \"Danh sách mẫu email\",\n                \"ADD_EMAIL\": \"Thêm mới mẫu email\",\n                \"EDIT_EMAIL\": \"Chỉnh sửa mẫu email\",\n                \"EMAIL_CODE\": \"Mã\",\n                \"EMAIL_NAME\": \"Tên\",\n                \"EMAIL_SUBJECT\": \"Tiêu đề\",\n                \"EMAIL_CONTENT\": \"Nội dung email\",\n                \"NOTE\": \"Ghi chú\",\n                \"SAMPLE_INFORMATION\": \"Thông tin mẫu email\",\n                \"SYSTEM_INFORMATION\": \"Thông tin tham số cấu hình\",\n                \"TO\": \"Từ\",\n                \"FROM\": \"Đến\",\n                \"EMAIL_CODE_EXIST_MSG\": \"Mã đã tồn tại\",\n                \"EMAIL_CODE_REQUIRED\": \"Vui lòng nhập mã\",\n                \"EMAIL_NAME_REQUIRED\": \"Vui lòng nhập tên\",\n                \"ADD_SUCCESS\": \"Mẫu email đã được thêm mới\",\n                \"ADD_ERROR\": \"Có lỗi xảy ra trong quá trình thêm mới\",\n                \"UPDATE_SUCCESS\": \"Mẫu email đã được cập nhật\",\n                \"UPDATE_ERROR\": \"Có lỗi xảy ra trong quá trình cập nhật dữ liệu\",\n                \"DELETE_SUCCESS\": \"Mẫu email đã được xóa.\",\n                \"DELETE_ERROR\": \"Có lỗi xảy ra trong quá trình xóa dữ liệu\",\n                \"DELETE_TITLE\": \"Xóa mẫu email?\",\n                \"DELETE_CONTENT\": \"Bạn có chắc là muốn xóa mẫu email này không ?\",\n                \"ACTIVE\": \"Sử dụng\"\n            },\n            REPORT_TEMPLATE: {\n                \"TITLE\": \"Biểu mẫu\",\n                \"LIST\": 'Danh sách biểu mẫu',\n                \"ADD\": \"Thêm mới biểu mẫu\",\n                \"APPLICATION\": \"Ứng dụng\",\n                \"MODULE\": \"Mô-đun\",\n                \"TYPE\": \"Loại\",\n                \"VERSION\": \"Phiên bản\",\n                \"NAME\": \"Tên\",\n                \"DESCRIPTION\": \"Mô tả\",\n                \"FILE_UPLOAD\": \"Tệp tin\",\n                \"APPLICATION_REQUIRED\": \"Tên ứng dụng không được rỗng\",\n                \"MODULE_REQUIRED\": \"Tên mô-đun không được rỗng\",\n                \"TYPE_REQUIRED\": \"Tên loại không được rỗng\",\n                \"VERSION_REQUIRED\": \"Phiên bản không được rỗng\",\n                \"NAME_REQUIRED\": \"Tên biểu mẫu không được rỗng\",\n                \"DESCRIPTION_REQUIRED\": \"Mô tả không được rỗng\",\n                \"ADD_SUCCESS\": \"Biểu mẫu đã được thêm mới.\",\n                \"ADD_ERROR\": \"Không thể thêm mới. Có lỗi xảy ra trong quá trình thêm mới biểu mẫu\",\n                \"UPDATE_SUCCESS\": \"Biểu mẫu đã được chỉnh sửa\",\n                \"UPDATE_ERROR\": \"Không thể chỉnh sửa. Có lỗi xảy ra trong quá trình chỉnh sửa biểu mẫu\",\n                \"DELETE_SUCCESS\": \"Biểu mẫu đã được xóa\",\n                \"DELETE_ERROR\": \"Không thể xóa. Có lỗi xảy ra trong quá trình xóa biểu mẫu\",\n                \"DELETE_TITLE\": \"Xóa biểu mẫu?\",\n                \"DELETE_CONTENT\": \"Bạn có chắc là muốn xóa biểu mẫu này không?\",\n                \"NO_FILE\": \"Không có tệp tin ...\",\n                \"CHOOSE\": \"Chọn tệp\"\n            }\n        },\n        PLUGIN: {\n            SERVICE_UNAVAILABLE: 'Dịch vụ hiện không khả dụng',\n            SERVICE_MESSAGE_ERROR: 'Vui lòng kiểm tra lại kết nối và thử lại'\n        }\n    },\n    INDICATOR: {\n        LOADING: 'Đang tải ...',\n        PROCESSING: 'Đang xử lý ...',\n        SAVING: 'Đang lưu ...',\n        UPDATING: 'Đang cập nhật ...'\n    },\n    \"ALL_SELECTED\": \"Tất cả đã được chọn\",\n    \"CANCEL\": \"Bỏ qua\",\n    \"CLEAR_ALL_FILTERS\": \"Xóa tất cả điều kiện lọc\",\n    \"CLEAR_ALL_SORTING\": \"Xóa tất cả việc sắp xếp\",\n    \"CLEAR_ALL_GROUPING\": \"Xóa tất cả việc nhóm\",\n    \"CLEAR_PINNING\": \"Giải phóng cột/hàng\",\n    \"COLLAPSE_ALL_GROUPS\": \"Thu gọn tất cả Nhóm\",\n    \"COLUMNS\": \"Cột\",\n    \"COLUMN_RESIZE_BY_CONTENT\": \"Điều chỉnh kích thước theo nội dung\",\n    \"COMMANDS\": \"Chức năng\",\n    \"CONTAINS\": \"Có chứa\",\n    \"COPY\": \"Sao chép\",\n    \"EMPTY_DATA_WARNING_MESSAGE\": \"Không có dữ liệu để hiển thị\",\n    \"ENDS_WITH\": \"Kết thúc với\",\n    \"EQUALS\": \"Bằng\",\n    \"EQUAL_TO\": \"Bằng với\",\n    \"EXPAND_ALL_GROUPS\": \"Mở rộng tất cả Nhóm\",\n    \"EXPORT_TO_CSV\": \"Kết xuất định dạng CSV\",\n    \"EXPORT_TO_EXCEL\": \"Kết xuất dữ liệu\",\n    \"EXPORT_TO_TAB_DELIMITED\": \"Kết xuất định dạng Văn bản (phân cách bằng tab)\",\n    \"EXPORT_TO_TEXT_FORMAT\": \"Kết xuất định dạng Văn bản\",\n    \"FROM_TO_OF_TOTAL_ITEMS\": \"{{from}}-{{to}} của tổng số {{totalItems}} dòng\",\n    \"FORCE_FIT_COLUMNS\": \"Hiển thị mặc định\",\n    \"FREEZE_COLUMNS\": \"Cố định các cột\",\n    \"INVALID_FLOAT\": \"Dữ liệu số phải hợp lệ và có số thập phân tối đa là {{maxDecimal}}.\",\n    \"GREATER_THAN\": \"Lớn hơn\",\n    \"GREATER_THAN_OR_EQUAL_TO\": \"Lơn hơn hoặc bằng với\",\n    \"GROUP_BY\": \"Nhóm theo\",\n    \"HIDE_COLUMN\": \"Ẩn cột\",\n    \"IN_COLLECTION_SEPERATED_BY_COMMA\": \"Tìm kiếm dữ liệu trong tập dữ liệu, các dữ liệu phải được phân tách bằng dấu phẩy (a,b)\",\n    \"ITEMS\": \"Dòng\",\n    \"ITEMS_PER_PAGE\": \"dòng trên mỗi trang\",\n    \"ITEMS_SELECTED\": \"dòng đã được chọn\",\n    \"LAST_UPDATE\": \"Cập nhật cuối cùng\",\n    \"LESS_THAN\": \"Ít hơn\",\n    \"LESS_THAN_OR_EQUAL_TO\": \"Ít hơn hoặc bằng với\",\n    \"NOT_CONTAINS\": \"Không chứ\",\n    \"NOT_EQUAL_TO\": \"Không bằng với\",\n    \"NOT_IN_COLLECTION_SEPERATED_BY_COMMA\": \"Tìm kiếm dữ liệu không nằm trong tập dữ liệu, các dữ liệu phải được phân tách bằng dấu phẩy (a,b)\",\n    \"OF\": \"của\",\n    \"OK\": \"Đồng ý\",\n    \"PAGE\": \"Trang\",\n    \"PAGE_X_OF_Y\": \"trang {{x}} của {{y}}\",\n    \"REFRESH_DATASET\": \"Làm mới dữ liệu\",\n    \"REMOVE_FILTER\": \"Hủy lọc dữ liệu\",\n    \"REMOVE_SORT\": \"Hủy sắp xếp dữ liệu\",\n    \"SAVE\": \"Lưu dữ liệu\",\n    \"SELECT_ALL\": \"Chọn tất cả\",\n    \"SORT_ASCENDING\": \"Sắp xếp tăng dần\",\n    \"SORT_DESCENDING\": \"Sắp xếp giảm dần\",\n    \"STARTS_WITH\": \"Bắt đầu với\",\n    \"SYNCHRONOUS_RESIZE\": \"Thay đổi kích thước đồng bộ\",\n    \"TOGGLE_FILTER_ROW\": \"Ẩn/hiện dòng lọc dữ liệu\",\n    \"TOGGLE_PRE_HEADER_ROW\": \"Chuyển đổi dòng trước tiêu đề\",\n    \"X_OF_Y_SELECTED\": \"# của % đã chọn\",\n    \"SETTING\": {\n        \"USER_PROFILE\" :  {\n            \"CURRENT_PASSWORD\": \"Mật khẩu\",\n            \"NEW_PASSWORD\": \"Mật khẩu mới\",\n            \"CONFIRM_NEW_PASSWORD\": \"Xác nhận mật khẩu mới\",\n            \"CHANGE_PASSWORD\": \"Đổi mật khẩu\",\n            \"CURRENT_PASSWORD_REQUIRED_MSG\": \"Vui lòng nhập mật khẩu hiện tại\",\n            \"NEW_PASSWORD_REQUIRED_MSG\": \"Vui lòng nhập mật khẩu mới\",\n            \"CONFIRM_NEW_PASSWORD_REQUIRED_MSG\": \"Vui lòng nhập xác nhận mật khẩu mới\",\n            \"PASSWORD_DO_NOT_MATCH\": \"Xác nhận mật khẩu mới chưa đúng\",\n            \"CHANGE_PASSWORD_SUCCESSFUL_MSG\": \"Mật khẩu đã được thay đổi\",\n            \"CHANGE_PASSWORD_ERROR_MSG\": \"Có lỗi xảy ra khi đổi mật khẩu\",\n            \"NEW_PASSWORD_INVALID\": \"Mật khẩu mới không được giống với mật khẩu hiện tại của bạn. Vui lòng nhập một mật khẩu khác.\",\n            \"CURRENT_PASSWORD_INCORRECT\": \"Mật khẩu hiện tại không đúng. Vui lòng nhập lại\",\n            \"USERNAME\": \"Tài khoản\",\n            \"LAST_NAME\": \"Tên\",\n            \"MIDDLE_NAME\": \"Tên đệm\",\n            \"FIRST_NAME\": \"Họ\",\n            \"BIRTHDAY\": \"Ngày sinh\",\n            \"PHONE\": \"Số điện thoại cá nhân\",\n            \"COMPANY_PHONE\": \"Số điện thoại công ty\",\n            \"ADDRESS\": \"Địa chỉ cá nhân\",\n            \"MOBILE\": \"Di động\",\n            \"FULL_NAME\": \"Họ và tên\",\n            \"FULL_NAME_IS_REQUIRED\": \"Họ và tên là bắt buộc\",\n            \"EMAIL\": \"Email cá nhân\",\n            \"COMPANY_EMAIL\": \"Email công ty\",\n            \"GENDER\": \"Giới tính\",\n            \"MALE\": \"Nam\",\n            \"FEMALE\": \"Nữ\",\n            \"OTHER\": \"Khác\",\n            \"FIRST_NAME_REQUIRED_MSG\": \"Họ không được rỗng\",\n            \"LAST_NAME_REQUIRED_MSG\": \"Tên không được rỗng\",\n            \"EMAIL_REQUIRED_MSG\": \"Email cá nhân không được rỗng\",\n            \"EMAIL_INVALID_MSG\": \"Email không hợp lệ\",\n            \"GENERAL_INFORMATION\": \"Thông tin tài khoản\",\n            \"PERSONAL_INFORMATION\": \"Thông tin cá nhân\",\n            \"CHOSEN_IMAGE\": \"Chọn ảnh ...\",\n            \"UPDATE_PROFILE_SUCCESSFUL_MSG\": \"Thông tin tài khoản đã được cập nhật\",\n            \"UPDATE_PROFILE_ERROR_MSG\": \"Có lỗi xảy ra khi cập nhật thông tin tài khoản\",\n            \"IMAGE_UPDATE_SUCCESSFUL_MSG\": \"Ảnh đại diện đã được cập nhật\",\n            \"IMAGE_UPDATE_ERROR_MSG\": \"Có lỗi xảy ra khi cập nhật ảnh đại diện\",\n            \"CROPPER\": {\n                \"TITLE\": \"Công cụ cắt ảnh\",\n                \"SELECT_NEW_IMAGE\": \"Chọn ảnh khác ...\",\n                \"OK\": \"Đồng ý\",\n                \"CANCEL\": \"Bỏ qua\"\n            },\n            \"UPDATE\": \"Cập nhật\",\n            \"FIRST_NAME_INVALID_MSG\": \"Họ không hợp lệ\",\n            \"LAST_NAME_INVALID_MSG\": \"Tên không hợp lệ\",\n            \"PHONE_REQUIRED_MSG\": \"Số di động không được rỗng\",\n            \"PHONE_INVALID_MSG\": \"Số điện thoại không hợp lệ\",\n            \"ADDRESS_REQUIRED_MSG\": \"Địa chỉ không được rỗng\",\n            \"OFFICE_PHONE_REQUIRED_MSG\": \"Số điện thoại công ty không được rỗng\",\n            PASSWORD_NOT_STRONG_ENOUGH: 'Mật khẩu không đủ mạnh',\n            PASSWORD_LENGTH_INVALID_MSG: 'Mật khẩu sử dụng 8 ký tự trở lên',\n            PASSWORD_INVALID_MSG: 'Mật khẩu chỉ sử dụng chữ, số và các ký tự cơ bản',\n            PASSWORD_LENGTH_REQUIRED: 'Mật khẩu sử dụng {{quality}} ký tự trở lên',\n            PASSWORD_REQUIRED_LOWER: 'Mật khẩu sử dụng ít nhất {{quality}} ký tự thường',\n            PASSWORD_REQUIRED_UPPER: 'Mật khẩu sử dụng ít nhất {{quality}} ký tự in hoa',\n            PASSWORD_REQUIRED_SPECIAL: 'Mật khẩu sử dụng sử dụng ít nhất {{quality}} ký tự đặt biệt',\n            PASSWORD_REQUIRED_NUMERICAL: 'Mật khẩu sử dụng sử dụng ít nhất {{quality}} chữ số',\n            PASSWORD_WARNING: 'Sử dụng 8 ký tự trở lên và kết hợp chữ in hoa, chữ thường, chữ số và ký tự đặt biệt'\n        }\n    }\n};\n","export const systemEnLocale = {\n    abbr: 'en',\n    vi: 'Vietnamese',\n    en: 'English',\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (_num: string) {\n        let num: number = Number(_num);\n        let b = num % 10, output = (~~(num % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                    (b === 3) ? 'rd' : 'th';\n        return num + output;\n    },\n    week: {\n        dow: 1,\n        doy: 4 // The week that contains Jan 4th is the first week of the year.\n    },\n    grid: {\n        displayMsg: 'Displaying <b>{0}</b> - <b>{1}</b> of <b>{2}</b>',\n        emptyMsg: 'No data to display',\n        beforePageText: 'Page',\n        afterPageText: 'of {0}',\n        firstText: 'First Page',\n        prevText: 'Previous Page',\n        nextText: 'Next Page',\n        lastText: 'Last Page',\n        refreshText: 'Refresh',\n        searchText: 'Search',\n        searchPlaceholder: 'Keyword',\n        downloadText: 'Download',\n        translations: {\n            headerReload: 'Reload',\n            headerColumnSelector: 'Column selector',\n            indexColumn: 'Index',\n            selectColumn: 'Select',\n            selectRow: 'Select',\n            selectAllRows: 'Select',\n            expandColumn: 'Expand',\n            expandRow: 'Expand',\n            paginationLimit: 'Limit',\n            paginationRange: 'Results',\n            firstText: 'First Page',\n            prevText: 'Previous Page',\n            nextText: 'Next Page',\n            lastText: 'Last Page'\n        }\n    },\n    TOOLBAR: {\n        ADD: 'Create',\n        EDIT: 'Edit',\n        SAVE: 'Save',\n        UPDATE: 'Update',\n        DELETE: 'Delete',\n        SEARCH: 'Search',\n        OK: 'Ok',\n        CANCEL: 'Cancel',\n        RESET: 'Reset',\n        BACK: 'Back',\n        CLOSE: 'Close',\n        DOWNLOAD: 'Download'\n    },\n    COMMON: {\n        WELCOME: 'Welcome',\n        PLACEHOLDER_SEARCH: 'Search ...',\n        NOTIFICATION: {\n            TITLE: 'Notifications',\n            EMPTY_MSG: 'No data to display',\n            LOAD_MORE: 'Load more',\n            ITEMS: 'item(s)',\n            CLEAR_ALL: 'Clear all messages'\n        },\n        APPLICATION: {\n            TITLE: 'Application',\n            EVENTS_TODAY: 'Events today',\n            NEW_ACTIVITY: 'New activity'\n        },\n        MENU: {\n            LANGUAGE: 'Language',\n            HOME: 'Home',\n            USER_PROFILE: 'Profile',\n            ORGANIZATION_INFORMATION: 'Organization information',\n            SIGNATURE: 'Signature',\n            CONFIG: 'Configuration',\n            ABOUT: 'About',\n            LOGOUT: 'Logout',\n            BACK: 'Back',\n            WORKSPACE: 'Workspace'\n        },\n        SELECTION: {\n            DEFAULT_VALUE: '- Select -'\n        },\n        MODULE: {\n            ADDRESS: {\n                CITY: 'Province/City',\n                COUNTRY: 'Country',\n                DISTRICT: 'District',\n                ADDRESS: 'Address',\n                STREET: 'Street',\n                ADDRESS_REQUIRED_MSG: 'Address field is required',\n                COUNTRY_REQUIRED_MSG: 'Country field is required'\n            },\n            ORGANIZATION: {\n                TITLE: 'Organization',\n                CODE: 'Code',\n                NAME: 'Name',\n                FOREIGN_NAME: 'Foreign name',\n                ABBREVIATION_NAME: 'Abbreviation name',\n                TAX_CODE: 'Tax Code',\n                BILLING_ADDRESS: 'Billing address',\n                LEGAL_REPRESENTATIVE: 'Legal representative',\n                WEBSITE: 'Website',\n                INDUSTRY: 'Industry',\n                COMPANY_SIZE: 'Company size',\n                DESCRIPTION: 'Description',\n                LINK: 'Link',\n                CODE_REQUIRED_MSG: 'Code field is required',\n                NAME_REQUIRED_MSG: 'Name field is required',\n                EMAIL: 'Email',\n                EMAIL_INVALID_MSG: 'Email must be a valid email',\n                PHONE: 'Phone',\n                FAX: 'Fax',\n                CITY: 'Province/City',\n                LANGUAGE: 'Language',\n                CHOSEN_IMAGE: 'Chosen Logo ...',\n                STANDARD_IMAGE_SIZE: 'Standard image size',\n                UPDATE_LOGO_ERROR_MSG: 'Can not update logo.Error while updating logo',\n                EMPLOYEES: 'employees',\n                SELF_EMPLOYED: 'Self-employed',\n                REMOVE_LOGO: 'Remove Logo',\n                SAVE_LOGO: 'Save Logo',\n                REMOVE_LOGO_SUCCESSFUL_MSG: 'Logo was deleted successfully',\n                REMOVE_LOGO_ERROR_MSG: 'Can not delete Logo',\n                UPDATE_SUCCESSFUL_MSG: 'Information was updated successfully',\n                UPDATE_ERROR_MSG: 'Can not update.Error while updating information',\n                TAXCODE_REQUIRED_MSG: 'Taxcode field is required'\n            },\n            USER_PROFILE: {\n                TITLE: 'Profile',\n                USERNAME: 'Username',\n                LAST_NAME: 'Last name',\n                MIDDLE_NAME: 'Middle name',\n                FIRST_NAME: 'First name',\n                BIRTHDAY: 'Birthday',\n                PHONE: 'Phone',\n                MOBILE: 'Mobile',\n                FULL_NAME: 'Full name',\n                EMAIL: 'Email',\n                GROUP_NAME: 'Group Name',\n                DESCRIPTION: 'Description',\n                GENDER: 'Gender',\n                MALE: 'Male',\n                FEMALE: 'Female',\n                OTHER: 'Other',\n                FIRST_NAME_REQUIRED_MSG: 'First name field is required',\n                LAST_NAME_REQUIRED_MSG: 'Last Name field is required',\n                EMAIL_REQUIRED_MSG: 'Email field is required',\n                EMAIL_INVALID_MSG: 'Email must be a valid email',\n                GENERAL_INFORMATION: 'General information',\n                CHOSEN_IMAGE: 'Chosen avatar ...',\n                SECURITY_INFORMATION: 'Security information',\n                CURRENT_PASSWORD: 'Current Password',\n                NEW_PASSWORD: 'New Password',\n                CONFIRM_NEW_PASSWORD: 'Confirm new password',\n                CHANGE_PASSWORD: 'Change password',\n                CURRENT_PASSWORD_REQUIRED_MSG: 'Please enter the current password',\n                NEW_PASSWORD_REQUIRED_MSG: 'Please enter a new password',\n                CONFIRM_NEW_PASSWORD_REQUIRED_MSG: 'Please enter a new password again',\n                PASSWORD_DO_NOT_MATCH: 'New password do not match',\n                CHANGE_PASSWORD_INFO_MSG: 'Please enter the your current password, then your new password twice',\n                CHANGE_PASSWORD_SUCCESSFUL_MSG: 'Password was changed successfully',\n                CHANGE_PASSWORD_ERROR_MSG: 'Can not change password.Error while changing password',\n                CURRENT_PASSWORD_INCORRECT: 'Current password is incorrect. Please try again',\n                UPDATE_PROFILE_SUCCESSFUL_MSG: 'Profile was updated successfully',\n                UPDATE_PROFILE_ERROR_MSG: 'Can not update profile.Error while updating profile',\n                AVATAR: 'Avatar',\n                SAVE_IMAGE: 'Apply',\n                REMOVE_IMAGE: 'Remove',\n                IMAGE_UPDATE_SUCCESSFUL_MSG: 'Avatar was updated successfully',\n                IMAGE_UPDATE_ERROR_MSG: 'Can not update.Error while updating avatar',\n                IMAGE_REMOVE_SUCCESSFUL_MSG: 'Avatar was deleted successfully',\n                IMAGE_REMOVE_ERROR_MSG: 'Can not remove.Error while removing avatar',\n                SIGNATURE_INFORMATION: 'Signature information',\n                ACCESS_ROLE: 'Access role',\n                SIGNATURE_VERIFY: 'Phone number',\n                SIGNATURE_FILE: 'Signature File',\n                SIGNATURE_VERIFY_REQUIRED_MSG: 'Phone number field is required',\n                UPDATE_SIGNATURE_SUCCESSFUL_MSG: 'Signature was updated successfully',\n                UPDATE_SIGNATURE_ERROR_MSG: 'Can not update signature.Error while updating signature',\n                SIGNATURE_FILE_REQUIRED_MSG: 'Please select a signature image to update',\n                UPDATE_SIGNATURE: 'Update signature',\n                NO_FILE: 'No File ...',\n                CHOOSE: 'Choose'\n            },\n            VIEWER: {\n                UNSUPPORTED: 'We\\'re sorry, an error occurred when trying to view the document <br /> File format is not supported'\n            },\n            CROPPER: {\n                TITLE: 'Image Cropper',\n                SELECT_NEW_IMAGE: 'Select new image ...'\n            },\n            SIGNATURE_MANAGE: {\n                CREATE_SIGN: 'Create signature',\n                TITLE: 'Signature',\n                NAME: 'Signature name',\n                NAME_REQUIRED_MSG: 'Name field is required',\n                MOBILE: 'Mobile',\n                ISSUED: 'Issued',\n                FILE: 'File',\n                RESULTS: 'Results',\n                FILE_REQUIRED_MSG: 'File field is required',\n                PHOTO: 'Photo',\n                DELETE_SUCCESSFUL_MSG: 'Signature was deleted successfully',\n                DELETE_ERROR_MSG: 'Can not delete.Error while deleting signature',\n                SAVE_SUCCESSFUL_MSG: 'Signature was saved successfully',\n                SAVE_ERROR_MSG: 'Can not save.Error while saving signature',\n                NO_INFORMATION: 'No matches found',\n                KEY_SEARCH: 'Please sure that that the keyword you need to search for a primary.'\n            },\n            EMAIL_TEMPLATE: {\n                \"SEND_TEST\": \"Send test\",\n                \"EMAIL\": \"Email template\",\n                \"LIST\": \"Email template list\",\n                \"ADD_EMAIL\": \"Add new email template\",\n                \"EDIT_EMAIL\": \"Edit email template\",\n                \"EMAIL_CODE\": \"Code\",\n                \"EMAIL_NAME\": \"Name\",\n                \"EMAIL_SUBJECT\": \"Subject\",\n                \"EMAIL_CONTENT\": \"Content\",\n                \"NOTE\": \"Note\",\n                \"SAMPLE_INFORMATION\": \"Sample information\",\n                \"SYSTEM_INFORMATION\": \"System configuration information\",\n                \"TO\": \"To\",\n                \"FROM\": \"From\",\n                \"EMAIL_CODE_EXIST_MSG\": \"Email code already exists\",\n                \"EMAIL_CODE_REQUIRED\": \"Email code field is required\",\n                \"EMAIL_NAME_REQUIRED\": \"Email name field is required\",\n                \"ADD_SUCCESS\": \"Email template was saved successfully.\",\n                \"ADD_ERROR\": \"Can not save.Error while saving email template.\",\n                \"UPDATE_SUCCESS\": \"Email template was updated successfully.\",\n                \"UPDATE_ERROR\": \"Can not update.Error while updating email template.\",\n                \"DELETE_SUCCESS\": \"Email template was deleted successfully.\",\n                \"DELETE_ERROR\": \"Can not delete.Error while deleting email template.\",\n                \"DELETE_TITLE\": \"Delete email template?\",\n                \"DELETE_CONTENT\": \"Are you sure want to delete this?\",\n                \"ACTIVE\": \"Active\"\n            },\n            REPORT_TEMPLATE: {\n                \"TITLE\": \"Report template\",\n                \"LIST\": 'Templates',\n                \"ADD\": \"Add\",\n                \"APPLICATION\": \"Application\",\n                \"MODULE\": \"Module\",\n                \"TYPE\": \"Type\",\n                \"VERSION\": \"Version\",\n                \"NAME\": \"Name\",\n                \"DESCRIPTION\": \"Description\",\n                \"FILE_UPLOAD\": \"File upload\",\n                \"APPLICATION_REQUIRED\": \"Application field is required\",\n                \"MODULE_REQUIRED\": \"Module field is required\",\n                \"TYPE_REQUIRED\": \"Type field is required\",\n                \"VERSION_REQUIRED\": \"Version field is required\",\n                \"NAME_REQUIRED\": \"Name field is required\",\n                \"DESCRIPTION_REQUIRED\": \"Description field is required\",\n                \"ADD_SUCCESS\": \"Form management was added successfully\",\n                \"ADD_ERROR\": \"Can not add.Error while adding template\",\n                \"UPDATE_SUCCESS\": \"Form management was updated successfully\",\n                \"UPDATE_ERROR\": \"Can not update.Error while updating template\",\n                \"DELETE_SUCCESS\": \"Form management was deleted successfully\",\n                \"DELETE_ERROR\": \"Can not delete.Error while deleting template\",\n                \"DELETE_TITLE\": \"Delete template\",\n                \"DELETE_CONTENT\": \"Are you sure you want to delete the selected template?\",\n                \"NO_FILE\": \"No File ...\",\n                \"CHOOSE\": \"Choose\"\n            }\n        },\n        PLUGIN: {\n            SERVICE_UNAVAILABLE: 'The service is currently unavailable',\n            SERVICE_MESSAGE_ERROR: 'Please check the connection and try again'\n        }\n    },\n    INDICATOR: {\n        LOADING: 'Loading ...',\n        PROCESSING: 'Processing ...',\n        SAVING: 'Saving ...',\n        UPDATING: 'Updating ...'\n    },\n    \"ALL_SELECTED\": \"All Selected\",\n    \"CANCEL\": \"Cancel\",\n    \"CLEAR_ALL_FILTERS\": \"Clear all Filters\",\n    \"CLEAR_ALL_GROUPING\": \"Clear all Grouping\",\n    \"CLEAR_ALL_SORTING\": \"Clear all Sorting\",\n    \"CLEAR_PINNING\": \"Unfreeze Columns/Rows\",\n    \"COLLAPSE_ALL_GROUPS\": \"Collapse all Groups\",\n    \"COLUMNS\": \"Columns\",\n    \"COLUMN_RESIZE_BY_CONTENT\": \"Resize by Content\",\n    \"COMMANDS\": \"Commands\",\n    \"CONTAINS\": \"Contains\",\n    \"COPY\": \"Copy\",\n    \"EMPTY_DATA_WARNING_MESSAGE\": \"No data to display.\",\n    \"ENDS_WITH\": \"Ends With\",\n    \"EQUALS\": \"Equals\",\n    \"EQUAL_TO\": \"Equal to\",\n    \"EXPAND_ALL_GROUPS\": \"Expand all Groups\",\n    \"EXPORT_TO_CSV\": \"Export in CSV format\",\n    \"EXPORT_TO_EXCEL\": \"Export to Excel\",\n    \"EXPORT_TO_TAB_DELIMITED\": \"Export in Text format (Tab delimited)\",\n    \"EXPORT_TO_TEXT_FORMAT\": \"Export in Text format\",\n    \"FROM_TO_OF_TOTAL_ITEMS\": \"{{from}}-{{to}} of {{totalItems}} items\",\n    \"FORCE_FIT_COLUMNS\": \"Force fit columns\",\n    \"FREEZE_COLUMNS\": \"Freeze Columns\",\n    \"INVALID_FLOAT\": \"The number must be valid and have a maximum of {{maxDecimal}} decimals.\",\n    \"GREATER_THAN\": \"Greater than\",\n    \"GREATER_THAN_OR_EQUAL_TO\": \"Greater than or equal to\",\n    \"GROUP_BY\": \"Group by\",\n    \"HIDE_COLUMN\": \"Hide Column\",\n    \"IN_COLLECTION_SEPERATED_BY_COMMA\": \"Search items in a collection, must be separated by a comma (a,b)\",\n    \"ITEMS\": \"items\",\n    \"ITEMS_PER_PAGE\": \"items per page\",\n    \"ITEMS_SELECTED\": \"items selected\",\n    \"LAST_UPDATE\": \"Last Update\",\n    \"LESS_THAN\": \"Less than\",\n    \"LESS_THAN_OR_EQUAL_TO\": \"Less than or equal to\",\n    \"NOT_CONTAINS\": \"Not contains\",\n    \"NOT_EQUAL_TO\": \"Not equal to\",\n    \"NOT_IN_COLLECTION_SEPERATED_BY_COMMA\": \"Search items not in a collection, must be separated by a comma (a,b)\",\n    \"OF\": \"of\",\n    \"OK\": \"OK\",\n    \"PAGE\": \"Page\",\n    \"PAGE_X_OF_Y\": \"page {{x}} of {{y}}\",\n    \"REFRESH_DATASET\": \"Refresh Dataset\",\n    \"REMOVE_FILTER\": \"Remove Filter\",\n    \"REMOVE_SORT\": \"Remove Sort\",\n    \"SAVE\": \"Save\",\n    \"SELECT_ALL\": \"Select All\",\n    \"SORT_ASCENDING\": \"Sort Ascending\",\n    \"SORT_DESCENDING\": \"Sort Descending\",\n    \"STARTS_WITH\": \"Starts With\",\n    \"SYNCHRONOUS_RESIZE\": \"Synchronous resize\",\n    \"TOGGLE_FILTER_ROW\": \"Toggle Filter Row\",\n    \"TOGGLE_PRE_HEADER_ROW\": \"Toggle Pre-Header Row\",\n    \"X_OF_Y_SELECTED\": \"# of % selected\",\n    \"SETTING\": {\n        \"USER_PROFILE\": {\n            \"CURRENT_PASSWORD\": \"Current Password\",\n            \"NEW_PASSWORD\": \"New Password\",\n            \"CONFIRM_NEW_PASSWORD\": \"Confirm new password\",\n            \"CHANGE_PASSWORD\": \"Change password\",\n            \"CURRENT_PASSWORD_REQUIRED_MSG\": \"Please enter the current password\",\n            \"NEW_PASSWORD_REQUIRED_MSG\": \"Please enter a new password\",\n            \"CONFIRM_NEW_PASSWORD_REQUIRED_MSG\": \"Please enter a new password again\",\n            \"PASSWORD_DO_NOT_MATCH\": \"New password do not match\",\n            \"CHANGE_PASSWORD_SUCCESSFUL_MSG\": \"Password was changed successfully\",\n            \"CHANGE_PASSWORD_ERROR_MSG\": \"Can not change password.Error while changing password\",\n            \"NEW_PASSWORD_INVALID\": \"New password can not be same as your current password. Please enter a different password.\",\n            \"CURRENT_PASSWORD_INCORRECT\": \"Current password is incorrect. Please try again\",\n            \"USERNAME\": \"Username\",\n            \"LAST_NAME\": \"Last name\",\n            \"MIDDLE_NAME\": \"Middle name\",\n            \"FIRST_NAME\": \"First name\",\n            \"BIRTHDAY\": \"Birthday\",\n            \"ADDRESS\": \"Personal address\",\n            \"PHONE\": \"Phone\",\n            \"MOBILE\": \"Mobile\",\n            \"COMPANY_PHONE\": \"Company phone number\",\n            \"FULL_NAME\": \"Full name\",\n            \"FULL_NAME_IS_REQUIRED\": \"Full name is required\",\n            \"EMAIL\": \"Personal email\",\n            \"COMPANY_EMAIL\": \"Company Email\",\n            \"GROUP_NAME\": \"Group Name\",\n            \"DESCRIPTION\": \"Description\",\n            \"GENDER\": \"Gender\",\n            \"MALE\": \"Male\",\n            \"FEMALE\": \"Female\",\n            \"OTHER\": \"Other\",\n            \"FIRST_NAME_REQUIRED_MSG\": \"First name field is required\",\n            \"LAST_NAME_REQUIRED_MSG\": \"Last Name field is required\",\n            \"EMAIL_REQUIRED_MSG\": \"Personal email field is required\",\n            \"EMAIL_INVALID_MSG\": \"Personal email must be a valid email\",\n            \"GENERAL_INFORMATION\": \"Profile information\",\n            \"PERSONAL_INFORMATION\": \"Personal information\",\n            \"CHOSEN_IMAGE\": \"Chosen avatar ...\",\n            \"UPDATE_PROFILE_SUCCESSFUL_MSG\": \"Profile was updated successfully\",\n            \"UPDATE_PROFILE_ERROR_MSG\": \"Can not update profile.Error while updating profile\",\n            \"IMAGE_UPDATE_SUCCESSFUL_MSG\": \"Avatar was updated successfully\",\n            \"IMAGE_UPDATE_ERROR_MSG\": \"Can not update.Error while updating avatar\",\n            \"CROPPER\": {\n                \"TITLE\": \"Image Cropper\",\n                \"SELECT_NEW_IMAGE\": \"Select new image ...\",\n                \"OK\": \"Ok\",\n                \"CANCEL\": \"Cancel\"\n            },\n            \"UPDATE\": \"Update\",\n            \"FIRST_NAME_INVALID_MSG\": \"First name illegal\",\n            \"LAST_NAME_INVALID_MSG\": \"Last name illegal\",\n            \"PHONE_REQUIRED_MSG\": \"Mobile number cannot be empty\",\n            \"PHONE_INVALID_MSG\": \"Invalid phone number\",\n            \"ADDRESS_REQUIRED_MSG\": \"Address cannot be empty\",\n            \"OFFICE_PHONE_REQUIRED_MSG\": \"Company phone number cannot be empty\",\n            PASSWORD_NOT_STRONG_ENOUGH: 'Password not strong enough',\n            PASSWORD_LENGTH_INVALID_MSG: 'Password using 8 or more characters',\n            PASSWORD_INVALID_MSG: 'Passwords use only letters, numbers and basic characters',\n            PASSWORD_LENGTH_REQUIRED: 'Password using {{ quality }} or more characters',\n            PASSWORD_REQUIRED_LOWER: 'Password using {{ quality }} or more characters lower',\n            PASSWORD_REQUIRED_UPPER: 'Password using {{ quality }} or more characters upper',\n            PASSWORD_REQUIRED_SPECIAL: 'Password using {{ quality }} or more characters special',\n            PASSWORD_REQUIRED_NUMERICAL: 'Password using {{ quality }} or more characters number',\n            PASSWORD_WARNING: 'Use 8 or more characters and a combination of letters, lowercase, numbers, and characters'\n        }\n    }\n};\n","import {TranslateLoader} from '@ngx-translate/core';\nimport {Observable, of} from 'rxjs';\n\nimport {defineLocale} from 'ngx-bootstrap/chronos';\n\nimport {systemViLocale} from \"./system-vi\";\nimport {systemEnLocale} from \"./system-en\";\n\nexport class CloudTransLoader implements TranslateLoader {\n\n    private store: any = {};\n\n    constructor() {\n        this.defineLocale(systemViLocale.abbr, systemViLocale);\n        this.defineLocale(systemEnLocale.abbr, systemEnLocale);\n    }\n\n    assign(lang: string, data: any): any {\n        return Object.assign(this.getResourceByLang(lang), data);\n    }\n\n    defineLocale(lang: string, data: any) {\n        defineLocale(lang, data);\n        this.store[lang] = data;\n    }\n\n    getTranslation(lang: string): Observable<any> {\n        return of(this.getResourceByLang(lang));\n    }\n\n    getResourceByLang(lang: string): any {\n        return this.store[lang] || systemEnLocale;\n    }\n\n    /**\n     * Convert complex js object to dot notation js object\n     */\n    private dotizeStringToJSON(message: string, value: string, obj: any) {\n        const parts = message.split(\".\");\n        const last = parts.pop();\n        let part;\n        while (part = parts.shift()) {\n            if (typeof obj[part] !== \"object\") {\n                obj[part] = {};\n            }\n            obj = obj[part];\n        }\n        // @ts-ignore\n        obj[last] = value;\n    }\n\n    /**\n     * Convert Java .properties files data to JSON\n     */\n    private propertiesToJSON(str: string): any {\n        // Concat lines that end with '\\'.\n        // Split by line breaks.\n        // Remove commented lines\n        // Create the JSON\n        return str.replace(/\\\\\\n/, \"\").split(\"\\n\")\n            .filter((line) => /(\\#|\\!)/.test(line.replace(/\\s/g, \"\").slice(0, 1)) ? false : line)\n            .reduce((obj, line) => {\n                const colonifiedLine = line.replace(/(\\=)/, \":\");\n                const key = colonifiedLine.substring(0, colonifiedLine.indexOf(\":\")).trim();\n                const value = this.asciiToNative(colonifiedLine.substring(colonifiedLine.indexOf(\":\") + 1).trim());\n                // @ts-ignore\n                obj[key] = value;\n                return obj;\n            }, {});\n    }\n\n    /*\n    * Convert ASCII value to Native Character\n     */\n    private asciiToNative(value: string): string {\n        let character = value.split(\"\\\\u\");\n        let nativeStr = character[0];\n        for (let i = 1; i < character.length; i++) {\n            let code = character[i];\n            nativeStr += String.fromCharCode(parseInt(\"0x\" + code.substring(0, 4)));\n            if (code.length > 4) {\n                nativeStr += code.substring(4, code.length);\n            }\n        }\n        return nativeStr;\n    }\n\n    /*\n    * Convert Native value to ASCII\n     */\n    private native2Ascii(value: string, ignoreLatin: boolean = false): string {\n        let character = value.split(\"\");\n        let asciiStr = \"\";\n        for (let i = 0; i < character.length; i++) {\n            const code = Number(character[i].charCodeAt(0));\n            if (!ignoreLatin || code > 127) {\n                let charAscii = code.toString(16);\n                charAscii = new String(\"0000\").substring(charAscii.length, 4) + charAscii;\n                asciiStr += \"\\\\u\" + charAscii;\n            } else {\n                asciiStr += character[i];\n            }\n        }\n        return asciiStr;\n    }\n\n    /**\n     * Convert items from the server to Translation\n     */\n    convertResourceToObject(items: any[]): any {\n        let translation = {};\n        for (const item of items) {\n            this.dotizeStringToJSON(item['messageKey'], item['text'], translation);\n        }\n        return translation;\n    }\n\n    /**\n     * Convert Java .properties files data to Translation\n     */\n    convertPropertiesToObject(str: string): any {\n        let translation = {};\n        const json = this.propertiesToJSON(str);\n        for (const key in json) {\n            this.dotizeStringToJSON(key, json[key], translation);\n        }\n        return translation;\n    }\n\n    setResources(lang: string, items: any[]) {\n        this.assign(lang, this.convertResourceToObject(items));\n    }\n\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClientService} from 'inet-core';\nimport {Observable} from \"rxjs\";\nimport {TranslateService} from \"@ngx-translate/core\";\n\ndeclare let iNet: any;\n\n@Injectable()\nexport class CloudTranslateService {\n    static LANGUAGE_KEY = 'language';\n    static GRID_KEY = 'grid';\n    private url = {\n        list: iNet.getPUrl('message/keys')\n    };\n\n    constructor(private http: HttpClientService,\n                private translate: TranslateService) {}\n\n    getAllMessage(): Observable<any> {\n        return this.http.getJSON(this.url.list);\n    }\n\n    getMessageByApp(appName: string) : Observable<any> {\n        return this.http.getJSON(this.url.list, {group: appName});\n    }\n\n    getCurrentLang(): string {\n        if (window.localStorage) {\n            return window.localStorage.getItem(CloudTranslateService.LANGUAGE_KEY) || this.translate.currentLang;\n        }\n        return this.translate.currentLang;\n    }\n\n    setCurrentLang(lang: string) {\n        if (window.localStorage) {\n            localStorage.setItem(CloudTranslateService.LANGUAGE_KEY, lang);\n        }\n        this.translate.setDefaultLang(lang);\n    }\n\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BsLocaleService} from \"ngx-bootstrap/datepicker\";\nimport {TranslateLoader, TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport { listLocales } from 'ngx-bootstrap/chronos';\n\nimport {CloudTransLoader} from \"./cloud-trans-loader\";\nimport {HttpClientService} from \"inet-core\";\nimport {CloudTranslateService} from \"./cloud-translate.service\";\n\ndeclare let iNet: any;\n\n@NgModule({\n    imports: [\n        CommonModule,\n        TranslateModule.forRoot({\n            loader: {provide: TranslateLoader, useClass: CloudTransLoader}\n        })\n    ],\n    declarations: [],\n    exports: [TranslateModule],\n    providers: [BsLocaleService, TranslateService, CloudTranslateService, HttpClientService]\n})\nexport class CloudTranslateModule {\n\n    static forRoot(config: any = {}): ModuleWithProviders<TranslateModule> {\n        return TranslateModule.forRoot({\n            loader: {\n                provide: TranslateLoader,\n                useClass: config.loader || CloudTransLoader,\n                deps:[HttpClientService]\n            }\n        });\n    }\n\n    constructor(\n        public translate: TranslateService,\n        public localeService: BsLocaleService,\n        private cloudTranslate: CloudTranslateService\n    ) {\n        let languages = listLocales();\n        translate.addLangs(languages);\n\n        let lang = cloudTranslate.getCurrentLang() || languages[0];\n        translate.use(lang);\n\n        //Change a locale\n        this.localeService.use(lang);\n        /*\n        translate.get([CloudTranslateService.GRID_KEY]).subscribe(res => {\n            setTimeout(()=>{\n                if (iNet.ui && iNet.ui.grid && iNet.ui.grid.Grid && res) {\n                    iNet.applyIf(iNet.ui.grid.Grid.prototype, res[CloudTranslateService.GRID_KEY]);\n                }\n            }, 100)\n        });\n        */\n    }\n}\n","import { NgModule } from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\nimport {WebSocketClientService} from \"inet-core\";\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [],\n  exports: [],\n  providers: [WebSocketClientService]\n})\nexport class WebsocketModule {\n  \n}\n","import {Directive, ElementRef, Input, OnInit} from '@angular/core';\ndeclare var $: any;\n\n@Directive({\n  selector: '[appCollapse]',\n})\nexport class CollapseDirective implements OnInit {\n  @Input() expanded: boolean = false;\n  @Input() toggleEl: HTMLElement | undefined;\n\n  private _element: any;\n\n  constructor(\n    private _el: ElementRef\n  ) { }\n\n  ngOnInit() {\n    this._element = $(this._el.nativeElement);\n\n    // Click toggle\n    if (this.toggleEl) {\n      this.toggleEl.addEventListener('click', this.toggle.bind(this));\n    }\n\n    this.expanded = !this.expanded;\n    this.toggle();\n\n  }\n\n  show() {\n    this.expanded = true;\n    this._element.collapse('show').parent().addClass('collapse-expanded');\n  }\n\n  hide() {\n    this.expanded = false;\n    this._element.collapse('hide').parent().removeClass('collapse-expanded');\n  }\n\n  toggle() {\n    if (this.expanded) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CollapseDirective} from \"./collapse.directive\";\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    declarations: [\n        CollapseDirective\n    ],\n    exports: [\n        CollapseDirective\n    ]\n})\nexport class CollapseModule {\n}\n","export class DialogAction {\n    title: string;\n    iconCls: string;\n    cls: string;\n    fn?: Function;\n    params?: any;\n\n    constructor(title: string, cls: string, iconCls: string, fn?: Function | undefined, params?: any) {\n        this.title = title;\n        this.cls = cls;\n        this.iconCls = iconCls;\n        if (fn) {\n            this.fn = fn;\n        }\n        if (params) {\n            this.params = params;\n        }\n    }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'ng-template[modalContent]'\n})\nexport class ModalContentDirective {\n\n  constructor(public templateRef: TemplateRef<unknown>) { }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'ng-template[modalAction]'\n})\nexport class ModalActionDirective {\n\n  constructor(public templateRef: TemplateRef<unknown>) { }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'ng-template[modalHeader]'\n})\nexport class ModalHeaderDirective {\n\n  constructor(public templateRef: TemplateRef<unknown>) { }\n\n}\n","import {AfterViewInit, Component, ContentChild, Input, OnInit, TemplateRef, ViewChild} from '@angular/core';\nimport {BsModalService} from 'ngx-bootstrap/modal';\nimport {BsModalRef} from 'ngx-bootstrap/modal/bs-modal-ref.service';\nimport {DialogAction} from \"./dialog-action\";\nimport {Subscription} from \"rxjs\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {ModalContentDirective} from \"./modal-content.directive\";\nimport {ModalActionDirective} from \"./modal-action.directive\";\nimport {ModalHeaderDirective} from \"./modal-header.directive\";\n\ndeclare let iNet: any;\n\n@Component({\n    selector: 'app-confirm-dialog',\n    templateUrl: './confirm-dialog.component.html'\n})\nexport class ConfirmDialogComponent implements AfterViewInit {\n    @ViewChild('confirmModal') confirmModal: TemplateRef<any> | undefined;\n    @ContentChild(ModalHeaderDirective) modalHeaderItem!: ModalHeaderDirective;\n    @ContentChild(ModalContentDirective) modalContentItem!: ModalContentDirective;\n    @ContentChild(ModalActionDirective) modalActionItem!: ModalActionDirective;\n\n    @Input() id: string = iNet.generateId();\n    @Input() iconCls: string = '';\n    @Input() title: string = '';\n    @Input() content: string = '';\n    @Input() cls: string = '';\n    @Input() actions: Array<DialogAction> = [];\n    @Input() config: any = {\n        backdrop: true,\n        ignoreBackdropClick: true\n    };\n    data: any;\n    private modalRef: BsModalRef | undefined;\n    private toolbarTranslations: any;\n    private readonly translateSubscription: Subscription;\n\n\n    constructor(private modalService: BsModalService, private translate: TranslateService) {\n        this.translateSubscription = translate.get(['TOOLBAR']).subscribe(res => {\n            const {TOOLBAR} = res || {'TOOLBAR': {'CLOSE': 'Close'}};\n            this.toolbarTranslations = TOOLBAR;\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.getActions().length < 1 && !this.modalActionItem) {\n            const {CLOSE} = this.toolbarTranslations;\n            const closeAction = new DialogAction(CLOSE, 'btn-danger', 'fa fa-check', this.hide);\n            this.setActions([closeAction]);\n        }\n    }\n\n    public hide() {\n        if (!this.modalRef) {\n            return;\n        }\n        this.modalRef.hide();\n    }\n\n    show() {\n        if(this.confirmModal) {\n            this.modalRef = this.modalService.show(this.confirmModal, this.config);\n        }\n    }\n\n    pushAction(action: DialogAction) {\n        this.actions.push(action);\n    }\n\n    setActions(actions: Array<DialogAction>) {\n        this.actions = actions;\n    }\n\n    getActions(): Array<DialogAction> {\n        return this.actions;\n    }\n\n    setData(v: any) {\n        this.data = v;\n    }\n\n    getData(): any {\n        return this.data;\n    }\n\n    getId(): string {\n        return this.id;\n    }\n\n    callFn(fn?: Function, params?: any) {\n        if(fn) {\n            fn.call(this, params);\n        }\n    }\n}\n","<ng-template #confirmModal>\n    <div class=\"modal-header\">\n        <ng-container *ngIf=\"modalHeaderItem; else defaultHeaderBlock\" [ngTemplateOutlet]=\"modalHeaderItem.templateRef\" [ngTemplateOutletContext]=\"{data: data}\"></ng-container>\n        <ng-template #defaultHeaderBlock>\n            <h5 class=\"modal-title pull-left\"><i class=\"{{iconCls}}\"></i> {{title}}</h5>\n            <button type=\"button\" class=\"close pull-right\" (click)=\"hide()\">\n                <span aria-hidden=\"true\">&times;</span>\n            </button>\n        </ng-template>\n    </div>\n    <div class=\"modal-body\">\n        <ng-container *ngIf=\"content\"><div [outerHTML]=\"content\"></div></ng-container>\n        <ng-container *ngIf=\"modalContentItem\" [ngTemplateOutlet]=\"modalContentItem.templateRef\" [ngTemplateOutletContext]=\"{data: data}\"></ng-container>\n    </div>\n    <div class=\"modal-footer text-right\">\n        <ng-container *ngIf=\"modalActionItem\" [ngTemplateOutlet]=\"modalActionItem.templateRef\" [ngTemplateOutletContext]=\"{data: data}\"></ng-container>\n        <button type=\"button\" *ngFor=\"let action of actions\" class=\"btn btn-sm {{action.cls}}\"\n                (click)=\"callFn(action?.fn, action?.params)\"><i class=\"{{action.iconCls}}\"></i> {{action.title}}</button>\n    </div>\n</ng-template>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ModalModule, BsModalService} from 'ngx-bootstrap/modal';\nimport {ConfirmDialogComponent} from \"./confirm-dialog.component\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {ModalContentDirective} from './modal-content.directive';\nimport {ModalActionDirective} from \"./modal-action.directive\";\nimport {ModalHeaderDirective} from \"./modal-header.directive\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ModalModule.forRoot(),\n        TranslateModule\n    ],\n    declarations: [ConfirmDialogComponent, ModalContentDirective, ModalActionDirective, ModalHeaderDirective],\n    exports: [ConfirmDialogComponent, ModalContentDirective, ModalActionDirective, ModalHeaderDirective],\n    providers: [BsModalService]\n})\nexport class DialogModule {\n}\n","export class ListViewRow {\n    public selected: boolean = false;\n    public active: boolean = false;\n\n    constructor(public $implicit: any, public index: number = 0, public count: number = 0) {\n    }\n\n    get first(): boolean {\n        return this.index === 0;\n    }\n\n    get last(): boolean {\n        return this.index === this.count - 1;\n    }\n\n    get even(): boolean {\n        return this.index % 2 === 0;\n    }\n\n    get odd(): boolean {\n        return !this.even;\n    }\n}\n","import {\n    Component, OnInit, Input, Output, EventEmitter,\n    ViewChild, ContentChild, TemplateRef, OnChanges, ElementRef, SimpleChanges,\n} from '@angular/core';\nimport {ListViewRow} from \"./list-view-row\";\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: 'list-view',\n    styleUrls: ['./list-view.component.scss'],\n    templateUrl: './list-view.component.html'\n})\nexport class ListViewComponent implements OnChanges {\n\n    listItems: Array<any> = [];\n    selectedItems = [];\n    activeItem = -1;\n\n    @Input() items = [];\n\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onSelectionChanged = new EventEmitter();\n\n    @ViewChild(\"listBody\") listBody!: { nativeElement: HTMLElement};\n\n    @ContentChild('toolbarTpl') toolbar!: TemplateRef<ElementRef>;\n    @ContentChild('contentTpl') template!: TemplateRef<ElementRef> ;\n    @ContentChild('searchTpl') search!: TemplateRef<ElementRef>;\n    @ContentChild('footerTpl') footer!: TemplateRef<ElementRef>;\n\n    @Input() idProperty: string = 'uuid';\n    @Input() autoSelect: boolean= false;\n    @Input() singleSelect: boolean = false;\n    constructor() {\n    }\n\n    // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n    ngOnInit() {\n \n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const count = this.items.length;\n        this.listItems = this.items.map((item, index) => {\n            return new ListViewRow(item, index, count);\n        });\n        this.autoSelectItem();\n    }\n\n    private autoSelectItem() {\n        if(this.autoSelect  && this.listItems.length>0) {\n            this.selectedItems = [];\n            this.selectItem(0);//active first item\n        }\n    }\n\n    requestFocus() {\n        if( this.listBody)\n            this.listBody.nativeElement.focus();\n    }\n\n    handleKeyPress(event: KeyboardEvent) {\n        const keyCode = event.which;\n\n        let row = this.activeItem < 0 ? {} : this.listItems[this.activeItem];\n        row.active = false;\n\n        const prevActiveItem = this.activeItem;\n        switch (keyCode) {\n            case 40:\n                if (this.activeItem === this.items.length - 1) {\n                    this.activeItem = 0;\n                    break;\n                }\n\n                this.activeItem++;\n                break;\n            case 38:\n            case 9:\n                if (this.activeItem === 0) {\n                    this.activeItem = this.items.length - 1;\n                    break;\n                }\n\n                this.activeItem--;\n                break;\n\n            case 32:\n                this.toggleItem(this.activeItem);\n                break;\n\n            default:\n                return\n        }\n\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (this.activeItem == prevActiveItem) {\n            return;\n        }\n\n        if (event.altKey) {\n            this.updateItemState();\n            return;\n        }\n\n        //const isSelected = row.selected;\n        if (event.shiftKey) {\n            row.selected = true;\n        }\n        else {\n            row.selected = false;\n            this.selectedItems = [];\n        }\n\n        this.selectItem(this.activeItem);\n    }\n\n    handleClick(event: any, index: number) {\n        if (event.metaKey || event.ctrlKey) {\n            this.toggleItem(index);\n        }\n        else {\n            this.selectedItems = [];\n            this.selectItem(index);\n        }\n    }\n\n    updateItemState() {\n        this.listItems.forEach((row, index) => {\n            row.selected = this.selectedItems.indexOf(this.items[index]) >= 0;\n            row.active = index == this.activeItem;\n        });\n\n        if (this.activeItem >= 0) {\n            this.scrollItemIntoView(this.activeItem);\n        }\n    }\n\n    scrollItemIntoView(index: number) {\n        if(!this.listBody) {\n            return;\n        }\n        const activeItemEl = (this.listBody.nativeElement as HTMLElement).children.item(index) as HTMLElement;\n        const scrollTop = this.listBody.nativeElement.scrollTop;\n        const scrollEnd = scrollTop + this.listBody.nativeElement.offsetHeight;\n        if (activeItemEl.offsetTop < scrollTop) {\n            this.listBody.nativeElement.scrollTop = activeItemEl.offsetTop;\n        }\n        else if (activeItemEl.offsetTop + activeItemEl.offsetHeight > scrollEnd) {\n            this.listBody.nativeElement.scrollTop = activeItemEl.offsetTop + activeItemEl.offsetHeight - this.listBody.nativeElement.offsetHeight;\n        }\n        else if (activeItemEl.offsetTop > scrollEnd) {\n        }\n    }\n\n    toggleItem(index: number) {\n        if (this.selectedItems.indexOf(this.items[index]) >= 0) {\n            this.deselectItem(index);\n        }\n        else {\n            this.selectItem(index);\n        }\n    }\n\n    deselectItem(index: number) {\n        this.selectedItems.splice(this.selectedItems.indexOf(this.items[index]), 1);\n        this.updateItemState();\n        this.onSelectionChanged.emit(this.selectedItems);\n    }\n\n    selectItem(index: number) {\n        if(this.singleSelect) {\n            this.selectedItems = [];\n        }\n        this.activeItem = index;\n        // (<EmbeddedViewRef<ListViewRow>>this._vr.get(index)).rootNodes[0].scrollIntoView(false);\n        if (this.selectedItems.indexOf(this.items[index]) < 0) {\n            this.selectedItems.push(this.items[index]);\n        }\n        this.updateItemState();\n        this.onSelectionChanged.emit(this.selectedItems);\n    }\n\n    selectAll() {\n        if(this.singleSelect) {\n            this.autoSelectItem();\n        } else {\n            this.selectedItems = this.items.map(l => l);\n            this.updateItemState();\n        }\n        this.onSelectionChanged.emit(this.selectedItems);\n    }\n\n    clearSelection() {\n        this.selectedItems = [];\n        this.updateItemState();\n        this.onSelectionChanged.emit(this.selectedItems);\n    }\n\n    selectById(id: string) {\n        //this.selectedItems = [];\n        setTimeout(() => {\n            let index = this.items.findIndex(obj => obj[this.getIdProperty()] == id);\n            // console.log('indexx', index, this.getIdProperty(), id);\n            if (index > -1) {\n                this.selectItem(index);\n            }\n        }, 500)\n    }\n\n    deselectById(id: string) {\n        setTimeout(() => {\n            let index = this.items.findIndex(obj => obj[this.getIdProperty()] == id);\n            if (index > -1) {\n                this.deselectItem(index);\n            }\n        }, 500)\n    }\n\n    getIdProperty() {\n        return this.idProperty;\n    }\n\n}\n","<div class=\"toolbar\">\n    <ng-template [ngTemplateOutlet]=\"toolbar\"></ng-template>\n</div>\n<div class=\"search-container\">\n    <ng-template [ngTemplateOutlet]=\"search\"></ng-template>\n</div>\n<div #listBody class=\"list-body content\" tabindex=\"0\" (keydown)=\"handleKeyPress($event)\">\n    <i class=\"list-item-body flex-column\" style=\"text-align: center;padding-top: 10px;\" *ngIf=\"listItems.length < 1\">\n        {{'grid.emptyMsg' | translate}}\n    </i>\n    <a *ngFor=\"let item of listItems; let index = index\" class=\"list-item-body flex-column\"\n       (click)=\"handleClick($event, index)\" [attr.data-index]=\"index\">\n        <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"item\"></ng-template>\n    </a>\n</div>\n<div class=\"footer\">\n    <ng-template [ngTemplateOutlet]=\"footer\"></ng-template>\n</div>\n","import {\n  Directive, Input, Output, ElementRef, ViewContainerRef, TemplateRef, EventEmitter,\n  OnChanges, OnInit, OnDestroy, SimpleChanges\n} from '@angular/core';\n\n\n@Directive({\n  selector : '[listOf]',\n  exportAs : 'listView'\n})\nexport class ListViewDirective implements OnInit, OnChanges, OnDestroy{\n  selectedItems = [];\n  activeItem = 0;\n\n  @Input() listOf = [];\n  @Output() onSelectionChanged = new EventEmitter();\n\n  constructor(private _element: ElementRef,  private _vr: ViewContainerRef, private _tr: TemplateRef<any>) {}\n\n  ngOnInit() {\n    //console.log('[ListViewDirective]', this._element);\n    // document.addEventListener('keydown', (e) => this.handleKeyPress(e));\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this._vr.clear();\n\n    const count = this.listOf.length;\n    this.listOf.map((item, index) => {\n      const row = {item, index, count};\n      const view = this._vr.createEmbeddedView(this._tr, row);\n      // view.rootNodes[0].addEventListener('click', (event) => this.handleClick(event, index));\n      return row;\n    });\n\n    // this.updateItemState();\n  }\n\n  ngOnDestroy(): any {\n\n  }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ListViewComponent} from \"./list-view.component\";\nimport {ListViewDirective} from \"./list-view.directive\";\nimport {TranslateModule} from \"@ngx-translate/core\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        TranslateModule\n    ],\n    declarations: [ListViewComponent, ListViewDirective],\n    exports: [ListViewComponent, ListViewDirective]\n})\nexport class ListViewModule {\n}\n","import {Injectable} from '@angular/core';\n\ndeclare let iNet: any;\n\nconst FILES_FORMAT = [\n    'unknown', 'text', 'archive', 'audio', 'video',\n    'png', 'jpg', 'gif', 'tiff', 'svg', 'ai', 'psd', 'dwg',\n    'avi', 'fla', 'mp2', 'mp3', 'mp4', 'aac', 'flac', 'wma', 'wav', 'mxf',\n    'iso', 'mdf', 'nrg',\n    'zip', '7z', 'arj', 'rar',\n    'pdf', 'doc', 'rtf', 'txt', 'xls', 'ppt',\n    'css', 'csv', 'html', 'json', 'js', 'xml',\n    'dbf', 'exe'\n];\n\nconst FILES_EDIT_FORMAT = [\n    'doc', 'docx', 'odt', 'ods', 'xls', 'xlsx',\n    'ppt', 'pps', 'pptm', 'pptx', 'pot', 'potx',\n    'dot', 'dotx', 'docm', 'dotx', 'csv', 'sxw']\n;\n\nconst FILES_VIEW_FORMAT = ['pdf', 'png', 'jpg', 'jpeg', 'gif'];\n\nconst UNKNOWN = 'unknown';\n\n@Injectable()\nexport class FileFormatService {\n\n    constructor() {\n    }\n\n    getImagePath(): string {\n        let path = iNet.commonImageFolder;\n        const lastIndex = path.lastIndexOf('/');\n        if (lastIndex === path.length - 1) {\n            return path.substring(0, lastIndex);\n        }\n        return path;\n    }\n\n    getFileFormatPath(): string {\n        return `${this.getImagePath()}/format`;\n    }\n\n    getUrlByExt(ext: string) {\n        const path = this.getFileFormatPath();\n        if (FILES_FORMAT.indexOf(ext) > -1) {\n            return `${path}/${ext.toLowerCase()}.svg`\n        }\n        return `${path}/${UNKNOWN}.svg`\n    }\n\n    getUrlByName(name: string) {\n        return this.getUrlByExt(this.getExtByName(name));\n    }\n\n    getExtByName(name: string) {\n        // @ts-ignore\n        return name.split('.').pop().toLowerCase() || UNKNOWN;\n    }\n\n    getEditFormats(): string[] {\n        return FILES_EDIT_FORMAT;\n    }\n\n    getViewFormats(): string[] {\n        return FILES_VIEW_FORMAT;\n    }\n\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {FileFormatService} from \"./file-format.service\";\n\n@Pipe({\n    name: 'fileExt'\n})\nexport class FileExtPipe implements PipeTransform {\n    constructor(private formatService: FileFormatService) {\n    }\n\n    transform(name: string): string {\n        return this.formatService.getExtByName(name);\n    }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {FileFormatService} from \"./file-format.service\";\n\n@Pipe({\n    name: 'fileIcon'\n})\nexport class FileIconPipe implements PipeTransform {\n\n    constructor(private formatService: FileFormatService) {\n\n    }\n\n    transform(name: string): string {\n        return this.formatService.getUrlByName(name);\n    }\n\n}\n","import {Injectable} from '@angular/core';\nimport {NavigationExtras, Router} from '@angular/router';\nimport {HttpClientService} from \"inet-core\";\nimport {Subject} from \"rxjs\";\nimport {FileFormatService} from \"./file-format.service\";\n\ndeclare let iNet: any;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ViewerService {\n    private static files: any[] = [];\n    private routerPath: string = 'viewer';//Navigate with the router path\n    private downloadUrl: string = iNet.getPUrl('docx/download');\n\n    // Observable sources\n    private emitLoadSource = new Subject<any>();\n    // Observable when document loaded\n    loadEmitted = this.emitLoadSource.asObservable();\n\n    constructor(private router: Router,\n                private formatService: FileFormatService,\n                private http: HttpClientService) {\n    }\n\n    setRouterPath(v: string) {\n        this.routerPath = v;\n    }\n\n    getRouterPath(): string {\n        return this.routerPath;\n    }\n\n    setDownloadUrl(v: string) {\n        this.downloadUrl = v;\n    }\n\n    getDownloadUrl(): string {\n        return this.downloadUrl;\n    }\n\n    open(ext: string, docId: string, extras?: NavigationExtras) {\n        if (this.hasEdit(ext) || (this.hasView(ext) && this.hasViewerInBrowser())) {\n            this.router.navigate([this.getRouterPath(), ext, docId], extras);\n        } else { //error pages\n            this.router.navigate([this.getRouterPath(), docId]);\n        }\n    }\n\n    hasNameInPlugin(name: string): boolean {\n        let plugins: any = navigator.plugins || [];\n        let plugin: any = {};\n        for (let i = 0; i < plugins.length; i++) {\n            plugin = plugins[i] || {};\n            if ((plugin['name']).search(name) > -1) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    hasViewerInBrowser(): boolean {\n        if (iNet.isWebKit) { //Chrome or Safari\n            if (iNet.isChrome) {\n                return this.hasNameInPlugin('PDF Viewer');\n            } else if (iNet.isSafari) {\n                return (this.hasNameInPlugin('Adobe Acrobat') || this.hasNameInPlugin('PDF'));\n            }\n        } else if (iNet.isGecko) { //Firefox\n            return this.hasNameInPlugin('Adobe Acrobat');\n        }\n        return false;\n    }\n\n    hasEdit(ext: string): boolean {\n        return this.formatService.getEditFormats().indexOf(ext) > -1;\n    }\n\n    hasView(ext: string): boolean {\n        return this.formatService.getViewFormats().indexOf(ext) > -1;\n    }\n\n    downloadById(docId: string) {\n        this.http.downloadFile(this.getDownloadUrl(), {docID: docId});\n    }\n\n    setFiles(v: any) {\n        ViewerService.files = v;\n    }\n\n    getFiles() {\n        return ViewerService.files;\n    }\n\n    /**\n     * Returns true if this url is viewer module, false otherwise\n     * @param url - the give URL\n     */\n\n    isViewerModuleByUrl(url: string): boolean {\n        return (url.indexOf('/' + this.getRouterPath()) === 0);\n    }\n\n    /**\n     * Fire event when document loaded\n     * */\n    sendEvent($event: any) {\n        this.emitLoadSource.next({$event});\n    }\n}\n","import {Directive, HostListener, Input} from '@angular/core';\nimport {ViewerService} from './viewer.service';\nimport {NavigationExtras} from \"@angular/router\";\n\n@Directive({\n    selector: '[appViewer]'\n})\nexport class ViewerDirective {\n\n    @Input('ext') ext: string | undefined;\n    @Input('docId') docId: string | undefined;\n    @Input('files') files?: Array<any>;\n    @Input('extras') extras?: NavigationExtras;\n    constructor(private viewerService: ViewerService) {\n    }\n\n    @HostListener('click') onClick() {\n        if(this.ext && this.docId) {\n            this.viewerService.setFiles(this.files);\n            this.viewerService.open(this.ext, this.docId, this.extras);\n        }\n    }\n\n}\n","import {Component, EventEmitter, Input, OnInit, Output, TemplateRef} from '@angular/core';\n\n@Component({\n    selector: 'file-list',\n    templateUrl: './file-list.component.html',\n    styleUrls: ['./file-list.component.css']\n})\nexport class FileListComponent implements OnInit {\n    @Input() fileEl: HTMLInputElement | undefined;\n    @Input() files: FileListItem[] = [];\n    @Input() removable: boolean = true;\n    @Input() template: TemplateRef<any> | undefined;\n\n    @Output() onClick = new EventEmitter<any>();\n    @Output() onRemove = new EventEmitter<FileListItem>();\n\n    ngOnInit(): void {\n        this._initFileEl();\n    }\n\n    clickFile(file: FileListItem, event: any) {\n        this.onClick.emit({file, event});\n    }\n\n    removeFile(file: FileListItem) {\n        const index = this.files.indexOf(file);\n        if (index > -1) {\n            this.files.splice(index, 1);\n            this.onRemove.emit(file);\n        }\n    }\n\n    addFiles(files: FileList | File[]) {\n        // Read as base64 if image\n        let file:any;\n        for (let i  = 0; i < files.length; i++) {\n            file = files[i];\n            if (this._fileIsImage(file)) {\n                file['image'] = true;\n                this._readImageBase64(file);\n            }\n            this.files.push(file);\n        }\n    }\n\n    private _initFileEl() {\n        if (this.fileEl) {\n            this.fileEl.addEventListener('change', (e) => {\n                if(this.fileEl) {\n                    const files: any = this.fileEl.files;\n                    if (files.length > 0) {\n                        // Read as base64 if image\n                        this.addFiles(files);\n\n                        // Reset file\n                        this.fileEl.value = '';\n                    }\n                }\n            });\n        }\n    }\n\n    private _readImageBase64(file: any) {\n        const reader = new FileReader();\n        reader.readAsDataURL(file);\n        reader.onload = function() {\n            file.url = reader.result;\n        };\n    }\n\n    private _fileIsImage(file: FileListItem) {\n        return file.type && file.type.indexOf('image') > -1;\n    }\n}\n\nexport interface FileListItem extends File {\n    id?: string;\n    url?: string;\n    image?: boolean;\n}\n","<ng-container *ngFor=\"let file of files\">\n    <ng-template *ngTemplateOutlet=\"template ? template : fileItem; context: {file: file}\">\n    </ng-template>\n</ng-container>\n<ng-template #fileItem let-file=\"file\">\n    <div class=\"file-item\" [title]=\"file.name\" (click)=\"clickFile(file, $event)\">\n        <img *ngIf=\"file.image; else icon\" [src]=\"file.url\" class=\"file-item__image\">\n        <ng-template #icon>\n            <img [src]=\"file.name | fileIcon\" class=\"file-item__image_type\">\n            <div class=\"file-item__name\">{{file.name}}</div>\n        </ng-template>\n        <i *ngIf=\"removable\" (click)=\"removeFile(file)\" class=\"fa fa-times file-item__remove\"></i>\n    </div>\n</ng-template>","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FileExtPipe} from './file-ext.pipe';\nimport {ViewerDirective} from './viewer.directive';\nimport {FileIconPipe} from './file-icon.pipe';\nimport {FileFormatService} from './file-format.service';\nimport {ViewerService} from './viewer.service';\nimport {FileListComponent} from './list/file-list.component';\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    declarations: [ViewerDirective, FileIconPipe, FileExtPipe, FileListComponent],\n    exports: [ViewerDirective, FileIconPipe, FileExtPipe, FileListComponent],\n    providers: [FileFormatService, ViewerService]\n})\nexport class FileModule {\n}\n","import {Directive, EventEmitter, ElementRef, HostListener, Input, Output} from '@angular/core';\n\nimport {FileUploader, FileUploaderOptions} from './file-uploader.class';\n\n@Directive({selector: '[ng2FileDrop]'})\nexport class FileDropDirective {\n    @Input() public uploader: FileUploader | undefined;\n    @Output() public fileOver: EventEmitter<any> = new EventEmitter();\n    @Output() public onFileDrop: EventEmitter<File[]> = new EventEmitter<File[]>();\n\n    protected element: ElementRef;\n\n    public constructor(element: ElementRef) {\n        this.element = element;\n    }\n\n    public getOptions(): FileUploaderOptions | null {\n        return this.uploader ? this.uploader.options : null;\n    }\n\n    public getFilters(): any {\n        return {};\n    }\n\n    @HostListener('drop', ['$event'])\n    public onDrop(event: any): void {\n        let transfer = this._getTransfer(event);\n        if (!transfer) {\n            return;\n        }\n\n        let options = this.getOptions();\n        let filters = this.getFilters();\n        this._preventAndStop(event);\n        if (this.uploader && options) {\n            this.uploader.addToQueue(transfer.files, options, filters);\n        }\n        this.fileOver.emit(false);\n        this.onFileDrop.emit(transfer.files);\n    }\n\n    @HostListener('dragover', ['$event'])\n    public onDragOver(event: any): void {\n        let transfer = this._getTransfer(event);\n        if (!this._haveFiles(transfer.types)) {\n            return;\n        }\n\n        transfer.dropEffect = 'copy';\n        this._preventAndStop(event);\n        this.fileOver.emit(true);\n    }\n\n    @HostListener('dragleave', ['$event'])\n    public onDragLeave(event: any): any {\n        if ((this as any).element) {\n            if (event.currentTarget === (this as any).element[0]) {\n                return;\n            }\n        }\n\n        this._preventAndStop(event);\n        this.fileOver.emit(false);\n    }\n\n    protected _getTransfer(event: any): any {\n        return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer;\n    }\n\n    protected _preventAndStop(event: any): any {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    protected _haveFiles(types: any): any {\n        if (!types) {\n            return false;\n        }\n\n        if (types.indexOf) {\n            return types.indexOf('Files') !== -1;\n        } else if (types.contains) {\n            return types.contains('Files');\n        } else {\n            return false;\n        }\n    }\n}\n","import { Directive, EventEmitter, ElementRef, Input, HostListener, Output } from '@angular/core';\n\nimport { FileUploader } from './file-uploader.class';\n\n@Directive({ selector: '[ng2FileSelect]' })\nexport class FileSelectDirective {\n  @Input() public uploader: FileUploader | undefined;\n  @Output() public onFileSelected: EventEmitter<File[]> = new EventEmitter<File[]>();\n\n  protected element: ElementRef;\n\n  public constructor(element: ElementRef) {\n    this.element = element;\n  }\n\n  public getOptions(): any {\n    return this.uploader ? this.uploader.options : {};\n  }\n\n  public getFilters(): any {\n    return {};\n  }\n\n  public isEmptyAfterSelection(): boolean {\n    return !!this.element.nativeElement.attributes.multiple;\n  }\n\n  @HostListener('change')\n  public onChange(): any {\n    let files = this.element.nativeElement.files;\n    let options = this.getOptions();\n    let filters = this.getFilters();\n    if(this.uploader) {\n      this.uploader.addToQueue(files, options, filters);\n    }\n    this.onFileSelected.emit(files);\n\n    if (this.isEmptyAfterSelection()) {\n      this.element.nativeElement.value = '';\n    }\n  }\n}\n","import {FileLikeObject} from './file-like-object.class';\n\nexport class FileType {\n    /*  MS office  */\n    public static mime_doc: string[] = [\n        'application/msword',\n        'application/msword',\n        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n        'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n        'application/vnd.ms-word.document.macroEnabled.12',\n        'application/vnd.ms-word.template.macroEnabled.12'\n    ];\n    public static mime_xsl: string[] = [\n        'application/vnd.ms-excel',\n        'application/vnd.ms-excel',\n        'application/vnd.ms-excel',\n        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n        'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n        'application/vnd.ms-excel.sheet.macroEnabled.12',\n        'application/vnd.ms-excel.template.macroEnabled.12',\n        'application/vnd.ms-excel.addin.macroEnabled.12',\n        'application/vnd.ms-excel.sheet.binary.macroEnabled.12'\n    ];\n    public static mime_ppt: string[] = [\n        'application/vnd.ms-powerpoint',\n        'application/vnd.ms-powerpoint',\n        'application/vnd.ms-powerpoint',\n        'application/vnd.ms-powerpoint',\n        'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n        'application/vnd.openxmlformats-officedocument.presentationml.template',\n        'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n        'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n        'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n        'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n        'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'\n    ];\n\n    /* PSD */\n    public static mime_psd: string[] = [\n        'image/photoshop',\n        'image/x-photoshop',\n        'image/psd',\n        'application/photoshop',\n        'application/psd',\n        'zz-application/zz-winassoc-psd'\n    ];\n\n    /* Compressed files */\n    public static mime_compress: string[] = [\n        'application/x-gtar',\n        'application/x-gcompress',\n        'application/compress',\n        'application/x-tar',\n        'application/x-rar-compressed',\n        'application/octet-stream',\n        'application/x-zip-compressed',\n        'application/zip-compressed',\n        'application/x-7z-compressed',\n        'application/gzip',\n        'application/x-bzip2'\n    ];\n\n    public static getMimeClass(file: FileLikeObject): string {\n        let mimeClass = 'application';\n        if (this.mime_psd.indexOf(file.type) !== -1) {\n            mimeClass = 'image';\n        } else if (file.type.match('image.*')) {\n            mimeClass = 'image';\n        } else if (file.type.match('video.*')) {\n            mimeClass = 'video';\n        } else if (file.type.match('audio.*')) {\n            mimeClass = 'audio';\n        } else if (file.type === 'application/pdf') {\n            mimeClass = 'pdf';\n        } else if (this.mime_compress.indexOf(file.type) !== -1) {\n            mimeClass = 'compress';\n        } else if (this.mime_doc.indexOf(file.type) !== -1) {\n            mimeClass = 'doc';\n        } else if (this.mime_xsl.indexOf(file.type) !== -1) {\n            mimeClass = 'xls';\n        } else if (this.mime_ppt.indexOf(file.type) !== -1) {\n            mimeClass = 'ppt';\n        }\n        if (mimeClass === 'application') {\n            mimeClass = this.fileTypeDetection(file.name);\n        }\n\n        return mimeClass;\n    }\n\n    public static fileTypeDetection(inputFilename: string): string {\n        let types: { [key: string]: string } = {\n            'jpg': 'image',\n            'jpeg': 'image',\n            'tif': 'image',\n            'psd': 'image',\n            'bmp': 'image',\n            'png': 'image',\n            'nef': 'image',\n            'tiff': 'image',\n            'cr2': 'image',\n            'dwg': 'image',\n            'cdr': 'image',\n            'ai': 'image',\n            'indd': 'image',\n            'pin': 'image',\n            'cdp': 'image',\n            'skp': 'image',\n            'stp': 'image',\n            '3dm': 'image',\n            'mp3': 'audio',\n            'wav': 'audio',\n            'wma': 'audio',\n            'mod': 'audio',\n            'm4a': 'audio',\n            'compress': 'compress',\n            'zip': 'compress',\n            'rar': 'compress',\n            '7z': 'compress',\n            'lz': 'compress',\n            'z01': 'compress',\n            'bz2': 'compress',\n            'gz': 'compress',\n            'pdf': 'pdf',\n            'xls': 'xls',\n            'xlsx': 'xls',\n            'ods': 'xls',\n            'mp4': 'video',\n            'avi': 'video',\n            'wmv': 'video',\n            'mpg': 'video',\n            'mts': 'video',\n            'flv': 'video',\n            '3gp': 'video',\n            'vob': 'video',\n            'm4v': 'video',\n            'mpeg': 'video',\n            'm2ts': 'video',\n            'mov': 'video',\n            'doc': 'doc',\n            'docx': 'doc',\n            'eps': 'doc',\n            'txt': 'doc',\n            'odt': 'doc',\n            'rtf': 'doc',\n            'ppt': 'ppt',\n            'pptx': 'ppt',\n            'pps': 'ppt',\n            'ppsx': 'ppt',\n            'odp': 'ppt'\n        };\n\n        let chunks = inputFilename.split('.');\n        if (chunks.length < 2) {\n            return 'application';\n        }\n        let extension = chunks[chunks.length - 1].toLowerCase();\n        if (types[extension] === undefined) {\n            return 'application';\n        } else {\n            return types[extension];\n        }\n    }\n}\n","function isElement(node: any): boolean {\n    return !!(node && (node.nodeName || node.prop && node.attr && node.find));\n}\n\nexport class FileLikeObject {\n    public lastModifiedDate: any;\n    public size: any;\n    public type: string = '';\n    public name: string = '';\n    public rawFile: string;\n\n    public constructor(fileOrInput: any) {\n        this.rawFile = fileOrInput;\n        let isInput = isElement(fileOrInput);\n        let fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;\n        let postfix = typeof fakePathOrObject === 'string' ? 'FakePath' : 'Object';\n        let method = '_createFrom' + postfix;\n        (this as any)[method](fakePathOrObject);\n    }\n\n    public _createFromFakePath(path: string): void {\n        this.lastModifiedDate = void 0;\n        this.size = void 0;\n        this.type = 'like/' + path.slice(path.lastIndexOf('.') + 1).toLowerCase();\n        this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\\\') + 2);\n    }\n\n    public _createFromObject(object: { size: number, type: string, name: string }): void {\n        this.size = object.size;\n        this.type = object.type;\n        this.name = object.name;\n    }\n}\n","import { FileLikeObject } from './file-like-object.class';\nimport { FileUploader, ParsedResponseHeaders, FileUploaderOptions } from './file-uploader.class';\n\nexport class FileItem {\n  public file: FileLikeObject;\n  public _file: File;\n  public alias: string | undefined;\n  public url: string | undefined = '/';\n  public method: string | undefined;\n  public headers: any = [];\n  public withCredentials: boolean = true;\n  public formData: any = [];\n  public isReady: boolean = false;\n  public isUploading: boolean = false;\n  public isUploaded: boolean = false;\n  public isSuccess: boolean = false;\n  public isCancel: boolean = false;\n  public isError: boolean = false;\n  public progress: number = 0;\n  public index: number = 0;\n  public _xhr: XMLHttpRequest | undefined;\n  public _form: any;\n\n  protected uploader: FileUploader;\n  protected some: File;\n  protected options: FileUploaderOptions;\n\n  public constructor(uploader: FileUploader, some: File, options: FileUploaderOptions) {\n    this.uploader = uploader;\n    this.some = some;\n    this.options = options;\n    this.file = new FileLikeObject(some);\n    this._file = some;\n    if (uploader.options) {\n      this.method = uploader.options.method || 'POST';\n      this.alias = uploader.options.itemAlias || 'FileUpload';\n    }\n    if(uploader.options.url) {\n      this.url = uploader.options.url;\n    }\n  }\n\n  public upload(): void {\n    try {\n      this.uploader.uploadItem(this);\n    } catch (e) {\n      this.uploader._onCompleteItem(this, '', 0, {});\n      this.uploader._onErrorItem(this, '', 0, {});\n    }\n  }\n\n  public cancel(): void {\n    this.uploader.cancelItem(this);\n  }\n\n  public remove(): void {\n    this.uploader.removeFromQueue(this);\n  }\n\n  public onBeforeUpload(): void {\n    return void 0;\n  }\n\n  public onBuildForm(form: any): any {\n    return { form };\n  }\n\n  public onProgress(progress: number): any {\n    return { progress };\n  }\n\n  public onSuccess(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n  public onError(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n  public onCancel(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n  public onComplete(response: string, status: number, headers: ParsedResponseHeaders): any {\n    return { response, status, headers };\n  }\n\n  public _onBeforeUpload(): void {\n    this.isReady = true;\n    this.isUploading = true;\n    this.isUploaded = false;\n    this.isSuccess = false;\n    this.isCancel = false;\n    this.isError = false;\n    this.progress = 0;\n    this.onBeforeUpload();\n  }\n\n  public _onBuildForm(form: any): void {\n    this.onBuildForm(form);\n  }\n\n  public _onProgress(progress: number): void {\n    this.progress = progress;\n    this.onProgress(progress);\n  }\n\n  public _onSuccess(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.isReady = false;\n    this.isUploading = false;\n    this.isUploaded = true;\n    this.isSuccess = true;\n    this.isCancel = false;\n    this.isError = false;\n    this.progress = 100;\n    this.index = 0;\n    this.onSuccess(response, status, headers);\n  }\n\n  public _onError(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.isReady = false;\n    this.isUploading = false;\n    this.isUploaded = true;\n    this.isSuccess = false;\n    this.isCancel = false;\n    this.isError = true;\n    this.progress = 0;\n    this.index = 0;\n    this.onError(response, status, headers);\n  }\n\n  public _onCancel(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.isReady = false;\n    this.isUploading = false;\n    this.isUploaded = false;\n    this.isSuccess = false;\n    this.isCancel = true;\n    this.isError = false;\n    this.progress = 0;\n    this.index = 0;\n    this.onCancel(response, status, headers);\n  }\n\n  public _onComplete(response: string, status: number, headers: ParsedResponseHeaders): void {\n    this.onComplete(response, status, headers);\n\n    if (this.uploader.options.removeAfterUpload) {\n      this.remove();\n    }\n  }\n\n  public _prepareToUploading(): void {\n    this.index = this.index || ++this.uploader._nextIndex;\n    this.isReady = true;\n  }\n}\n","import {EventEmitter} from '@angular/core';\nimport {FileLikeObject} from './file-like-object.class';\nimport {FileItem} from './file-item.class';\nimport {FileType} from './file-type.class';\n\nfunction isFile(value: any): boolean {\n    return (File && value instanceof File);\n}\n\nexport interface Headers {\n    name: string;\n    value: string;\n}\n\nexport type ParsedResponseHeaders = { [headerFieldName: string]: string };\n\nexport type FilterFunction = {\n    name: string,\n    fn: (item?: FileLikeObject, options?: FileUploaderOptions) => boolean\n};\n\nexport interface FileUploaderOptions {\n    allowedMimeType?: string[];\n    allowedFileType?: string[];\n    autoUpload?: boolean;\n    isHTML5?: boolean;\n    filters?: FilterFunction[];\n    headers?: Headers[];\n    method?: string;\n    authToken?: string;\n    maxFileSize?: number;\n    queueLimit?: number;\n    removeAfterUpload?: boolean;\n    url?: string;\n    disableMultipart?: boolean;\n    itemAlias?: string;\n    authTokenHeader?: string;\n    additionalParameter?: { [key: string]: any };\n    parametersBeforeFiles?: boolean;\n    formatDataFunction?: Function;\n    formatDataFunctionIsAsync?: boolean;\n}\n\nexport class FileUploader {\n\n    public authToken: string | undefined = '';\n    public isUploading: boolean = false;\n    public queue: FileItem[] = [];\n    public progress: number = 0;\n    public _nextIndex: number = 0;\n    public autoUpload: any;\n    public authTokenHeader: string = '';\n    public response: EventEmitter<any>;\n\n    public options: FileUploaderOptions = {\n        autoUpload: false,\n        isHTML5: true,\n        filters: [],\n        removeAfterUpload: false,\n        disableMultipart: false,\n        formatDataFunction: (item: FileItem) => item._file,\n        formatDataFunctionIsAsync: false\n    };\n\n    protected _failFilterIndex: number = -1;\n\n    public constructor(options: FileUploaderOptions) {\n        this.setOptions(options);\n        this.response = new EventEmitter<any>();\n    }\n\n    public setOptions(options: FileUploaderOptions): void {\n        this.options = Object.assign(this.options, options);\n\n        this.authToken = this.options.authToken;\n        this.authTokenHeader = this.options.authTokenHeader || 'Authorization';\n        this.autoUpload = this.options.autoUpload;\n        // @ts-ignore\n        this.options.filters.unshift({name: 'queueLimit', fn: this._queueLimitFilter});\n\n        if (this.options.maxFileSize) {\n            // @ts-ignore\n            this.options.filters.unshift({name: 'fileSize', fn: this._fileSizeFilter});\n        }\n\n        if (this.options.allowedFileType) {\n            // @ts-ignore\n            this.options.filters.unshift({name: 'fileType', fn: this._fileTypeFilter});\n        }\n\n        if (this.options.allowedMimeType) {\n            // @ts-ignore\n            this.options.filters.unshift({name: 'mimeType', fn: this._mimeTypeFilter});\n        }\n\n        for (let i = 0; i < this.queue.length; i++) {\n            this.queue[i].url = this.options.url;\n        }\n    }\n\n    public addToQueue(files: File[], options?: FileUploaderOptions, filters?: FilterFunction[] | string): void {\n        let list: File[] = [];\n        for (let file of files) {\n            list.push(file);\n        }\n        let arrayOfFilters: any = this._getFilters(filters);\n        let count = this.queue.length;\n        let addedFileItems: FileItem[] = [];\n        list.map((some: File) => {\n            if (!options) {\n                options = this.options;\n            }\n\n            let temp = new FileLikeObject(some);\n            if (this._isValidFile(temp, arrayOfFilters, options)) {\n                let fileItem = new FileItem(this, some, options);\n                addedFileItems.push(fileItem);\n                this.queue.push(fileItem);\n                this._onAfterAddingFile(fileItem);\n            } else {\n                let filter = arrayOfFilters[this._failFilterIndex];\n                this._onWhenAddingFileFailed(temp, filter, options);\n            }\n        });\n        if (this.queue.length !== count) {\n            this._onAfterAddingAll(addedFileItems);\n            this.progress = this._getTotalProgress();\n        }\n        this._render();\n        if (this.options.autoUpload) {\n            this.uploadAll();\n        }\n    }\n\n    public removeFromQueue(value: FileItem): void {\n        let index = this.getIndexOfItem(value);\n        let item = this.queue[index];\n        if (item.isUploading) {\n            item.cancel();\n        }\n        this.queue.splice(index, 1);\n        this.progress = this._getTotalProgress();\n    }\n\n    public clearQueue(): void {\n        while (this.queue.length) {\n            this.queue[0].remove();\n        }\n        this.progress = 0;\n    }\n\n    public uploadItem(value: FileItem): void {\n        let index = this.getIndexOfItem(value);\n        let item = this.queue[index];\n        let transport = this.options.isHTML5 ? '_xhrTransport' : '_iframeTransport';\n        item._prepareToUploading();\n        if (this.isUploading) {\n            return;\n        }\n        this.isUploading = true;\n        (this as any)[transport](item);\n    }\n\n    public cancelItem(value: FileItem): void {\n        let index = this.getIndexOfItem(value);\n        let item = this.queue[index];\n        let prop = this.options.isHTML5 ? item._xhr : item._form;\n        if (item && item.isUploading) {\n            prop.abort();\n        }\n    }\n\n    public uploadAll(): void {\n        let items = this.getNotUploadedItems().filter((item: FileItem) => !item.isUploading);\n        if (!items.length) {\n            return;\n        }\n        items.map((item: FileItem) => item._prepareToUploading());\n        items[0].upload();\n    }\n\n    public cancelAll(): void {\n        let items = this.getNotUploadedItems();\n        items.map((item: FileItem) => item.cancel());\n    }\n\n    public isFile(value: any): boolean {\n        return isFile(value);\n    }\n\n    public isFileLikeObject(value: any): boolean {\n        return value instanceof FileLikeObject;\n    }\n\n    public getIndexOfItem(value: any): number {\n        return typeof value === 'number' ? value : this.queue.indexOf(value);\n    }\n\n    public getNotUploadedItems(): any[] {\n        return this.queue.filter((item: FileItem) => !item.isUploaded);\n    }\n\n    public getReadyItems(): any[] {\n        return this.queue\n            .filter((item: FileItem) => (item.isReady && !item.isUploading))\n            .sort((item1: any, item2: any) => item1.index - item2.index);\n    }\n\n    public destroy(): void {\n        return void 0;\n    }\n\n    public onAfterAddingAll(fileItems: any): any {\n        return {fileItems};\n    }\n\n    public onBuildItemForm(fileItem: FileItem, form: any): any {\n        return {fileItem, form};\n    }\n\n    public onAfterAddingFile(fileItem: FileItem): any {\n        return {fileItem};\n    }\n\n    public onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): any {\n        return {item, filter, options};\n    }\n\n    public onBeforeUploadItem(fileItem: FileItem): any {\n        return {fileItem};\n    }\n\n    public onProgressItem(fileItem: FileItem, progress: any): any {\n        return {fileItem, progress};\n    }\n\n    public onProgressAll(progress: any): any {\n        return {progress};\n    }\n\n    public onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n        return {item, response, status, headers};\n    }\n\n    public onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n        return {item, response, status, headers};\n    }\n\n    public onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n        return {item, response, status, headers};\n    }\n\n    public onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any {\n        return {item, response, status, headers};\n    }\n\n    public onCompleteAll(): any {\n        return void 0;\n    }\n\n    public _mimeTypeFilter(item: FileLikeObject): boolean {\n        return !(this.options.allowedMimeType && this.options.allowedMimeType.indexOf(item.type) === -1);\n    }\n\n    public _fileSizeFilter(item: FileLikeObject): boolean {\n        return !(this.options.maxFileSize && item.size > this.options.maxFileSize);\n    }\n\n    public _fileTypeFilter(item: FileLikeObject): boolean {\n        return !(this.options.allowedFileType &&\n            this.options.allowedFileType.indexOf(FileType.getMimeClass(item)) === -1);\n    }\n\n    public _onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n        item._onError(response, status, headers);\n        this.onErrorItem(item, response, status, headers);\n    }\n\n    public _onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n        item._onComplete(response, status, headers);\n        this.onCompleteItem(item, response, status, headers);\n        let nextItem = this.getReadyItems()[0];\n        this.isUploading = false;\n        if (nextItem) {\n            nextItem.upload();\n            return;\n        }\n        this.onCompleteAll();\n        this.progress = this._getTotalProgress();\n        this._render();\n    }\n\n    protected _headersGetter(parsedHeaders: ParsedResponseHeaders): any {\n        return (name: any): any => {\n            if (name) {\n                return parsedHeaders[name.toLowerCase()] || void 0;\n            }\n            return parsedHeaders;\n        };\n    }\n\n    protected _xhrTransport(item: FileItem): any {\n        let that = this;\n        let xhr = item._xhr = new XMLHttpRequest();\n        let sendable: any;\n        this._onBeforeUploadItem(item);\n\n        if (typeof item._file.size !== 'number') {\n            throw new TypeError('The file specified is no longer valid');\n        }\n        if (!this.options.disableMultipart) {\n            sendable = new FormData();\n            this._onBuildItemForm(item, sendable);\n\n            const appendFile = () => sendable.append(item.alias, item._file, item.file.name);\n            if (!this.options.parametersBeforeFiles) {\n                appendFile();\n            }\n\n            // For AWS, Additional Parameters must come BEFORE Files\n            if (this.options.additionalParameter !== undefined) {\n                Object.keys(this.options.additionalParameter).forEach((key: string) => {\n                    // @ts-ignore\n                    let paramVal = this.options.additionalParameter[key];\n                    // Allow an additional parameter to include the filename\n                    if (typeof paramVal === 'string' && paramVal.indexOf('{{file_name}}') >= 0) {\n                        paramVal = paramVal.replace('{{file_name}}', item.file.name);\n                    }\n                    sendable.append(key, paramVal);\n                });\n            }\n\n            if (this.options.parametersBeforeFiles) {\n                appendFile();\n            }\n        } else {\n            // @ts-ignore\n            sendable = this.options.formatDataFunction(item);\n        }\n\n        xhr.upload.onprogress = (event: any) => {\n            let progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\n            this._onProgressItem(item, progress);\n        };\n        xhr.onload = () => {\n            let headers = this._parseHeaders(xhr.getAllResponseHeaders());\n            let response = this._transformResponse(xhr.response, headers);\n            let gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error';\n            let method = '_on' + gist + 'Item';\n            (this as any)[method](item, response, xhr.status, headers);\n            this._onCompleteItem(item, response, xhr.status, headers);\n        };\n        xhr.onerror = () => {\n            let headers = this._parseHeaders(xhr.getAllResponseHeaders());\n            let response = this._transformResponse(xhr.response, headers);\n            this._onErrorItem(item, response, xhr.status, headers);\n            this._onCompleteItem(item, response, xhr.status, headers);\n        };\n        xhr.onabort = () => {\n            let headers = this._parseHeaders(xhr.getAllResponseHeaders());\n            let response = this._transformResponse(xhr.response, headers);\n            this._onCancelItem(item, response, xhr.status, headers);\n            this._onCompleteItem(item, response, xhr.status, headers);\n        };\n        if (item.method != null && item.url) {\n            xhr.open(item.method, item.url, true);\n        }\n        xhr.withCredentials = item.withCredentials;\n        if (this.options.headers) {\n            for (let header of this.options.headers) {\n                xhr.setRequestHeader(header.name, header.value);\n            }\n        }\n        if (item.headers.length) {\n            for (let header of item.headers) {\n                xhr.setRequestHeader(header.name, header.value);\n            }\n        }\n        if (this.authToken) {\n            xhr.setRequestHeader(this.authTokenHeader, this.authToken);\n        }\n        xhr.onreadystatechange = function () {\n            if (xhr.readyState == XMLHttpRequest.DONE) {\n                that.response.emit(xhr.responseText)\n            }\n        }\n        if (this.options.formatDataFunctionIsAsync) {\n            sendable.then(\n                (result: any) => xhr.send(JSON.stringify(result))\n            );\n        } else {\n            xhr.send(sendable);\n        }\n        this._render();\n    }\n\n    protected _getTotalProgress(value: number = 0): number {\n        if (this.options.removeAfterUpload) {\n            return value;\n        }\n        let notUploaded = this.getNotUploadedItems().length;\n        let uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\n        let ratio = 100 / this.queue.length;\n        let current = value * ratio / 100;\n        return Math.round(uploaded * ratio + current);\n    }\n\n    protected _getFilters(filters: FilterFunction[] | string | undefined): FilterFunction[] | undefined {\n        if (!filters) {\n            return this.options.filters;\n        }\n        if (Array.isArray(filters)) {\n            return filters;\n        }\n        if (typeof filters === 'string') {\n            let names = filters.match(/[^\\s,]+/g);\n            // @ts-ignore\n            return this.options.filters\n                .filter((filter: any) => (names as Array<string>).indexOf(filter.name) !== -1);\n        }\n        return this.options.filters;\n    }\n\n    protected _render(): any {\n        return void 0;\n    }\n\n    protected _queueLimitFilter(): boolean {\n        return this.options.queueLimit === undefined || this.queue.length < this.options.queueLimit;\n    }\n\n    protected _isValidFile(file: FileLikeObject, filters: FilterFunction[], options: FileUploaderOptions): boolean {\n        this._failFilterIndex = -1;\n        return !filters.length ? true : filters.every((filter: FilterFunction) => {\n            this._failFilterIndex++;\n            return filter.fn.call(this, file, options);\n        });\n    }\n\n    protected _isSuccessCode(status: number): boolean {\n        return (status >= 200 && status < 300) || status === 304;\n    }\n\n    protected _transformResponse(response: string, headers: ParsedResponseHeaders): string {\n        return response;\n    }\n\n    protected _parseHeaders(headers: string): ParsedResponseHeaders {\n        let parsed: any = {};\n        let key: any;\n        let val: any;\n        let i: any;\n        if (!headers) {\n            return parsed;\n        }\n        headers.split('\\n').map((line: any) => {\n            i = line.indexOf(':');\n            key = line.slice(0, i).trim().toLowerCase();\n            val = line.slice(i + 1).trim();\n            if (key) {\n                parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n            }\n        });\n        return parsed;\n    }\n\n    protected _onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): void {\n        this.onWhenAddingFileFailed(item, filter, options);\n    }\n\n    protected _onAfterAddingFile(item: FileItem): void {\n        this.onAfterAddingFile(item);\n    }\n\n    protected _onAfterAddingAll(items: any): void {\n        this.onAfterAddingAll(items);\n    }\n\n    protected _onBeforeUploadItem(item: FileItem): void {\n        item._onBeforeUpload();\n        this.onBeforeUploadItem(item);\n    }\n\n    protected _onBuildItemForm(item: FileItem, form: any): void {\n        item._onBuildForm(form);\n        this.onBuildItemForm(item, form);\n    }\n\n    protected _onProgressItem(item: FileItem, progress: any): void {\n        let total = this._getTotalProgress(progress);\n        this.progress = total;\n        item._onProgress(progress);\n        this.onProgressItem(item, progress);\n        this.onProgressAll(total);\n        this._render();\n    }\n\n    protected _onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n        item._onSuccess(response, status, headers);\n        this.onSuccessItem(item, response, status, headers);\n    }\n\n    protected _onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): void {\n        item._onCancel(response, status, headers);\n        this.onCancelItem(item, response, status, headers);\n    }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\n\nimport {FileDropDirective} from './file-drop.directive';\nimport {FileSelectDirective} from './file-select.directive';\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [FileDropDirective, FileSelectDirective],\n    exports: [FileDropDirective, FileSelectDirective]\n})\nexport class FileUploadModule {\n}\n","import {Injectable} from '@angular/core';\nimport {OpenGraphData, OpenGraphImageInfo} from \"./model/OpenGraphData\";\nimport { HttpClientService } from 'inet-core';\n\ndeclare let iNet: any;\n\n@Injectable()\nexport class OpenGraphService {\n\n    private regex = /(https?:\\/\\/[^\\s]+)/;\n\n    constructor(private http: HttpClientService) {\n    }\n\n    loadPreviewLink(link: string, callback: Function) {\n        if (!link) {\n            callback(null, {\n                error: 'Link is empty'\n            });\n            return;\n        }\n        if (!this.isLink(link)) {\n            callback(null, {\n                error: 'Link invalid'\n            });\n            return;\n        }\n\n        this.http.postJSON(iNet.getUrl('opengraph/fetch'), { url: link }).subscribe({\n            next: (data: any) => {\n                callback(this.convertOpenData(data, link));\n            },\n            error: (err) => {\n                callback(null, {\n                    error: 'Response error'\n                });\n            }\n        });\n    }\n\n    isLink(link: string): boolean {\n        return this.regex.test(link);\n    }\n\n    loadImageInfo(src: string, callback: Function) {\n        let img = new Image();\n        img.onload = img.onerror = function () {\n            let imageInfo: OpenGraphImageInfo = {\n                width: img.width,\n                height: img.height\n            };\n            if (imageInfo.width && imageInfo.height) {\n                imageInfo.available = true;\n                imageInfo.landscape = imageInfo.width / imageInfo.height > 1.1;\n            }\n            callback(imageInfo);\n        };\n        img.src = src;\n    }\n\n    private convertOpenData(properties: any[], url: string): OpenGraphData | null {\n        if (properties.length < 1) {\n            return null;\n        }\n        let openData = <OpenGraphData>{};\n\n        properties.forEach((item: any) => {\n            // @ts-ignore\n          openData[item.property] = item.content;\n        });\n\n        if (!openData.url) {\n            openData.url = url;\n        }\n\n        return openData;\n    }\n}\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {OpenGraphService} from \"../open-graph.service\";\nimport {OpenGraphData, OpenGraphImageInfo} from \"../model/OpenGraphData\";\n\n@Component({\n    selector: 'app-link-preview',\n    templateUrl: './link-preview.component.html',\n    styleUrls: ['./link-preview.component.scss']\n})\nexport class LinkPreviewComponent implements OnInit {\n    @Input() link?: string | undefined;\n    @Input() openGraphData?: OpenGraphData;\n    @Input() removable: boolean = true;\n    @Output() onLoad = new EventEmitter();\n    @Output() onDelete = new EventEmitter();\n\n    _hidden: boolean = false;\n\n    constructor(\n        private openGraphService: OpenGraphService\n    ) {\n    }\n\n    ngOnInit() {\n        if (this.link && this.openGraphService.isLink(this.link)) {\n            this.loadPreview();\n        } else if (this.openGraphData) {\n            this.loadImageInfo();\n        } else {\n            this.setHidden(true);\n        }\n    }\n\n    isPreview(): boolean {\n        return !this.isHidden() && (!!this.link || !!this.openGraphData);\n    }\n\n    setData(data: OpenGraphData) {\n        if (!data || !data.title) {\n            return;\n        }\n        this.openGraphData = data;\n        this.loadImageInfo();\n        this.setHidden(false);\n    }\n\n    getData() {\n        return this.openGraphData;\n    }\n\n    setLink(link: string) {\n        if (this.link === link) {\n            return;\n        }\n        this.link = link;\n        this.loadPreview();\n    }\n\n    removePreView() {\n        this.onDelete.emit(this);\n        this.clearData();\n    }\n\n    getDomain(url?: string): string {\n        if (!url) {\n            return '';\n        }\n        let domain = url.split('/')[2] || '';\n        return domain.replace('www.', '');\n    }\n\n    clearData() {\n        this.link = undefined;\n        this.openGraphData = undefined;\n        this.setHidden(true);\n    }\n\n    private loadPreview() {\n        this.setHidden(false);\n        if (this.link && this.openGraphService.isLink(this.link)) {\n            this.openGraphService.loadPreviewLink(this.link, (data: OpenGraphData) => {\n                if (data) {\n                    this.setData(data);\n                } else {\n                    this.setHidden(true);\n                }\n            });\n        } else {\n            this.setHidden(true);\n        }\n    }\n\n    private loadImageInfo() {\n        if (this.openGraphData && this.openGraphData.image) {\n            this.openGraphService.loadImageInfo(this.openGraphData.image, (imageInfo: OpenGraphImageInfo) => {\n                if (this.openGraphData) {\n                    this.openGraphData.imageInfo = imageInfo;\n                }\n            });\n        }\n    }\n\n    private setHidden(hidden: boolean) {\n        this._hidden = hidden;\n    }\n\n    private isHidden() {\n        return this._hidden;\n    }\n}\n","<div *ngIf=\"!_hidden\" class=\"link-preview\">\n    <div *ngIf=\"!openGraphData; else preview\">\n        <i class=\"fa fa-spinner fa-spin link-preview-spinner\"></i>\n        <div class=\"link-preview-content\">Đang tải chế độ xem trước...</div>\n    </div>\n    <ng-template #preview>\n        <div *ngIf=\"openGraphData?.imageInfo?.available\"\n             [ngClass]=\"openGraphData?.imageInfo?.landscape ? 'landscape' : 'portrait'\"\n             class=\"link-preview-image\">\n            <img [src]=\"openGraphData?.image\">\n        </div>\n        <div class=\"link-preview-content\">\n            <div class=\"link-preview-title\">{{openGraphData?.title}}</div>\n            <div class=\"link-preview-text\">{{openGraphData?.description}}</div>\n            <div class=\"link-preview-url\">{{getDomain(openGraphData?.url)}}</div>\n        </div>\n        <a [href]=\"openGraphData?.url\" target=\"_blank\" rel=\"noopener nofollow\" class=\"link-preview-anchor\"></a>\n    </ng-template>\n    <i *ngIf=\"removable\" (click)=\"removePreView()\" class=\"fa fa-times link-preview-remove\"></i>\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {OpenGraphService} from \"./open-graph.service\";\nimport {LinkPreviewComponent} from \"./link-preview/link-preview.component\";\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    exports: [\n        LinkPreviewComponent\n    ],\n    declarations: [\n        LinkPreviewComponent\n    ],\n    providers: [\n        OpenGraphService\n    ]\n})\nexport class OpenGraphModule {\n}\n","export class ImageUtils {\n    static getOrientation(imageBase64: string): number {\n        const view = new DataView(this.base64ToArrayBuffer(imageBase64));\n        if (view.getUint16(0, false) != 0xFFD8) {\n            return -2;\n        }\n        const length = view.byteLength;\n        let offset = 2;\n        while (offset < length) {\n            if (view.getUint16(offset + 2, false) <= 8) return -1;\n            const marker = view.getUint16(offset, false);\n            offset += 2;\n            if (marker == 0xFFE1) {\n                if (view.getUint32(offset += 2, false) != 0x45786966) {\n                    return -1;\n                }\n\n                const little = view.getUint16(offset += 6, false) == 0x4949;\n                offset += view.getUint32(offset + 4, little);\n                const tags = view.getUint16(offset, little);\n                offset += 2;\n                for (let i = 0; i < tags; i++) {\n                    if (view.getUint16(offset + (i * 12), little) == 0x0112) {\n                        return view.getUint16(offset + (i * 12) + 8, little);\n                    }\n                }\n            } else if ((marker & 0xFF00) != 0xFF00) {\n                break;\n            } else {\n                offset += view.getUint16(offset, false);\n            }\n        }\n        return -1;\n    }\n\n    private static base64ToArrayBuffer(imageBase64: string) {\n        imageBase64 = imageBase64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n        const binaryString = atob(imageBase64);\n        const len = binaryString.length;\n        const bytes = new Uint8Array(len);\n        for (let i = 0; i < len; i++) {\n            bytes[i] = binaryString.charCodeAt(i);\n        }\n        return bytes.buffer;\n    }\n\n    static resetOrientation(srcBase64: string, srcOrientation: number, callback: Function) {\n        const img = new Image();\n        img.onload = function () {\n            const width = img.width;\n            const height = img.height;\n            const canvas = document.createElement('canvas');\n            const ctx = canvas.getContext('2d');\n\n            if (ctx) {\n                if (4 < srcOrientation && srcOrientation < 9) {\n                    canvas.width = height;\n                    canvas.height = width;\n                } else {\n                    canvas.width = width;\n                    canvas.height = height;\n                }\n                ImageUtils.transformCanvas(ctx, srcOrientation, width, height);\n                ctx.drawImage(img, 0, 0);\n                callback(canvas.toDataURL());\n            } else {\n                callback(srcBase64);\n            }\n        };\n        img.src = srcBase64;\n    }\n\n    private static transformCanvas(ctx: any, orientation: number, width: number, height: number) {\n        switch (orientation) {\n            case 2:\n                ctx.transform(-1, 0, 0, 1, width, 0);\n                break;\n            case 3:\n                ctx.transform(-1, 0, 0, -1, width, height);\n                break;\n            case 4:\n                ctx.transform(1, 0, 0, -1, 0, height);\n                break;\n            case 5:\n                ctx.transform(0, 1, 1, 0, 0, 0);\n                break;\n            case 6:\n                ctx.transform(0, 1, -1, 0, height, 0);\n                break;\n            case 7:\n                ctx.transform(0, -1, -1, 0, height, width);\n                break;\n            case 8:\n                ctx.transform(0, -1, 1, 0, 0, width);\n                break;\n            default:\n                break;\n        }\n    }\n\n    /**\n    * Converts data uri to Blob. Necessary for uploading.\n    */\n    /*\n    public static convertDataURItoBlob(dataURI: string): Blob {\n        const binary = atob(dataURI.split(',')[1]);\n        const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n        const array = [];\n        for (let i = 0; i < binary.length; i++) {\n            array.push(binary.charCodeAt(i));\n        }\n        return new Blob([new Uint8Array(array)], {type: mimeString});\n    };\n    */\n}\n","import {\n    Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges,\n    ChangeDetectorRef, ChangeDetectionStrategy, NgZone\n} from '@angular/core';\nimport {DomSanitizer, SafeUrl, SafeStyle} from '@angular/platform-browser';\nimport {ImageUtils} from './image.utils';\n\ninterface MoveStart {\n    active: boolean;\n    type: string | null;\n    position: string | null;\n    x1: number;\n    y1: number;\n    x2: number;\n    y2: number;\n    clientX: number;\n    clientY: number;\n}\n\ninterface Dimensions {\n    width: number;\n    height: number;\n}\n\nexport interface CropperPosition {\n    x1: number;\n    y1: number;\n    x2: number;\n    y2: number;\n}\n\nexport interface ImageCroppedEvent {\n    base64?: string | null;\n    file?: Blob | null;\n    width: number;\n    height: number;\n    cropperPosition: CropperPosition;\n}\n\n@Component({\n    selector: 'image-cropper',\n    templateUrl: './image-cropper.component.html',\n    styleUrls: ['./image-cropper.component.css'],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageCropperComponent implements OnChanges {\n    private originalImage: any;\n    private moveStart?: MoveStart;\n    private maxSize?: Dimensions;\n    private originalSize?: Dimensions;\n\n    safeImgDataUrl?: SafeUrl | string;\n    marginLeft: SafeStyle | string = '0px';\n    imageVisible = false;\n\n    @Input()\n    set imageFileChanged(file: File) {\n        this.initCropper();\n        if (file) {\n            this.loadImageFile(file);\n        }\n    }\n\n    @Input()\n    set imageChangedEvent(event: any) {\n        this.initCropper();\n        if (event && event.target && event.target.files && event.target.files.length > 0) {\n            this.loadImageFile(event.target.files[0]);\n        }\n    }\n\n    @Input()\n    set imageBase64(imageBase64: string) {\n        this.initCropper();\n        this.loadBase64Image(imageBase64);\n    }\n\n    @Input() format: 'png' | 'jpeg' | 'bmp' | 'webp' | 'ico' = 'png';\n    @Input() outputType: 'base64' | 'file' | 'both' = 'both';\n    @Input() maintainAspectRatio = true;\n    @Input() aspectRatio = 1;\n    @Input() resizeToWidth = 0;\n    @Input() roundCropper = false;\n    @Input() onlyScaleDown = false;\n    @Input() imageQuality = 92;\n    @Input() autoCrop = true;\n    @Input() cropper: CropperPosition = {\n        x1: -100,\n        y1: -100,\n        x2: 10000,\n        y2: 10000\n    };\n\n    @Output() imageCropped = new EventEmitter<ImageCroppedEvent>();\n    @Output() imageCroppedBase64 = new EventEmitter<string>();\n    @Output() imageCroppedFile = new EventEmitter<Blob>();\n    @Output() imageLoaded = new EventEmitter<void>();\n    @Output() loadImageFailed = new EventEmitter<void>();\n\n    constructor(private elementRef: ElementRef,\n                private sanitizer: DomSanitizer,\n                private cd: ChangeDetectorRef,\n                private zone: NgZone) {\n        this.initCropper();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['cropper']) {\n            setTimeout(() => {\n                this.setMaxSize();\n                this.checkCropperPosition(false);\n                this.doAutoCrop();\n                this.cd.markForCheck();\n            });\n        }\n        if (changes['aspectRatio']) {\n            this.resetCropperPosition();\n        }\n    }\n\n    private initCropper() {\n        this.imageVisible = false;\n        this.originalImage = null;\n        this.safeImgDataUrl = 'data:image/png;base64,iVBORw0KGg'\n            + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU'\n            + 'AAarVyFEAAAAASUVORK5CYII=';\n        this.moveStart = {\n            active: false,\n            type: null,\n            position: null,\n            x1: 0,\n            y1: 0,\n            x2: 0,\n            y2: 0,\n            clientX: 0,\n            clientY: 0\n        };\n        this.maxSize = {\n            width: 0,\n            height: 0\n        };\n        this.originalSize = {\n            width: 0,\n            height: 0\n        };\n        this.cropper.x1 = -100;\n        this.cropper.y1 = -100;\n        this.cropper.x2 = 10000;\n        this.cropper.y2 = 10000;\n    }\n\n    private loadImageFile(file: File) {\n        const fileReader = new FileReader();\n        fileReader.onload = (event: any) => {\n            const imageType = file.type;\n            if (this.isValidImageType(imageType)) {\n                try {\n                    this.checkExifRotationAndLoadImage(event.target.result);\n                } catch (e) {\n                    this.loadImageFailed.emit();\n                }\n            } else {\n                this.loadImageFailed.emit();\n            }\n        };\n        fileReader.readAsDataURL(file);\n    }\n\n    private isValidImageType(type: string) {\n        return type === 'image/jpeg'\n            || type === 'image/jpg'\n            || type === 'image/png'\n            || type === 'image/gif'\n    }\n\n    private checkExifRotationAndLoadImage(imageBase64: string) {\n        const exifRotation = ImageUtils.getOrientation(imageBase64);\n        if (exifRotation > 1) {\n            ImageUtils.resetOrientation(\n                imageBase64,\n                exifRotation,\n                (rotatedBase64: string) => this.loadBase64Image(rotatedBase64)\n            );\n        } else {\n            this.loadBase64Image(imageBase64);\n        }\n    }\n\n    private loadBase64Image(imageBase64: string) {\n        this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(imageBase64);\n        this.originalImage = new Image();\n        this.originalImage.onload = () => {\n            if(this.originalSize) {\n                this.originalSize.width = this.originalImage.width;\n                this.originalSize.height = this.originalImage.height;\n            }\n            this.cd.markForCheck();\n        };\n        this.originalImage.src = imageBase64;\n    }\n\n    imageLoadedInView(): void {\n        if (this.originalImage != null) {\n            this.imageLoaded.emit();\n            setTimeout(() => {\n                this.setMaxSize();\n                this.resetCropperPosition();\n                this.cd.markForCheck();\n            });\n        }\n    }\n\n    @HostListener('window:resize', ['$event'])\n    onResize(event: Event) {\n        this.resizeCropperPosition();\n        this.setMaxSize();\n    }\n\n    private resizeCropperPosition() {\n        const displayedImage = this.elementRef.nativeElement.querySelector('.source-image');\n        if(this.maxSize) {\n            if (this.maxSize.width !== displayedImage.offsetWidth || this.maxSize.height !== displayedImage.offsetHeight) {\n                this.cropper.x1 = this.cropper.x1 * displayedImage.offsetWidth / this.maxSize.width;\n                this.cropper.x2 = this.cropper.x2 * displayedImage.offsetWidth / this.maxSize.width;\n                this.cropper.y1 = this.cropper.y1 * displayedImage.offsetHeight / this.maxSize.height;\n                this.cropper.y2 = this.cropper.y2 * displayedImage.offsetHeight / this.maxSize.height;\n            }\n        }\n    }\n\n    private resetCropperPosition() {\n        const displayedImage = this.elementRef.nativeElement.querySelector('.source-image');\n        if (displayedImage.offsetWidth / this.aspectRatio < displayedImage.offsetHeight) {\n            this.cropper.x1 = 0;\n            this.cropper.x2 = displayedImage.offsetWidth;\n            const cropperHeight = displayedImage.offsetWidth / this.aspectRatio;\n            this.cropper.y1 = (displayedImage.offsetHeight - cropperHeight) / 2;\n            this.cropper.y2 = this.cropper.y1 + cropperHeight;\n        } else {\n            this.cropper.y1 = 0;\n            this.cropper.y2 = displayedImage.offsetHeight;\n            const cropperWidth = displayedImage.offsetHeight * this.aspectRatio;\n            this.cropper.x1 = (displayedImage.offsetWidth - cropperWidth) / 2;\n            this.cropper.x2 = this.cropper.x1 + cropperWidth;\n        }\n        this.doAutoCrop();\n        this.imageVisible = true;\n    }\n\n    startMove(event: any, moveType: string, position: string | null = null) {\n        this.moveStart = Object.assign({\n            active: true,\n            type: moveType,\n            position: position,\n            clientX: this.getClientX(event),\n            clientY: this.getClientY(event)\n        }, this.cropper);\n    }\n\n    @HostListener('document:mousemove', ['$event'])\n    @HostListener('document:touchmove', ['$event'])\n    moveImg(event: any) {\n        if(this.moveStart) {\n            if (this.moveStart.active) {\n                event.stopPropagation();\n                event.preventDefault();\n                this.setMaxSize();\n                if (this.moveStart.type === 'move') {\n                    this.move(event);\n                    this.checkCropperPosition(true);\n                } else if (this.moveStart.type === 'resize') {\n                    this.resize(event);\n                    this.checkCropperPosition(false);\n                }\n                this.cd.detectChanges();\n            }\n        }\n    }\n\n    private setMaxSize() {\n        const el = this.elementRef.nativeElement.querySelector('.source-image');\n        if(this.maxSize) {\n            this.maxSize.width = el.offsetWidth;\n            this.maxSize.height = el.offsetHeight;\n            this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\n        }\n    }\n\n    private checkCropperPosition(maintainSize = false) {\n        if (this.cropper.x1 < 0) {\n            this.cropper.x2 -= maintainSize ? this.cropper.x1 : 0;\n            this.cropper.x1 = 0;\n        }\n        if (this.cropper.y1 < 0) {\n            this.cropper.y2 -= maintainSize ? this.cropper.y1 : 0;\n            this.cropper.y1 = 0;\n        }\n        if(this.maxSize) {\n            if (this.cropper.x2 > this.maxSize.width) {\n                this.cropper.x1 -= maintainSize ? (this.cropper.x2 - this.maxSize.width) : 0;\n                this.cropper.x2 = this.maxSize.width;\n            }\n            if (this.cropper.y2 > this.maxSize.height) {\n                this.cropper.y1 -= maintainSize ? (this.cropper.y2 - this.maxSize.height) : 0;\n                this.cropper.y2 = this.maxSize.height;\n            }\n        }\n    }\n\n    @HostListener('document:mouseup', ['$event'])\n    @HostListener('document:touchend', ['$event'])\n    moveStop(event: any) {\n        if (this.moveStart && this.moveStart.active) {\n            this.moveStart.active = false;\n            this.doAutoCrop();\n        }\n    }\n\n    private move(event: any) {\n        if(this.moveStart) {\n            const diffX = this.getClientX(event) - this.moveStart.clientX;\n            const diffY = this.getClientY(event) - this.moveStart.clientY;\n            this.cropper.x1 = this.moveStart.x1 + diffX;\n            this.cropper.y1 = this.moveStart.y1 + diffY;\n            this.cropper.x2 = this.moveStart.x2 + diffX;\n            this.cropper.y2 = this.moveStart.y2 + diffY;\n        }\n    }\n\n    private resize(event: any) {\n        if(this.moveStart) {\n            const diffX = this.getClientX(event) - this.moveStart.clientX;\n            const diffY = this.getClientY(event) - this.moveStart.clientY;\n            switch (this.moveStart.position) {\n                case 'left':\n                    this.cropper.x1 = Math.min(this.moveStart.x1 + diffX, this.cropper.x2 - 20);\n                    break;\n                case 'topleft':\n                    this.cropper.x1 = Math.min(this.moveStart.x1 + diffX, this.cropper.x2 - 20);\n                    this.cropper.y1 = Math.min(this.moveStart.y1 + diffY, this.cropper.y2 - 20);\n                    break;\n                case 'top':\n                    this.cropper.y1 = Math.min(this.moveStart.y1 + diffY, this.cropper.y2 - 20);\n                    break;\n                case 'topright':\n                    this.cropper.x2 = Math.max(this.moveStart.x2 + diffX, this.cropper.x1 + 20);\n                    this.cropper.y1 = Math.min(this.moveStart.y1 + diffY, this.cropper.y2 - 20);\n                    break;\n                case 'right':\n                    this.cropper.x2 = Math.max(this.moveStart.x2 + diffX, this.cropper.x1 + 20);\n                    break;\n                case 'bottomright':\n                    this.cropper.x2 = Math.max(this.moveStart.x2 + diffX, this.cropper.x1 + 20);\n                    this.cropper.y2 = Math.max(this.moveStart.y2 + diffY, this.cropper.y1 + 20);\n                    break;\n                case 'bottom':\n                    this.cropper.y2 = Math.max(this.moveStart.y2 + diffY, this.cropper.y1 + 20);\n                    break;\n                case 'bottomleft':\n                    this.cropper.x1 = Math.min(this.moveStart.x1 + diffX, this.cropper.x2 - 20);\n                    this.cropper.y2 = Math.max(this.moveStart.y2 + diffY, this.cropper.y1 + 20);\n                    break;\n            }\n        }\n\n        if (this.maintainAspectRatio) {\n            this.checkAspectRatio();\n        }\n    }\n\n    private checkAspectRatio() {\n        if(this.moveStart && this.maxSize) {\n            let overflowX = 0;\n            let overflowY = 0;\n            switch (this.moveStart.position) {\n                case 'top':\n                    this.cropper.x2 = this.cropper.x1 + (this.cropper.y2 - this.cropper.y1) * this.aspectRatio;\n                    overflowX = Math.max(this.cropper.x2 - this.maxSize.width, 0);\n                    overflowY = Math.max(0 - this.cropper.y1, 0);\n                    if (overflowX > 0 || overflowY > 0) {\n                        this.cropper.x2 -= (overflowY * this.aspectRatio) > overflowX ? (overflowY * this.aspectRatio) : overflowX;\n                        this.cropper.y1 += (overflowY * this.aspectRatio) > overflowX ? overflowY : overflowX / this.aspectRatio;\n                    }\n                    break;\n                case 'bottom':\n                    this.cropper.x2 = this.cropper.x1 + (this.cropper.y2 - this.cropper.y1) * this.aspectRatio;\n                    overflowX = Math.max(this.cropper.x2 - this.maxSize.width, 0);\n                    overflowY = Math.max(this.cropper.y2 - this.maxSize.height, 0);\n                    if (overflowX > 0 || overflowY > 0) {\n                        this.cropper.x2 -= (overflowY * this.aspectRatio) > overflowX ? (overflowY * this.aspectRatio) : overflowX;\n                        this.cropper.y2 -= (overflowY * this.aspectRatio) > overflowX ? overflowY : (overflowX / this.aspectRatio);\n                    }\n                    break;\n                case 'topleft':\n                    this.cropper.y1 = this.cropper.y2 - (this.cropper.x2 - this.cropper.x1) / this.aspectRatio;\n                    overflowX = Math.max(0 - this.cropper.x1, 0);\n                    overflowY = Math.max(0 - this.cropper.y1, 0);\n                    if (overflowX > 0 || overflowY > 0) {\n                        this.cropper.x1 += (overflowY * this.aspectRatio) > overflowX ? (overflowY * this.aspectRatio) : overflowX;\n                        this.cropper.y1 += (overflowY * this.aspectRatio) > overflowX ? overflowY : overflowX / this.aspectRatio;\n                    }\n                    break;\n                case 'topright':\n                    this.cropper.y1 = this.cropper.y2 - (this.cropper.x2 - this.cropper.x1) / this.aspectRatio;\n                    overflowX = Math.max(this.cropper.x2 - this.maxSize.width, 0);\n                    overflowY = Math.max(0 - this.cropper.y1, 0);\n                    if (overflowX > 0 || overflowY > 0) {\n                        this.cropper.x2 -= (overflowY * this.aspectRatio) > overflowX ? (overflowY * this.aspectRatio) : overflowX;\n                        this.cropper.y1 += (overflowY * this.aspectRatio) > overflowX ? overflowY : overflowX / this.aspectRatio;\n                    }\n                    break;\n                case 'right':\n                case 'bottomright':\n                    this.cropper.y2 = this.cropper.y1 + (this.cropper.x2 - this.cropper.x1) / this.aspectRatio;\n                    overflowX = Math.max(this.cropper.x2 - this.maxSize.width, 0);\n                    overflowY = Math.max(this.cropper.y2 - this.maxSize.height, 0);\n                    if (overflowX > 0 || overflowY > 0) {\n                        this.cropper.x2 -= (overflowY * this.aspectRatio) > overflowX ? (overflowY * this.aspectRatio) : overflowX;\n                        this.cropper.y2 -= (overflowY * this.aspectRatio) > overflowX ? overflowY : overflowX / this.aspectRatio;\n                    }\n                    break;\n                case 'left':\n                case 'bottomleft':\n                    this.cropper.y2 = this.cropper.y1 + (this.cropper.x2 - this.cropper.x1) / this.aspectRatio;\n                    overflowX = Math.max(0 - this.cropper.x1, 0);\n                    overflowY = Math.max(this.cropper.y2 - this.maxSize.height, 0);\n                    if (overflowX > 0 || overflowY > 0) {\n                        this.cropper.x1 += (overflowY * this.aspectRatio) > overflowX ? (overflowY * this.aspectRatio) : overflowX;\n                        this.cropper.y2 -= (overflowY * this.aspectRatio) > overflowX ? overflowY : overflowX / this.aspectRatio;\n                    }\n                    break;\n            }\n        }\n    }\n\n    private doAutoCrop() {\n        if (this.autoCrop) {\n            this.crop();\n        }\n    }\n\n    crop() {\n        const displayedImage = this.elementRef.nativeElement.querySelector('.source-image');\n        if (displayedImage && this.originalImage != null &&  this.originalSize) {\n            const ratio = this.originalSize.width / displayedImage.offsetWidth;\n            const left = Math.round(this.cropper.x1 * ratio);\n            const top = Math.round(this.cropper.y1 * ratio);\n            const width = Math.round((this.cropper.x2 - this.cropper.x1) * ratio);\n            const height = Math.round((this.cropper.y2 - this.cropper.y1) * ratio);\n            const resizeRatio = this.getResizeRatio(width);\n            const resizedWidth = Math.floor(width * resizeRatio);\n            const resizedHeight = Math.floor(height * resizeRatio);\n\n            const cropCanvas = document.createElement('canvas') as HTMLCanvasElement;\n            cropCanvas.width = resizedWidth;\n            cropCanvas.height = resizedHeight;\n\n            const ctx = cropCanvas.getContext('2d');\n            if (ctx) {\n                ctx.drawImage(this.originalImage, left, top, width, height, 0, 0, width * resizeRatio, height * resizeRatio);\n                this.cropToOutputType(cropCanvas, resizedWidth, resizedHeight);\n            }\n        }\n    }\n\n    private cropToOutputType(cropCanvas: HTMLCanvasElement, resizedWidth: number, resizedHeight: number) {\n        const output: ImageCroppedEvent = {\n            width: resizedWidth,\n            height: resizedHeight,\n            cropperPosition: Object.assign({}, this.cropper)\n        };\n        switch (this.outputType) {\n            case 'base64':\n                output.base64 = this.cropToBase64(cropCanvas);\n                this.imageCropped.emit(output);\n                break;\n            case 'file':\n                this.cropToFile(cropCanvas)\n                    .then((result: Blob | null) => {\n                        output.file = result;\n                        this.imageCropped.emit(output);\n                    });\n                break;\n            case 'both':\n                output.base64 = this.cropToBase64(cropCanvas);\n                this.cropToFile(cropCanvas)\n                    .then((result: Blob | null) => {\n                        output.file = result;\n                        this.imageCropped.emit(output);\n                    });\n                break;\n        }\n    }\n\n    private cropToBase64(cropCanvas: HTMLCanvasElement): string {\n        const imageBase64 = cropCanvas.toDataURL('image/' + this.format, this.getQuality());\n        this.imageCroppedBase64.emit(imageBase64);\n        return imageBase64;\n    }\n\n    private cropToFile(cropCanvas: HTMLCanvasElement): Promise<Blob | null> {\n        return this.getCanvasBlob(cropCanvas)\n            .then((result: Blob | null) => {\n                if (result) {\n                    this.imageCroppedFile.emit(result);\n                }\n                return result;\n            });\n    }\n\n    private getCanvasBlob(cropCanvas: HTMLCanvasElement): Promise<Blob | null> {\n        return new Promise((resolve) => {\n            cropCanvas.toBlob(\n                (result: Blob | null) => this.zone.run(() => resolve(result)),\n                'image/' + this.format,\n                this.getQuality()\n            );\n        });\n    }\n\n    private getQuality(): number {\n        return Math.min(1, Math.max(0, this.imageQuality / 100));\n    }\n\n    private getResizeRatio(width: number): number {\n        return this.resizeToWidth > 0 && (!this.onlyScaleDown || width > this.resizeToWidth)\n            ? this.resizeToWidth / width\n            : 1;\n    }\n\n    private getClientX(event: any) {\n        return event.clientX != null ? event.clientX : event.touches[0].clientX;\n    }\n\n    private getClientY(event: any) {\n        return event.clientY != null ? event.clientY : event.touches[0].clientY;\n    }\n}\n","<div>\n    <img\n        [src]=\"safeImgDataUrl\"\n        [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n        (load)=\"imageLoadedInView()\"\n        class=\"source-image\"\n    />\n    <div class=\"cropper\"\n         [class.rounded]=\"roundCropper\"\n         [style.top.px]=\"cropper.y1\"\n         [style.left.px]=\"cropper.x1\"\n         [style.width.px]=\"cropper.x2 - cropper.x1\"\n         [style.height.px]=\"cropper.y2 - cropper.y1\"\n         [style.margin-left]=\"marginLeft\"\n         [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n    >\n        <div\n            (mousedown)=\"startMove($event, 'move')\"\n            (touchstart)=\"startMove($event, 'move')\"\n            class=\"move\"\n        >&nbsp;</div>\n        <span\n            class=\"resize topleft\"\n            (mousedown)=\"startMove($event, 'resize', 'topleft')\"\n            (touchstart)=\"startMove($event, 'resize', 'topleft')\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize top\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize topright\"\n            (mousedown)=\"startMove($event, 'resize', 'topright')\"\n            (touchstart)=\"startMove($event, 'resize', 'topright')\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize right\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize bottomright\"\n            (mousedown)=\"startMove($event, 'resize', 'bottomright')\"\n            (touchstart)=\"startMove($event, 'resize', 'bottomright')\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize bottom\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize bottomleft\"\n            (mousedown)=\"startMove($event, 'resize', 'bottomleft')\"\n            (touchstart)=\"startMove($event, 'resize', 'bottomleft')\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize left\"\n        ><span class=\"square\"></span></span>\n        <span\n            class=\"resize-bar top\"\n            (mousedown)=\"startMove($event, 'resize', 'top')\"\n            (touchstart)=\"startMove($event, 'resize', 'top')\"\n        ></span>\n        <span\n            class=\"resize-bar right\"\n            (mousedown)=\"startMove($event, 'resize', 'right')\"\n            (touchstart)=\"startMove($event, 'resize', 'right')\"\n        ></span>\n        <span\n            class=\"resize-bar bottom\"\n            (mousedown)=\"startMove($event, 'resize', 'bottom')\"\n            (touchstart)=\"startMove($event, 'resize', 'bottom')\"\n        ></span>\n        <span\n            class=\"resize-bar left\"\n            (mousedown)=\"startMove($event, 'resize', 'left')\"\n            (touchstart)=\"startMove($event, 'resize', 'left')\"\n        ></span>\n    </div>\n</div>\n","import {Component, EventEmitter, OnInit, Output, TemplateRef, ViewChild} from '@angular/core';\nimport {BsModalService} from 'ngx-bootstrap/modal';\nimport {BsModalRef} from 'ngx-bootstrap/modal/bs-modal-ref.service';\nimport {ImageCroppedEvent} from \"../image-cropper.component\";\n@Component({\n    selector: 'app-cropper-avatar-dialog',\n    templateUrl: './cropper-avatar-dialog.component.html'\n})\nexport class CropperAvatarDialogComponent implements OnInit {\n\n    @ViewChild('cropperAvatarModal') cropperModal?: TemplateRef<any>;\n\n    private modalRef?: BsModalRef;\n\n    cropperReady = false;\n    imageChangedEvent: any;\n    imageCroppedEvent?: ImageCroppedEvent;\n    @Output() onCropped = new EventEmitter();\n    @Output() onHide = new EventEmitter();\n    @Output() onSelectFile = new EventEmitter();\n    private isModalShown = false;\n    constructor(private modalService: BsModalService) {}\n\n    ngOnInit() {\n        this.modalService.onShow.subscribe(() => {\n            this.isModalShown = true;\n        });\n\n        this.modalService.onHide.subscribe(() => {\n            this.isModalShown = false;\n        });\n    }\n\n    imageCropped(event: ImageCroppedEvent) {\n        this.imageCroppedEvent = event;\n    }\n\n    imageLoaded() {\n        this.cropperReady = true;\n    }\n\n    loadImageFailed() {\n        //console.log('Load failed');\n    }\n\n    setImageChangedEvent($event: any) {\n        this.imageChangedEvent = $event;\n    }\n\n    hide() {\n        if( this.modalRef) {\n            this.modalRef.hide();\n        }\n        this.setImageChangedEvent({});\n        if(this.imageCroppedEvent) {\n            this.onHide.emit(this.imageCroppedEvent.base64);\n        }\n    }\n\n    show($event: any) {\n        this.setImageChangedEvent($event);\n        if(!this.isModalShown && this.cropperModal) {\n            this.modalRef = this.modalService.show(this.cropperModal);\n        }\n    }\n\n    select($event: any) {\n        this.onSelectFile.emit($event);\n    }\n\n    submit() {\n        if(this.imageCroppedEvent) {\n            this.onCropped.emit(this.imageCroppedEvent.base64);\n        }\n        this.hide();\n    }\n\n    getImageBlob(): Blob | null | undefined {\n        return this.imageCroppedEvent ? this.imageCroppedEvent.file : null;\n    }\n\n}\n\n","<ng-template #cropperAvatarModal>\n    <div class=\"modal-header\">\n        <h5 class=\"modal-title pull-left\"><i class=\"fa fa-crop\"></i> {{'COMMON.MODULE.CROPPER.TITLE' | translate }}</h5>\n        <button type=\"button\" class=\"close pull-right\" (click)=\"hide()\">\n            <span aria-hidden=\"true\">&times;</span>\n        </button>\n    </div>\n    <div class=\"modal-body p-0\">\n        <image-cropper [imageChangedEvent]=\"imageChangedEvent\"\n                       [maintainAspectRatio]=\"true\"\n                       [aspectRatio]=\"1\" [resizeToWidth]=\"150\"\n                       [roundCropper]=\"true\" format=\"png\" outputType=\"both\"\n                       (imageCropped)=\"imageCropped($event)\"\n                       (imageLoaded)=\"imageLoaded()\"\n                       (loadImageFailed)=\"loadImageFailed()\"\n                       [style.display]=\"cropperReady ? null : 'none'\"></image-cropper>\n    </div>\n    <div class=\"modal-footer text-right\">\n        <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"select($event)\">\n            <i class=\"fa fa-picture-o\"></i> {{ 'COMMON.MODULE.CROPPER.SELECT_NEW_IMAGE'  | translate}}\n        </button>\n\n        <button type=\"button\" class=\"btn btn-success btn-sm ml-1\" (click)=\"submit()\">\n            <i class=\"fa fa-crop\"></i> {{ 'TOOLBAR.OK' | translate }}\n        </button>\n        <button type=\"button\" class=\"btn btn-danger btn-sm ml-1\" (click)=\"hide()\">\n            <i class=\"fa fa-times\"></i> {{ 'TOOLBAR.CANCEL' | translate }}\n        </button>\n    </div>\n</ng-template>","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ImageCropperComponent} from './image-cropper.component';\nimport {CropperAvatarDialogComponent} from \"./cropper-avatar/cropper-avatar-dialog.component\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {CoreModule} from \"inet-core\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        CoreModule,\n        TranslateModule\n    ],\n    declarations: [\n        ImageCropperComponent,\n        CropperAvatarDialogComponent\n    ],\n    exports: [\n        ImageCropperComponent,\n        CropperAvatarDialogComponent\n    ]\n})\nexport class ImageCropperModule {\n}\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\n\n@Component({\n    selector: 'app-pagination-list',\n    templateUrl: './pagination-list.component.html',\n    styleUrls: ['./pagination-list.component.scss']\n})\nexport class PaginationListComponent implements OnInit {\n\n    @Input() total: number = 0;\n    @Input() page: number = 0;\n    @Input() items: any;\n    @Input() limit: number= 10;\n    @Output() changePage = new EventEmitter();\n    @Output() load = new EventEmitter();\n    itemsPage: Array<any> = [];\n    startNumber = 0;\n    endNumber = 0;\n    totalPage = 0;\n\n    constructor() {\n    }\n\n    ngOnInit() {\n    }\n\n    loadPagination() {\n        setTimeout(() => {\n            this.getItemsPage();\n        }, 50);\n    }\n\n    getItemsPage() {\n        if (this.total === 0) {\n            this.startNumber = 0;\n            this.endNumber = 0;\n            this.page = 0;\n            this.itemsPage = [];\n        } else {\n            if (this.page === 0) {\n                this.page++;\n            }\n            let totalPage = this.page * this.limit;\n            this.startNumber = totalPage - this.limit + 1;\n            this.endNumber = totalPage > this.total ? this.total : (this.startNumber + this.limit - 1);\n            if (this.page === 1)\n                this.itemsPage = this.items.slice(0, totalPage > this.total ? this.total : (this.startNumber + this.limit - 1));\n            else {\n                this.itemsPage = this.items.slice(this.startNumber - 1, this.endNumber);\n            }\n        }\n        this.totalPage = Math.ceil(this.total / this.limit);\n        this.changePage.emit({\n            page: this.page,\n            items: this.itemsPage\n        });\n    }\n\n    prevPage() {\n        if (this.page > 1) {\n            this.page--;\n            this.getItemsPage();\n        }\n    }\n\n    prevFirstPage() {\n        if (this.page !== 1) {\n            this.page = 1;\n            this.getItemsPage();\n        }\n    }\n\n    nextPage() {\n        let maxPage = Math.ceil(this.total / this.limit);\n        if (this.page < maxPage) {\n            this.page++;\n            this.getItemsPage();\n        }\n    }\n\n    nextLastPage() {\n        let maxPage = Math.ceil(this.total / this.limit);\n        if (this.page !== maxPage) {\n            this.page = maxPage;\n            this.getItemsPage();\n        }\n    }\n\n    reload() {\n        this.load.emit({\n            page: this.page,\n            items: this.getItemsPage()\n        });\n    }\n\n    inputPageText() {\n        let total = Math.ceil(this.total / this.limit);\n        if (this.page < 1) {\n            this.page = 1;\n        } else if (this.page > total) {\n            this.page = total;\n        }\n        this.getItemsPage();\n    }\n}\n","<div class=\"btn-group h-100 col-sm-12 pl-0 pr-0\" role=\"group\" aria-label=\"First group\">\n    <span class=\"rounded-left title-show pl-3 pr-3\">\n    <span class=\"mr-2\">Hiển thị</span>\n        <b>{{startNumber}} - {{endNumber}} / {{total}}</b>\n    </span>\n\n    <button type=\"button\" (click)=\"prevFirstPage()\" class=\"btn btn-light border\">\n        <i class=\"fa fa-step-backward\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" (click)=\"prevPage()\" class=\"btn btn-light border\">\n        <i class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i>\n    </button>\n    <input type=\"text\" class=\"text-center border-right-0 border-left-0 border\"\n           [(ngModel)]=\"page\"\n           oninput=\"this.value=this.value.replace(/[^0-9]/g,'');\"\n           (keyup.enter)=\"inputPageText()\"\n           (focusout)=\"inputPageText()\"\n           style=\"width: 36px;background: #efefef;\">\n    <button type=\"button\" (click)=\"nextPage()\" class=\"btn btn-light border\">\n        <i class=\"fa fa-chevron-right\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" (click)=\"nextLastPage()\" class=\"btn btn-light border\">\n        <i class=\"fa fa-step-forward\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"btn btn-light border\" (click)=\"reload()\">\n        <i class=\"fa fa-refresh\" aria-hidden=\"true\"></i>\n    </button>\n</div>\n\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PaginationListComponent} from './pagination-list/pagination-list.component';\nimport {FormsModule} from \"@angular/forms\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule\n    ],\n    declarations: [PaginationListComponent],\n    exports: [PaginationListComponent]\n})\nexport class PaginationListModule {\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport { format, register } from 'timeago.js';\nregister('vi', (number: any, index: any, total_sec: any): [string, string] => {\n    // number: the timeago / timein number;\n    // index: the index of array below;\n    // total_sec: total seconds between date to be formatted and today's date;\n    // @ts-ignore\n    return [\n        ['vừa xong', 'một lúc'],\n        ['%s giây trước', '%s giây nữa'],\n        ['1 phút trước', '1 phút nữa'],\n        ['%s phút trước', '%s phút nữa'],\n        ['1 giờ trước', '1 giờ nữa'],\n        ['%s giờ trước', '%s giờ nữa'],\n        ['1 ngày trước', '1 ngày nữa'],\n        ['%s ngày trước', '%s ngày nữa'],\n        ['1 tuần trước', '1 tuần nữa'],\n        ['%s tuần trước', '%s tuần nữa'],\n        ['1 tháng trước', '1 tháng nữa'],\n        ['%s tháng trước', '%s tháng nữa'],\n        ['1 năm trước', '1 năm nữa'],\n        ['%s năm trước', '%s năm nữa']\n    ][index];\n});\n\n@Pipe({\n    name: 'timeAgo'\n})\nexport class TimeAgoPipe implements PipeTransform {\n    transform(date: any, locale?: string): string {\n        locale = locale || 'vi';\n        return format(date, locale);\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TimeAgoPipe} from \"./timeago.pipe\";\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    declarations: [\n        TimeAgoPipe\n    ],\n    exports: [\n        TimeAgoPipe\n    ]\n})\nexport class DateTimeModule {\n}\n","import {Injectable} from '@angular/core';\nimport {HttpParams} from \"@angular/common/http\";\nimport {Subject} from 'rxjs';\nimport {Observable} from \"rxjs\";\nimport {CloudPluginComponent} from \"./cloud-plugin.component\";\n\ndeclare let iNet: any;\n\n@Injectable({\n    providedIn: 'root'\n})\n\nexport class PluginManagerService {\n    private loaded = false;\n    pluginManager: any = iNet.PluginManager;\n    private plugins: any = {};\n    // Observable sources\n    private subject = new Subject<any>();\n\n    constructor() {\n    }\n\n    register(pluginId: string, component: any) {\n        if(pluginId) {\n            this.plugins[pluginId] = component;\n        }\n    }\n\n    destroyById(pluginId: string) {\n        this.clearMessage(); // clear all\n        delete this.plugins[pluginId];\n    }\n\n    getPlugins() {\n        return this.plugins;\n    }\n\n    hasPluginId(pluginId: string): boolean {\n        return this.plugins.hasOwnProperty(pluginId);\n    }\n\n    getPluginById(pluginId: string): CloudPluginComponent {\n        return this.plugins[pluginId];\n    }\n\n    sendMessageTo(message: any, contentWindow: any) {\n        if (this.pluginManager) {\n            this.pluginManager.sendMessageTo(message, contentWindow);\n            // console.log('[PluginManagerService]--sendMessage--', message);\n        }\n    }\n\n    listen() {\n        if (!this.pluginManager) {\n            console.warn(`\\tCould not find PluginManager, plugins may not work as expected. Please update to the latest version of iNet Core.\n            For more info refer to: https://www.npmjs.com/package/inet-core`);\n        } else if (!this.loaded) {\n            // console.log('Listen to message from window of Unicorn');\n            //console.log('PluginManager is listening on ' + window.origin);\n            this.pluginManager.bindEvent(window, 'message', (e: any) => {\n                //console.log('[PluginManager Recieve]--message--', e);\n                this.sendMessage(e); // call to feed values\n            });\n\n            this.loaded = true;\n        }\n    }\n\n    getMessage(): Observable<any> {\n        return this.subject.asObservable();\n    }\n\n    clearMessage() {\n        this.subject.next('clear');\n    }\n\n    getContentWindowById(pluginId: string): Promise<Window | Document> {\n        return new Promise((resolve, reject) => {\n            setTimeout(() => {\n                const iframe = document.getElementById(pluginId) as any;\n                resolve(iframe ? iframe['contentWindow'] || iframe['contentDocument'] : null);\n            });\n        });\n    }\n\n    private sendMessage(message: any) {\n        // console.log('[PluginManager Send messages to component]--message--', message);\n        this.subject.next(message);\n    }\n\n    convertToHttpParams(obj: any): HttpParams | null {\n        if (!obj) {\n            return null;\n        }\n        return Object.getOwnPropertyNames(obj).reduce((p, key) => p.set(key, (obj[key] === undefined || iNet.isObject(obj[key])) ? '' : obj[key]), new HttpParams());\n    }\n\n    /*\n       loadById(pluginId: string, targetId: string, params?: any | null) {\n\n           const me = this;\n           let url = iNet.getPUrl(`common/page/plugins/${pluginId}`);\n           if (params) {\n               url = iNet.urlAppend(url, this.convertToHttpParams(params).toString());\n           }\n           const client = new XMLHttpRequest();\n           client.onload = function () {\n               if (!!this.responseText) {\n                   // console.log(this.responseText, me);\n                   me.createDynamicPluginTemplate(pluginId, this.responseText, targetId);\n               }\n           };\n           client.open('GET', url, true);\n           client.send();\n\n    }\n    */\n\n    /*\n    executeScripts(html: string) {\n        const $el = $('<template></template>').html(html);\n        const $scripts = $el.find('script');\n        for (let i = 0; i < $scripts.length; i++) {\n            const $script = $($scripts[i]);\n            const newScript = document.createElement('script');\n            if (!!$script.attr('src')) { // external scripts\n                newScript.src = $script.attr('src');\n            } else { // inline script\n                const inlineScript = document.createTextNode($script[0].innerHTML);\n                newScript.appendChild(inlineScript);\n            }\n            document.documentElement.appendChild(newScript);\n        }\n    }\n    */\n\n    testCreatePluginTemplate(pluginId: string, targetId: string) {\n        /*\n        const html = `\n            <script>console.log(\"execute inline script\");</script>\n            <b>HTML and Javascript Content</b>\n            <script src=\"http://cdn.inetcloud.vn/data/api/lib/test/test.js\"></script>\n        `;\n\n        this.createDynamicPluginTemplate(pluginId, html, targetId);\n        */\n        // this.executeScripts(html);\n    }\n\n    /*\n        createDynamicPluginTemplate(pluginId: string, html: string, targetId: string) {\n            // html = html.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '');\n            const template = document.createElement('template');\n            template.id = pluginId;\n            template.innerHTML = html;\n\n            // Using script to add scripts\n            const $el = $('<template></template>').html(html);\n            const $scripts = $el.find('script');\n            for (let i = 0; i < $scripts.length; i++) {\n                const $script = $($scripts[i]);\n                const newScript = document.createElement('script');\n                if (!!$script.attr('src')) { // external scripts\n                    newScript.src = $script.attr('src');\n                } else { // inline script\n                    const inlineScript = document.createTextNode($script[0].innerHTML);\n                    newScript.appendChild(inlineScript);\n                }\n                template.appendChild(newScript);\n            }\n\n            document.documentElement.appendChild(template);\n\n    }\n\n    private getDocumentFragmentById(pluginId: string, templateId: string): DocumentFragment {\n        const pluginDocument = document.getElementById(pluginId)['contentWindow'].document;\n        let template: DocumentFragment = null;\n        if (pluginDocument) {\n            template = pluginDocument.getElementById(templateId);\n        }\n        return template;\n    }\n\n    private addTemplateToElement(template: DocumentFragment, contentSelector: Element): DocumentFragment {\n        let shadowRoot: DocumentFragment = contentSelector.shadowRoot;\n        if (contentSelector) {\n            if (!shadowRoot) {\n                shadowRoot = contentSelector.attachShadow({mode: 'open'});\n            }\n            if (shadowRoot && template) {\n                shadowRoot['innerHTML'] = '';\n                const htmlContent = document.importNode(template['content'], true);\n                console.log('[addTemplate]--content--', template['content']);\n                shadowRoot.appendChild(htmlContent);\n            }\n        }\n       return shadowRoot;\n    }\n\n    addPluginTo(pluginId: string, templateId: string, element: Element): DocumentFragment {\n        const template = this.getDocumentFragmentById(pluginId, templateId);\n        if (template && element) {\n            return this.addTemplateToElement(template, element);\n        }\n        return null;\n    }\n    */\n}\n","import {Component, Input, OnInit, Output, EventEmitter, OnDestroy} from '@angular/core';\nimport {PluginManagerService} from \"./plugin-manager.service\";\nimport {CoreService} from \"inet-core\";\ndeclare let iNet: any;\n\n@Component({\n    selector: 'app-cloud-plugin',\n    styles: [`\n        iframe {\n            width: 100%;\n            height: 100%;\n            border: none;\n        }\n    `],\n    template: `<iframe *ngIf=\"pluginId && url\" id=\"{{pluginId}}\" [src]=\"url | safe\" (load)=\"onLoad($event)\"></iframe>`\n})\nexport class CloudPluginComponent implements OnInit, OnDestroy {\n    @Input() pluginId?: string;\n    @Input() url?: string;\n    @Input() params: any = {};\n    @Input() autoHeight = false;\n    @Output() load = new EventEmitter<void>();\n    constructor( private coreService: CoreService,\n                 private pluginManagerService: PluginManagerService) {\n    }\n    ngOnInit() {\n        if(this.pluginId) {\n            this.pluginManagerService.register(this.pluginId, this);\n            if (!iNet.isEmptyObject(this.params)) {\n                // const __params = this.pluginManagerService.convertToHttpParams(this.params).toString();\n                const __params = this.pluginManagerService.convertToHttpParams({\n                    application: this.params['application'],\n                    secrd: this.params['queryStr']\n                });\n\n                this.url = iNet.urlAppend(this.url, __params?.toString());\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        if(this.pluginId)\n            this.pluginManagerService.destroyById(this.pluginId);\n        // console.log('[CloudPluginComponent]--ngOnDestroy--', this.pluginId);\n    }\n\n    private getContentWindow(): Promise<Window | Document> | undefined {\n        if(this.pluginId) {\n            return this.pluginManagerService.getContentWindowById(this.pluginId);\n        }\n        return  undefined;\n    }\n\n    reload() {\n        this.getContentWindow()?.then(contentWindow => {\n            if (contentWindow && this.coreService.getEnvironment().production) {\n                contentWindow['location'].reload();\n            }\n        });\n    }\n\n    resize() {\n        // console.log('[resize]');\n        if (this.autoHeight && this.coreService.getEnvironment().production) {\n            this.getContentWindow()?.then((contentWindow: any) => {\n                if (contentWindow) {\n                    const height = contentWindow['document']['body']['offsetHeight'] || contentWindow['document']['body']['scrollHeight'];\n                    if (this.pluginId && height) {\n                        const element = document.getElementById(this.pluginId);\n                        if(element) {\n                            element.style.height = `${height}px`;\n                        }\n                    }\n                }\n            });\n        }\n    }\n\n    onLoad($event: any) {\n        if (this.pluginId && document.getElementById(this.pluginId)) {\n            this.getContentWindow()?.then(contentWindow => {\n                if (contentWindow) {\n                    this.resize();\n                    // The plugin has finished loading\n                    // console.log('[onLoad]--pluginId', this.pluginId, contentWindow);\n                    // this.pluginManagerService.sendMessageTo({pluginId: this.pluginId, eventName: 'loaded'}, contentWindow);\n                    setTimeout(() => {\n                        this.pluginManagerService.sendMessageTo({pluginId: this.pluginId, eventName: 'loaded'}, contentWindow);\n                    }, 100);\n                }\n            });\n        }\n    }\n}\n","import {Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2} from '@angular/core';\nimport {PluginManagerService} from \"./plugin-manager.service\";\nimport {Subscription} from \"rxjs\";\nimport {CoreService, NotificationService} from \"inet-core\";\n\n@Directive({\n    selector: '[appPluginToolbar]'\n})\nexport class PluginToolbarDirective implements OnInit, OnDestroy {\n    message: any;\n    subscription?: Subscription;\n    @Input() idProperty = 'toolbar'; // The name of the field, Defaults to 'toolbar'.\n    constructor(\n        private el: ElementRef,\n        private renderer: Renderer2,\n        private coreService: CoreService,\n        private notifyService: NotificationService,\n        private pluginManagerService: PluginManagerService) {\n        // console.log('[PluginToolbarDirective]constructor');\n    }\n\n    ngOnInit() {\n        // console.log('[PluginToolbarDirective]ngOnInit');\n        // subscribe messages\n        this.subscription = this.pluginManagerService.getMessage().subscribe(message => {\n            if (!message) {\n                return;\n            }\n            this.message = message || {};\n            const data = this.message['data'] || {};\n            // console.log('data', data, this.getIdProperty(), data.hasOwnProperty(this.getIdProperty()));\n            if (data.hasOwnProperty(this.getIdProperty())) {\n                const toolbar = data[this.getIdProperty()] || [];\n                let pluginId = data['pluginId'];\n                // console.log('[PluginToolbarDirective]--pluginId--', pluginId);\n                let container;\n                if (this.coreService.getEnvironment().production && this.message.source) {  // production\n                    if (this.message.source.frameElement) {\n                        pluginId = this.message.source.frameElement.id;\n                        if (pluginId) {\n                            container = this.initContainerById(pluginId);\n                            if (window.origin === this.message.source.origin && this.pluginManagerService.hasPluginId(pluginId)) {\n                                this.generateToolbar(container, toolbar);\n                                this.notificationDetectByData(data);\n                            }\n                        } else {\n                            console.warn(`Could not find plugin id`);\n                        }\n                    }\n                } else { // For testing with localhost\n                    if (pluginId && this.pluginManagerService.hasPluginId(pluginId)) {\n                        container = this.initContainerById(pluginId);\n                        this.generateToolbar(container, toolbar);\n                    }\n                    this.notificationDetectByData(data);\n                }\n            }\n        });\n    }\n\n    private notificationDetectByData(data: any = {}) {\n        if (data.hasOwnProperty('notify')) {\n            const {title, type, msg} = data['notify'];\n            this.notifyService.showMessage(msg, type, title);\n        }\n    }\n\n    getIdProperty(): string {\n        return this.idProperty;\n    }\n\n    clear() {\n        this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');\n    }\n\n    initContainerById(pluginId: string): ToolbarContainer {\n        const prefix = `plugin-${this.getIdProperty()}-${pluginId}-`;\n        const containerId = prefix + 'container';\n        let element = document.getElementById(containerId);\n        let exists = false;\n        if (element) {\n            element.innerHTML = '';\n            exists = true;\n        } else {\n            element = this.renderer.createElement('span');\n            this.renderer.setProperty(element, 'id', containerId);\n            // this.renderer.setProperty(element, 'innerHTML', '');\n        }\n        return new ToolbarContainer(prefix, pluginId, element, exists);\n    }\n\n    generateToolbar(container: ToolbarContainer, buttons: any[] = []) {\n        const pluginId = container.pluginId;\n        const plugin = this.pluginManagerService.getPluginById(pluginId);\n        if (plugin && plugin.resize) {\n            plugin.resize();\n        }\n        for (const button of buttons) {\n            if (button) {\n                const buttonEl = this.renderer.createElement('button');\n                const buttonId = container.prefix + button['id'];\n                this.renderer.setProperty(buttonEl, 'id', buttonId);\n                this.renderer.addClass(buttonEl, 'btn');\n                this.renderer.addClass(buttonEl, 'btn-sm');\n                this.renderer.addClass(buttonEl, 'ml-1');\n                const classes = (button['cls'] || '').split(' ');\n                for (const cls of classes) {\n                    this.renderer.addClass(buttonEl, cls);\n                }\n                const iconEl = this.renderer.createElement('i');\n                const iconClasses = (button['iconCls'] || '').split(' ');\n                for (const iconCls of iconClasses) {\n                    this.renderer.addClass(iconEl, iconCls);\n                }\n                const text = this.renderer.createText(' ' + button['text'] || '');\n                this.renderer.listen(buttonEl, 'click', (event) => {\n                    // console.log('[' + pluginId + '] plugin call ' + button['eventName']);\n                    this.pluginManagerService.getContentWindowById(pluginId).then(contentWindow => {\n                        if (contentWindow) {\n                            this.pluginManagerService.sendMessageTo({id: buttonId, pluginId: pluginId, eventName: button['eventName']}, contentWindow);\n                        }\n                    });\n                });\n                this.renderer.appendChild(buttonEl, iconEl);\n                this.renderer.appendChild(buttonEl, text);\n                this.renderer.appendChild(container.element, buttonEl);\n            }\n        }\n        if (!container.exists) {\n            this.renderer.appendChild(this.el.nativeElement, container.element);\n        }\n    }\n\n    ngOnDestroy() {\n        this.clear();\n        // console.log('[PluginToolbarDirective]destroy');\n        // unsubscribe to ensure no memory leaks\n        if(this.subscription)\n            this.subscription.unsubscribe();\n    }\n\n}\n\nexport class ToolbarContainer {\n    pluginId: string;\n    element: any;\n    prefix: string;\n    exists: boolean;\n\n    constructor(prefix: string, pluginId: string, element: any, exists: boolean) {\n        this.prefix = prefix;\n        this.pluginId = pluginId;\n        this.element = element;\n        this.exists = exists;\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CloudPluginComponent} from './cloud-plugin.component';\nimport {PluginManagerService} from './plugin-manager.service';\nimport {PluginToolbarDirective} from './plugin-toolbar.directive';\nimport {SafePipeModule} from \"../pipes/safe-pipe.module\";\nimport {CoreService, NotificationService} from \"inet-core\";\n\n@NgModule({\n    declarations: [CloudPluginComponent, PluginToolbarDirective],\n    imports: [\n        CommonModule,\n        SafePipeModule\n    ],\n    exports: [CloudPluginComponent, PluginToolbarDirective],\n    providers: [PluginManagerService, CoreService, NotificationService]\n})\nexport class PluginManagerModule {\n    constructor(private pluginManagerService: PluginManagerService) {\n        this.pluginManagerService.listen();\n    }\n}\n","import {\n  Directive,\n  ElementRef,\n  NgModule,\n} from '@angular/core';\n\n@Directive({\n  selector: '[toastContainer]',\n  exportAs: 'toastContainer',\n})\nexport class ToastContainerDirective {\n  constructor(private el: ElementRef) { }\n  getContainerElement(): HTMLElement {\n    return this.el.nativeElement;\n  }\n}\n\n@NgModule({\n  declarations: [ToastContainerDirective],\n  exports: [ToastContainerDirective],\n})\nexport class ToastContainerModule {}\n","import {\n  ComponentRef,\n  Injector,\n  ViewContainerRef\n} from '@angular/core';\n\nexport interface ComponentType<T> {\n  // eslint-disable-next-line @typescript-eslint/prefer-function-type\n  new (...args: any[]): T;\n}\n\n\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nexport class ComponentPortal<T> {\n  private _attachedHost?: BasePortalHost;\n  /** The type of the component that will be instantiated for attachment. */\n  component: ComponentType<T>;\n\n  /**\n   * [Optional] Where the attached component should live in Angular's *logical* component tree.\n   * This is different from where the component *renders*, which is determined by the PortalHost.\n   * The origin necessary when the host is outside of the Angular application context.\n   */\n  viewContainerRef!: ViewContainerRef;\n\n  /** Injector used for the instantiation of the component. */\n  injector: Injector;\n\n  constructor(component: ComponentType<T>, injector: Injector) {\n    this.component = component;\n    this.injector = injector;\n  }\n\n  /** Attach this portal to a host. */\n  attach(host: BasePortalHost, newestOnTop: boolean): ComponentRef<any> {\n    this._attachedHost = host;\n    return host.attach(this, newestOnTop);\n  }\n\n  /** Detach this portal from its host */\n  detach() {\n    const host = this._attachedHost;\n    if (host) {\n      this._attachedHost = undefined;\n      return host.detach();\n    }\n  }\n\n  /** Whether this portal is attached to a host. */\n  get isAttached(): boolean {\n    return this._attachedHost != null;\n  }\n\n  /**\n   * Sets the PortalHost reference without performing `attach()`. This is used directly by\n   * the PortalHost when it is performing an `attach()` or `detach()`.\n   */\n  setAttachedHost(host?: BasePortalHost) {\n    this._attachedHost = host;\n  }\n}\n\n/**\n * Partial implementation of PortalHost that only deals with attaching a\n * ComponentPortal\n */\nexport abstract class BasePortalHost {\n  /** The portal currently attached to the host. */\n  private _attachedPortal?: ComponentPortal<any>;\n\n  /** A function that will permanently dispose this host. */\n  private _disposeFn?: () => void;\n\n  attach(portal: ComponentPortal<any>, newestOnTop: boolean) {\n    this._attachedPortal = portal;\n    return this.attachComponentPortal(portal, newestOnTop);\n  }\n\n  abstract attachComponentPortal<T>(portal: ComponentPortal<T>, newestOnTop: boolean): ComponentRef<T>;\n\n  detach() {\n    if (this._attachedPortal) {\n      this._attachedPortal.setAttachedHost();\n    }\n\n    this._attachedPortal = undefined;\n    if (this._disposeFn) {\n      this._disposeFn();\n      this._disposeFn = undefined;\n    }\n  }\n\n  setDisposeFn(fn: () => void) {\n    this._disposeFn = fn;\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { ComponentType } from '../portal/portal';\nimport { ToastRef } from './toast-injector';\n\nexport type ProgressAnimationType = 'increasing' | 'decreasing';\n\n/**\n * Configuration for an individual toast.\n */\nexport interface IndividualConfig {\n  /**\n   * disable both timeOut and extendedTimeOut\n   * default: false\n   */\n  disableTimeOut: boolean | 'timeOut' | 'extendedTimeOut';\n  /**\n   * toast time to live in milliseconds\n   * default: 5000\n   */\n  timeOut: number;\n  /**\n   * toast show close button\n   * default: false\n   */\n  closeButton: boolean;\n  /**\n   * time to close after a user hovers over toast\n   * default: 1000\n   */\n  extendedTimeOut: number;\n  /**\n   * show toast progress bar\n   * default: false\n   */\n  progressBar: boolean;\n\n  /**\n   * changes toast progress bar animation\n   * default: decreasing\n   */\n  progressAnimation: ProgressAnimationType;\n\n  /**\n   * render html in toast message (possibly unsafe)\n   * default: false\n   */\n  enableHtml: boolean;\n  /**\n   * css class on toast component\n   * default: ngx-toastr\n   */\n  toastClass: string;\n  /**\n   * css class on toast container\n   * default: toast-top-right\n   */\n  positionClass: string;\n  /**\n   * css class on toast title\n   * default: toast-title\n   */\n  titleClass: string;\n  /**\n   * css class on toast message\n   * default: toast-message\n   */\n  messageClass: string;\n  /**\n   * animation easing on toast\n   * default: ease-in\n   */\n  easing: string;\n  /**\n   * animation ease time on toast\n   * default: 300\n   */\n  easeTime: string | number;\n  /**\n   * clicking on toast dismisses it\n   * default: true\n   */\n  tapToDismiss: boolean;\n  /**\n   * Angular toast component to be shown\n   * default: Toast\n   */\n  toastComponent?: ComponentType<any>;\n  /**\n   * Helps show toast from a websocket or from event outside Angular\n   * default: false\n   */\n  onActivateTick: boolean;\n  /**\n   * New toast placement\n   * default: true\n   */\n  newestOnTop: boolean;\n}\n\nexport interface ToastrIconClasses {\n  error: string;\n  info: string;\n  success: string;\n  warning: string;\n  [key: string]: string;\n}\n\n/**\n * Global Toast configuration\n * Includes all IndividualConfig\n */\nexport interface GlobalConfig extends IndividualConfig {\n  /**\n   * max toasts opened. Toasts will be queued\n   * Zero is unlimited\n   * default: 0\n   */\n  maxOpened: number;\n  /**\n   * dismiss current toast when max is reached\n   * default: false\n   */\n  autoDismiss: boolean;\n  iconClasses: Partial<ToastrIconClasses>;\n  /**\n   * block duplicate messages\n   * default: false\n   */\n  preventDuplicates: boolean;\n  /**\n   * display the number of duplicate messages\n   * default: false\n   */\n  countDuplicates: boolean;\n  /**\n   * Reset toast timeout when there's a duplicate (preventDuplicates needs to be set to true)\n   * default: false\n   */\n  resetTimeoutOnDuplicate: boolean;\n  /**\n   * consider the title of a toast when checking if duplicate\n   * default: false\n   */\n  includeTitleDuplicates: boolean;\n}\n\n/**\n * Everything a toast needs to launch\n */\nexport class ToastPackage {\n  private _onTap = new Subject<void>();\n  private _onAction = new Subject<any>();\n\n  constructor(\n    public toastId: number,\n    public config: IndividualConfig,\n    public message: string | null | undefined,\n    public title: string | undefined,\n    public toastType: string,\n    public toastRef: ToastRef<any>,\n  ) {\n    this.toastRef.afterClosed().subscribe(() => {\n      this._onAction.complete();\n      this._onTap.complete();\n    });\n  }\n\n  /** Fired on click */\n  triggerTap(): void {\n    this._onTap.next();\n    if (this.config.tapToDismiss) {\n      this._onTap.complete();\n    }\n  }\n\n  onTap(): Observable<void> {\n    return this._onTap.asObservable();\n  }\n\n  /** available for use in custom toast */\n  triggerAction(action?: any): void {\n    this._onAction.next(action);\n  }\n\n  onAction(): Observable<void> {\n    return this._onAction.asObservable();\n  }\n}\n\n/* eslint-disable @typescript-eslint/no-empty-interface */\n/** @deprecated use GlobalConfig */\nexport interface GlobalToastrConfig extends GlobalConfig {}\n/** @deprecated use IndividualConfig */\nexport interface IndividualToastrConfig extends IndividualConfig {}\n/** @deprecated use IndividualConfig */\nexport interface ToastrConfig extends IndividualConfig {}\n\nexport const DefaultNoComponentGlobalConfig: GlobalConfig = {\n  maxOpened: 0,\n  autoDismiss: false,\n  newestOnTop: true,\n  preventDuplicates: false,\n  countDuplicates: false,\n  resetTimeoutOnDuplicate: false,\n  includeTitleDuplicates: false,\n\n  iconClasses: {\n    error: 'toast-error',\n    info: 'toast-info',\n    success: 'toast-success',\n    warning: 'toast-warning',\n  },\n\n  // Individual\n  closeButton: false,\n  disableTimeOut: false,\n  timeOut: 5000,\n  extendedTimeOut: 1000,\n  enableHtml: false,\n  progressBar: false,\n  toastClass: 'ngx-toastr',\n  positionClass: 'toast-top-right',\n  titleClass: 'toast-title',\n  messageClass: 'toast-message',\n  easing: 'ease-in',\n  easeTime: 300,\n  tapToDismiss: true,\n  onActivateTick: false,\n  progressAnimation: 'decreasing',\n};\n\nexport interface ToastToken {\n  default: GlobalConfig;\n  config: Partial<GlobalConfig>;\n}\n\nexport const TOAST_CONFIG = new InjectionToken<ToastToken>('ToastConfig');\n","import { Injector, InjectFlags } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '../overlay/overlay-ref';\nimport { ToastPackage } from './toastr-config';\n\n/**\n * Reference to a toast opened via the Toastr service.\n */\nexport class ToastRef<T> {\n  /** The instance of component opened into the toast. */\n  componentInstance!: T;\n\n  /** Count of duplicates of this toast */\n  private duplicatesCount = 0;\n\n  /** Subject for notifying the user that the toast has finished closing. */\n  private _afterClosed = new Subject<void>();\n  /** triggered when toast is activated */\n  private _activate = new Subject<void>();\n  /** notifies the toast that it should close before the timeout */\n  private _manualClose = new Subject<void>();\n  /** notifies the toast that it should reset the timeouts */\n  private _resetTimeout = new Subject<void>();\n  /** notifies the toast that it should count a duplicate toast */\n  private _countDuplicate = new Subject<number>();\n\n  constructor(private _overlayRef: OverlayRef) {}\n\n  manualClose() {\n    this._manualClose.next();\n    this._manualClose.complete();\n  }\n\n  manualClosed(): Observable<any> {\n    return this._manualClose.asObservable();\n  }\n\n  timeoutReset(): Observable<any> {\n    return this._resetTimeout.asObservable();\n  }\n\n  countDuplicate(): Observable<number> {\n    return this._countDuplicate.asObservable();\n  }\n\n  /**\n   * Close the toast.\n   */\n  close(): void {\n    this._overlayRef.detach();\n    this._afterClosed.next();\n    this._manualClose.next();\n    this._afterClosed.complete();\n    this._manualClose.complete();\n    this._activate.complete();\n    this._resetTimeout.complete();\n    this._countDuplicate.complete();\n  }\n\n  /** Gets an observable that is notified when the toast is finished closing. */\n  afterClosed(): Observable<any> {\n    return this._afterClosed.asObservable();\n  }\n\n  isInactive() {\n    return this._activate.isStopped;\n  }\n\n  activate() {\n    this._activate.next();\n    this._activate.complete();\n  }\n\n  /** Gets an observable that is notified when the toast has started opening. */\n  afterActivate(): Observable<any> {\n    return this._activate.asObservable();\n  }\n\n  /** Reset the toast timouts and count duplicates */\n  onDuplicate(resetTimeout: boolean, countDuplicate: boolean) {\n    if (resetTimeout) {\n      this._resetTimeout.next();\n    }\n    if (countDuplicate) {\n      this._countDuplicate.next(++this.duplicatesCount);\n    }\n  }\n}\n\n/** Custom injector type specifically for instantiating components with a toast. */\nexport class ToastInjector implements Injector {\n  constructor(\n    private _toastPackage: ToastPackage,\n    private _parentInjector: Injector\n  ) {}\n    \n  get<T>(token: any, notFoundValue?: T, flags?: any): T | ToastPackage {\n    if (token === ToastPackage) {\n      return this._toastPackage;\n    }\n    return this._parentInjector.get<T>(token, notFoundValue, flags);\n  }\n}\n","import {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n} from '@angular/core';\nimport { BasePortalHost, ComponentPortal } from './portal';\n\n/**\n * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n *\n * This is the only part of the portal core that directly touches the DOM.\n */\nexport class DomPortalHost extends BasePortalHost {\n  constructor(\n    private _hostDomElement: Element,\n    private _componentFactoryResolver: ComponentFactoryResolver,\n    private _appRef: ApplicationRef,\n  ) {\n    super();\n  }\n\n  /**\n   * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n   * @param portal Portal to be attached\n   */\n  attachComponentPortal<T>(\n    portal: ComponentPortal<T>,\n    newestOnTop: boolean,\n  ): ComponentRef<T> {\n    const componentFactory = this._componentFactoryResolver.resolveComponentFactory(\n      portal.component,\n    );\n    let componentRef: ComponentRef<T>;\n\n    // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n    // for the component (in terms of Angular's component tree, not rendering).\n    // When the ViewContainerRef is missing, we use the factory to create the component directly\n    // and then manually attach the ChangeDetector for that component to the application (which\n    // happens automatically when using a ViewContainer).\n    componentRef = componentFactory.create(portal.injector);\n\n    // When creating a component outside of a ViewContainer, we need to manually register\n    // its ChangeDetector with the application. This API is unfortunately not yet published\n    // in Angular core. The change detector must also be deregistered when the component\n    // is destroyed to prevent memory leaks.\n    this._appRef.attachView(componentRef.hostView);\n\n    this.setDisposeFn(() => {\n      this._appRef.detachView(componentRef.hostView);\n      componentRef.destroy();\n    });\n\n    // At this point the component has been instantiated, so we move it to the location in the DOM\n    // where we want it to be rendered.\n    if (newestOnTop) {\n      this._hostDomElement.insertBefore(\n        this._getComponentRootNode(componentRef),\n        this._hostDomElement.firstChild,\n      );\n    } else {\n      this._hostDomElement.appendChild(\n        this._getComponentRootNode(componentRef),\n      );\n    }\n\n    return componentRef;\n  }\n\n  /** Gets the root HTMLElement for an instantiated component. */\n  private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n    return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n  }\n}\n","import { ComponentRef } from '@angular/core';\nimport { BasePortalHost, ComponentPortal } from '../portal/portal';\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nexport class OverlayRef {\n  constructor(private _portalHost: BasePortalHost) {}\n\n  attach(\n    portal: ComponentPortal<any>,\n    newestOnTop: boolean = true,\n  ): ComponentRef<any> {\n    return this._portalHost.attach(portal, newestOnTop);\n  }\n\n  /**\n   * Detaches an overlay from a portal.\n   * @returns Resolves when the overlay has been detached.\n   */\n  detach() {\n    return this._portalHost.detach();\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\n\n/** Container inside which all toasts will render. */\n@Injectable({ providedIn: 'root' })\nexport class OverlayContainer implements OnDestroy {\n  protected _containerElement!: HTMLElement;\n\n  constructor(@Inject(DOCUMENT) protected _document: any) {}\n\n  ngOnDestroy() {\n    if (this._containerElement && this._containerElement.parentNode) {\n      this._containerElement.parentNode.removeChild(this._containerElement);\n    }\n  }\n\n  /**\n   * This method returns the overlay container element. It will lazily\n   * create the element the first time  it is called to facilitate using\n   * the container in non-browser environments.\n   * @returns the container element\n   */\n  getContainerElement(): HTMLElement {\n    if (!this._containerElement) {\n      this._createContainer();\n    }\n    return this._containerElement;\n  }\n\n  /**\n   * Create the overlay container element, which is simply a div\n   * with the 'cdk-overlay-container' class on the document body.\n   */\n  protected _createContainer(): void {\n    const container = this._document.createElement('div');\n    container.classList.add('overlay-container');\n    this._document.body.appendChild(container);\n    this._containerElement = container;\n  }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { DOCUMENT } from '@angular/common';\nimport { ApplicationRef, ComponentFactoryResolver, Inject, Injectable } from '@angular/core';\n\nimport { DomPortalHost } from '../portal/dom-portal-host';\nimport { ToastContainerDirective } from '../toastr/toast.directive';\nimport { OverlayContainer } from './overlay-container';\nimport { OverlayRef } from './overlay-ref';\n\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one.\n */\n@Injectable({ providedIn: 'root' })\nexport class Overlay {\n  // Namespace panes by overlay container\n  private _paneElements: Map<ToastContainerDirective, Record<string, HTMLElement>> = new Map();\n\n  constructor(\n    private _overlayContainer: OverlayContainer,\n    private _componentFactoryResolver: ComponentFactoryResolver,\n    private _appRef: ApplicationRef,\n    @Inject(DOCUMENT) private _document: any,\n  ) {}\n  /**\n   * Creates an overlay.\n   * @returns A reference to the created overlay.\n   */\n  create(positionClass?: string, overlayContainer?: ToastContainerDirective): OverlayRef {\n    // get existing pane if possible\n    return this._createOverlayRef(this.getPaneElement(positionClass, overlayContainer));\n  }\n\n  getPaneElement(\n    positionClass: string = '',\n    overlayContainer?: ToastContainerDirective,\n  ): HTMLElement {\n    if (!this._paneElements.get(overlayContainer as ToastContainerDirective)) {\n      this._paneElements.set(overlayContainer as ToastContainerDirective, {});\n    }\n\n    if (!this._paneElements.get(overlayContainer as ToastContainerDirective)![positionClass]) {\n      this._paneElements.get(overlayContainer as ToastContainerDirective)![\n        positionClass\n      ] = this._createPaneElement(positionClass, overlayContainer);\n    }\n\n    return this._paneElements.get(overlayContainer as ToastContainerDirective)![positionClass];\n  }\n\n  /**\n   * Creates the DOM element for an overlay and appends it to the overlay container.\n   * @returns Newly-created pane element\n   */\n  private _createPaneElement(\n    positionClass: string,\n    overlayContainer?: ToastContainerDirective,\n  ): HTMLElement {\n    const pane = this._document.createElement('div');\n\n    pane.id = 'toast-container';\n    pane.classList.add(positionClass);\n    pane.classList.add('toast-container');\n\n    if (!overlayContainer) {\n      this._overlayContainer.getContainerElement().appendChild(pane);\n    } else {\n      overlayContainer.getContainerElement().appendChild(pane);\n    }\n\n    return pane;\n  }\n\n  /**\n   * Create a DomPortalHost into which the overlay content can be loaded.\n   * @param pane The DOM element to turn into a portal host.\n   * @returns A portal host for the given DOM element.\n   */\n  private _createPortalHost(pane: HTMLElement): DomPortalHost {\n    return new DomPortalHost(pane, this._componentFactoryResolver, this._appRef);\n  }\n\n  /**\n   * Creates an OverlayRef for an overlay in the given DOM element.\n   * @param pane DOM element for the overlay\n   */\n  private _createOverlayRef(pane: HTMLElement): OverlayRef {\n    return new OverlayRef(this._createPortalHost(pane));\n  }\n}\n","import { ComponentRef, Inject, Injectable, Injector, NgZone, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { Observable } from 'rxjs';\n\nimport { Overlay } from '../overlay/overlay';\nimport { ComponentPortal } from '../portal/portal';\nimport { ToastInjector, ToastRef } from './toast-injector';\nimport { ToastContainerDirective } from './toast.directive';\nimport {\n  GlobalConfig,\n  IndividualConfig,\n  ToastPackage,\n  ToastToken,\n  TOAST_CONFIG,\n} from './toastr-config';\n\nexport interface ActiveToast<C> {\n  /** Your Toast ID. Use this to close it individually */\n  toastId: number;\n  /** the title of your toast. Stored to prevent duplicates */\n  title: string;\n  /** the message of your toast. Stored to prevent duplicates */\n  message: string;\n  /** a reference to the component see portal.ts */\n  portal: ComponentRef<C>;\n  /** a reference to your toast */\n  toastRef: ToastRef<C>;\n  /** triggered when toast is active */\n  onShown: Observable<void>;\n  /** triggered when toast is destroyed */\n  onHidden: Observable<void>;\n  /** triggered on toast click */\n  onTap: Observable<void>;\n  /** available for your use in custom toast */\n  onAction: Observable<any>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ToastrService {\n  toastrConfig: GlobalConfig;\n  currentlyActive = 0;\n  toasts: ActiveToast<any>[] = [];\n  overlayContainer?: ToastContainerDirective;\n  previousToastMessage: string | undefined;\n  private index = 0;\n\n  constructor(\n    @Inject(TOAST_CONFIG) token: ToastToken,\n    private overlay: Overlay,\n    private _injector: Injector,\n    private sanitizer: DomSanitizer,\n    private ngZone: NgZone,\n  ) {\n    this.toastrConfig = {\n      ...token.default,\n      ...token.config,\n    };\n    if (token.config.iconClasses) {\n      this.toastrConfig.iconClasses = {\n        ...token.default.iconClasses,\n        ...token.config.iconClasses,\n      };\n    }\n  }\n  /** show toast */\n  show(message?: string, title?: string, override: Partial<IndividualConfig> = {}, type = '') {\n    return this._preBuildNotification(type, message, title, this.applyConfig(override));\n  }\n  /** show successful toast */\n  success(message?: string, title?: string, override: Partial<IndividualConfig> = {}) {\n    const type = this.toastrConfig.iconClasses.success || '';\n    return this._preBuildNotification(type, message, title, this.applyConfig(override));\n  }\n  /** show error toast */\n  error(message?: string, title?: string, override: Partial<IndividualConfig> = {}) {\n    const type = this.toastrConfig.iconClasses.error || '';\n    return this._preBuildNotification(type, message, title, this.applyConfig(override));\n  }\n  /** show info toast */\n  info(message?: string, title?: string, override: Partial<IndividualConfig> = {}) {\n    const type = this.toastrConfig.iconClasses.info || '';\n    return this._preBuildNotification(type, message, title, this.applyConfig(override));\n  }\n  /** show warning toast */\n  warning(message?: string, title?: string, override: Partial<IndividualConfig> = {}) {\n    const type = this.toastrConfig.iconClasses.warning || '';\n    return this._preBuildNotification(type, message, title, this.applyConfig(override));\n  }\n  /**\n   * Remove all or a single toast by id\n   */\n  clear(toastId?: number) {\n    // Call every toastRef manualClose function\n    for (const toast of this.toasts) {\n      if (toastId !== undefined) {\n        if (toast.toastId === toastId) {\n          toast.toastRef.manualClose();\n          return;\n        }\n      } else {\n        toast.toastRef.manualClose();\n      }\n    }\n  }\n  /**\n   * Remove and destroy a single toast by id\n   */\n  remove(toastId: number) {\n    const found = this._findToast(toastId);\n    if (!found) {\n      return false;\n    }\n    found.activeToast.toastRef.close();\n    this.toasts.splice(found.index, 1);\n    this.currentlyActive = this.currentlyActive - 1;\n    if (!this.toastrConfig.maxOpened || !this.toasts.length) {\n      return false;\n    }\n    if (this.currentlyActive < this.toastrConfig.maxOpened && this.toasts[this.currentlyActive]) {\n      const p = this.toasts[this.currentlyActive].toastRef;\n      if (!p.isInactive()) {\n        this.currentlyActive = this.currentlyActive + 1;\n        p.activate();\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Determines if toast message is already shown\n   */\n  findDuplicate(title = '', message = '', resetOnDuplicate: boolean, countDuplicates: boolean) {\n    const { includeTitleDuplicates } = this.toastrConfig;\n\n    for (const toast of this.toasts) {\n      const hasDuplicateTitle = includeTitleDuplicates && toast.title === title;\n      if ((!includeTitleDuplicates || hasDuplicateTitle) && toast.message === message) {\n        toast.toastRef.onDuplicate(resetOnDuplicate, countDuplicates);\n        return toast;\n      }\n    }\n\n    return null;\n  }\n\n  /** create a clone of global config and apply individual settings */\n  private applyConfig(override: Partial<IndividualConfig> = {}): GlobalConfig {\n    return { ...this.toastrConfig, ...override };\n  }\n\n  /**\n   * Find toast object by id\n   */\n  private _findToast(toastId: number): { index: number; activeToast: ActiveToast<any> } | null {\n    for (let i = 0; i < this.toasts.length; i++) {\n      if (this.toasts[i].toastId === toastId) {\n        return { index: i, activeToast: this.toasts[i] };\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Determines the need to run inside angular's zone then builds the toast\n   */\n  private _preBuildNotification(\n    toastType: string,\n    message: string | undefined,\n    title: string | undefined,\n    config: GlobalConfig,\n  ): ActiveToast<any> | null {\n    if (config.onActivateTick) {\n      return this.ngZone.run(() => this._buildNotification(toastType, message, title, config));\n    }\n    return this._buildNotification(toastType, message, title, config);\n  }\n\n  /**\n   * Creates and attaches toast data to component\n   * returns the active toast, or in case preventDuplicates is enabled the original/non-duplicate active toast.\n   */\n  private _buildNotification(\n    toastType: string,\n    message: string | undefined,\n    title: string | undefined,\n    config: GlobalConfig,\n  ): ActiveToast<any> | null {\n    if (!config.toastComponent) {\n      throw new Error('toastComponent required');\n    }\n    // max opened and auto dismiss = true\n    // if timeout = 0 resetting it would result in setting this.hideTime = Date.now(). Hence, we only want to reset timeout if there is\n    // a timeout at all\n    const duplicate = this.findDuplicate(\n      title,\n      message,\n      this.toastrConfig.resetTimeoutOnDuplicate && config.timeOut > 0,\n      this.toastrConfig.countDuplicates,\n    );\n    if (\n      ((this.toastrConfig.includeTitleDuplicates && title) || message) &&\n      this.toastrConfig.preventDuplicates &&\n      duplicate !== null\n    ) {\n      return duplicate;\n    }\n\n    this.previousToastMessage = message;\n    let keepInactive = false;\n    if (this.toastrConfig.maxOpened && this.currentlyActive >= this.toastrConfig.maxOpened) {\n      keepInactive = true;\n      if (this.toastrConfig.autoDismiss) {\n        this.clear(this.toasts[0].toastId);\n      }\n    }\n\n    const overlayRef = this.overlay.create(config.positionClass, this.overlayContainer);\n    this.index = this.index + 1;\n    let sanitizedMessage: string | undefined | null = message;\n    if (message && config.enableHtml) {\n      sanitizedMessage = this.sanitizer.sanitize(SecurityContext.HTML, message);\n    }\n\n    const toastRef = new ToastRef(overlayRef);\n    const toastPackage = new ToastPackage(\n      this.index,\n      config,\n      sanitizedMessage,\n      title,\n      toastType,\n      toastRef,\n    );\n    const toastInjector = new ToastInjector(toastPackage, this._injector);\n    const component = new ComponentPortal(config.toastComponent, toastInjector);\n    const portal = overlayRef.attach(component, this.toastrConfig.newestOnTop);\n    toastRef.componentInstance = portal.instance;\n    const ins: ActiveToast<any> = {\n      toastId: this.index,\n      title: title || '',\n      message: message || '',\n      toastRef,\n      onShown: toastRef.afterActivate(),\n      onHidden: toastRef.afterClosed(),\n      onTap: toastPackage.onTap(),\n      onAction: toastPackage.onAction(),\n      portal,\n    };\n\n    if (!keepInactive) {\n      this.currentlyActive = this.currentlyActive + 1;\n      setTimeout(() => {\n        ins.toastRef.activate();\n      });\n    }\n\n    this.toasts.push(ins);\n    return ins;\n  }\n}\n","import {\n  animate,\n  state,\n  style,\n  transition,\n  trigger\n} from '@angular/animations';\nimport {\n  Component,\n  HostBinding,\n  HostListener,\n  NgZone,\n  OnDestroy\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { IndividualConfig, ToastPackage } from './toastr-config';\nimport { ToastrService } from './toastr.service';\n\n@Component({\n  selector: '[toast-component]',\n  styleUrls: ['./toast.component.scss'],\n  template: `\n  <button *ngIf=\"options.closeButton\" (click)=\"remove()\" class=\"toast-close-button\" aria-label=\"Close\">\n    <span aria-hidden=\"true\">&times;</span>\n  </button>\n  <div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\n    {{ title }} <ng-container *ngIf=\"duplicatesCount\">[{{ duplicatesCount + 1 }}]</ng-container>\n  </div>\n  <div *ngIf=\"message && options.enableHtml\" role=\"alertdialog\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [innerHTML]=\"message\">\n  </div>\n  <div *ngIf=\"message && !options.enableHtml\" role=\"alertdialog\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\n    {{ message }}\n  </div>\n  <div *ngIf=\"options.progressBar\">\n    <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\n  </div>\n  `,\n  animations: [\n    trigger('flyInOut', [\n      state('inactive', style({ opacity: 0 })),\n      state('active', style({ opacity: 1 })),\n      state('removed', style({ opacity: 0 })),\n      transition(\n        'inactive => active',\n        animate('{{ easeTime }}ms {{ easing }}')\n      ),\n      transition(\n        'active => removed',\n        animate('{{ easeTime }}ms {{ easing }}')\n      )\n    ])\n  ],\n  preserveWhitespaces: false\n})\nexport class Toast implements OnDestroy {\n  message?: string | null;\n  title?: string;\n  options: IndividualConfig;\n  duplicatesCount!: number;\n  originalTimeout: number;\n  /** width of progress bar */\n  width = -1;\n  /** a combination of toast type and options.toastClass */\n  @HostBinding('class') toastClasses = '';\n  /** controls animation */\n  @HostBinding('@flyInOut')\n  state = {\n    value: 'inactive',\n    params: {\n      easeTime: this.toastPackage.config.easeTime,\n      easing: 'ease-in'\n    }\n  };\n\n  /** hides component when waiting to be displayed */\n  @HostBinding('style.display')\n  get displayStyle(): string | undefined {\n    if (this.state.value === 'inactive') {\n      return 'none';\n    }\n\n    return;\n  }\n\n  private timeout: any;\n  private intervalId: any;\n  private hideTime!: number;\n  private sub: Subscription;\n  private sub1: Subscription;\n  private sub2: Subscription;\n  private sub3: Subscription;\n\n  constructor(\n    protected toastrService: ToastrService,\n    public toastPackage: ToastPackage,\n    protected ngZone?: NgZone\n  ) {\n    this.message = toastPackage.message;\n    this.title = toastPackage.title;\n    this.options = toastPackage.config;\n    this.originalTimeout = toastPackage.config.timeOut;\n    this.toastClasses = `${toastPackage.toastType} ${\n      toastPackage.config.toastClass\n    }`;\n    this.sub = toastPackage.toastRef.afterActivate().subscribe(() => {\n      this.activateToast();\n    });\n    this.sub1 = toastPackage.toastRef.manualClosed().subscribe(() => {\n      this.remove();\n    });\n    this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(() => {\n      this.resetTimeout();\n    });\n    this.sub3 = toastPackage.toastRef.countDuplicate().subscribe(count => {\n      this.duplicatesCount = count;\n    });\n  }\n  ngOnDestroy() {\n    this.sub.unsubscribe();\n    this.sub1.unsubscribe();\n    this.sub2.unsubscribe();\n    this.sub3.unsubscribe();\n    clearInterval(this.intervalId);\n    clearTimeout(this.timeout);\n  }\n  /**\n   * activates toast and sets timeout\n   */\n  activateToast() {\n    this.state = { ...this.state, value: 'active' };\n    if (!(this.options.disableTimeOut === true || this.options.disableTimeOut === 'timeOut') && this.options.timeOut) {\n      this.outsideTimeout(() => this.remove(), this.options.timeOut);\n      this.hideTime = new Date().getTime() + this.options.timeOut;\n      if (this.options.progressBar) {\n        this.outsideInterval(() => this.updateProgress(), 10);\n      }\n    }\n  }\n  /**\n   * updates progress bar width\n   */\n  updateProgress() {\n    if (this.width === 0 || this.width === 100 || !this.options.timeOut) {\n      return;\n    }\n    const now = new Date().getTime();\n    const remaining = this.hideTime - now;\n    this.width = (remaining / this.options.timeOut) * 100;\n    if (this.options.progressAnimation === 'increasing') {\n      this.width = 100 - this.width;\n    }\n    if (this.width <= 0) {\n      this.width = 0;\n    }\n    if (this.width >= 100) {\n      this.width = 100;\n    }\n  }\n\n  resetTimeout() {\n    clearTimeout(this.timeout);\n    clearInterval(this.intervalId);\n    this.state = { ...this.state, value: 'active' };\n\n    this.outsideTimeout(() => this.remove(), this.originalTimeout);\n    this.options.timeOut = this.originalTimeout;\n    this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n    this.width = -1;\n    if (this.options.progressBar) {\n      this.outsideInterval(() => this.updateProgress(), 10);\n    }\n  }\n\n  /**\n   * tells toastrService to remove this toast after animation time\n   */\n  remove() {\n    if (this.state.value === 'removed') {\n      return;\n    }\n    clearTimeout(this.timeout);\n    this.state = { ...this.state, value: 'removed' };\n    this.outsideTimeout(\n      () => this.toastrService.remove(this.toastPackage.toastId),\n      +this.toastPackage.config.easeTime\n    );\n  }\n  @HostListener('click')\n  tapToast() {\n    if (this.state.value === 'removed') {\n      return;\n    }\n    this.toastPackage.triggerTap();\n    if (this.options.tapToDismiss) {\n      this.remove();\n    }\n  }\n  @HostListener('mouseenter')\n  stickAround() {\n    if (this.state.value === 'removed') {\n      return;\n    }\n    clearTimeout(this.timeout);\n    this.options.timeOut = 0;\n    this.hideTime = 0;\n\n    // disable progressBar\n    clearInterval(this.intervalId);\n    this.width = 0;\n  }\n  @HostListener('mouseleave')\n  delayedHideToast() {\n    if (\n      (this.options.disableTimeOut === true || this.options.disableTimeOut === 'extendedTimeOut') ||\n      this.options.extendedTimeOut === 0 ||\n      this.state.value === 'removed'\n    ) {\n      return;\n    }\n    this.outsideTimeout(() => this.remove(), this.options.extendedTimeOut);\n    this.options.timeOut = this.options.extendedTimeOut;\n    this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n    this.width = -1;\n    if (this.options.progressBar) {\n      this.outsideInterval(() => this.updateProgress(), 10);\n    }\n  }\n\n  outsideTimeout(func: () => any, timeout: number) {\n    if (this.ngZone) {\n      this.ngZone.runOutsideAngular(\n        () =>\n          (this.timeout = setTimeout(\n            () => this.runInsideAngular(func),\n            timeout\n          ))\n      );\n    } else {\n      this.timeout = setTimeout(() => func(), timeout);\n    }\n  }\n\n  outsideInterval(func: () => any, timeout: number) {\n    if (this.ngZone) {\n      this.ngZone.runOutsideAngular(\n        () =>\n          (this.intervalId = setInterval(\n            () => this.runInsideAngular(func),\n            timeout\n          ))\n      );\n    } else {\n      this.intervalId = setInterval(() => func(), timeout);\n    }\n  }\n\n  private runInsideAngular(func: () => any) {\n    if (this.ngZone) {\n      this.ngZone.run(() => func());\n    } else {\n      func();\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { Toast } from './toast.component';\nimport {\n  DefaultNoComponentGlobalConfig,\n  GlobalConfig,\n  TOAST_CONFIG,\n} from './toastr-config';\n\nexport const DefaultGlobalConfig: GlobalConfig = {\n  ...DefaultNoComponentGlobalConfig,\n  toastComponent: Toast,\n};\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [Toast],\n    exports: [Toast]\n})\nexport class ToastrModule {\n  static forRoot(config: Partial<GlobalConfig> = {}): ModuleWithProviders<ToastrModule> {\n    return {\n      ngModule: ToastrModule,\n      providers: [\n        {\n          provide: TOAST_CONFIG,\n          useValue: {\n            default: DefaultGlobalConfig,\n            config,\n          },\n        },\n      ],\n    };\n  }\n}\n\n@NgModule({\n  imports: [CommonModule],\n})\nexport class ToastrComponentlessModule {\n  static forRoot(config: Partial<GlobalConfig> = {}): ModuleWithProviders<ToastrModule> {\n    return {\n      ngModule: ToastrModule,\n      providers: [\n        {\n          provide: TOAST_CONFIG,\n          useValue: {\n            default: DefaultNoComponentGlobalConfig,\n            config,\n          },\n        },\n      ],\n    };\n  }\n}\n","import {Injectable, ViewChild} from '@angular/core';\n\ndeclare let iNet: any;\nimport {Observable} from 'rxjs';\nimport {HttpClientService} from \"inet-core\";\nimport {ToastrService} from \"./toastr/toastr.service\";\nimport {ToastContainerDirective} from \"./toastr/toast.directive\";\n\n@Injectable()\nexport class NotifyService {\n\n    @ViewChild(ToastContainerDirective) toastContainer?: ToastContainerDirective;\n\n    private url = {\n        list: iNet.getPUrl('social/activity/notify')\n    };\n\n    constructor(private http: HttpClientService,\n                private toastService: ToastrService) {\n\n        this.toastService.overlayContainer = this.toastContainer;\n    }\n\n    count(): Observable<Object> {\n        return this.http.getJSON(this.url.list);\n    }\n\n    getMessage(params: any): Observable<Object> {\n        return this.http.getJSON(this.url.list, params);\n    }\n\n    showMessage(msg: string, type?: string, title = 'Thông báo', config: any = {}) {\n        switch (type) {\n            case 'info':\n                this.toastService.info(msg, title, config);\n                break;\n            case 'error':\n                this.toastService.error(msg, title, config);\n                break;\n            case 'warning':\n                this.toastService.warning(msg, title, config);\n                break;\n            case 'success':\n            default:\n                this.toastService.success(msg, title, config);\n        }\n    }\n\n    getNotifyService(): ToastrService {\n        return this.toastService;\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NotifyService} from \"./notify.service\";\nimport {ToastrModule} from \"./toastr/toastr.module\";\nimport {NotificationService} from \"inet-core\";\nimport {ToastrService} from \"./toastr/toastr.service\";\nimport {ToastContainerModule} from \"./toastr/toast.directive\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ToastrModule.forRoot(),\n        ToastContainerModule\n    ],\n\n    declarations: [],\n    exports: [ToastrModule, ToastContainerModule],\n    providers: [NotifyService, ToastrService]\n})\nexport class NotifyModule {\n    constructor(service: NotifyService) {\n        // Override show message function\n        NotificationService.prototype.showMessage =  function (msg, type, title, config) {\n            service.showMessage(msg, type, title, config);\n        };\n    }\n}","import {\n    Component,\n    ContentChild, ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef\n} from '@angular/core';\n\n@Component({\n    selector: 'app-custom-pagination',\n    templateUrl: './custom-pagination.component.html',\n    styleUrls: ['./custom-pagination.component.scss']\n})\n\nexport class CustomPaginationComponent implements OnInit, OnChanges {\n    @Input() pageSize = 10;\n    @Input() pageNumber = 1;\n    @Input() totalItems = 0;\n    @Input() firstLoad = true;\n    @Input() params: any = {};\n    @Input() pageRange = false;\n    @Input() numberRange = true;\n\n    @ContentChild('basicSearch') basicSearch!: TemplateRef<any>;\n    @ContentChild('advanceSearch') advanceSearch!: TemplateRef<any>;\n    @ContentChild('actionSearch') actionSearch!: TemplateRef<any>;\n\n    query: any;\n    pageCount = 0;\n    startNumber = 0;\n    endNumber = 0;\n\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onLoad = new EventEmitter<any>();\n    @Output() pagingChanged = new EventEmitter<any>();\n\n    constructor() {\n\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if ('totalItems' in changes) {\n            this.processOnTotalChanged();\n        }\n    }\n\n    ngOnInit() {\n        if (this.firstLoad) {\n            this.load();\n        } else {\n            this.getItemsPage();\n        }\n    }\n\n    computeRef() {\n        this.processOnTotalChanged(false)\n    }\n\n    changeToFirstPage(event: any) {\n        this.pageNumber = 1;\n        this.onPageChanged(event, this.pageNumber);\n    }\n\n    changeToLastPage(event: any) {\n        this.pageNumber = this.pageCount;\n        this.onPageChanged(event, this.pageNumber);\n    }\n\n    changeToNextPage(event: any) {\n        if (this.pageNumber < this.pageCount) {\n            this.pageNumber++;\n            this.onPageChanged(event, this.pageNumber);\n        }\n    }\n\n    changeToPreviousPage(event: any) {\n        if (this.pageNumber > 1) {\n            this.pageNumber--;\n            this.onPageChanged(event, this.pageNumber);\n        }\n    }\n\n    changeToCurrentPage(event: any) {\n        this.pageNumber = event.currentTarget.value;\n        if (this.pageNumber < 1) {\n            this.pageNumber = 1;\n        } else if (this.pageNumber > this.pageCount) {\n            this.pageNumber = this.pageCount;\n        }\n        event.currentTarget.value = this.pageNumber;\n\n        this.onPageChanged(event, this.pageNumber);\n    }\n\n    get maxPage() {\n        return Math.ceil(this.totalItems / this.pageSize) || 0;\n    }\n\n    getQuery(): any {\n        let query = {\n            pageNumber: (this.pageNumber < 1) ? 0 : this.pageNumber - 1,\n            pageSize: this.pageSize\n        };\n        query = { ...this.getParams(), ...query };\n        return query;\n    }\n\n    resetPage() {\n        this.pageNumber = 0;\n        this.processOnTotalChanged();\n    }\n\n    setTotalItems(v: number) {\n        this.totalItems = v;\n        this.processOnTotalChanged();\n    }\n\n    setParams(params: any = {}) {\n        this.params = params;\n    }\n\n    getParams(): any {\n        return this.params || {};\n    }\n\n    reload(event?: any) {\n        this.onLoad.emit(this.getQuery());\n    }\n\n    load() {\n        let query = { newPage: 1, pageSize: this.pageSize };\n        query = { ...this.getParams(), ...query };\n        this.processOnPaginationChanged(query);\n    }\n\n    onPageChanged(event?: Event, pageNumber?: number) {\n        this.processOnPaginationChanged({ newPage: pageNumber, pageSize: -1 });\n    }\n\n    private processOnPaginationChanged(args: any): string {\n        this.pageNumber = args.newPage;\n        this.onLoad.emit(this.getQuery());\n        this.getItemsPage();\n\n        return 'onPaginationChanged';\n    }\n\n    private processOnTotalChanged(emitEvent: boolean= true) {\n        //console.log('[pageCount, maxPage, pageNumber, firstLoad]', this.pageCount, this.maxPage, this.pageNumber)\n        let foreLoad = false;\n        if (this.maxPage !== this.pageCount) {\n            this.pageCount = this.maxPage || 0;\n        }\n        if (this.pageCount < 1) {\n            this.pageNumber = 0;\n        } else if (this.pageCount < this.pageNumber) {\n            this.pageNumber = this.pageCount;\n            foreLoad = true\n        }\n        this.query = this.getQuery();\n        this.getItemsPage();\n        if (emitEvent) {\n            this.pagingChanged.emit({\n                maxPage: this.maxPage,\n                pageNumber: this.pageNumber,\n                pageCount: this.pageCount,\n                totalItems: this.totalItems,\n                query: this.query,\n                foreLoad\n            })\n        }\n    }\n\n    private getItemsPage() {\n        if (this.totalItems < 1) {\n            this.startNumber = 0;\n            this.endNumber = 0;\n            this.pageNumber = 0;\n        } else {\n            if (this.pageNumber === 0) {\n                this.pageNumber++;\n            }\n            let totalPage = this.pageNumber * this.pageSize;\n            this.startNumber = totalPage - this.pageSize + 1;\n            let endNumber = totalPage > this.totalItems ? this.totalItems : (this.startNumber + this.pageSize - 1);\n            if (endNumber > totalPage) {\n                endNumber = totalPage\n            }\n            this.endNumber = endNumber;\n\n        }\n        this.pageCount = Math.ceil(this.totalItems / this.pageSize) || 0;\n    }\n}\n","<div class=\"pagination m-0 py-2 form-group d-flex flex-row flex-nowrap align-items-center\"\n     [ngClass]=\"{'pagination-box':!pageRange , 'pull-right':pageRange }\">\n    <ng-container [ngTemplateOutlet]=\"basicSearch\" [ngTemplateOutletContext]=\"{item: params}\"></ng-container>\n    <div class=\"align-items-end justify-content-end d-flex flex-grow-1 flex-shrink-1 flex-nowrap\">\n        <div *ngIf=\"numberRange\" class=\"ml-1 mr-2 align-self-center font-weight-bold f-12\">\n          {{startNumber}} - {{endNumber}} / {{totalItems}}\n        </div>\n        <div class=\"pagination-controllers d-flex flex-nowrap \">\n            <div class=\"pagination-pages mr-1\">\n                <button [disabled]=\"pageNumber === 1 || totalItems === 0\"\n                        class=\"btn btn-sm btn-light btn-circle pagination-firstpage\"\n                        [title]=\"'grid.firstText' | translate\" [tooltip]=\"'grid.firstText' | translate\" placement=\"bottom\"\n                        (click)=\"changeToFirstPage($event)\">\n                    <i class=\"fa fa-step-backward\"></i>\n                </button>\n                <button [disabled]=\"pageNumber === 1 || totalItems === 0\"\n                        class=\"btn btn-sm btn-light btn-circle pagination-prevpage ml-1\"\n                        [title]=\"'grid.prevText' | translate\" [tooltip]=\"'grid.prevText' | translate\"\n                        (click)=\"changeToPreviousPage($event)\" placement=\"bottom\">\n                    <i class=\"fa fa-chevron-left\"></i>\n                </button>\n                <div class=\"pagination-page ml-1\">\n                    <div class=\"input-group input-group-sm\">\n                        <input value=\"{{pageNumber}}\" [disabled]=\"totalItems === 0\"\n                                (change)=\"changeToCurrentPage($event)\" type=\"number\" class=\"form-control\" min=\"0\" step=\"1\">\n                        <div class=\"input-group-append\">\n                            <span class=\"input-group-text\"><span>/</span><span>{{pageCount}}</span></span>\n                        </div>\n                    </div>\n                </div>\n                <button [disabled]=\"pageNumber === pageCount || totalItems === 0\"\n                        class=\"btn btn-sm btn-light btn-circle pagination-nextpage ml-1\"\n                        [title]=\"'grid.nextText' | translate\" [tooltip]=\"'grid.nextText' | translate\" placement=\"bottom\"\n                        (click)=\"changeToNextPage($event)\">\n                    <i class=\"fa fa-chevron-right\"></i>\n                </button>\n                <button [disabled]=\"pageNumber === pageCount || totalItems === 0\" (click)=\"changeToLastPage($event)\"\n                        [title]=\"'grid.lastText' | translate\" [tooltip]=\"'grid.lastText' | translate\" placement=\"bottom\"\n                        class=\"btn btn-sm btn-light btn-circle pagination-lastpage ml-1\">\n                    <i class=\"fa fa-step-forward\"></i>\n                </button>\n                <button [title]=\"'grid.refreshText' | translate\" [tooltip]=\"'grid.refreshText' | translate\" (click)=\"reload($event)\" type=\"button\"\n                        class=\"btn btn-sm btn-light btn-circle pagination-reload ml-1\" placement=\"bottom\">\n                    <i class=\"fa fa-refresh\"></i>\n                </button>\n            </div>\n            <ng-template [ngTemplateOutlet]=\"actionSearch\" [ngTemplateOutletContext]=\"{item: params}\"></ng-template>\n        </div>\n    </div>\n</div>\n<div class=\"advance-search-paging\">\n    <ng-container [ngTemplateOutlet]=\"advanceSearch\" [ngTemplateOutletContext]=\"{item: params}\"></ng-container>\n</div>\n\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CustomPaginationComponent} from \"./custom-pagination.component\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {TooltipModule} from \"ngx-bootstrap/tooltip\";\n\n@NgModule({\n  declarations: [CustomPaginationComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    TranslateModule,\n    TooltipModule.forRoot()\n  ],\n  exports: [CustomPaginationComponent],\n  providers: []\n})\nexport class CustomPaginationModule {\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n\n/** time in which the message has to be cleared */\nconst DURATION = 7000;\n\n@Injectable()\nexport class MessageService {\n  /** variable to hold the user message */\n  private message: Subject<string> = new Subject();\n\n  constructor() { }\n\n  /** returns the message sent by the editor */\n  getMessage(): Observable<string> {\n    return this.message.asObservable();\n  }\n\n  /**\n   * sends message to the editor\n   *\n   * @param message message to be sent\n   */\n  sendMessage(message: string): void {\n    this.message.next(message);\n    this.clearMessageIn(DURATION);\n  }\n\n  /**\n   * a short interval to clear message\n   *\n   * @param milliseconds time in seconds in which the message has to be cleared\n   */\n  private clearMessageIn(milliseconds: number): void {\n    setTimeout(() => {\n      this.message.next('');\n    }, milliseconds);\n  }\n}\n","import { Component } from '@angular/core';\n\nimport { MessageService } from '../common/services/message.service';\n\n@Component({\n  selector: 'app-ngx-editor-message',\n  templateUrl: './ngx-editor-message.component.html',\n  styleUrls: ['./ngx-editor-message.component.scss']\n})\n\nexport class NgxEditorMessageComponent {\n  /** property that holds the message to be displayed on the editor */\n  ngxMessage = undefined;\n\n  /**\n   * @param _messageService service to send message to the editor\n   */\n  constructor(private _messageService: MessageService) {\n    // @ts-ignore\n    this._messageService.getMessage().subscribe((message: string) => this.ngxMessage = message);\n  }\n\n  /**\n   * clears editor message\n   */\n  clearMessage(): void {\n    this.ngxMessage = undefined;\n  }\n}\n","<div class=\"ngx-editor-message\" *ngIf=\"ngxMessage\" (dblclick)=\"clearMessage()\">\n  {{ ngxMessage }}\n</div>\n","/**\n * enable or disable toolbar based on configuration\n *\n * @param value toolbar item\n * @param toolbar toolbar configuration object\n */\nexport function canEnableToolbarOptions(value: string, toolbar: any): boolean {\n  if (value) {\n    if (toolbar['length'] === 0) {\n      return true;\n    } else {\n      const found = toolbar.filter((array: any) => {\n        return array.indexOf(value) !== -1;\n      });\n\n      return found.length ? true : false;\n    }\n  } else {\n    return false;\n  }\n}\n\n/**\n * set editor configuration\n *\n * @param value configuration via [config] property\n * @param ngxEditorConfig default editor configuration\n * @param input direct configuration inputs via directives\n */\nexport function getEditorConfiguration(value: any, ngxEditorConfig: any, input: any): any {\n  for (const i in ngxEditorConfig) {\n    if (i) {\n      if (input[i] !== undefined) {\n        value[i] = input[i];\n      }\n      if (!value.hasOwnProperty(i)) {\n        value[i] = ngxEditorConfig[i];\n      }\n    }\n  }\n\n  return value;\n}\n\n/**\n * return vertical if the element is the resizer property is set to basic\n *\n * @param resizer type of resizer, either basic or stack\n */\nexport function canResize(resizer: string): any {\n  if (resizer === 'basic') {\n    return 'vertical';\n  }\n  return false;\n}\n\n/**\n * save selection when the editor is focussed out\n */\nexport function saveSelection(): any {\n  if (window.getSelection) {\n    const sel = window.getSelection();\n    if (sel && sel.getRangeAt && sel.rangeCount) {\n      return sel.getRangeAt(0);\n    }\n  } else if (!!document.getSelection && document.createRange) {\n    return document.createRange();\n  }\n  return null;\n}\n\n/**\n * restore selection when the editor is focussed in\n *\n * @param range saved selection when the editor is focussed out\n */\nexport function restoreSelection(range: any): boolean {\n  if (range) {\n    if (window.getSelection) {\n      const sel = window.getSelection();\n      if(sel) {\n        sel.removeAllRanges();\n        sel.addRange(range);\n      }\n      return true;\n    } else if (!!document.getSelection && range.select) {\n      range.select();\n      return true;\n    }\n    return false;\n  } else {\n    return false;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpRequest } from '@angular/common/http';\nimport * as Utils from '../utils/ngx-editor.utils';\n\n@Injectable()\nexport class CommandExecutorService {\n  /** saves the selection from the editor when focussed out */\n  savedSelection: any = undefined;\n\n  /**\n   *\n   * @param _http HTTP Client for making http requests\n   */\n  constructor(private _http: HttpClient) { }\n\n  /**\n   * executes command from the toolbar\n   *\n   * @param command command to be executed\n   */\n  execute(command: string): void {\n    if (!this.savedSelection && command !== 'enableObjectResizing') {\n      throw new Error('Range out of Editor');\n    }\n\n    if (command === 'enableObjectResizing') {\n      document.execCommand('enableObjectResizing', true);\n    }\n\n    if (command === 'blockquote') {\n      document.execCommand('formatBlock', false, 'blockquote');\n    }\n\n    if (command === 'removeBlockquote') {\n      document.execCommand('formatBlock', false, 'div');\n    }\n    // @ts-ignore\n    document.execCommand(command, false, null);\n  }\n\n  /**\n   * inserts image in the editor\n   *\n   * @param imageURI url of the image to be inserted\n   */\n  insertImage(imageURI: string): void {\n    if (this.savedSelection) {\n      if (imageURI) {\n        const restored = Utils.restoreSelection(this.savedSelection);\n        if (restored) {\n          const inserted = document.execCommand('insertImage', false, imageURI);\n          if (!inserted) {\n            throw new Error('Invalid URL');\n          }\n        }\n      }\n    } else {\n      throw new Error('Range out of the editor');\n    }\n  }\n\n  /**\n * inserts image in the editor\n *\n * @param videParams url of the image to be inserted\n */\n  insertVideo(videParams: any): void {\n    if (this.savedSelection) {\n      if (videParams) {\n        const restored = Utils.restoreSelection(this.savedSelection);\n        if (restored) {\n          if (this.isYoutubeLink(videParams.videoUrl)) {\n            const youtubeURL = '<iframe width=\"' + videParams.width + '\" height=\"' + videParams.height + '\"'\n              + 'src=\"' + videParams.videoUrl + '\"></iframe>';\n            this.insertHtml(youtubeURL);\n          } else if (this.checkTagSupportInBrowser('video')) {\n\n            if (this.isValidURL(videParams.videoUrl)) {\n              const videoSrc = '<video width=\"' + videParams.width + '\" height=\"' + videParams.height + '\"'\n                + ' controls=\"true\"><source src=\"' + videParams.videoUrl + '\"></video>';\n              this.insertHtml(videoSrc);\n            } else {\n              throw new Error('Invalid video URL');\n            }\n\n          } else {\n            throw new Error('Unable to insert video');\n          }\n        }\n      }\n    } else {\n      throw new Error('Range out of the editor');\n    }\n  }\n\n  /**\n   * checks the input url is a valid youtube URL or not\n   *\n   * @param url Youtue URL\n   */\n  private isYoutubeLink(url: string): boolean {\n    const ytRegExp = /^(http(s)?:\\/\\/)?((w){3}.)?youtu(be|.be)?(\\.com)?\\/.+/;\n    return ytRegExp.test(url);\n  }\n\n  /**\n   * check whether the string is a valid url or not\n   * @param url url\n   */\n  private isValidURL(url: string) {\n    const urlRegExp = /(http|https):\\/\\/(\\w+:{0,1}\\w*)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%!\\-\\/]))?/;\n    return urlRegExp.test(url);\n  }\n\n  /**\n   * uploads image to the server\n   *\n   * @param file file that has to be uploaded\n   * @param endPoint enpoint to which the image has to be uploaded\n   */\n  uploadImage(file: File, endPoint: string): any {\n    if (!endPoint) {\n      throw new Error('Image Endpoint isn`t provided or invalid');\n    }\n\n    const formData: FormData = new FormData();\n\n    if (file) {\n\n      formData.append('file', file);\n\n      const req = new HttpRequest('POST', endPoint, formData, {\n        reportProgress: true\n      });\n\n      return this._http.request(req);\n\n    } else {\n      throw new Error('Invalid Image');\n    }\n  }\n\n  /**\n   * inserts link in the editor\n   *\n   * @param params parameters that holds the information for the link\n   */\n  createLink(params: any): void {\n    if (this.savedSelection) {\n      /**\n       * check whether the saved selection contains a range or plain selection\n       */\n      if (params.urlNewTab) {\n        const newUrl = '<a href=\"' + params.urlLink + '\" target=\"_blank\">' + params.urlText + '</a>';\n\n        // @ts-ignore\n        if (document.getSelection().type !== 'Range') {\n          const restored = Utils.restoreSelection(this.savedSelection);\n          if (restored) {\n            this.insertHtml(newUrl);\n          }\n        } else {\n          throw new Error('Only new links can be inserted. You cannot edit URL`s');\n        }\n      } else {\n        const restored = Utils.restoreSelection(this.savedSelection);\n        if (restored) {\n          document.execCommand('createLink', false, params.urlLink);\n        }\n      }\n    } else {\n      throw new Error('Range out of the editor');\n    }\n  }\n\n  /**\n   * insert color either font or background\n   *\n   * @param color color to be inserted\n   * @param where where the color has to be inserted either text/background\n   */\n  insertColor(color: string, where: string): void {\n    if (this.savedSelection) {\n      const restored = Utils.restoreSelection(this.savedSelection);\n      if (restored && this.checkSelection()) {\n        if (where === 'textColor') {\n          document.execCommand('foreColor', false, color);\n        } else {\n          document.execCommand('hiliteColor', false, color);\n        }\n      }\n    } else {\n      throw new Error('Range out of the editor');\n    }\n  }\n\n  /**\n   * set email param\n   *\n   * @param param to be set\n   */\n  setEmailParam(v: string): void {\n      if (this.savedSelection) {\n          const deletedValue = this.deleteAndGetElement();\n          if (v) {\n              const restored = Utils.restoreSelection(this.savedSelection);\n              if (restored) {\n                  const paramerter = `<div><b>`+ v +`</b></div>`;\n                  this.insertHtml(paramerter);\n              }\n          }\n      }\n      else {\n          throw new Error('Range out of the editor');\n      }\n  }\n  /**\n   * set font size for text\n   *\n   * @param fontSize font-size to be set\n   */\n  setFontSize(fontSize: string): void {\n    if (this.savedSelection && this.checkSelection()) {\n      const deletedValue = this.deleteAndGetElement();\n\n      if (deletedValue) {\n        const restored = Utils.restoreSelection(this.savedSelection);\n\n        if (restored) {\n          if (this.isNumeric(fontSize)) {\n            const fontPx = '<span style=\"font-size: ' + fontSize + 'px;\">' + deletedValue + '</span>';\n            this.insertHtml(fontPx);\n          } else {\n            const fontPx = '<span style=\"font-size: ' + fontSize + ';\">' + deletedValue + '</span>';\n            this.insertHtml(fontPx);\n          }\n        }\n      }\n    } else {\n      throw new Error('Range out of the editor');\n    }\n  }\n\n  /**\n   * set font name/family for text\n   *\n   * @param fontName font-family to be set\n   */\n  setFontName(fontName: string): void {\n    if (this.savedSelection && this.checkSelection()) {\n      const deletedValue = this.deleteAndGetElement();\n\n      if (deletedValue) {\n        const restored = Utils.restoreSelection(this.savedSelection);\n\n        if (restored) {\n          if (this.isNumeric(fontName)) {\n            const fontFamily = '<span style=\"font-family: ' + fontName + 'px;\">' + deletedValue + '</span>';\n            this.insertHtml(fontFamily);\n          } else {\n            const fontFamily = '<span style=\"font-family: ' + fontName + ';\">' + deletedValue + '</span>';\n            this.insertHtml(fontFamily);\n          }\n        }\n      }\n    } else {\n      throw new Error('Range out of the editor');\n    }\n  }\n\n  /** insert HTML */\n  private insertHtml(html: string): void {\n    const isHTMLInserted = document.execCommand('insertHTML', false, html);\n    if (!isHTMLInserted) {\n      throw new Error('Unable to perform the operation');\n    }\n  }\n\n  /**\n   * check whether the value is a number or string\n   * if number return true\n   * else return false\n   */\n  private isNumeric(value: any): boolean {\n    return /^-{0,1}\\d+$/.test(value);\n  }\n\n  /** delete the text at selected range and return the value */\n  private deleteAndGetElement(): any {\n    let slectedText;\n\n    if (this.savedSelection) {\n      slectedText = this.savedSelection.toString();\n      this.savedSelection.deleteContents();\n      return slectedText;\n    }\n\n    return false;\n  }\n\n  /** check any slection is made or not */\n  private checkSelection(): any {\n    const slectedText = this.savedSelection.toString();\n\n    if (slectedText.length === 0) {\n      throw new Error('No Selection Made');\n    }\n\n    return true;\n  }\n\n  /**\n   * check tag is supported by browser or not\n   *\n   * @param tag HTML tag\n   */\n  private checkTagSupportInBrowser(tag: string): boolean {\n    return !(document.createElement(tag) instanceof HTMLUnknownElement);\n  }\n\n}\n","import {Component, Input, Output, EventEmitter, OnInit, ViewChild} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { HttpResponse } from '@angular/common/http';\nimport { PopoverConfig } from 'ngx-bootstrap/popover';\nimport { CommandExecutorService } from '../common/services/command-executor.service';\nimport { MessageService } from '../common/services/message.service';\nimport * as Utils from '../common/utils/ngx-editor.utils';\n\n@Component({\n  selector: 'app-ngx-editor-toolbar',\n  templateUrl: './ngx-editor-toolbar.component.html',\n  styleUrls: ['./ngx-editor-toolbar.component.scss'],\n  providers: [PopoverConfig]\n})\n\nexport class NgxEditorToolbarComponent implements OnInit {\n  /** holds values of the insert link form */\n  urlForm!: UntypedFormGroup;\n  /** holds values of the insert image form */\n  imageForm!: UntypedFormGroup;\n  /** holds values of the insert video form */\n  videoForm!: UntypedFormGroup;\n  /** set to false when image is being uploaded */\n  uploadComplete = true;\n  /** upload percentage */\n  updloadPercentage = 0;\n  /** set to true when the image is being uploaded */\n  isUploading = false;\n  /** which tab to active for color insetion */\n  selectedColorTab = 'textColor';\n  /** font family name */\n  fontName = '';\n  /** font size */\n  fontSize = '';\n  /** hex color code */\n  hexColor = '';\n  /** show/hide image uploader */\n  isImageUploader = false;\n  params?: string;\n\n  /**\n   * Editor configuration\n   */\n  @Input() config: any;\n  @Input() emailParams: any;\n  @ViewChild('urlPopover') urlPopover: any;\n  @ViewChild('imagePopover') imagePopover: any;\n  @ViewChild('videoPopover') videoPopover: any;\n  @ViewChild('fontSizePopover') fontSizePopover: any;\n  @ViewChild('colorPopover') colorPopover: any;\n  @ViewChild('emailParamPopover') emailParamPopover: any;\n  /**\n   * Emits an event when a toolbar button is clicked\n   */\n  @Output() execute: EventEmitter<string> = new EventEmitter<string>();\n\n  constructor(private _popOverConfig: PopoverConfig,\n    private _formBuilder: UntypedFormBuilder,\n    private _messageService: MessageService,\n    private _commandExecutorService: CommandExecutorService) {\n    this._popOverConfig.outsideClick = true;\n    this._popOverConfig.placement = 'bottom';\n    this._popOverConfig.container = 'body';\n  }\n\n  /**\n   * enable or diable toolbar based on configuration\n   *\n   * @param value name of the toolbar buttons\n   */\n  canEnableToolbarOptions(value: any): boolean {\n    return Utils.canEnableToolbarOptions(value, this.config['toolbar']);\n  }\n\n  /**\n   * triggers command from the toolbar to be executed and emits an event\n   *\n   * @param command name of the command to be executed\n   */\n  triggerCommand(command: string): void {\n    this.execute.emit(command);\n  }\n\n  /**\n   * create URL insert form\n   */\n  buildUrlForm(): void {\n    this.urlForm = this._formBuilder.group({\n      urlLink: ['', [Validators.required]],\n      urlText: ['', [Validators.required]],\n      urlNewTab: [true]\n    });\n  }\n\n  /**\n   * inserts link in the editor\n   */\n  insertLink(): void {\n    try {\n      // @ts-ignore\n      this._commandExecutorService.createLink(this.urlForm.value);\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n\n    /** reset form to default */\n    this.buildUrlForm();\n    /** close inset URL pop up */\n    this.urlPopover.hide();\n  }\n\n  /**\n   * create insert image form\n   */\n  buildImageForm(): void {\n    this.imageForm = this._formBuilder.group({\n      imageUrl: ['', [Validators.required]]\n    });\n  }\n\n  /**\n   * create insert image form\n   */\n  buildVideoForm(): void {\n    this.videoForm = this._formBuilder.group({\n      videoUrl: ['', [Validators.required]],\n      height: [''],\n      width: ['']\n    });\n  }\n\n  /**\n   * Executed when file is selected\n   *\n   * @param e onChange event\n   */\n  onFileChange(e: any): void {\n    this.uploadComplete = false;\n    this.isUploading = true;\n\n    if (e.target.files.length > 0) {\n      const file = e.target.files[0];\n\n      try {\n        this._commandExecutorService.uploadImage(file, this.config.imageEndPoint).subscribe((event: any) => {\n\n          if (event.type) {\n            this.updloadPercentage = Math.round(100 * event.loaded / event.total);\n          }\n\n          if (event instanceof HttpResponse) {\n            try {\n              this._commandExecutorService.insertImage(event.body.url);\n            } catch (error: any) {\n              this._messageService.sendMessage(error.message);\n            }\n            this.uploadComplete = true;\n            this.isUploading = false;\n          }\n        });\n      } catch (error: any) {\n        this._messageService.sendMessage(error.message);\n        this.uploadComplete = true;\n        this.isUploading = false;\n      }\n    }\n  }\n\n  /** insert image in the editor */\n  insertImage(): void {\n    try {\n      if(this.imageForm) {\n        this._commandExecutorService.insertImage(this.imageForm.value.imageUrl);\n      }\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n\n    /** reset form to default */\n    this.buildImageForm();\n    /** close inset URL pop up */\n    this.imagePopover.hide();\n  }\n\n  /** insert image in the editor */\n  insertVideo(): void {\n    try {\n      if(this.videoForm) {\n        this._commandExecutorService.insertVideo(this.videoForm.value);\n      }\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n\n    /** reset form to default */\n    this.buildVideoForm();\n    /** close inset URL pop up */\n    this.videoPopover.hide();\n  }\n\n  /** inser text/background color */\n  insertColor(color: string, where: string): void {\n    try {\n      this._commandExecutorService.insertColor(color, where);\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n\n    this.colorPopover.hide();\n  }\n  /** set email param */\n  setEmailParam(email: string): void {\n      try {\n          this._commandExecutorService.setEmailParam(email);\n      } catch (error: any) {\n          this._messageService.sendMessage(error.message);\n      }\n      if(this.emailParamPopover) {\n        this.emailParamPopover.hide();\n      }\n  }\n\n\n  /** set font size */\n  setFontSize(fontSize: string): void {\n    try {\n      this._commandExecutorService.setFontSize(fontSize);\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n\n    this.fontSizePopover.hide();\n  }\n\n  /** set font Name/family */\n  setFontName(fontName: string): void {\n    try {\n      this._commandExecutorService.setFontName(fontName);\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n\n    this.fontSizePopover.hide();\n  }\n\n  ngOnInit() {\n    this.buildUrlForm();\n    this.buildImageForm();\n    this.buildVideoForm();\n  }\n\n  mouseEnter(item: any) {\n    this.params = item.parameter;\n  }\n\n  mouseLeave() {\n    this.params = '';\n  }\n\n}\n","<div class=\"ngx-toolbar\" *ngIf=\"config['showToolbar']\">\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('bold')\" (click)=\"triggerCommand('bold')\"\n      title=\"Bold\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-bold\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('italic')\" (click)=\"triggerCommand('italic')\"\n      title=\"Italic\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-italic\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('underline')\" (click)=\"triggerCommand('underline')\"\n      title=\"Underline\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-underline\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('strikeThrough')\" (click)=\"triggerCommand('strikeThrough')\"\n      title=\"Strikethrough\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-strikethrough\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('superscript')\" (click)=\"triggerCommand('superscript')\"\n      title=\"Superscript\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-superscript\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('subscript')\" (click)=\"triggerCommand('subscript')\"\n      title=\"Subscript\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-subscript\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('fontName')\" (click)=\"fontName = ''\"\n      title=\"Font Family\" [popover]=\"fontNameTemplate\" #fontNamePopover=\"bs-popover\" containerClass=\"ngxePopover\"\n      [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-font\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('fontSize')\" (click)=\"fontSize = ''\"\n      title=\"Font Size\" [popover]=\"fontSizeTemplate\" #fontSizePopover=\"bs-popover\" containerClass=\"ngxePopover\"\n      [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-text-height\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('color')\" (click)=\"hexColor = ''\"\n      title=\"Color Picker\" [popover]=\"insertColorTemplate\" #colorPopover=\"bs-popover\" containerClass=\"ngxePopover\"\n      [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-tint\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('justifyLeft')\" (click)=\"triggerCommand('justifyLeft')\"\n      title=\"Justify Left\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-align-left\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('justifyCenter')\" (click)=\"triggerCommand('justifyCenter')\"\n      title=\"Justify Center\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-align-center\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('justifyRight')\" (click)=\"triggerCommand('justifyRight')\"\n      title=\"Justify Right\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-align-right\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('justifyFull')\" (click)=\"triggerCommand('justifyFull')\"\n      title=\"Justify\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-align-justify\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('indent')\" (click)=\"triggerCommand('indent')\"\n      title=\"Indent\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-indent\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('outdent')\" (click)=\"triggerCommand('outdent')\"\n      title=\"Outdent\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-outdent\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('cut')\" (click)=\"triggerCommand('cut')\"\n      title=\"Cut\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-scissors\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('copy')\" (click)=\"triggerCommand('copy')\"\n      title=\"Copy\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-files-o\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('delete')\" (click)=\"triggerCommand('delete')\"\n      title=\"Delete\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-trash\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('removeFormat')\" (click)=\"triggerCommand('removeFormat')\"\n      title=\"Clear Formatting\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-eraser\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('undo')\" (click)=\"triggerCommand('undo')\"\n      title=\"Undo\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-undo\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('redo')\" (click)=\"triggerCommand('redo')\"\n      title=\"Redo\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-repeat\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('paragraph')\" (click)=\"triggerCommand('insertParagraph')\"\n      title=\"Paragraph\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-paragraph\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('blockquote')\" (click)=\"triggerCommand('blockquote')\"\n      title=\"Blockquote\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-quote-left\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('removeBlockquote')\" (click)=\"triggerCommand('removeBlockquote')\"\n      title=\"Remove Blockquote\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-quote-right\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('horizontalLine')\" (click)=\"triggerCommand('insertHorizontalRule')\"\n      title=\"Horizontal Line\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('unorderedList')\" (click)=\"triggerCommand('insertUnorderedList')\"\n      title=\"Unordered List\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-list-ul\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('orderedList')\" (click)=\"triggerCommand('insertOrderedList')\"\n      title=\"Ordered List\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-list-ol\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('link')\" (click)=\"buildUrlForm()\"\n      [popover]=\"insertLinkTemplate\" title=\"Insert Link\" #urlPopover=\"bs-popover\" containerClass=\"ngxePopover\"\n      [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-link\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('unlink')\" (click)=\"triggerCommand('unlink')\"\n      title=\"Unlink\" [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-chain-broken\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('image')\" (click)=\"buildImageForm()\"\n      title=\"Insert Image\" [popover]=\"insertImageTemplate\" #imagePopover=\"bs-popover\" containerClass=\"ngxePopover\"\n      [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-picture-o\" aria-hidden=\"true\"></i>\n    </button>\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('video')\" (click)=\"buildVideoForm()\"\n      title=\"Insert Video\" [popover]=\"insertVideoTemplate\" #videoPopover=\"bs-popover\" containerClass=\"ngxePopover\"\n      [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n  <div class=\"ngx-toolbar-set\">\n    <button type=\"button\" class=\"ngx-editor-button\" *ngIf=\"canEnableToolbarOptions('emailParam')\" (click)=\"triggerCommand('emailParam')\"\n            title=\"Chèn tham số cấu hình\" [popover]=\"emailParamTemplate\" #emailParamPopover=\"bs-popover\" containerClass=\"ngxePopover\"\n            [disabled]=\"!config['enableToolbar']\">\n      <i class=\"fa fa-usd\" aria-hidden=\"true\"></i>&nbsp;Tham số cấu hình\n    </button>\n  </div>\n</div>\n\n\n<!-- URL Popover template -->\n<ng-template #emailParamTemplate>\n  <div class=\"ngxe-popover extra-gt p-0\">\n    <ul class=\"list-group custom-textarea \">\n      <li (mouseleave)=\"mouseLeave()\" (mouseenter)=\"mouseEnter(item)\" *ngFor=\"let item of emailParams\"\n          class=\"list-group-item  border-0 custom-pointer p-1 pb-2\" (click)=\"setEmailParam(item.parameter)\" data-toggle=\"tooltip\" [title]=\"item.description\">\n        <b>{{item.parameter}}</b> = {{item.description}}</li>\n    </ul>\n  </div>\n</ng-template>\n\n\n<!-- URL Popover template -->\n<ng-template #insertLinkTemplate>\n  <div class=\"ngxe-popover extra-gt\">\n    <form [formGroup]=\"urlForm\" (ngSubmit)=\"urlForm.valid && insertLink()\" autocomplete=\"off\">\n      <div class=\"form-group\">\n        <label for=\"urlInput\" class=\"small\">URL</label>\n        <input type=\"text\" class=\"form-control-sm\" id=\"URLInput\" placeholder=\"URL\" formControlName=\"urlLink\" required>\n      </div>\n      <div class=\"form-group\">\n        <label for=\"urlTextInput\" class=\"small\">Text</label>\n        <input type=\"text\" class=\"form-control-sm\" id=\"urlTextInput\" placeholder=\"Text\" formControlName=\"urlText\"\n          required>\n      </div>\n      <div class=\"form-check\">\n        <input type=\"checkbox\" class=\"form-check-input\" id=\"urlNewTab\" formControlName=\"urlNewTab\">\n        <label class=\"form-check-label\" for=\"urlNewTab\">Open in new tab</label>\n      </div>\n      <button type=\"submit\" class=\"btn-primary btn-sm btn\">Submit</button>\n    </form>\n  </div>\n</ng-template>\n\n<!-- Image Uploader Popover template -->\n<ng-template #insertImageTemplate>\n  <div class=\"ngxe-popover imgc-ctnr\">\n    <div class=\"imgc-topbar btn-ctnr\">\n      <button type=\"button\" class=\"btn\" [ngClass]=\"{active: isImageUploader}\" (click)=\"isImageUploader = true\">\n        <i class=\"fa fa-upload\"></i>\n      </button>\n      <button type=\"button\" class=\"btn\" [ngClass]=\"{active: !isImageUploader}\" (click)=\"isImageUploader = false\">\n        <i class=\"fa fa-link\"></i>\n      </button>\n    </div>\n    <div class=\"imgc-ctnt is-image\">\n      <div *ngIf=\"isImageUploader; else insertImageLink\"> </div>\n      <div *ngIf=\"!isImageUploader; else imageUploder\"> </div>\n      <ng-template #imageUploder>\n        <div class=\"ngx-insert-img-ph\">\n          <p *ngIf=\"uploadComplete\">Choose Image</p>\n          <p *ngIf=\"!uploadComplete\">\n            <span>Uploading Image</span>\n            <br>\n            <span>{{ updloadPercentage }} %</span>\n          </p>\n          <div class=\"ngxe-img-upl-frm\">\n            <input type=\"file\" (change)=\"onFileChange($event)\" accept=\"image/*\" [disabled]=\"isUploading\" [style.cursor]=\"isUploading ? 'not-allowed': 'allowed'\">\n          </div>\n        </div>\n      </ng-template>\n      <ng-template #insertImageLink>\n        <form class=\"extra-gt\" [formGroup]=\"imageForm\" (ngSubmit)=\"imageForm.valid && insertImage()\" autocomplete=\"off\">\n          <div class=\"form-group\">\n            <label for=\"imageURLInput\" class=\"small\">URL</label>\n            <input type=\"text\" class=\"form-control-sm\" id=\"imageURLInput\" placeholder=\"URL\" formControlName=\"imageUrl\"\n              required>\n          </div>\n          <button type=\"submit\" class=\"btn-primary btn-sm btn\">Submit</button>\n        </form>\n      </ng-template>\n      <div class=\"progress\" *ngIf=\"!uploadComplete\">\n        <div class=\"progress-bar progress-bar-striped progress-bar-animated bg-success\" [ngClass]=\"{'bg-danger': updloadPercentage<20, 'bg-warning': updloadPercentage<50, 'bg-success': updloadPercentage>=100}\"\n          [style.width.%]=\"updloadPercentage\"></div>\n      </div>\n    </div>\n  </div>\n</ng-template>\n\n\n<!-- Insert Video Popover template -->\n<ng-template #insertVideoTemplate>\n  <div class=\"ngxe-popover imgc-ctnr\">\n    <div class=\"imgc-topbar btn-ctnr\">\n      <button type=\"button\" class=\"btn active\">\n        <i class=\"fa fa-link\"></i>\n      </button>\n\n    </div>\n    <div class=\"imgc-ctnt is-image\">\n      <form class=\"extra-gt\" [formGroup]=\"videoForm\" (ngSubmit)=\"videoForm.valid && insertVideo()\" autocomplete=\"off\">\n        <div class=\"form-group\">\n          <label for=\"videoURLInput\" class=\"small\">URL</label>\n          <input type=\"text\" class=\"form-control-sm\" id=\"videoURLInput\" placeholder=\"URL\" formControlName=\"videoUrl\"\n            required>\n        </div>\n        <div class=\"row form-group\">\n          <div class=\"col\">\n            <input type=\"text\" class=\"form-control-sm\" formControlName=\"height\" placeholder=\"height (px)\" pattern=\"[0-9]\">\n          </div>\n          <div class=\"col\">\n            <input type=\"text\" class=\"form-control-sm\" formControlName=\"width\" placeholder=\"width (px)\" pattern=\"[0-9]\">\n          </div>\n          <label class=\"small\">Height/Width</label>\n        </div>\n        <button type=\"submit\" class=\"btn-primary btn-sm btn\">Submit</button>\n      </form>\n    </div>\n  </div>\n</ng-template>\n\n<!-- Insert color template -->\n<ng-template #insertColorTemplate>\n  <div class=\"ngxe-popover imgc-ctnr\">\n    <div class=\"imgc-topbar two-tabs\">\n      <span (click)=\"selectedColorTab ='textColor'\" [ngClass]=\"{active: selectedColorTab ==='textColor'}\">Text</span>\n      <span (click)=\"selectedColorTab ='backgroundColor'\" [ngClass]=\"{active: selectedColorTab ==='backgroundColor'}\">Background</span>\n    </div>\n    <div class=\"imgc-ctnt is-color extra-gt1\">\n      <form autocomplete=\"off\">\n        <div class=\"form-group\">\n          <label for=\"hexInput\" class=\"small\">Hex Color</label>\n          <input type=\"text\" class=\"form-control-sm\" id=\"hexInput\" name=\"hexInput\" maxlength=\"7\" placeholder=\"HEX Color\"\n            [(ngModel)]=\"hexColor\" required>\n        </div>\n        <button type=\"button\" class=\"btn-primary btn-sm btn\" (click)=\"insertColor(hexColor, selectedColorTab)\">Submit</button>\n      </form>\n    </div>\n  </div>\n</ng-template>\n\n<!-- font size template -->\n<ng-template #fontSizeTemplate>\n  <div class=\"ngxe-popover extra-gt1\">\n    <form autocomplete=\"off\">\n      <div class=\"form-group\">\n        <label for=\"fontSize\" class=\"small\">Font Size</label>\n        <input type=\"text\" class=\"form-control-sm\" id=\"fontSize\" name=\"fontSize\" placeholder=\"Font size in px/rem\"\n          [(ngModel)]=\"fontSize\" required>\n      </div>\n      <button type=\"button\" class=\"btn-primary btn-sm btn\" (click)=\"setFontSize(fontSize)\">Submit</button>\n    </form>\n  </div>\n</ng-template>\n\n<!-- font family/name template -->\n<ng-template #fontNameTemplate>\n  <div class=\"ngxe-popover extra-gt1\">\n    <form autocomplete=\"off\">\n      <div class=\"form-group\">\n        <label for=\"fontSize\" class=\"small\">Font Size</label>\n        <input type=\"text\" class=\"form-control-sm\" id=\"fontName\" name=\"fontName\" placeholder=\"Ex: 'Times New Roman', Times, serif\"\n          [(ngModel)]=\"fontName\" required>\n      </div>\n      <button type=\"button\" class=\"btn-primary btn-sm btn\" (click)=\"setFontName(fontName)\">Submit</button>\n    </form>\n  </div>\n</ng-template>\n","import {Component, EventEmitter, HostListener, Output} from '@angular/core';\n@Component({\n  selector: 'app-ngx-grippie',\n  templateUrl: './ngx-grippie.component.html',\n  styleUrls: ['./ngx-grippie.component.scss']\n})\n\nexport class NgxGrippieComponent {\n  /** height of the editor */\n  height: number= 0;\n  /** previous value befor resizing the editor */\n  oldY = 0;\n  /** set to true on mousedown event */\n  grabber = false;\n\n  @Output() resizeTextArea = new EventEmitter<number>();\n\n  /**\n   * Constructor\n   *\n   * @param _editorComponent Editor component\n   */\n  constructor() { }\n\n  /**\n   *\n   * @param event Mouseevent\n   *\n   * Update the height of the editor when the grabber is dragged\n   */\n  @HostListener('document:mousemove', ['$event']) onMouseMove(event: MouseEvent) {\n    if (!this.grabber) {\n      return;\n    }\n    this.resizeTextArea.emit(event.clientY - this.oldY);\n    this.oldY = event.clientY;\n  }\n\n  /**\n   *\n   * @param event Mouseevent\n   *\n   * set the grabber to false on mouse up action\n   */\n  @HostListener('document:mouseup', ['$event']) onMouseUp(event: MouseEvent) {\n    this.grabber = false;\n  }\n\n  @HostListener('mousedown', ['$event']) onResize(event: MouseEvent, resizer?: Function) {\n    this.grabber = true;\n    this.oldY = event.clientY;\n    event.preventDefault();\n  }\n\n}\n","<div class=\"ngx-editor-grippie\">\n  <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"isolation:isolate\" viewBox=\"651.6 235 26 5\"\n    width=\"26\" height=\"5\">\n    <g id=\"sprites\">\n      <path d=\" M 651.6 235 L 653.6 235 L 653.6 237 L 651.6 237 M 654.6 238 L 656.6 238 L 656.6 240 L 654.6 240 M 660.6 238 L 662.6 238 L 662.6 240 L 660.6 240 M 666.6 238 L 668.6 238 L 668.6 240 L 666.6 240 M 672.6 238 L 674.6 238 L 674.6 240 L 672.6 240 M 657.6 235 L 659.6 235 L 659.6 237 L 657.6 237 M 663.6 235 L 665.6 235 L 665.6 237 L 663.6 237 M 669.6 235 L 671.6 235 L 671.6 237 L 669.6 237 M 675.6 235 L 677.6 235 L 677.6 237 L 675.6 237\"\n        fill=\"rgb(147,153,159)\" />\n    </g>\n  </svg>\n</div>\n","/**\n * toolbar default configuration\n */\nexport const ngxEditorConfig = {\n  editable: true,\n  spellcheck: true,\n  height: 'auto',\n  minHeight: '0',\n  width: 'auto',\n  minWidth: '0',\n  translate: 'yes',\n  enableToolbar: true,\n  showToolbar: true,\n  placeholder: 'Enter text here...',\n  imageEndPoint: '',\n  toolbar: [\n    ['bold', 'italic', 'underline', 'strikeThrough', 'superscript', 'subscript'],\n    ['fontName', 'fontSize', 'color'],\n    ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent'],\n    ['cut', 'copy', 'delete', 'removeFormat', 'undo', 'redo'],\n    ['paragraph', 'blockquote', 'removeBlockquote', 'horizontalLine', 'orderedList', 'unorderedList'],\n    ['link', 'unlink', 'image', 'video']\n  ]\n};\n","import {\n  Component, OnInit, Input, Output, ViewChild,\n  EventEmitter, Renderer2, forwardRef, ElementRef, AfterViewInit\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nimport { CommandExecutorService } from './common/services/command-executor.service';\nimport { MessageService } from './common/services/message.service';\n\nimport { ngxEditorConfig } from './common/ngx-editor.defaults';\nimport * as Utils from './common/utils/ngx-editor.utils';\n\n@Component({\n  selector: 'app-ngx-editor',\n  templateUrl: './ngx-editor.component.html',\n  styleUrls: ['./ngx-editor.component.scss'],\n  providers: [{\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => NgxEditorComponent),\n    multi: true\n  }]\n})\n\nexport class NgxEditorComponent implements AfterViewInit, ControlValueAccessor {\n  /** Specifies weather the textarea to be editable or not */\n  @Input() editable?: boolean;\n  /** The spellcheck property specifies whether the element is to have its spelling and grammar checked or not. */\n  @Input() spellcheck?: boolean;\n  /** Placeholder for the textArea */\n  @Input() placeholder?: string;\n  /**\n   * The translate property specifies whether the content of an element should be translated or not.\n   *\n   * Check https://www.w3schools.com/tags/att_global_translate.asp for more information and browser support\n   */\n  @Input() translate?: string;\n  /** Sets height of the editor */\n  @Input() height?: string;\n  /** Sets minimum height for the editor */\n  @Input() minHeight?: string;\n  /** Sets Width of the editor */\n  @Input() width?: string;\n  /** Sets minimum width of the editor */\n  @Input() minWidth?: string;\n  /**\n   * Toolbar accepts an array which specifies the options to be enabled for the toolbar\n   *\n   * Check ngxEditorConfig for toolbar configuration\n   *\n   * Passing an empty array will enable all toolbar\n   */\n  @Input() toolbar?: Object;\n  /**\n   * The editor can be resized vertically.\n   *\n   * `basic` resizer enables the html5 reszier. Check here https://www.w3schools.com/cssref/css3_pr_resize.asp\n   *\n   * `stack` resizer enable a resizer that looks like as if in https://stackoverflow.com\n   */\n  @Input() resizer = 'stack';\n  /**\n   * The config property is a JSON object\n   *\n   * All avaibale inputs inputs can be provided in the configuration as JSON\n   * inputs provided directly are considered as top priority\n   */\n  @Input() config = ngxEditorConfig;\n  /** Weather to show or hide toolbar */\n  @Input() showToolbar?: boolean;\n  /** Weather to enable or disable the toolbar */\n  @Input() enableToolbar?: boolean;\n  /** Endpoint for which the image to be uploaded */\n  @Input() imageEndPoint?: string;\n\n  @Input() emailParams: any;\n\n    /** emits `blur` event when focused out from the textarea */\n        // eslint-disable-next-line @angular-eslint/no-output-native\n  @Output() blur: EventEmitter<string> = new EventEmitter<string>();\n  /** emits `focus` event when focused in to the textarea */\n      // eslint-disable-next-line @angular-eslint/no-output-native\n  @Output() focus: EventEmitter<string> = new EventEmitter<string>();\n\n  @ViewChild('ngxTextArea') textArea!: ElementRef;\n  @ViewChild('ngxWrapper') ngxWrapper!: ElementRef;\n  @ViewChild('ngxEditor') ngxEditor!: ElementRef;\n\n  Utils: any = Utils;\n\n  private onChange?: (value: string) => void;\n  private onTouched?: () => void;\n\n  /**\n   * @param _messageService service to send message to the editor message component\n   * @param _commandExecutor executes command from the toolbar\n   * @param _renderer access and manipulate the dom element\n   */\n  constructor(\n    private _messageService: MessageService,\n    private _commandExecutor: CommandExecutorService,\n    private _renderer: Renderer2) { }\n\n  /**\n   * events\n   */\n  onTextAreaFocus(): void {\n    this.focus.emit('focus');\n  }\n\n  /** focus the text area when the editor is focussed */\n  onEditorFocus() {\n    if(this.textArea && this.textArea.nativeElement) {\n      this.textArea.nativeElement.focus();\n    }\n\n  }\n\n  /**\n   * Executed from the contenteditable section while the input property changes\n   * @param innerHTML: html string from contenteditable\n   */\n  onContentChange(innerHTML: string): void {\n    if (typeof this.onChange === 'function') {\n      this.onChange(innerHTML);\n      this.togglePlaceholder(innerHTML);\n    }\n  }\n\n  onChangeTextarea($event: any) {\n    if($event.target) {\n      this.onContentChange($event.target['innerHTML'])\n    }\n  }\n\n\n  onTextAreaBlur(): void {\n    /** save selection if focussed out */\n    this._commandExecutor.savedSelection = Utils.saveSelection();\n\n    if (typeof this.onTouched === 'function') {\n      this.onTouched();\n    }\n    this.blur.emit('blur');\n  }\n\n  /**\n   * resizing text area\n   *\n   * @param offsetY vertical height of the eidtable portion of the editor\n   */\n  resizeTextArea(offsetY: number): void {\n    if(this.height &&  this.textArea.nativeElement) {\n      let newHeight = parseInt(this.height, 10);\n      newHeight += offsetY;\n      this.height = newHeight + 'px';\n      this.textArea.nativeElement.style.height = this.height;\n    }\n  }\n\n  /**\n   * editor actions, i.e., executes command from toolbar\n   *\n   * @param commandName name of the command to be executed\n   */\n  executeCommand(commandName: string): void {\n    try {\n      this._commandExecutor.execute(commandName);\n    } catch (error: any) {\n      this._messageService.sendMessage(error.message);\n    }\n  }\n\n  /**\n   * Write a new value to the element.\n   *\n   * @param value value to be executed when there is a change in contenteditable\n   */\n  writeValue(value: any): void {\n    this.togglePlaceholder(value);\n\n    if (value === null || value === undefined || value === '' || value === '<br>') {\n      value = null;\n    }\n\n    this.refreshView(value);\n  }\n\n  /**\n   * Set the function to be called\n   * when the control receives a change event.\n   *\n   * @param fn a function\n   */\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  /**\n   * Set the function to be called\n   * when the control receives a touch event.\n   *\n   * @param fn a function\n   */\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * refresh view/HTML of the editor\n   *\n   * @param value html string from the editor\n   */\n  refreshView(value: string): void {\n    if(this.textArea && this.textArea.nativeElement) {\n      const normalizedValue = value === null ? '' : value;\n      this._renderer.setProperty(this.textArea.nativeElement, 'innerHTML', normalizedValue);\n    }\n  }\n\n  /**\n   * toggles placeholder based on input string\n   *\n   * @param value A HTML string from the editor\n   */\n  togglePlaceholder(value: any): void {\n    if(this.ngxWrapper && this.ngxWrapper.nativeElement) {\n      if (!value || value === '<br>' || value === '') {\n        this._renderer.addClass(this.ngxWrapper.nativeElement, 'show-placeholder');\n      } else {\n        this._renderer.removeClass(this.ngxWrapper.nativeElement, 'show-placeholder');\n      }\n    }\n  }\n\n  /**\n   * returns a json containing input params\n   */\n  getCollectiveParams(): any {\n    return {\n      editable: this.editable,\n      spellcheck: this.spellcheck,\n      placeholder: this.placeholder,\n      translate: this.translate,\n      height: this.height,\n      minHeight: this.minHeight,\n      width: this.width,\n      minWidth: this.minWidth,\n      enableToolbar: this.enableToolbar,\n      showToolbar: this.showToolbar,\n      imageEndPoint: this.imageEndPoint,\n      toolbar: this.toolbar\n    };\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(()=>{\n      this.config = this.Utils.getEditorConfiguration(this.config, ngxEditorConfig, this.getCollectiveParams());\n      if((!this.height) && this.textArea && this.textArea.nativeElement) {\n        this.height = this.height || this.textArea.nativeElement.offsetHeight;\n      }\n      this.executeCommand('enableObjectResizing');\n    },100)\n  }\n}\n","<div #ngxEditor class=\"ngx-editor\" [style.width]=\"config['width']\" [style.minWidth]=\"config['minWidth']\" tabindex=\"0\"\n  (focus)=\"onEditorFocus()\">\n\n  <app-ngx-editor-toolbar [emailParams]=\"emailParams\" [config]=\"config\" (execute)=\"executeCommand($event)\"></app-ngx-editor-toolbar>\n\n  <!-- text area -->\n  <div class=\"ngx-wrapper\" #ngxWrapper>\n    <div class=\"ngx-editor-textarea\" [attr.contenteditable]=\"config['editable']\" (input)=\"onChangeTextarea($event)\"\n      [attr.translate]=\"config['translate']\" [attr.spellcheck]=\"config['spellcheck']\" [style.height]=\"config['height']\"\n      [style.minHeight]=\"config['minHeight']\" [style.resize]=\"Utils?.canResize(resizer)\" (focus)=\"onTextAreaFocus()\"\n      (blur)=\"onTextAreaBlur()\" #ngxTextArea></div>\n\n    <span class=\"ngx-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\n  </div>\n\n  <app-ngx-editor-message></app-ngx-editor-message>\n  <app-ngx-grippie *ngIf=\"resizer === 'stack'\" (resizeTextArea)=\"resizeTextArea($event)\"></app-ngx-grippie>\n\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {PopoverModule} from 'ngx-bootstrap/popover';\nimport {NgxEditorComponent} from './ngx-editor.component';\nimport {NgxGrippieComponent} from './ngx-grippie/ngx-grippie.component';\nimport {NgxEditorMessageComponent} from './ngx-editor-message/ngx-editor-message.component';\nimport {NgxEditorToolbarComponent} from './ngx-editor-toolbar/ngx-editor-toolbar.component';\nimport {MessageService} from './common/services/message.service';\nimport {CommandExecutorService} from './common/services/command-executor.service';\n\n@NgModule({\n    imports: [CommonModule, FormsModule, ReactiveFormsModule, PopoverModule.forRoot()],\n    declarations: [NgxEditorComponent, NgxGrippieComponent, NgxEditorMessageComponent, NgxEditorToolbarComponent],\n    exports: [NgxEditorComponent],\n    providers: [CommandExecutorService, MessageService]\n})\n\nexport class NgxEditorModule {\n}\n","export type MoveHandler = (event: MouseEvent, dx: number, dy: number, x: number, y: number) => void;\nexport type UpHandler = (event: MouseEvent, x: number, y: number, moved: boolean) => void;\n\nexport function drag(event: MouseEvent, {move: move, up: up}: { move: MoveHandler, up?: UpHandler }) {\n\n    let startX = event.pageX;\n    let startY = event.pageY;\n    let x = startX;\n    let y = startY;\n    let moved = false;\n\n    function mouseMoveHandler(event: MouseEvent) {\n        let dx = event.pageX - x;\n        let dy = event.pageY - y;\n        x = event.pageX;\n        y = event.pageY;\n        if (dx || dy) moved = true;\n\n        move(event, dx, dy, x, y);\n\n        event.preventDefault(); // to avoid text selection\n    }\n\n    function mouseUpHandler(event: MouseEvent) {\n        x = event.pageX;\n        y = event.pageY;\n\n        document.removeEventListener('mousemove', mouseMoveHandler);\n        document.removeEventListener('mouseup', mouseUpHandler);\n\n        if (up) up(event, x, y, moved);\n    }\n\n    document.addEventListener('mousemove', mouseMoveHandler);\n    document.addEventListener('mouseup', mouseUpHandler);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n@Pipe({\n  name: 'px'\n})\nexport class PixelConverter implements PipeTransform {\n  transform(value: string | number): any {\n    if (value === undefined) {\n        return;\n    }\n    if (typeof value === 'string') {\n        return value;\n    }\n    return value + 'px';\n  }\n}\n","import {Directive, ElementRef, Renderer2} from '@angular/core';\n\n\nfunction isBlank(obj: any): boolean {\n    return obj === undefined || obj === null;\n}\n\n@Directive({selector: '[hide]', inputs: ['hide']})\nexport class Hide {\n\n    private _prevCondition?: boolean;\n    private _displayStyle?: string;\n\n    constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n    }\n\n    set hide(newCondition: boolean) {\n        this.initDisplayStyle();\n\n        if (newCondition && (isBlank(this._prevCondition) || !this._prevCondition)) {\n            this._prevCondition = true;\n            this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none');\n        } else if (!newCondition && (isBlank(this._prevCondition) || this._prevCondition)) {\n            this._prevCondition = false;\n            this._renderer.setStyle(this._elementRef.nativeElement, 'display', this._displayStyle);\n        }\n    }\n\n    private initDisplayStyle() {\n        if (this._displayStyle === undefined) {\n            let displayStyle = this._elementRef.nativeElement.style.display;\n            if (displayStyle && displayStyle !== 'none') {\n                this._displayStyle = displayStyle;\n            }\n        }\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n  name: 'min'\n})\nexport class MinPipe implements PipeTransform {\n  transform(value: number[]): any {\n    return Math.min.apply(null, value);\n  }\n}\n","import { Directive, Input, ContentChild, OnInit } from '@angular/core';\nimport { DataTableRow } from '../row/row.component';\nimport { CellCallback } from '../../types/cell-callback.type';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'data-table-column'\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class DataTableColumn implements OnInit {\n\n    // init:\n    @Input() header?: string;\n    @Input() sortable = false;\n    @Input() resizable = false;\n    @Input() property!: string;\n    @Input() styleClass?: string;\n    @Input() cellColors?: CellCallback;\n\n    // init and state:\n    @Input() width: number | string = 'auto';\n    @Input() visible = true;\n\n    @ContentChild('dataTableCell') cellTemplate: any;\n    @ContentChild('dataTableHeader') headerTemplate: any;\n\n    // @ts-ignore\n    getCellColor(row: DataTableRow, index: number) {\n        if (this.cellColors !== undefined) {\n            return (<CellCallback>this.cellColors)(row.item, row, this, index);\n        }\n    }\n\n    styleClassObject = {}; // for [ngClass]\n\n    ngOnInit() {\n        this._initCellClass();\n    }\n\n    private _initCellClass() {\n        if (!this.styleClass && this.property) {\n            if (/^[a-zA-Z0-9_]+$/.test(this.property)) {\n                this.styleClass = 'column-' + this.property;\n            } else {\n                this.styleClass = 'column-' + this.property.replace(/[^a-zA-Z0-9_]/g, '');\n            }\n        }\n\n        if (this.styleClass != null) {\n            this.styleClassObject = {\n                [this.styleClass]: true\n            };\n        }\n    }\n}\n","import {\n    Component, Input, Output, EventEmitter, OnDestroy, QueryList, TemplateRef\n} from '@angular/core';\nimport {DataTableColumn} from \"../column/column.component\";\nimport {DataTableTranslations} from \"../../types/data-table-translations.type\";\n\n@Component({\n    //moduleId: 'grid-module',\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[dataTableRow]',\n    templateUrl: './row.component.html',\n    styleUrls: ['./row.component.css']\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class DataTableRow implements OnDestroy {\n\n    @Input() item: any;\n    @Input() index: number = 0;\n\n    @Input() selectOnRowClick = false;\n\n    expanded: boolean = false;\n\n    // row selection:\n\n    private _selected: boolean = false;\n\n    @Output() selectedChange = new EventEmitter();\n    @Output() expandedChange = new EventEmitter();\n\n    @Output() doubleClicked = new EventEmitter<any>();\n    @Output() clicked = new EventEmitter<any>();\n\n    @Input() translations!: DataTableTranslations;\n\n    @Input() expandableRows: boolean = false;\n    @Input() expandColumnVisible: boolean = false;\n    @Input() indexColumnVisible: boolean = false;\n    @Input() selectColumnVisible: boolean = false;\n    @Input() columns?: QueryList<DataTableColumn>;\n    @Input() columnCount: number = 0;\n    @Input() expandTemplate!: TemplateRef<any>;\n    @Input() backgroundColor: string = '';\n\n    get selected() {\n        return this._selected;\n    }\n\n    set selected(selected) {\n        this._selected = selected;\n        this.selectedChange.emit(selected);\n    }\n\n    // other:\n\n    get displayIndex() {\n        /*\n        if (this.dataTable.pagination) {\n            // @ts-ignore\n            return this.dataTable.displayParams.offset + this.index + 1;\n        } else {\n            // @ts-ignore\n            return this.index + 1;\n        }\n\n         */\n        return this.index + 1;\n    }\n\n    getTooltip() {\n        /*\n        if (this.dataTable.rowTooltip) {\n            // @ts-ignore\n            return this.dataTable.rowTooltip(this.item, this, this.index);\n        }\n\n         */\n        return '';\n    }\n\n\n    constructor() {}\n\n    ngOnDestroy() {\n        this.selected = false;\n    }\n\n    expand() {\n        this.expanded = !this.expanded;\n        this.expandedChange.emit(this.expanded);\n    }\n\n    collapse() {\n        this.expanded = false;\n        this.expandedChange.emit(this.expanded);\n    }\n\n    rowDoubleClicked($event : any){\n        this.doubleClicked.emit($event);\n    }\n\n    rowClicked($event: any) {\n        this.clicked.emit($event);\n    }\n}\n","<tr\tclass=\"data-table-row\"\n       [title]=\"getTooltip()\"\n       [style.background-color]=\"backgroundColor\"\n       [class.row-odd]=\"index % 2 === 0\"\n       [class.row-even]=\"index % 2 === 1\"\n       [class.selected]=\"selected\"\n       [class.clickable]=\"selectOnRowClick\"\n       (dblclick)=\"rowDoubleClicked($event)\"\n       (click)=\"rowClicked($event)\"\n>\n    <td [hide]=\"!expandColumnVisible\">\n        <div tabindex=\"0\" role=\"button\" (click)=\"this.expand(); $event.stopPropagation()\" class=\"row-expand-button\"\n             [attr.aria-expanded]=\"expanded\" [title]=\"translations.expandRow\" [attr.aria-label]=\"translations.expandRow\">\n            <span class=\"fa\" [ngClass]=\"{'fa-caret-right': !expanded, 'fa-caret-down': expanded}\" aria-hidden=\"true\"></span>\n        </div>\n    </td>\n    <td [hide]=\"!indexColumnVisible\" class=\"index-column\" [textContent]=\"displayIndex\"></td>\n    <td [hide]=\"!selectColumnVisible\" class=\"select-column\" (click)=\"$event.stopPropagation()\">\n        <input type=\"checkbox\" [(ngModel)]=\"selected\"/>\n        <label class=\"mb-0 lbl\"></label>\n    </td>\n    <td *ngFor=\"let column of columns\" [hide]=\"!column.visible\" [ngClass]=\"column.styleClassObject ? column.styleClassObject : ''\" class=\"data-column\"\n        [style.background-color]=\"column.getCellColor(this, index)\">\n        <div *ngIf=\"!column.cellTemplate\" [textContent]=\"item[column.property]\"></div>\n        <div *ngIf=\"column.cellTemplate\" [ngTemplateOutlet]=\"column.cellTemplate\" [ngTemplateOutletContext]=\"{column: column, row: this, item: item}\"></div>\n    </td>\n</tr>\n<tr *ngIf=\"expandableRows\" [hide]=\"!expanded\" class=\"row-expansion\">\n    <td [attr.colspan]=\"columnCount\">\n        <div [ngTemplateOutlet]=\"expandTemplate\" [ngTemplateOutletContext]=\"{row: this, item: item}\"></div>\n    </td>\n</tr>\n","import {DataTableTranslations} from './data-table-translations.type'\n\nexport const defaultTranslations: DataTableTranslations = {\n\theaderReload: 'reload',\n\theaderColumnSelector: 'column selector',\n\tindexColumn: 'index',\n\tselectColumn: 'select',\n\tselectRow: 'select',\n\tselectAllRows: 'select',\n\texpandColumn: 'expand',\n\texpandRow: 'expand',\n\tpaginationLimit: 'Limit',\n\tpaginationRange: 'Results',\n    firstText: 'First Page',\n    prevText: 'Previous Page',\n    nextText: 'Next Page',\n    lastText: 'Last Page'\n};\n","import {\n    Component,\n    Input,\n    TemplateRef,\n    ElementRef, QueryList, Output, EventEmitter\n} from '@angular/core';\nimport {DataTableColumn} from \"../column/column.component\";\nimport {DataTableTranslations} from \"../../types/data-table-translations.type\";\n\n@Component({\n    //moduleId: 'grid-module',\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: 'data-table-pagination',\n    templateUrl: './pagination.component.html',\n    styleUrls: ['./pagination.component.css'],\n    // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n    host: {\n        '(document:click)': '_closeSelector()'\n    }\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class DataTablePagination {\n\n    @Input() show_range = false;\n    @Input() show_limit = false;\n    @Input() show_input = false;\n    @Input() show_numbers = true;\n    @Input() show_column_selector = false;\n    @Input() autoHide = false;\n\n    @Input() basicSearch!: TemplateRef<ElementRef>;\n    @Input() advanceSearch!: TemplateRef<ElementRef>;\n\n    @Input() translations!: DataTableTranslations;\n\n    @Input() offset: number = 0;\n    @Input() page: number = 0;\n    @Input() limit: number = 10;\n    @Input() lastPage: number = 0;\n    @Input() expandableRows: boolean = false;\n    @Input() indexColumn: boolean = false;\n    @Input() selectColumn: boolean = false;\n    @Input() columns?: QueryList<DataTableColumn>;\n    @Input() itemCount: number = 0;\n\n    expandColumnVisible= false;\n    indexColumnVisible= false;\n    selectColumnVisible = false;\n\n    @Output() reload = new EventEmitter<any>();\n    @Output() changeOffset = new EventEmitter<number>();\n    @Output() changePage = new EventEmitter<number>();\n\n    columnSelectorOpen = false;\n\n    _closeSelector() {\n        this.columnSelectorOpen = false;\n    }\n\n    constructor() {\n    }\n\n    pageBack() {\n        this.offset -= Math.min(this.limit, this.offset);\n        this.onChangeOffset();\n    }\n\n    pageForward() {\n        this.offset += this.limit;\n        this.onChangeOffset();\n    }\n\n    pageFirst() {\n        this.offset = 0;\n        this.onChangeOffset();\n    }\n\n    pageLast() {\n        this.offset = (this.maxPage - 1) * this.limit;\n        this.onChangeOffset();\n    }\n\n    get maxPage() {\n        // @ts-ignore\n        return Math.ceil(this.itemCount / this.limit);\n    }\n\n    createPageRange(number: number, page: number): any[] {\n        const displayedPage = 3;\n        let items: number[] = [];\n        if (number > 1) {\n            let maxPage = number;\n            let minPage = 1;\n            if (page === 1 && maxPage >= displayedPage) {\n                maxPage = 3;\n            } else if (page > 1 && maxPage > page + 1) {\n                minPage = page - 1;\n                maxPage = page + 1;\n            } else if (page > 2 && maxPage > page) {\n                minPage = page - 1;\n                maxPage = page + 1;\n            } else  if (page > 2 && maxPage === page) {\n                minPage = page - 2;\n                maxPage = page;\n            }\n            for (let i = minPage; i <= maxPage; i++) {\n                items.push(i);\n            }\n        }\n        return items;\n    }\n\n    onChange(value: any): any {\n        value = Number(<any>value);\n        const minPage = 1;\n        const maxPage = this.maxPage;\n        if (value < minPage) {\n            value = minPage;\n        } else if (value > maxPage) {\n            value = maxPage;\n        }\n        this.page = value;\n        this.changePage.emit(this.page);\n\n        return value;\n    }\n\n    convertToNumber(value: any): number  {\n        return Number(value);\n    }\n\n    convertToString(value: any): string {\n        return <string> value;\n    }\n\n    reloadItems() {\n        this.reload.emit({\n\n        })\n    }\n\n    onChangeOffset() {\n        this.changeOffset.emit(this.offset)\n    }\n\n}\n","<div class=\"pagination-box\">\n    <div class=\"pagination-range\"  *ngIf=\"!show_range\">\n        <ng-template [ngTemplateOutlet]=\"basicSearch\"></ng-template>\n    </div>\n    <div class=\"pagination-range input-group-sm\" *ngIf=\"show_range\">\n        <div class=\"input-group-prepend\">\n            <span class=\"input-group-text\">\n        {{translations.paginationRange}}:\n        <span class=\"ml-1\" [textContent]=\"itemCount>0 ? offset + 1 : 0\"></span>\n        -\n        <span [textContent]=\"[offset + limit , itemCount] | min\"></span>\n        /\n        <span [textContent]=\"itemCount\"></span>\n        </span>\n        </div>\n    </div>\n\n    <div class=\"pagination-controllers\">\n        <div class=\"pagination-limit\" *ngIf=\"show_limit\">\n            <div class=\"input-group input-group-sm\">\n                <div class=\"input-group-prepend\">\n                    <span class=\"input-group-text\">{{translations.paginationLimit}}:</span>\n                </div>\n                <input #limitInput type=\"number\" class=\"form-control\" min=\"1\" step=\"1\" [disabled]=\"maxPage === 0\"\n                       [ngModel]=\"limit\" (blur)=\"limit = convertToNumber(limitInput.value)\"\n                       (keyup.enter)=\"limit = convertToNumber(limitInput.value)\" (keyup.esc)=\"limitInput.value = convertToString(limit)\"/>\n            </div>\n        </div>\n        <div class=\"pagination-pages mr-1\" *ngIf=\"!autoHide || (autoHide && (maxPage > 0))\">\n            <button [disabled]=\"offset <= 0\" (click)=\"pageFirst()\"\n                    class=\"btn btn-sm btn-light pagination-firstpage\"\n                    [title]=\"translations.firstText\">\n                <i class=\"fa fa-step-backward\"></i>\n            </button>\n            <button [disabled]=\"offset <= 0\" (click)=\"pageBack()\"\n                    class=\"btn btn-sm btn-light pagination-prevpage ml-1\"\n                    [title]=\"translations.prevText\">\n                <i class=\"fa fa-chevron-left\"></i>\n            </button>\n            <div class=\"pagination-page ml-1\" *ngIf=\"show_input\">\n                <div class=\"input-group input-group-sm\">\n                    <input #pageInput type=\"number\" class=\"form-control\" min=\"1\" step=\"1\" max=\"{{maxPage}}\"\n                           [ngModel]=\"page\" (blur)=\"pageInput.value = onChange(pageInput.value)\"\n                           (keyup.enter)=\"pageInput.value = onChange(pageInput.value)\" [disabled]=\"maxPage === 0\"\n                           (keyup.esc)=\"pageInput.value = convertToString(page)\"/>\n                    <div class=\"input-group-append\">\n                        <span class=\"input-group-text\"><span>/</span><span\n                                [textContent]=\"lastPage\"></span></span>\n                    </div>\n                </div>\n            </div>\n            <div class=\"pagination-page\" *ngIf=\"show_numbers\">\n                <button *ngFor=\"let i of createPageRange(maxPage,page)\"\n                        [disabled]=\"i == page\"\n                        (click)=\"page = i\"\n                        class=\"btn btn-sm btn-light ml-1\">{{ i }}\n                </button>\n            </div>\n            <button [disabled]=\"(offset + limit) >= itemCount\" (click)=\"pageForward()\"\n                    class=\"btn btn-sm btn-light pagination-nextpage ml-1\" [title]=\"translations.nextText\">\n                <i class=\"fa fa-chevron-right\"></i>\n            </button>\n            <button [disabled]=\"(offset + limit) >= itemCount\" (click)=\"pageLast()\"\n                    class=\"btn btn-sm btn-light pagination-lastpage ml-1\" [title]=\"translations.lastText\">\n                <i class=\"fa fa-step-forward\"></i>\n            </button>\n            <button type=\"button\" class=\"btn btn-sm btn-light pagination-reload ml-1\"\n                    (click)=\"reloadItems()\"\n                    [attr.aria-label]=\"translations.headerReload\"\n                    [title]=\"translations.headerReload\">\n                <i class=\"fa fa-refresh\"></i>\n            </button>\n            <button *ngIf=\"show_column_selector\" type=\"button\" class=\"btn btn btn-sm btn-light column-selector-button ml-1\"\n                    [class.active]=\"columnSelectorOpen\"\n                    (click)=\"columnSelectorOpen = !columnSelectorOpen; $event.stopPropagation()\"\n                    [attr.aria-label]=\"translations.headerColumnSelector\"\n                    [title]=\"translations.headerColumnSelector\">\n                <i class=\"fa fa-list\"></i>\n            </button>\n            <div *ngIf=\"show_column_selector\" class=\"column-selector-wrapper\" (click)=\"$event.stopPropagation()\">\n                <div *ngIf=\"columnSelectorOpen\" class=\"column-selector-box panel panel-default\">\n                    <div *ngIf=\"expandableRows\" class=\"column-selector-fixed-column checkbox\">\n                        <label>\n                            <input type=\"checkbox\" id=\"chk-expand-column-selector\" [(ngModel)]=\"expandColumnVisible\"/>\n                            <label class=\"mb-0 lbl\" for=\"chk-expand-column-selector\"> {{translations.expandColumn}}</label>\n                        </label>\n                    </div>\n                    <div *ngIf=\"indexColumn\" class=\"column-selector-fixed-column checkbox\">\n                        <label>\n                            <input type=\"checkbox\" id=\"chk-index-column-selector\" [(ngModel)]=\"indexColumnVisible\"/>\n                            <label class=\"mb-0 lbl\" for=\"chk-index-column-selector\"> {{translations.indexColumn}}</label>\n                        </label>\n                    </div>\n                    <div *ngIf=\"selectColumn\" class=\"column-selector-fixed-column checkbox\">\n                        <label>\n                            <input type=\"checkbox\" id=\"chk-select-column-selector\" [(ngModel)]=\"selectColumnVisible\"/>\n                            <label class=\"mb-0 lbl\" for=\"chk-select-column-selector\"> {{translations.selectColumn}}</label>\n                        </label>\n                    </div>\n                    <div *ngFor=\"let column of columns;\" class=\"column-selector-column checkbox\">\n                        <label>\n                            <input type=\"checkbox\" [id]=\"'chk-'+ column.property + '-selector'\" [(ngModel)]=\"column.visible\"/>\n                            <label class=\"mb-0 lbl\" [for]=\"'chk-'+ column.property + '-selector'\">\n                                &nbsp;<span [textContent]=\"column.header || (column.property)\"></span>\n                            </label>\n                        </label>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <ng-template *ngIf=\"!show_range\" [ngTemplateOutlet]=\"advanceSearch\"></ng-template>\n</div>\n","import {Component, Input} from '@angular/core';\n\n@Component({\n    //moduleId: 'grid-module',\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: 'data-table-header',\n    templateUrl: './header.component.html',\n    styleUrls: ['./header.component.css']\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class DataTableHeader {\n\n    @Input() headerTitle?: string;\n    constructor() {\n    }\n}\n","<div class=\"data-table-header\">\n    <h4 class=\"title\" [textContent]=\"headerTitle\"></h4>\n</div>\n","import {\n    Component, Input, Output, EventEmitter, ContentChildren, QueryList,\n    TemplateRef, ContentChild, ViewChildren, OnInit, OnDestroy, ElementRef\n} from '@angular/core';\nimport {DataTableColumn} from '../column/column.component';\nimport {DataTableRow} from '../row/row.component';\nimport {DataTableParams} from '../../types/data-table-params.type';\nimport {RowCallback} from '../../types/row-callback.type';\nimport {DataTableTranslations} from '../../types/data-table-translations.type';\nimport {defaultTranslations} from '../../types/default-translations.type';\nimport {drag} from '../../utils/drag';\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {CloudTranslateService} from \"../../../translate/cloud-translate.service\";\nimport {Subscription} from \"rxjs\";\n\n@Component({\n    //moduleId: 'grid-module',\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: 'data-table',\n    templateUrl: './table.component.html',\n    styleUrls: ['./table.component.css']\n})\n\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class DataTable implements DataTableParams, OnInit, OnDestroy {\n\n    private _items: any[] = [];\n\n    @Input() get items() {\n        return this._items;\n    }\n\n    set items(items: any[]) {\n        this.selectedRows = [];\n        this._items = items;\n        this._onReloadFinished();\n    }\n\n    @Input() itemCount: number = 0;\n\n    // UI components:\n\n    @ContentChildren(DataTableColumn) columns?: QueryList<DataTableColumn>;\n    @ViewChildren(DataTableRow) rows?: QueryList<DataTableRow>;\n    @ContentChild('dataTableExpand') expandTemplate!: TemplateRef<any>;\n\n    // One-time optional bindings with default values:\n\n    @Input() headerTitle: string = '';\n    @Input() header = false;\n    @Input() pagination = true;\n    @Input() pagination_range = true;\n    @Input() pagination_limit = false;\n    @Input() pagination_input = true;\n    @Input() pagination_numbers = false;\n    @Input() indexColumn = true;\n    @Input() indexColumnHeader = '';\n    @Input() rowColors?: RowCallback;\n    @Input() rowTooltip?: RowCallback;\n    @Input() selectColumn = false;\n    @Input() multiSelect = true;\n    @Input() substituteRows = false;\n    @Input() expandableRows = false;\n    @Input() translations: DataTableTranslations = defaultTranslations;\n    @Input() selectOnRowClick = false;\n    @Input() autoReload = true;\n    @Input() showReloading = true;\n    @Input() noDataMessage?: string;\n    @Input() showColumnSelector = false;\n    @Input() autoHidePaging = false;\n    // UI state without input:\n\n    indexColumnVisible: boolean = false;\n    selectColumnVisible: boolean = false;\n    expandColumnVisible: boolean = false;\n\n    // UI state: visible ge/set for the outside with @Input for one-time initial values\n\n    private _sortBy?: string;\n    private _sortAsc = true;\n\n    private _offset = 0;\n    private _limit = 10;\n    private translateSubscription?: Subscription;\n\n    @ContentChild('basicSearch') basicSearch!: TemplateRef<ElementRef>;\n    @ContentChild('advanceSearch') advanceSearch!: TemplateRef<ElementRef>;\n\n    @Input()\n    get sortBy() {\n        return this._sortBy;\n    }\n\n    set sortBy(value) {\n        this._sortBy = value;\n        this._triggerReload();\n    }\n\n    @Input()\n    get sortAsc() {\n        return this._sortAsc;\n    }\n\n    set sortAsc(value) {\n        this._sortAsc = value;\n        this._triggerReload();\n    }\n\n    @Input()\n    get offset() {\n        return this._offset;\n    }\n\n    set offset(value) {\n        this._offset = value;\n        this._triggerReload();\n    }\n\n    @Input()\n    get limit() {\n        return this._limit;\n    }\n\n    set limit(value) {\n        this._limit = value;\n        this._triggerReload();\n    }\n\n    // calculated property:\n\n    @Input()\n    get page() {\n        return Math.floor(this.offset / this.limit) + 1;\n    }\n\n    set page(value) {\n        this.offset = (value - 1) * this.limit;\n    }\n\n    get lastPage() {\n        // @ts-ignore\n        return Math.ceil(this.itemCount / this.limit);\n    }\n\n    // setting multiple observable properties simultaneously\n\n    sort(sortBy: string, asc: boolean) {\n        this.sortBy = sortBy;\n        this.sortAsc = asc;\n    }\n\n    firstPage() {\n        this.offset = 0;\n    }\n\n    constructor(private translate: TranslateService) {\n    }\n\n    // init\n    ngOnInit() {\n        this.translateSubscription = this.translate.get([CloudTranslateService.GRID_KEY]).subscribe(res => {\n            const __resources = res[CloudTranslateService.GRID_KEY];\n            if (__resources.translations) {\n                this.translations = (__resources.translations as DataTableTranslations);\n            } else {\n                this.translations = defaultTranslations;\n            }\n            if (!this.noDataMessage && __resources.emptyMsg) {\n                this.noDataMessage = __resources.emptyMsg;\n            }\n        });\n\n        this._initDefaultValues();\n        this._initDefaultClickEvents();\n        this._updateDisplayParams();\n\n        if (this.autoReload && this._scheduledReload == null) {\n            this.reloadItems();\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.translateSubscription) {\n            this.translateSubscription.unsubscribe();\n        }\n    }\n\n\n    private _initDefaultValues() {\n        this.indexColumnVisible = this.indexColumn;\n        this.selectColumnVisible = this.selectColumn;\n        this.expandColumnVisible = this.expandableRows;\n    }\n\n    private _initDefaultClickEvents() {\n        this.headerClick.subscribe(tableEvent => this.sortColumn(tableEvent.column));\n        if (this.selectOnRowClick) {\n            this.rowClick.subscribe(tableEvent => tableEvent.row.selected = !tableEvent.row.selected);\n        }\n    }\n\n    // Reloading:\n\n    _reloading = false;\n\n    get reloading() {\n        return this._reloading;\n    }\n\n    @Output() reload = new EventEmitter();\n\n    reloadItems() {\n        this._reloading = true;\n        this.reload.emit(this._getRemoteParameters());\n    }\n\n    private _onReloadFinished() {\n        this._updateDisplayParams();\n\n        this._selectAllCheckbox = false;\n        this._reloading = false;\n    }\n\n    _displayParams = <DataTableParams>{}; // params of the last finished reload\n\n    get displayParams() {\n        return this._displayParams;\n    }\n\n    _updateDisplayParams() {\n        this._displayParams = {\n            sortBy: this.sortBy,\n            sortAsc: this.sortAsc,\n            offset: this.offset,\n            limit: this.limit\n        };\n    }\n\n    _scheduledReload = null;\n\n    // for avoiding cascading reloads if multiple params are set at once:\n    _triggerReload() {\n        if (this._scheduledReload) {\n            // @ts-ignore\n            clearTimeout(this._scheduledReload);\n        }\n        // @ts-ignore\n        this._scheduledReload = setTimeout(() => {\n            this.reloadItems();\n        });\n    }\n\n    // event handlers:\n\n    @Output() rowClick = new EventEmitter();\n    @Output() rowDoubleClick = new EventEmitter();\n    @Output() headerClick = new EventEmitter();\n    @Output() cellClick = new EventEmitter();\n\n    public rowClicked(row: DataTableRow, event: any) {\n        this.rowClick.emit({row, event});\n    }\n\n    public rowDoubleClicked(row: DataTableRow, event: any) {\n        this.rowDoubleClick.emit({row, event});\n    }\n\n    headerClicked(column: DataTableColumn, event: Event) {\n        if (!this._resizeInProgress) {\n            event.preventDefault();\n            event.stopPropagation();\n            this.headerClick.emit({column, event});\n        } else {\n            this._resizeInProgress = false; // this is because I can't prevent click from mousup of the drag end\n        }\n    }\n\n    private cellClicked(column: DataTableColumn, row: DataTableRow, event: MouseEvent) {\n        this.cellClick.emit({row, column, event});\n    }\n\n    // functions:\n\n    private _getRemoteParameters(): DataTableParams {\n        let params = <DataTableParams>{};\n\n        if (this.sortBy) {\n            params.sortBy = this.sortBy;\n            params.sortAsc = this.sortAsc;\n        }\n        if (this.pagination) {\n            params.offset = this.offset;\n            params.limit = this.limit;\n        }\n        return params;\n    }\n\n    private sortColumn(column: DataTableColumn) {\n        if (column.sortable) {\n            let ascending = this.sortBy === column.property ? !this.sortAsc : true;\n            if(column.property) {\n                this.sort(column.property, ascending);\n            }\n        }\n    }\n\n    get columnCount() {\n        let count = 0;\n        count += this.indexColumnVisible ? 1 : 0;\n        count += this.selectColumnVisible ? 1 : 0;\n        count += this.expandColumnVisible ? 1 : 0;\n        // @ts-ignore\n        this.columns.toArray().forEach(column => {\n            count += column.visible ? 1 : 0;\n        });\n        return count;\n    }\n\n    // @ts-ignore\n    public getRowColor(item: any, index: number, row: DataTableRow): string {\n        if (this.rowColors !== undefined) {\n            return (<RowCallback>this.rowColors)(item, row, index);\n        }\n        return ''\n    }\n\n    // selection:\n\n    selectedRow: any;\n    selectedRows: DataTableRow[] = [];\n\n    private _selectAllCheckbox = false;\n\n    get selectAllCheckbox() {\n        return this._selectAllCheckbox;\n    }\n\n    set selectAllCheckbox(value) {\n        this._selectAllCheckbox = value;\n        this._onSelectAllChanged(value);\n    }\n\n    private _onSelectAllChanged(value: boolean) {\n        // @ts-ignore\n        this.rows.toArray().forEach(row => row.selected = value);\n    }\n\n    @Output() selectionChange = new EventEmitter();\n\n    onRowSelectChanged(selected: boolean, row: DataTableRow) {\n        // maintain the selectedRow(s) view\n        if (this.multiSelect) {\n            let index = this.selectedRows.indexOf(row);\n            if (row.selected && index < 0) {\n                this.selectedRows.push(row);\n            } else if (!row.selected && index >= 0) {\n                this.selectedRows.splice(index, 1);\n            }\n        } else {\n            if (row && row.selected) {\n                this.selectedRow = row;\n                this.selectedRows = [row];\n                // unselect all other rows:\n                // @ts-ignore\n                this.rows.toArray().filter(row_ => row_.selected).forEach(row_ => {\n                    if (row_ !== row) { // avoid endless loop\n                        row_.selected = false;\n                    }\n                });\n            } else if (this.selectedRow === row) {\n                this.selectedRow = undefined;\n                this.selectedRows = [];\n            }\n        }\n        //FIXME: prevent sticky execution\n\n        this.selectionChange.emit({selected, row, selectedRows: this.selectedRows});\n\n    }\n\n    @Output() expandClick = new EventEmitter();\n\n    onExpandChanged(expanded: boolean, row: DataTableRow) {\n        this.expandClick.emit({expanded, row});\n    }\n\n    // other:\n\n    get substituteItems() {\n        // @ts-ignore\n        return Array.from({length: this.displayParams.limit - this.items.length});\n    }\n\n    // column resizing:\n\n    private _resizeInProgress = false;\n\n    resizeColumnStart(event: MouseEvent, column: DataTableColumn, columnElement: HTMLElement) {\n        this._resizeInProgress = true;\n\n        drag(event, {\n            move: (moveEvent: MouseEvent, dx: number) => {\n                if (this._isResizeInLimit(columnElement, dx)) {\n                    column.width = columnElement.offsetWidth + dx;\n                }\n            },\n        });\n    }\n\n    resizeLimit = 30;\n\n    private _isResizeInLimit(columnElement: HTMLElement, dx: number) {\n        /* This is needed because CSS min-width didn't work on table-layout: fixed.\n         Without the limits, resizing can make the next column disappear completely,\n         and even increase the table width. The current implementation suffers from the fact,\n         that offsetWidth sometimes contains out-of-date values. */\n        if ((dx < 0 && (columnElement.offsetWidth + dx) <= this.resizeLimit) ||\n            !columnElement.nextElementSibling || // resizing doesn't make sense for the last visible column\n            (dx >= 0 && ((<HTMLElement>columnElement.nextElementSibling).offsetWidth + dx) <= this.resizeLimit)) {\n            return false;\n        }\n        return true;\n    }\n}\n","<div class=\"data-table-wrapper\">\n    <data-table-header *ngIf=\"header\"></data-table-header>\n\n    <data-table-pagination\n            *ngIf=\"pagination\"\n            [show_range]=\"pagination_range\"\n            [show_limit]=\"pagination_limit\"\n            [show_input]=\"pagination_input\"\n            [show_numbers]=\"pagination_numbers\"\n            [show_column_selector]=\"showColumnSelector\"\n            [autoHide]=\"autoHidePaging\"\n            [basicSearch]=\"basicSearch\"\n            [advanceSearch]=\"advanceSearch\"\n            [offset]=\"offset\"\n            [page]=\"page\"\n            [lastPage]=\"lastPage\"\n            [limit]=\"limit\"\n            [translations]=\"translations\"\n            [indexColumn]=\"indexColumn\"\n            [expandableRows]=\"expandableRows\"\n            [selectColumn]=\"selectColumn\"\n            [itemCount]=\"itemCount\"\n            [columns]=\"columns\"\n            (reload)=\"reloadItems()\"\n            (changeOffset)=\"offset=$event\"\n            (changePage)=\"page=$event\"\n    >\n    </data-table-pagination>\n\n    <div class=\"data-table-box\">\n        <table class=\"table table-condensed table-bordered data-table\">\n            <thead>\n            <tr>\n                <th scope=\"col\" [hide]=\"!expandColumnVisible\" class=\"expand-column-header\">\n                <th scope=\"col\" [hide]=\"!indexColumnVisible\" class=\"index-column-header\">\n                    <span [textContent]=\"indexColumnHeader\"></span>\n                </th>\n                <th scope=\"col\" [hide]=\"!selectColumnVisible\" class=\"select-column-header\">\n                    <input [hide]=\"!multiSelect\" type=\"checkbox\" [(ngModel)]=\"selectAllCheckbox\" [attr.aria-label]=\"translations.selectAllRows\" />\n                    <label class=\"mb-0 lbl\"></label>\n                </th>\n                <th scope=\"col\" *ngFor=\"let column of columns\" #th [hide]=\"!column.visible\"\n                    (click)=\"headerClicked(column, $event)\"\n                    (keydown.enter)=\"headerClicked(column, $event)\" (keydown.space)=\"headerClicked(column, $event)\"\n\n                    [class.sortable]=\"column.sortable\" [class.resizable]=\"column.resizable\"\n\n                    [ngClass]=\"column.styleClassObject\" class=\"column-header\" [style.width]=\"column.width | px\"\n\n                    [attr.aria-sort]=\"column.sortable ? (column.property === sortBy ? (sortAsc ? 'ascending' : 'descending') : 'none') : null\"\n                    [attr.tabindex]=\"column.sortable ? '0' : null\">\n                    <span *ngIf=\"!column.headerTemplate\" [textContent]=\"column.header\"></span>\n                    <span *ngIf=\"column.headerTemplate\" [ngTemplateOutlet]=\"column.headerTemplate\" [ngTemplateOutletContext]=\"{column: column}\"></span>\n                    <span class=\"column-sort-icon\" *ngIf=\"column.sortable\">\n                            <span class=\"fa fa-sort column-sortable-icon\" [hide]=\"column.property === sortBy\"></span>\n                            <span [hide]=\"column.property !== sortBy\">\n                                 <span class=\"fa\" [ngClass]=\"{'fa-sort-asc': !sortAsc, 'fa-sort-desc': sortAsc}\"></span>\n                            </span>\n                    </span>\n                    <span *ngIf=\"column.resizable\" class=\"column-resize-handle\" (mousedown)=\"resizeColumnStart($event, column, th)\"></span>\n                </th>\n            </tr>\n            </thead>\n            <tbody *ngFor=\"let item of items; let index=index\" class=\"data-table-row-wrapper\"\n                   dataTableRow #row [item]=\"item\" [index]=\"index\"\n                   (doubleClicked)=\"rowDoubleClicked(row, $event)\"\n                   (clicked)=\"rowClicked(row, $event)\"\n                   [translations]=\"translations\"\n                   [indexColumnVisible]=\"indexColumnVisible\"\n                   [expandableRows]=\"expandableRows\"\n                   [selectColumnVisible]=\"selectColumnVisible\"\n                   [expandColumnVisible]=\"expandColumnVisible\"\n                   [expandTemplate]=\"expandTemplate\"\n                   [columnCount]=\"columnCount\"\n                   [columns]=\"columns\"\n                   [backgroundColor]=\"getRowColor(item, index, row)\"\n                   (selectedChange)=\"onRowSelectChanged($event, row ? row : item)\"\n                   (expandedChange)=\"onExpandChanged($event, row ? row : item)\">\n            </tbody>\n            <tbody *ngIf=\"itemCount === 0 && noDataMessage\">\n            <tr>\n                <td [attr.colspan]=\"columnCount\">{{ noDataMessage }}</td>\n            </tr>\n            </tbody>\n            <tbody class=\"substitute-rows\" *ngIf=\"pagination && substituteRows\">\n            <tr *ngFor=\"let item of substituteItems, let index = index\"\n                [class.row-odd]=\"(index + items.length) % 2 === 0\"\n                [class.row-even]=\"(index + items.length) % 2 === 1\"\n            >\n                <td [hide]=\"!expandColumnVisible\"></td>\n                <td [hide]=\"!indexColumnVisible\">&nbsp;</td>\n                <td [hide]=\"!selectColumnVisible\"></td>\n                <td *ngFor=\"let column of columns\" [hide]=\"!column.visible\">\n            </tr>\n            </tbody>\n        </table>\n\n        <div class=\"loading-cover\" *ngIf=\"showReloading && reloading\"></div>\n    </div>\n</div>\n","import {DataTableParams} from '../types/data-table-params.type';\n\n\nexport class DataTableResource<T> {\n\n    constructor(private items: T[]) {\n    }\n\n    query(params: DataTableParams, filter?: (item: T, index: number, items: T[]) => boolean): Promise<T[]> {\n\n        let result: T[] = [];\n        if (filter) {\n            result = this.items.filter(filter);\n        } else {\n            result = this.items.slice(); // shallow copy to use for sorting instead of changing the original\n        }\n\n        // Update page number\n        // @ts-ignore\n        params.page = Math.floor(params.offset / params.limit);\n\n        if (params.sortBy) {\n            result.sort((a, b) => {\n                // @ts-ignore\n                if (typeof a[params.sortBy] === 'string') {\n                    // @ts-ignore\n                    return a[params.sortBy].localeCompare(b[params.sortBy]);\n                } else {\n                    // @ts-ignore\n                    return a[params.sortBy] - b[params.sortBy];\n                }\n            });\n            if (params.sortAsc === false) {\n                result.reverse();\n            }\n        }\n        if (params.offset !== undefined) {\n            if (params.limit === undefined) {\n                result = result.slice(params.offset, result.length);\n            } else {\n                result = result.slice(params.offset, params.offset + params.limit);\n\n            }\n\n        }\n\n        return new Promise((resolve, reject) => {\n            setTimeout(() => resolve(result));\n        });\n    }\n\n    count(): Promise<number> {\n        return new Promise((resolve, reject) => {\n            setTimeout(() => resolve(this.items.length));\n        });\n\n    }\n\n    setItems(v: T[]) {\n        this.items = v;\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\n\nimport {DataTable} from './components/table/table.component';\nimport {DataTableColumn} from './components/column/column.component';\nimport {DataTableRow} from './components/row/row.component';\nimport {DataTablePagination} from './components/pagination/pagination.component';\nimport {DataTableHeader} from './components/header/header.component';\nimport {PixelConverter} from './utils/px';\nimport {Hide} from './utils/hide';\nimport {MinPipe} from './utils/min';\nimport {DataTableTranslations} from './types/data-table-translations.type';\nimport {CellCallback} from './types/cell-callback.type';\nimport {RowCallback} from './types/row-callback.type';\nimport {DataTableParams} from './types/data-table-params.type';\nimport {defaultTranslations} from './types/default-translations.type';\nimport {TranslateModule} from \"@ngx-translate/core\";\n\nexport * from './datasource/data-table-resource';\nexport {\n    DataTable, DataTableColumn, DataTableRow, DataTablePagination,\n    DataTableHeader, DataTableTranslations, CellCallback, RowCallback, DataTableParams, defaultTranslations\n};\n//export const DATA_TABLE_DIRECTIVES = [DataTable, DataTableColumn];\n\n@NgModule({\n    imports: [CommonModule, FormsModule, TranslateModule],\n    declarations: [\n        DataTable, DataTableColumn,\n        DataTableRow, DataTablePagination, DataTableHeader,\n        PixelConverter, Hide, MinPipe\n    ],\n    exports: [DataTable, DataTableColumn]\n})\nexport class GridModule {\n}\n","/*\nexport * from './components/column/column.component';\nexport * from './components/header/header.component';\nexport * from './components/pagination/pagination.component';\nexport * from './components/row/row.component';\nexport * from './components/table/table.component';\n\nexport * from './datasource/data-table-resource';\n*/\nexport * from './types/cell-callback.type';\nexport * from './types/data-table-params.type';\nexport * from './types/data-table-translations.type';\n//export * from './types/default-translations.type';\nexport * from './types/row-callback.type';\n\nexport * from './utils/drag';\nexport * from './utils/px';\nexport * from './utils/hide';\nexport * from './utils/min';\n\nexport * from './grid-module';\n","import {DatePipe} from \"@angular/common\";\n\nexport class DateUtils {\n    private static datePipe: DatePipe = new DatePipe('en-US');\n    public static DATETIME_FORMAT = 'dd/MM/yyyy HH:mm';\n    public static VN_DATETIME_FORMAT = 'HH:mm dd/MM/yyyy';\n    public static DATE_FORMAT = 'dd/MM/yyyy';\n    public static TIME_FORMAT = 'HH:mm';\n\n    public static format(date?: Date | number | string, format?: string): string {\n        if (!format) {\n            format = this.VN_DATETIME_FORMAT;\n        }\n        return <string>this.datePipe.transform(date, format);\n    }\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable()\nexport class NumberUtilsService {\n\n    isNumeric(value: string | number):boolean {\n        if ((undefined === value) || (null === value)) {\n            return false;\n        }\n        if (typeof value === 'number') {\n            return true;\n        }\n        if (!/^[0-9.,]+$/.test(value)) {\n            return false;\n        }\n        if (!/^(?=.*\\d)\\d*[\\.\\,]?\\d*$/.test(value)) {\n            return false;\n        }\n        return !isNaN(parseFloat(value) - 0);\n    }\n\n    isObjectEmpty(obj: any): boolean {\n        return Object.keys(obj).length === 0 && obj.constructor === Object;\n    }\n\n    addSeparator(value: number | string, separator: string = ','): string | number {\n        if (value && separator) {\n            value = value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n        }\n        return value;\n    }\n\n    removeSeparator(value: number | string, separator: string = ','): string | number {\n        if (value && typeof value !== 'number') {\n            switch (separator) {\n                case ' ':\n                    value = value.toString().replace(/[\\s]/g, '');\n                    break;\n                case ',':\n                    value = value.toString().replace(/\\,/g, '');\n                    break;\n                default:\n                    value = value.toString().replace(/separator/g, '');\n                    break;\n            }\n        }\n        return value;\n    }\n\n}\n","import {\n    Directive,\n    Input,\n    HostListener,\n    forwardRef,\n    Attribute,\n    ElementRef,\n    OnInit,\n    EventEmitter,\n    Output\n} from '@angular/core';\nimport {NumberUtilsService} from './number-utils.service';\nimport {Validator, AbstractControl, NG_VALIDATORS} from '@angular/forms';\n\n@Directive({\n    selector: '[appNumberSeparator]',\n    providers: [\n        {provide: NG_VALIDATORS, useExisting: forwardRef(() => NumberSeparatorDirective), multi: true}\n    ]\n    /*\n    host: {\n        '(ngModelChange)' : 'onInputChange($event)'\n    }\n    */\n})\nexport class NumberSeparatorDirective implements Validator, OnInit {\n\n    @Input('separator') separator = ',';\n    @Input('numberMin') numberMin?: string;\n    @Input('numberMax') numberMax?: string;\n    @Input('numberLength') numberLength?: string;\n\n    private readonly el: HTMLInputElement;\n\n    @Output() ngModel: EventEmitter<any> = new EventEmitter();\n\n    constructor(private utilsService: NumberUtilsService,\n                private elementRef: ElementRef,\n                // private injector: Injector,\n                @Attribute('name') public name: string) {\n\n        this.el = this.elementRef.nativeElement;\n        if (this.el) {\n            this.el.type = 'text';\n        }\n    }\n\n    ngOnInit() {\n    }\n\n    validate(c: AbstractControl): { [key: string]: any } | null {\n        // self value\n        let v = c.value;\n        if (v == 0 && !this.numberMin && !this.numberMax) {\n            this.el.value = \"0\";\n            return null;\n        }\n        if (v) {\n            // console.log('validate[value]', v, this.el.value, v !== this.el.value);\n\n            // first update\n            if (this.el && (v !== this.el.value)) {\n                this.el.value = <string>this.addSeparator(this.el.value);\n            }\n\n            // control value\n            v = parseInt(v.toString().replace(/[^0-9.,]/g, ''), 10);\n\n            // number validator\n            if (!this.isValidParam(v)) {\n                // @ts-ignore\n                this.el.value = null;\n                return {\n                    pattern: true\n                };\n            }\n\n            // min validator\n\n            if (v && this.numberMax && this.isValidParam(this.numberMax) && v > parseInt(this.numberMax, 10)) {\n                return {\n                    max: false\n                };\n            }\n\n            // max validator\n            if (v && this.numberMin && this.isValidParam(this.numberMin) && v < parseInt(this.numberMin, 10)) {\n                return {\n                    min: false\n                };\n            }\n        }\n\n        return null;\n    }\n\n    private isValidParam(param: any): boolean {\n        return param && this.utilsService.isNumeric(param);\n    }\n\n    private getNumber(value: string): string {\n        value = value.replace(/[^0-9.,]/g, '');\n        return value;\n    }\n\n    private checkLength(value: string): string {\n        if (this.numberLength && this.isValidParam(this.numberLength) && value.length > parseInt(this.numberLength, 10)) {\n            value = value.slice(0, parseInt(this.numberLength, 10));\n        }\n        return value;\n    }\n\n    @HostListener('input', ['$event'])\n    onInput($event: any) {\n        // console.log('onInput[data]', data.target.value);\n        let value = this.utilsService.removeSeparator($event.target.value, this.separator);\n        value = this.getNumber(<string> value);\n        if (this.utilsService.isNumeric(value)) {\n            value = this.checkLength(value);\n            $event.target.value = this.utilsService.addSeparator(value, this.separator);\n        }\n    }\n\n    /*\n\n    @HostListener(\"change\", [\"$event.target.value\"])\n    onChange(value) {\n        this.el.value = this.addSeparator(value);\n    }\n\n    onInputChange(value) {\n        const control = this.injector.get(NgControl);\n        const newValue = this.utilsService.removeSeparator(value, this.separator);\n        console.log('[newValue]', newValue);\n        control.valueAccessor.writeValue(newValue);\n    }\n\n    */\n\n    private addSeparator(v: string| number): string | number {\n        let value = this.utilsService.removeSeparator(v, this.separator);\n        value = this.getNumber(<string> value);\n        if (this.utilsService.isNumeric(value)) {\n            value = this.checkLength(value);\n            return this.utilsService.addSeparator(value, this.separator);\n        }\n        return v;\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NumberUtilsService} from \"./number-utils.service\";\nimport {NumberSeparatorDirective} from \"./number-separator.directive\";\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    declarations: [NumberSeparatorDirective],\n    exports: [NumberSeparatorDirective],\n    providers: [NumberUtilsService]\n})\nexport class NumberFormatModule {\n}\n","export enum EXT_HASH_ALG {\n    SHA1 = \"SHA1\",\n    SHA256 = \"SHA256\"\n}\n\nexport enum EXT_ACTION {\n    EXIT = \"EXIT\",\n    GET_INFO = \"GET_INFO\",\n    GET_CERTS = \"GET_CERTS\",\n    SIGN_HASH = \"SIGN_HASH\"\n}\n\nexport const NATIVE_APP_URL = \"https://cdn.inetcloud.vn/data/products/einvoice/token/token-signer-latest.msi\";\n\nexport const EXT_CHROME_URL = \"https://chrome.google.com/webstore/detail/oambjgnagjajdpefjbmnoahbbbggfnin\";\n\nexport const EXT_FIREFOX_URL = \"\";\n","export class CertUtils {\r\n\r\n    static parseCertString(subject: string) {\r\n        const data: any = {};\r\n        subject.split(',').forEach((str) => {\r\n            const values = str.trim().split('=');\r\n            if (data[values[0]]) {\r\n                data[values[0]] += ', ' + values[1];\r\n            } else {\r\n                data[values[0]] = values[1];\r\n            }\r\n        });\r\n        return data;\r\n    }\r\n}","import {MessageSignHash} from \"./model/MessageSignHash\";\nimport {EXT_ACTION, EXT_CHROME_URL, EXT_FIREFOX_URL, EXT_HASH_ALG, NATIVE_APP_URL} from \"./Constants\";\nimport {CertData} from \"./model/CertData\";\nimport {ReplyData} from \"./model/ReplyData\";\nimport {CertUtils} from \"./CertUtils\";\n\nexport class WebTokenSigner {\n    isChrome: boolean = /Google Inc/.test(navigator.vendor);\n    isFirefox: boolean = /Firefox/.test(navigator.userAgent);\n    isWindows: boolean = navigator.platform.indexOf('Win') > -1;\n\n    osSupported: boolean = this.isWindows;\n    browserSupported: boolean = this.isChrome || this.isFirefox;\n    appInstalled: boolean = false;\n    get extInstalled(): boolean {\n        // @ts-ignore\n        return !!window['_ExtTokenBridge'];\n    };\n\n    appInfo = {\n        version: null,\n        nativeVersion: null,\n        nativeLatestVersion: null\n    };\n\n    textOsUnSupport: string = 'Tính năng đang hỗ trợ cho máy tính dùng Windows';\n    textBrowserUnSupport: string = 'Tính năng đang hỗ trợ cho Chrome và FireFox';\n    textExtNotInstalled: string = `\n    Cần cài đặt extension <a href=\"${this.isChrome ? EXT_CHROME_URL : EXT_FIREFOX_URL}\" target=\"_blank\">TokenSigner</a> trên trình duyệt Web\n    `;\n    textAppNotInstalled: string = `\n    Cần cài đặt ứng dụng ký <a href=\"${NATIVE_APP_URL + '?t=' + new Date().getTime()}\" target=\"_blank\">TokenSigner</a> trên máy tính\n    `;\n\n    title: string = \"Chứng thư số\";\n    description: string = \"Chọn chứng thư số để ký\";\n    textOk: string = 'Đồng ý';\n    textCancel: string = 'Đóng';\n    certNotFound: string = 'Không tìm thấy chứng thư số';\n    textIssuer: string = 'Nhà cung cấp';\n    textValid: string = 'Hiệu lực';\n    zIndex: number = 1100;\n\n    private _dialog: any;\n    private _certEl: any;\n    private _certs?: CertData[];\n    private _certCallback?: Function;\n\n    constructor() {\n        this._onEscapeKey = this._onEscapeKey.bind(this);\n    }\n\n    checkReady(silent?: boolean): Promise<boolean> {\n        return new Promise(resolve => {\n            if (this.appInstalled) {\n                return resolve(true);\n            }\n\n            if (!this.osSupported) {\n                if (!silent) {\n                    this._createCertDialog([], this.textOsUnSupport);\n                }\n                return resolve(false);\n            }\n\n            if (!this.browserSupported) {\n                if (!silent) {\n                    this._createCertDialog([], this.textBrowserUnSupport);\n                }\n                return resolve(false);\n            }\n\n            if (!this.extInstalled) {\n                if (!silent) {\n                    this._createCertDialog([], this.textExtNotInstalled);\n                }\n                return resolve(false);\n            }\n\n            this._loadAppInfo().then(() => {\n                if (!this.appInstalled && !silent) {\n                    this._createCertDialog([], this.textAppNotInstalled);\n                }\n                resolve(this.appInstalled);\n            });\n        });\n    }\n\n    checkNativeUpdate() {\n        // @ts-ignore\n        return this.appInstalled && (this.appInfo.nativeVersion < this.appInfo.nativeLatestVersion);\n    }\n\n    loadCerts(): Promise<CertData[]> {\n        return new Promise(resolve => {\n            this.checkReady(true).then((ready) => {\n                if (ready) {\n                    this._postExt(EXT_ACTION.GET_CERTS).then((data) => {\n                        const certs = data && data.data || [];\n                        certs.forEach((cert: any) => {\n                            cert.subjectData = CertUtils.parseCertString(cert.subject);\n                            cert.issuerData = CertUtils.parseCertString(cert.issuer);\n                        });\n                        resolve(certs);\n                    });\n                } else {\n                    resolve([]);\n                }\n            });\n        });\n    }\n\n    signHash(data: MessageSignHash): Promise<ReplyData> {\n        return new Promise(resolve => {\n            if (data && (data.hash || data.hashs)) {\n                this.checkReady().then((ready) => {\n                    if (ready) {\n                        data.hashAlg = data.hashAlg || EXT_HASH_ALG.SHA1;\n                        this._postExt(EXT_ACTION.SIGN_HASH, data).then(resolve);\n                    } else {\n                        // @ts-ignore\n                        resolve(null);\n                    }\n                });\n            } else {\n                resolve({\n                    error: \"HASH_MISSING\"\n                });\n            }\n        });\n    }\n\n    selectCert(forceSelect?: boolean) {\n        return new Promise(resolve => {\n            this.checkReady().then((ready) => {\n                if (ready) {\n                    this.loadCerts().then((certs) => {\n                        if (certs.length > 1 || forceSelect) {\n                            this._certCallback = resolve;\n                            this._createCertDialog(certs);\n                        } else {\n                            resolve(certs[0]);\n                        }\n                    });\n                } else {\n                    resolve(null);\n                }\n            });\n        });\n    }\n\n    dateDisplay(dateStr?: string) {\n        if(!dateStr) {\n            return  '';\n        }\n        const date = new Date(dateStr);\n        return [date.getDate(), date.getMonth() + 1, date.getFullYear()].join('/');\n    }\n\n    private _postExt(action: EXT_ACTION, data?: any): Promise<ReplyData> {\n        return new Promise(resolve => {\n            if (this.extInstalled) {\n                // @ts-ignore\n                window[\"_ExtTokenBridge\"].postToExtension(action, data).then((response) => {\n                    resolve(response);\n                });\n            } else {\n                resolve({\n                    error: \"EXTENSION_NOT_INSTALL\"\n                });\n            }\n        });\n    }\n\n    private _loadAppInfo(): Promise<any> {\n        return new Promise(resolve => {\n            this._postExt(EXT_ACTION.GET_INFO).then((reply: ReplyData) => {\n                if (reply && reply.data) {\n                    Object.assign(this.appInfo, reply.data);\n                }\n                this.appInstalled = !!this.appInfo.nativeVersion;\n                resolve(this.appInstalled);\n            });\n        });\n    }\n\n    private _createCertDialog(certs: CertData[], message?: string) {\n        if (this._dialog) {\n            return;\n        }\n        this._dialog = document.createElement('div');\n        this._dialog.classList.add('webtoken-dialog');\n        this._dialog.style.zIndex = this.zIndex;\n\n        this._certs = certs;\n\n        let msg;\n\n        if (message) {\n            msg = '<div class=\"webtoken-dialog__message\">' + message + '</div>';\n        } else {\n            msg = certs.length < 1 ? `<div class=\"webtoken-dialog__message\">${this.certNotFound}</div>` : this._buildCertHtml(certs);\n        }\n\n        this._dialog.innerHTML = `\n        <style>\n        .webtoken-dialog {\n            position: fixed;\n            top: 0;\n            right: 0;\n            bottom: 0;\n            left: 0;\n            background: rgba(0, 0, 0, .3);\n        }\n        .webtoken-dialog__container {\n            width: 400px;\n            margin: auto;\n            background: #fff;\n            overflow: hidden;\n            color: #333;\n            position: absolute;\n            transform: translate(-50%, -50%);\n            top: 50%;\n            left: 50%;\n            border-radius: 4px;\n        }\n        .webtoken-dialog__header {\n            padding: 10px 15px;\n            border-bottom: 1px solid #ddd;\n        }\n        .webtoken-dialog__title {\n            font-size: 20px;\n            font-weight: bold;\n            margin-bottom: 5px;\n        }\n        .webtoken-dialog__desc {\n            font-size: 14px;\n            line-height: 20px;\n        }\n        .webtoken-dialog__close {\n            float: right;\n            width: 30px;\n            cursor: pointer;\n            text-align: center;\n            line-height: 30px;\n            margin: -5px 0;\n            font-size: 20px;\n        }\n        .webtoken-dialog__body {\n            max-height: 250px;\n            overflow: auto;\n            font-size: 14px;\n            line-height: 20px;\n        }\n        .webtoken-dialog__message {\n            padding: 20px;            \n        }\n        .webtoken-cert__item {\n            padding: 10px 20px;\n            cursor: pointer;\n            line-height: 20px;\n        }\n        .webtoken-cert__item.active {\n            background: #ddd !important;\n        }\n        .webtoken-cert__item:hover {\n            background: #f5f5f5;\n        }\n        .webtoken-cert__title {\n            font-size: 18px;\n            margin-bottom: 2px;\n        }\n        .webtoken-cert__text {\n            font-size: 14px;\n        }\n        .webtoken-dialog__footer {\n            padding: 10px 20px;\n            border-top: 1px solid #ddd;\n            text-align: right;\n        }\n        .webtoken-dialog__button {\n            height: 30px;\n            line-height: 30px;\n            padding: 0 10px;\n            min-width: 60px;\n            margin-left: 10px;\n            cursor: pointer;\n            border-radius: 4px;\n            font-weight: bold;\n            background: #fff;\n            border: 1px solid #ddd;\n        }\n        .webtoken-dialog__button:hover {\n            opacity: 8;\n        }\n        .btn-ok {\n            background: #007bff;\n            border-color: #007bff;\n            color: #fff;\n        }\n        </style>\n        <div class=\"webtoken-dialog__container\">\n        <div class=\"webtoken-dialog__header\">\n        <div class=\"webtoken-dialog__close\">×</div>\n        <div class=\"webtoken-dialog__title\">${this.title}</div>\n        ${message ? '' : `<div class=\"webtoken-dialog__desc\">${this.description}</div>`}\n        </div>\n        <div class=\"webtoken-dialog__body\">${msg}</div>\n        <div class=\"webtoken-dialog__footer\">\n        <button class=\"btn-close webtoken-dialog__button\">${this.textCancel}</button>\n        ${message ? '' : `<button class=\"btn-ok webtoken-dialog__button\">${this.textOk}</button>`}\n        </div>\n        </div>\n        `;\n\n        const certEl = this._dialog.getElementsByClassName('webtoken-cert__item');\n\n        // Close dialog\n        this._dialog.addEventListener('click', () => this._closeDialog());\n        this._dialog.getElementsByClassName('webtoken-dialog__close')[0].addEventListener('click', () => this._closeDialog());\n\n        // Prevent close dialog\n        this._dialog.getElementsByClassName('webtoken-dialog__container')[0].addEventListener('click', function (e: any) {\n            e.stopPropagation();\n        });\n\n        this._dialog.getElementsByClassName('btn-close')[0].addEventListener('click', () => this._closeDialog());\n\n        if (certs && certs.length > 0) {\n            // Ok select\n            this._dialog.getElementsByClassName('btn-ok')[0].addEventListener('click', () => {\n                if (this._certEl) {\n                    let index = Number(this._certEl.getAttribute('index'));\n                    if (this._certs && this._certs[index]) {\n                        if(this._certCallback) {\n                            this._certCallback(this._certs[index]);\n                        }\n                    }\n                } else if(this._certCallback) {\n                    this._certCallback(null);\n                }\n                this._closeDialog();\n            });\n\n            // On click cert item\n            for (let i = 0; i < certEl.length; i++) {\n                certEl[i].addEventListener('click', (e: any) => this._onClickCertEl(e));\n            }\n\n            // Select first cert\n            certEl[0].click();\n        }\n\n        // Esc key close dialog\n        document.addEventListener('keydown', this._onEscapeKey);\n\n        document.body.appendChild(this._dialog);\n    }\n\n    private _buildCertHtml(certs: CertData[]) {\n        let html = '';\n        certs.forEach((cert: CertData, index) => {\n            html += `\n            <div class=\"webtoken-cert__item\" index=\"${index}\">\n            <div class=\"webtoken-cert__title\">${cert?.subjectData?.CN}</div>\n            <div class=\"webtoken-cert__text\">${this.textIssuer}: ${cert?.issuerData?.CN}</div>\n            <div class=\"webtoken-cert__text\">${this.textValid}: ${this.dateDisplay(cert?.validFrom)} - ${this.dateDisplay(cert?.validTo)}</div>\n            </div>\n            `;\n        });\n        return html;\n    }\n\n    private _onClickCertEl(e: any) {\n        let certEl = this._findCerEl(e.target);\n        if (certEl.classList.contains('active')) {\n            return;\n        }\n        if (this._certEl) {\n            this._certEl.classList.remove('active');\n        }\n        certEl.classList.add('active');\n        this._certEl = certEl;\n    }\n\n    // @ts-ignore\n    private _findCerEl(certEl: any) {\n        if (!certEl.classList.contains('webtoken-cert__item')) {\n            return this._findCerEl(certEl.parentNode);\n        }\n        return certEl;\n    }\n\n    private _closeDialog() {\n        document.body.removeChild(this._dialog);\n        document.removeEventListener('keydown', this._onEscapeKey);\n        this._dialog = null;\n        this._certEl = null;\n        // @ts-ignore\n        this._certCallback = null;\n    }\n\n    private _onEscapeKey(e: any) {\n        if (e.which === 27) {\n            this._closeDialog();\n        }\n    }\n}\n","import {EXT_ACTION, EXT_HASH_ALG} from \"./Constants\";\nimport {ReplyData} from \"./model/ReplyData\";\nimport {CertData} from \"./model/CertData\";\nimport * as JSEncryptModule from \"jsencrypt\";\nimport {SignedData, SignedReplyData} from \"./model/SignedReplyData\";\nimport {MessageSignHash} from \"./model/MessageSignHash\";\n\nconst JSEncrypt = JSEncryptModule.JSEncrypt;\n\nexport class TokenSimulator {\n\n    static _certs: CertData[] = [\n        {\n            subject: \"C=VN, ST=HCM, L=HCM, O=Calista, OU=Calista, , CN=iNet Solutions Corporation\",\n            issuer: \"C=VN, CN=Viettel-CA, O=iNet, OU=iNet Solutions\",\n            validFrom: \"2019-07-06\",\n            validTo: \"2030-07-07\",\n            serial: \"843F1DF405009A62\",\n            cert: \"MIICezCCAeQCCQCEPx30BQCaYjANBgkqhkiG9w0BAQsFADCBgTELMAkGA1UEBhMC\" +\n                \"Vk4xDDAKBgNVBAgMA0hDTTEMMAoGA1UEBwwDSENNMRAwDgYDVQQKDAdDYWxpc3Rh\" +\n                \"MRAwDgYDVQQLDAdDYWxpc3RhMRAwDgYDVQQDDAdDYWxpc3RhMSAwHgYJKoZIhvcN\" +\n                \"AQkBFhFpbmZvQGluZXRjbG91ZC52bjAeFw0xOTA3MDgwNjM2MDNaFw0yMDA3MDcw\" +\n                \"NjM2MDNaMIGBMQswCQYDVQQGEwJWTjEMMAoGA1UECAwDSENNMQwwCgYDVQQHDANI\" +\n                \"Q00xEDAOBgNVBAoMB0NhbGlzdGExEDAOBgNVBAsMB0NhbGlzdGExEDAOBgNVBAMM\" +\n                \"B0NhbGlzdGExIDAeBgkqhkiG9w0BCQEWEWluZm9AaW5ldGNsb3VkLnZuMIGfMA0G\" +\n                \"CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxetXFs9aXIX89WX/cqc6pvAqfA1bSTwEC\" +\n                \"Qchv7Te/gHQJanYXBPOCpihJwa9jnKnI/S6y5KK+A6Ud/xO3CS6XWrJkd2AfGv1B\" +\n                \"o5of/4S3Y+AXiygimG9h/UOqZVgQQgkQbQd/c1uBEBznL0nvfZcUsTPI1DpDC9UK\" +\n                \"ZiUEWsaCTQIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAITGgS2WPloMGmY6Z2zYyS3y\" +\n                \"as+/B59nevh6so3JRmFduQ1Qu9OwTWU0pySd4g/5ZpuUPZkhlUzFOX+VKOxYmqpr\" +\n                \"4T2u9yXtNau94NYFPOpvzQGsEaR5OP14Oy2u/RXUoucPsZ1GPX8QggsOTK1I4xXs\" +\n                \"sOVgB1hlg0hdAKFQuXTC\",\n            pk: \"MIICXAIBAAKBgQCxetXFs9aXIX89WX/cqc6pvAqfA1bSTwECQchv7Te/gHQJanYX\" +\n                \"BPOCpihJwa9jnKnI/S6y5KK+A6Ud/xO3CS6XWrJkd2AfGv1Bo5of/4S3Y+AXiygi\" +\n                \"mG9h/UOqZVgQQgkQbQd/c1uBEBznL0nvfZcUsTPI1DpDC9UKZiUEWsaCTQIDAQAB\" +\n                \"AoGAM3xy73uQUR+CjgWctiL8tPi8DA0n7rLElCcJQo8KkR9uihy8TUk+azRQk7UA\" +\n                \"cGFOT+RC29q/62ebSuxoh7y+KuZObhNT2wkqE7cjbB97HlAgZrQOf4rYG+vGN3nB\" +\n                \"a3ZIzGq/NK+lxmpY7ZvAnA4v3yUWUmSsmbD3c5v/LzBSWgECQQDj1RSkFs27anTb\" +\n                \"HfKW2IDbDwL/l2zHPiRdd4v7DUlzhsoKEA/YgqSM+b/jsJ5i3JrKmqftFYvNhQUo\" +\n                \"SDcBXxjhAkEAx2wXaNTknWP7rfF++AGcqh61lSLkxABMRqEKU1XbAihmHd5KZw3H\" +\n                \"V+VgN4hoOhOLOyPF5E1nE9rdm4rkFcm67QJBAMFKeP2Rvy9+7O8tZC/oNMIk5UVV\" +\n                \"Aduz9AQ8NU1kA2n49BY/dEIa7GISTWNt56I2STkUpt10xyww66Q2SDxoouECQDKq\" +\n                \"CYB+pd4+qpBUjFdhwXWO+7758HjDQp2nCEKHy25O6TKpaOmpnH1+LuWs6B3pHTRX\" +\n                \"ME2CRK/MqQR9UtkeOTkCQBV7PYWgWshl/vz6pvu4bDtIwL1IxAd4+Ig50gYHPZtG\" +\n                \"whnZfWGcgraHy6W7GHhfskABTC9nm9DgdYLO6XpfvVQ=\"\n        },\n        {\n            subject: \"C=VN, ST=HCM, L=HCM, O=Vinaco, OU=Vinaco, CN=Vinaco Corporation\",\n            issuer: \"C=VN, CN=Viettel-CA, O=iNet, OU=iNet Solutions\",\n            validFrom: \"2019-07-06\",\n            validTo: \"2030-07-07\",\n            serial: \"99184098D6747AFA\",\n            cert: \"MIICczCCAdwCCQCZGECY1nR6+jANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJW\" +\n                \"TjEMMAoGA1UECAwDSENNMQwwCgYDVQQHDANIQ00xDzANBgNVBAoMBlZpbmFjbzEP\" +\n                \"MA0GA1UECwwGVmluYWNvMQ8wDQYDVQQDDAZWaW5hY28xIDAeBgkqhkiG9w0BCQEW\" +\n                \"EWluZm9AaW5ldGNsb3VkLnZuMB4XDTE5MDcwODA2MzQxMFoXDTIwMDcwNzA2MzQx\" +\n                \"MFowfjELMAkGA1UEBhMCVk4xDDAKBgNVBAgMA0hDTTEMMAoGA1UEBwwDSENNMQ8w\" +\n                \"DQYDVQQKDAZWaW5hY28xDzANBgNVBAsMBlZpbmFjbzEPMA0GA1UEAwwGVmluYWNv\" +\n                \"MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGluZXRjbG91ZC52bjCBnzANBgkqhkiG9w0B\" +\n                \"AQEFAAOBjQAwgYkCgYEA3K8A4TKSOGQQepR0ZWPIdi0ABnLXtYKqUdS84XIvCbCD\" +\n                \"60v7Rj8x/0YpLd99MMVfS1B3ZBF2XoCeE/qAg8BdtjSgnvHpyQX4vy9DRnKj56jJ\" +\n                \"TR0PX5njeG3xpToXjubusB70LVDqDSNERsmBga66oBbIDOtQj58dm3Dms4cyfCcC\" +\n                \"AwEAATANBgkqhkiG9w0BAQsFAAOBgQDPHQKecmW65R1Sng0A/HWHC71UvEGdshgK\" +\n                \"fODIlICjo0bX3n67Eu+m+VRFCKjWas9bYoPLQRx2m2F0qkdiim3iuKZf+0wYvXBk\" +\n                \"iDuPpoKG2Zq+aAFIh7H1qjgR34H96g3frl8dN5BQK4PFibrq24lxQuW2OvVwSOiz\" +\n                \"bar1/bl+jw==\",\n            pk: \"MIICWwIBAAKBgQDcrwDhMpI4ZBB6lHRlY8h2LQAGcte1gqpR1Lzhci8JsIPrS/tG\" +\n                \"PzH/Rikt330wxV9LUHdkEXZegJ4T+oCDwF22NKCe8enJBfi/L0NGcqPnqMlNHQ9f\" +\n                \"meN4bfGlOheO5u6wHvQtUOoNI0RGyYGBrrqgFsgM61CPnx2bcOazhzJ8JwIDAQAB\" +\n                \"AoGAKKkJ5XQ24rL1IlC1/XRcHAIAji+ctPHFRdyHjJZIOmXOeI0AWBoOsTURI0WZ\" +\n                \"QGItQ6gox0Q8Zf8WoSG3ig7odPEswLVqH/cr/0IsQ4yIMKlsw5JqizLq5Opcik61\" +\n                \"dH6wpLjVrNRcv2h/JVvmKdAo5K+KEwZ8UNmmEZK5O5cAssECQQD1qubI7/y4OWwQ\" +\n                \"PUYD9ZCocLWDLn34oBxN8ayNnLp/N4/D78jhpsDKSSPIcTFFSZVf4FplcEZS8f94\" +\n                \"fikFZmKHAkEA5fcZkwad0z/w5OahX0YHFRe3vNt7up4KEocXXgVETM79Yp6tiMbE\" +\n                \"+aEOtslBSfGAPiEIm46tXb9f0/ffid5hYQJAFm1uukNmf+8GFYlyfeQKO8ZmW75/\" +\n                \"05XSX69DgH4hbIHHBy052pfdm9oHgUIMLHYmQ+V4ezA/y0y6dOaXmh2ZuwJAN815\" +\n                \"UDsXyy5F51WrrPHSQCUMOfDMmmFFMm/DlNYUV8sWo3q7w2fwXl7dsi8t/6JxqyHa\" +\n                \"89xwZ0JMH6STguIKoQJAV/UVZO/8kpxbygpR4jlyA4cSrbb7bId8fk421CXivjcI\" +\n                \"JPRTHaTtJleJhITyPf48F/wwr0d62ENnuLLLv2QiRw==\"\n        }\n    ];\n\n    static postToExtension(action: EXT_ACTION, data?: any): Promise<ReplyData> {\n        const promise = new Promise((resolve) => {\n            switch (action) {\n                case EXT_ACTION.GET_INFO:\n                    resolve({data: {\n                        version: '0.0.1',\n                        nativeVersion: 1,\n                        nativeLatestVersion: 1,\n                    }});\n                    break;\n                case EXT_ACTION.SIGN_HASH:\n                    this._sign(data, resolve);\n                    break;\n                case EXT_ACTION.GET_CERTS:\n                    resolve({data: this._certs});\n                    break;\n            }\n        });\n        // @ts-ignore\n        return promise;\n    }\n\n    static _sign(data: MessageSignHash, resolve: any) {\n        try {\n            const cert = this._getCert(data.serial);\n            const response: SignedData = {\n                serial: cert.serial,\n                cert: cert.cert,\n                hashAlg: data.hashAlg || EXT_HASH_ALG.SHA1\n            };\n            // @ts-ignore\n            const jsEncrypt = new JSEncrypt(null);\n            jsEncrypt.setPrivateKey(cert.pk);\n\n            let __signature;\n            if (data.hashs) {\n                response.signatures = [];\n                data.hashs.forEach((hash) => {\n                    // @ts-ignore\n                    __signature = jsEncrypt.sign(hash, (str) => this._base64toHEX(str), data.hashAlg.toLocaleLowerCase());\n                    // @ts-ignore\n                    response.signatures.push(__signature);\n                });\n            } else {\n                if(data.hash) {\n                    __signature = jsEncrypt.sign(data.hash, (str) => {\n                        return this._base64toHEX(str);\n                    }, data.hashAlg ? data.hashAlg.toLocaleLowerCase(): '');\n                    if(__signature)\n                        response.signature = __signature;\n                }\n            }\n            resolve(<SignedReplyData>{\n                data: response\n            });\n        } catch (e: any) {\n            resolve(<SignedReplyData>{\n                error: \"SIGN_ERROR\",\n                errorMsg: e?.message\n            });\n        }\n    }\n\n    static _getCert(serial: any) {\n        for (let i = 0; i < this._certs.length; i++) {\n            if (this._certs[i].serial === serial) {\n                return this._certs[i];\n            }\n        }\n        return this._certs[0];\n    }\n\n    static _base64toHEX(base64: any) {\n\n        var raw = atob(base64);\n\n        var HEX = '';\n\n        for (let i = 0; i < raw.length; i++ ) {\n\n            var _hex = raw.charCodeAt(i).toString(16);\n\n            HEX += (_hex.length==2?_hex:'0'+_hex);\n\n        }\n        return HEX;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {WebTokenSigner} from \"./lib/WebTokenSigner\";\nimport {CertData} from \"./lib/model/CertData\";\nimport {MessageSignHash} from \"./lib/model/MessageSignHash\";\nimport {ReplyData} from \"./lib/model/ReplyData\";\nimport {TokenSimulator} from \"./lib/TokenSimulator\";\nimport {EXT_HASH_ALG} from \"./lib/Constants\";\nimport {Observable, Subscriber} from \"rxjs\";\n\n@Injectable()\nexport class WebTokenService {\n\n  private _signer = new WebTokenSigner();\n\n  initForDevMode() {\n    console.warn(\"Init WebTokenSigner for dev mode. Not used it in production mode\");\n    this._signer.appInstalled = true;\n    // @ts-ignore\n    if (!window[\"_ExtTokenBridge\"]) {\n      // @ts-ignore\n      window[\"_ExtTokenBridge\"] = TokenSimulator;\n    }\n  }\n\n  ready(): Observable<boolean> {\n    return Observable.create((subscriber: Subscriber<boolean>) => {\n      this._signer.checkReady().then((supported) => subscriber.next(supported));\n    });\n  }\n\n  selectCert(forceSelect?: boolean): Observable<CertData> {\n    return Observable.create((subscriber: Subscriber<CertData>) => {\n      // @ts-ignore\n      this._signer.selectCert(forceSelect).then((cert: CertData) => subscriber.next(cert));\n    });\n  }\n\n  getCertBySerial(serial: string): Observable<CertData> {\n    return Observable.create((subscriber: Subscriber<CertData>) => {\n      this.loadCerts().subscribe((certs: CertData[]) => {\n        for (let i = 0; i < certs.length; i++) {\n          if (certs[i].serial === serial) {\n            return subscriber.next(certs[i]);\n          }\n        }\n        subscriber.next();\n      });\n    });\n  }\n\n  selectCertUnlock(serial?: string): Observable<CertData> {\n    return Observable.create((subscriber: any) => {\n      if (serial) {\n        this.getCertBySerial(serial).subscribe((cert: CertData) => this._unlockCert(cert, subscriber));\n      } else {\n        this.selectCert().subscribe((cert: CertData) => this._unlockCert(cert, subscriber));\n      }\n    });\n  }\n\n  private _unlockCert(cert: CertData, subscriber: Subscriber<CertData>) {\n    if (cert) {\n      this.unlockCert(cert).subscribe((unlocked: boolean) => {\n        cert.unlocked = unlocked;\n        subscriber.next(cert);\n      });\n    } else {\n      subscriber.next(cert);\n    }\n  }\n\n  unlockCert(cert: CertData): Observable<boolean> {\n    return Observable.create((subscriber: Subscriber<boolean>) => {\n      // Sign fake data to unlock token\n      const fakeData: MessageSignHash = {\n        hash: \"cA/metLrX7NUOfviDVsGYeRxAIo=\",\n        hashAlg: EXT_HASH_ALG.SHA1,\n        serial: cert.serial\n      };\n      this.signHash(fakeData).subscribe((response: ReplyData) => {\n        if (response && response.data && response.data.signature) {\n          subscriber.next(true);\n        } else {\n          subscriber.next(false);\n        }\n      });\n    });\n  }\n\n  loadCerts(): Observable<CertData[]> {\n    return Observable.create((subscriber: any) => {\n      this._signer.loadCerts().then((data) => subscriber.next(data));\n    });\n  }\n\n  signHash(data: MessageSignHash): Observable<ReplyData> {\n    return Observable.create((subscriber: Subscriber<ReplyData>) => {\n      this._signer.signHash(data).then((response) => subscriber.next(response));\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {WebTokenService} from \"./web-token.service\";\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [WebTokenService]\n})\nexport class WebTokenModule {}\n","import {\n    Component,\n    ComponentFactoryResolver,\n    ComponentRef,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewContainerRef\n} from '@angular/core';\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {filter} from \"rxjs/operators\";\nimport {Subscription} from \"rxjs\";\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[navigationTab]',\n    templateUrl: './navigation-tab.component.html',\n    styleUrls: ['./navigation-tab.component.scss']\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class NavigationTab implements OnInit, OnDestroy {\n    @Input() tabs?: NavigationData[];\n    @Input() viewContainerRef?: ViewContainerRef;\n    @Input() prefix: string = '';\n\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onChange = new EventEmitter<any>();\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onLoad = new EventEmitter<any>();\n\n    tabActive?: NavigationData;\n    componentRef?: ComponentRef<any>;\n\n    private _router?: Subscription;\n\n    constructor(\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private router: Router\n    ) {\n    }\n\n    ngOnInit() {\n\n        // @ts-ignore\n      this._router = this.router.events\n            .pipe(filter(event => event instanceof NavigationEnd))\n            .subscribe(() => {\n                this._activeTab();\n            });\n\n        this._activeTab();\n    }\n\n    ngOnDestroy() {\n        if (this._router) {\n            this._router.unsubscribe();\n        }\n    }\n\n    activeTab(tab: NavigationData) {\n        if (tab.active) {\n            return;\n        }\n        this.router.navigate([this.getFullPath(tab)]);\n        this.onChange.emit(tab);\n    }\n\n    getTabByPath(path: string): any {\n        // get tab with path matching\n        if(this.tabs) {\n          for (let i = 0; i < this.tabs.length; i++) {\n            if (this.getFullPath(this.tabs[i]) === path) {\n              return this.tabs[i];\n            }\n          }\n          return this.tabs[0];\n        }\n        return null;\n    }\n\n    getFullPath(tab: NavigationData) {\n        return this.prefix + tab.path;\n    }\n\n    private _loadComponent(tab: NavigationData) {\n        if (this.tabActive === tab) {\n            return;\n        }\n        this.tabActive = tab;\n        if(this.viewContainerRef) {\n          this.viewContainerRef.clear();\n          if (tab.component) {\n            let componentFactory = this.componentFactoryResolver.resolveComponentFactory(tab.component);\n            this.componentRef = this.viewContainerRef.createComponent(componentFactory);\n            this.onLoad.emit(this.componentRef);\n          }\n        }\n    }\n\n    private _activeTab() {\n        let tab = this.getTabByPath(this.router.url);\n        if (tab && this.tabs) {\n            this.tabs.forEach(_tab => _tab.active = false);\n            this._loadComponent(tab);\n            tab.active = true;\n        }\n    }\n}\n\nexport interface NavigationData {\n    name: string\n    component: any\n    path: string\n    active?: boolean\n}\n","<div class=\"navigation-tab\">\n  <ul class=\"nav navigation-tab__content\">\n    <li *ngFor=\"let tab of tabs\" class=\"nav-item\" [ngClass]=\"{'active': tab.active}\">\n      <span class=\"nav-link\" (click)=\"activeTab(tab)\">{{tab.name}}</span>\n    </li>\n  </ul>\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NavigationTab} from \"./navigation-tab.component\";\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    exports: [NavigationTab],\n    declarations: [NavigationTab]\n})\nexport class NavigationTabModule {\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'truncate'\n})\nexport class TruncatePipe implements PipeTransform {\n\n  transform(value: string, limit: number): string {\n    if(!value) {\n      return '';\n    }\n    return value.length < limit ? value : value.slice(0, limit) + '...';\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {TruncatePipe} from \"./truncate.pipe\";\n@NgModule({\n  declarations: [TruncatePipe],\n  imports: [\n    CommonModule\n  ],\n  exports: [TruncatePipe]\n})\nexport class PipeCommonModule { }\n","import {\n    Directive,\n    Input,\n    HostListener,\n    forwardRef,\n    Attribute,\n    ElementRef,\n    EventEmitter,\n    Output\n} from '@angular/core';\nimport {Validator, AbstractControl, NG_VALIDATORS} from '@angular/forms';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: 'input[namingConvention]',\n    providers: [\n        {provide: NG_VALIDATORS, useExisting: forwardRef(() => NamingConventionDirective), multi: true}\n    ]\n})\nexport class NamingConventionDirective implements Validator {\n\n    @Input() pattern: string = '^[a-z_$][a-z_$0-9]*$';\n    private readonly el: HTMLInputElement;\n    private value: string = '';\n    @Output() ngModel: EventEmitter<any> = new EventEmitter();\n\n    constructor(\n        private elementRef: ElementRef,\n        @Attribute('name') public name: string) {\n\n        this.el = this.elementRef.nativeElement;\n        if (this.el) {\n            this.el.type = 'text';\n        }\n    }\n\n    validate(c: AbstractControl): { [key: string]: any } | null {\n        const v = c.value;\n        if (v) {\n            if (!this.isValid(v?.trim()?.removeAccents())) {\n                return {\n                    pattern: true\n                };\n            }\n        }\n        return null;\n    }\n\n    isValid(v: string): boolean {\n        return new RegExp(this.pattern).test(v);\n    }\n\n    @HostListener('input', ['$event'])\n    onInput($event: any) {\n        let value = $event.target?.value;\n        if (value) {\n            value = value?.toLowerCase()?.trim()?.removeAccents();\n            $event.target.value = value;\n            if (this.isValid(value)) {\n                this.value = value;\n            }\n        \n        }\n\n    }\n    @HostListener('focusout', ['$event'])\n    onFocusOut($event: any): void {\n        this.value = '';//reset cached value\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {NamingConventionDirective} from \"./naming-convention.directive\";\n\n@NgModule({\n  declarations: [\n      NamingConventionDirective\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [NamingConventionDirective]\n})\nexport class NamingConventionModule { }\n","/*\n * Public API Surface of inet-ui\n */\n\nexport * from './lib/model/index';\nexport * from './lib/decorator/index';\nexport * from './lib/pipes/index';\nexport * from './lib/common/index';\nexport * from './lib/interceptor/index';\nexport * from './lib/translate/index';\nexport * from './lib/web-socket/index';\nexport * from './lib/collapse/index';\nexport * from './lib/dialog/index';\nexport * from './lib/list-view/index';\nexport * from './lib/file/index';\nexport * from './lib/file-upload/index';\nexport * from './lib/open-graph/index';\n//export * from './lib/photoswipe/index';\n//export * from './lib/sticky-bar/index';\nexport * from './lib/image-cropper/index';\nexport * from './lib/pagination/index';\nexport * from './lib/datetime/index';\nexport * from './lib/plugin-manager/index';\nexport * from './lib/notify/index';\nexport * from './lib/custom-pagination/index';\nexport * from './lib/ngx-editor/index';\nexport * from './lib/grid/index';\nexport * from './lib/utils/index';\nexport * from './lib/number-format/index';\nexport * from './lib/web-token/index';\nexport * from './lib/navigation-tab/index';\nexport * from './lib/pipe-common/index';\nexport * from './lib/naming-convetion/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.CloudTranslateService","i3","i1.FileFormatService","i2.FileFormatService","i1.ViewerService","i2.FileIconPipe","i1.OpenGraphService","i2.ImageCropperComponent","i2.PluginManagerService","i4.SafePipe","i1.PluginManagerService","i1.Overlay","i1.ToastrService","i2.ToastPackage","i2.ToastrService","i1.NotifyService","i2.ToastrModule","i1.MessageService","Utils.restoreSelection","Utils.canEnableToolbarOptions","i3.MessageService","i4.CommandExecutorService","i5","Utils.saveSelection","i2.CommandExecutorService","i4.NgxGrippieComponent","i5.NgxEditorMessageComponent","i6.NgxEditorToolbarComponent","i3.Hide","i3.MinPipe","i4.DataTableRow","i5.DataTablePagination","i6.DataTableHeader","i7.Hide","i8.PixelConverter"],"mappings":"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"}