{"version":3,"file":"inet-ui.mjs","names":["i1","i1","i1","i1","i1","i1","i1","i1","i2","i1","i2","i3.CloudTranslateService","i1","i2","i1","i2","i1.FileFormatService","i1.FileFormatService","i1","i2.FileFormatService","i3","i1.ViewerService","i1","i2.FileIconPipe","i1","i1.OpenGraphService","i2","i1","i1","i2.ImageCropperComponent","i3","i1","i1","i2.PluginManagerService","i4.SafePipe","i1","i2.PluginManagerService","i1.PluginManagerService","i1.OverlayContainer","i1.Overlay","i2","i1.ToastrService","i2.ToastPackage","i1","i2.ToastrService","i1.NotifyService","i2.ToastrModule","i1","i3","i1.MessageService","i2","Utils.restoreSelection","i1","Utils.canEnableToolbarOptions","i2","i3.MessageService","i4.CommandExecutorService","i5","Utils","Utils.saveSelection","i1.MessageService","i2.CommandExecutorService","i4.NgxGrippieComponent","i5.NgxEditorMessageComponent","i6.NgxEditorToolbarComponent","i1","i2","i3.Hide","i1","i2","i3.MinPipe","i1","i2","i3","i4.DataTableRow","i5.DataTablePagination","i6.DataTableHeader","i7.Hide","i8.PixelConverter","i1.NumberUtilsService","i1","i2"],"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/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"],"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    standalone: false\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    standalone: false\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, iNet, ResponseData} from 'inet-core';\nimport {Observable, of} from 'rxjs';\nimport {shareReplay, tap} from 'rxjs/operators';\n\n@Injectable({\n    providedIn: 'platform'\n})\nexport class LocationService {\n    private url = {\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, iNet} from 'inet-core';\nimport {Observable, of} from 'rxjs';\nimport {shareReplay, tap} from 'rxjs/operators';\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, iNet} from 'inet-core';\nimport { HttpErrorResponse } from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\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 { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse } 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ự đặc 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ự đặc 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, iNet} from 'inet-core';\nimport {Observable} from \"rxjs\";\nimport {TranslateService} from \"@ngx-translate/core\";\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\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    standalone: false\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    standalone: false\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    standalone: false\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    standalone: false\n})\nexport class ModalHeaderDirective {\n\n  constructor(public templateRef: TemplateRef<unknown>) { }\n\n}\n","import {AfterViewInit, Component, ContentChild, Input, OnInit, TemplateRef, ViewChild, ChangeDetectionStrategy} from '@angular/core';\nimport {BsModalService} from 'ngx-bootstrap/modal';\nimport {BsModalRef} from 'ngx-bootstrap/modal';\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\";\nimport { iNet } from 'inet-core';\n\n@Component({\n    selector: 'app-confirm-dialog',\n    templateUrl: './confirm-dialog.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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($safeNavigationMigration(action?.fn), $safeNavigationMigration(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,\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  ChangeDetectionStrategy\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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    standalone: false\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';\nimport { iNet } from 'inet-core';\n\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.getInstances()?.commonImageFolder || iNet.getImageFolder();\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    standalone: false\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    standalone: false\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, iNet} from \"inet-core\";\nimport {Subject} from \"rxjs\";\nimport {FileFormatService} from \"./file-format.service\";\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    private getINetInstances(): any {\n        return iNet.getInstances();\n    }\n\n    hasViewerInBrowser(): boolean {\n        if (this.getINetInstances()?.isWebKit) { //Chrome or Safari\n            if (this.getINetInstances()?.isChrome) {\n                return this.hasNameInPlugin('PDF Viewer');\n            } else if (this.getINetInstances().isSafari) {\n                return (this.hasNameInPlugin('Adobe Acrobat') || this.hasNameInPlugin('PDF'));\n            }\n        } else if (this.getINetInstances()?.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    standalone: false\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, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n    selector: 'file-list',\n    templateUrl: './file-list.component.html',\n    styleUrls: ['./file-list.component.css'],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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({\n    selector: '[ng2FileDrop]',\n    standalone: false\n})\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({\n    selector: '[ng2FileSelect]',\n    standalone: false\n})\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, iNet } from 'inet-core';\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, ChangeDetectionStrategy} 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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\n})\nexport class LinkPreviewComponent implements OnInit {\n    @Input() link?: string | undefined;\n    @Input() openGraphData?: OpenGraphData | null;\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($safeNavigationMigration(openGraphData?.url))}}</div>\n        </div>\n        <a [href]=\"$safeNavigationMigration(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    standalone: false\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, ChangeDetectionStrategy} from '@angular/core';\nimport {BsModalService} from 'ngx-bootstrap/modal';\nimport {BsModalRef} from 'ngx-bootstrap/modal';\nimport {ImageCroppedEvent} from \"../image-cropper.component\";\n@Component({\n    selector: 'app-cropper-avatar-dialog',\n    templateUrl: './cropper-avatar-dialog.component.html',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n    selector: 'app-pagination-list',\n    templateUrl: './pagination-list.component.html',\n    styleUrls: ['./pagination-list.component.scss'],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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    standalone: false\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\";\nimport { iNet } from 'inet-core';\n\n@Injectable({\n    providedIn: 'root'\n})\n\nexport class PluginManagerService {\n    private loaded = false;\n    pluginManager: any = iNet.getPluginManager();\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.getInstances()?.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, ChangeDetectionStrategy} from '@angular/core';\nimport {PluginManagerService} from \"./plugin-manager.service\";\nimport {CoreService, iNet} from \"inet-core\";\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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: any = this.pluginManagerService.convertToHttpParams({\n                    application: this.params['application'],\n                    secrd: this.params['queryStr']\n                });\n                if(this.url && __params){\n                    this.url = iNet.urlAppend(this.url, __params?.toString());\n                }\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    standalone: false\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    standalone: false\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 } 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  ComponentRef,\n  EmbeddedViewRef,\n  createComponent,\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 _appRef: ApplicationRef,\n  ) {\n    super();\n  }\n\n  /**\n   * Attach the given ComponentPortal to DOM element using createComponent.\n   * @param portal Portal to be attached\n   */\n  attachComponentPortal<T>(\n    portal: ComponentPortal<T>,\n    newestOnTop: boolean,\n  ): ComponentRef<T> {\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 = createComponent(portal.component, {\n      environmentInjector: this._appRef.injector,\n      elementInjector: portal.injector,\n    });\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, 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 _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._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  ChangeDetectionStrategy\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('inactive => active', animate('{{ easeTime }}ms {{ easing }}')),\n            transition('active => removed', animate('{{ easeTime }}ms {{ easing }}'))\n        ])\n    ],\n    preserveWhitespaces: false,\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: 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';\nimport {Observable} from 'rxjs';\nimport {HttpClientService, iNet} 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  ChangeDetectionStrategy\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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\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, ChangeDetectionStrategy } 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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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, ChangeDetectionStrategy} 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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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, ChangeDetectionStrategy} from '@angular/core';\n@Component({\n    selector: 'app-ngx-grippie',\n    templateUrl: './ngx-grippie.component.html',\n    styleUrls: ['./ngx-grippie.component.scss'],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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  ChangeDetectionStrategy\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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],\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    standalone: false\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({\n    selector: '[hide]', inputs: ['hide'],\n    standalone: false\n})\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    standalone: false\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    standalone: false\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  ChangeDetectionStrategy\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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  ChangeDetectionStrategy\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    host: {\n        '(document:click)': '_closeSelector()'\n    },\n    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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, ChangeDetectionStrategy} 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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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  ChangeDetectionStrategy\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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","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    ,\n    standalone: false\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  ComponentRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewContainerRef,\n  ChangeDetectionStrategy\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    changeDetection: ChangeDetectionStrategy.Eager,\n    standalone: false\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 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            this.componentRef = this.viewContainerRef.createComponent(tab.component);\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    standalone: false\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    standalone: false\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"],"mappings":"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"}