{"version":3,"file":"irohalab-deneb-ui.mjs","sources":["../../../../projects/irohalab/deneb-ui/src/dark-theme.service.ts","../../../../projects/irohalab/deneb-ui/src/dialog/dialog-container.ts","../../../../projects/irohalab/deneb-ui/src/dialog/dialog-container.html","../../../../projects/irohalab/deneb-ui/src/dialog/dialog-ref.ts","../../../../projects/irohalab/deneb-ui/src/dialog/dialog-injector.ts","../../../../projects/irohalab/deneb-ui/src/dialog/dialog.ts","../../../../projects/irohalab/deneb-ui/src/dialog/index.ts","../../../../projects/irohalab/deneb-ui/src/toast/toast-injector.ts","../../../../projects/irohalab/deneb-ui/src/toast/toast.ts","../../../../projects/irohalab/deneb-ui/src/toast/toast-ref.ts","../../../../projects/irohalab/deneb-ui/src/toast/toast.component.ts","../../../../projects/irohalab/deneb-ui/src/toast/index.ts","../../../../projects/irohalab/deneb-ui/src/pagination/pagination.ts","../../../../projects/irohalab/deneb-ui/src/pagination/index.ts","../../../../projects/irohalab/deneb-ui/src/infinite-list/infinite-data-collection.ts","../../../../projects/irohalab/deneb-ui/src/core/helpers.ts","../../../../projects/irohalab/deneb-ui/src/scrollbar/scrollbar.ts","../../../../projects/irohalab/deneb-ui/src/scrollbar/scrollbar.html","../../../../projects/irohalab/deneb-ui/src/scrollbar/index.ts","../../../../projects/irohalab/deneb-ui/src/timeline-meter/timeline-meter.ts","../../../../projects/irohalab/deneb-ui/src/timeline-meter/timeline-meter.html","../../../../projects/irohalab/deneb-ui/src/timeline-meter/scrollable-content.ts","../../../../projects/irohalab/deneb-ui/src/timeline-meter/index.ts","../../../../projects/irohalab/deneb-ui/src/infinite-list/infinite-list.ts","../../../../projects/irohalab/deneb-ui/src/infinite-list/infinite-list.html","../../../../projects/irohalab/deneb-ui/src/infinite-list/infinite-for-of.ts","../../../../projects/irohalab/deneb-ui/src/infinite-list/index.ts","../../../../projects/irohalab/deneb-ui/src/dropdown/dropdown.ts","../../../../projects/irohalab/deneb-ui/src/dropdown/index.ts","../../../../projects/irohalab/deneb-ui/src/toggle/toggle.ts","../../../../projects/irohalab/deneb-ui/src/toggle/toggle.html","../../../../projects/irohalab/deneb-ui/src/toggle/index.ts","../../../../projects/irohalab/deneb-ui/src/popover/popover-ref.ts","../../../../projects/irohalab/deneb-ui/src/popover/popover-injector.ts","../../../../projects/irohalab/deneb-ui/src/popover/register.ts","../../../../projects/irohalab/deneb-ui/src/popover/popover.ts","../../../../projects/irohalab/deneb-ui/src/popover/popover.directive.ts","../../../../projects/irohalab/deneb-ui/src/popover/popover-content.ts","../../../../projects/irohalab/deneb-ui/src/popover/basic-popover/basic-popover.component.ts","../../../../projects/irohalab/deneb-ui/src/popover/basic-popover/basic-popover.html","../../../../projects/irohalab/deneb-ui/src/popover/index.ts","../../../../projects/irohalab/deneb-ui/src/core/dom.ts","../../../../projects/irohalab/deneb-ui/src/responsive-image/DI.ts","../../../../projects/irohalab/deneb-ui/src/responsive-image/responsive.service.ts","../../../../projects/irohalab/deneb-ui/src/responsive-image/responsive-image.directive.ts","../../../../projects/irohalab/deneb-ui/src/responsive-image/responsive-image-wrapper.ts","../../../../projects/irohalab/deneb-ui/src/responsive-image/responsive.generate-src.service.ts","../../../../projects/irohalab/deneb-ui/src/responsive-image/index.ts","../../../../projects/irohalab/deneb-ui/src/index.ts","../../../../projects/irohalab/deneb-ui/src/irohalab-deneb-ui.ts"],"sourcesContent":["import { Inject, Injectable, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport const DARK_THEME = 'dark_theme';\nexport const LIGHT_THEME = 'light_theme';\n\nconst THEME_FOR_DENEB = 'theme_for_deneb';\nexport type ThemeName = 'dark_theme' | 'light_theme';\nconst EVENT_NAME = 'DenebThemeChange';\n\n@Injectable({providedIn: 'root'})\nexport class DarkThemeService implements OnDestroy {\n    private _globalListenerInstance: () => void;\n    private _themeChangeSubject = new BehaviorSubject<string>(null);\n\n    public get themeChange(): Observable<string> {\n        return this._themeChangeSubject.asObservable();\n    }\n\n    constructor(@Inject(PLATFORM_ID) private platformId: object) {\n        if (isPlatformBrowser(platformId)) {\n            this.checkTheme();\n            this.initGlobalListener();\n        }\n    }\n\n    public changeTheme(theme: ThemeName): void {\n        window.localStorage.setItem(THEME_FOR_DENEB, theme);\n        this._themeChangeSubject.next(theme);\n        const event = new CustomEvent(EVENT_NAME);\n        window.dispatchEvent(event);\n    }\n\n    public getCurrentTheme(): ThemeName {\n        return this._themeChangeSubject.value as ThemeName;\n    }\n\n    public ngOnDestroy(): void {\n        if (isPlatformBrowser(this.platformId)) {\n            window.removeEventListener(EVENT_NAME, this._globalListenerInstance);\n        }\n    }\n\n    private initGlobalListener(): void {\n        this._globalListenerInstance = () => {\n            this.checkTheme();\n        };\n        window.addEventListener(EVENT_NAME, this._globalListenerInstance);\n    }\n    private checkTheme(): void {\n        const theme = window.localStorage.getItem(THEME_FOR_DENEB);\n        if (theme === DARK_THEME || theme === LIGHT_THEME) {\n            this._themeChangeSubject.next(theme);\n        }\n    }\n}\n","import {\n    AfterViewInit,\n    Component,\n    ComponentRef,\n    EventEmitter, Injector,\n    Input, OnDestroy, OnInit,\n    Output, Type,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation, ViewRef\n} from '@angular/core';\nimport {UIDialogConfig} from './dialog';\nimport { DARK_THEME, DarkThemeService } from '../dark-theme.service';\nimport { Subscription } from 'rxjs';\nimport { NgClass } from '@angular/common';\n\n@Component({\n    selector: 'ui-dialog-container',\n    templateUrl: './dialog-container.html',\n    styleUrls: ['dialog-container.less'],\n    encapsulation: ViewEncapsulation.None,\n    imports: [NgClass]\n})\nexport class UIDialogContainer implements AfterViewInit, OnInit, OnDestroy {\n    private _subscription = new Subscription();\n\n    get backdropOpacity(): number {\n        if (this.dialogConfig && !this.dialogConfig.backdrop) {\n            return 0;\n        }\n        return 1;\n    }\n\n    get backdropState(): string {\n        if (this.backdropOpacity === 1) {\n            return 'active';\n        }\n        return 'inactive'\n    }\n\n    insideParent: boolean;\n    isDarkTheme: boolean;\n\n    @ViewChild('backdrop', {read: ViewContainerRef}) backDropContainerRef: ViewContainerRef;\n\n    @Input()\n    dialogConfig: UIDialogConfig;\n\n    @Output()\n    close = new EventEmitter<any>();\n\n    contentViewRef: ViewRef;\n\n    constructor(private _viewContainerRef: ViewContainerRef,\n                private _darkThemeService: DarkThemeService) {\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    ngOnInit(): void {\n        this._subscription.add(\n            this._darkThemeService.themeChange\n                .subscribe(theme => { this.isDarkTheme = theme == DARK_THEME; })\n        );\n    }\n\n    onClickBackDrop($event: Event) {\n        $event.preventDefault();\n        $event.stopPropagation();\n        if (!this.dialogConfig.stickyDialog) {\n            this.close.emit(null);\n        }\n    }\n\n    attachDialogContent<T>(componentType: Type<T>, injector: Injector): ComponentRef<T> {\n        // console.log(this._viewContainer.element.nativeElement);\n        const component = this._viewContainerRef.createComponent<T>(componentType, {injector});\n        this.contentViewRef = component.hostView;\n        return component\n    }\n\n    ngAfterViewInit(): void {\n        this.backDropContainerRef.insert(this.contentViewRef)\n    }\n}\n","<div class=\"ui-dialog-container\" [ngClass]=\"{'local-container': insideParent}\">\n    <div #backdrop\n         class=\"backdrop\"\n         [ngClass]=\"{inverted: isDarkTheme}\"\n         [class.active]=\"backdropState === 'active'\"\n         (click)=\"onClickBackDrop($event)\"></div>\n</div>\n","import {Observable, Subject, Subscription} from 'rxjs';\nimport {\n    ApplicationRef,\n    ComponentRef,\n    Injector,\n    Type\n} from '@angular/core';\nimport {UIDialogConfig} from './dialog';\nimport {UIDialogContainer} from './dialog-container';\nexport class UIDialogRef<T> {\n\n    componentInstance: T;\n\n    private _subscription = new Subscription();\n\n    private _afterClosed: Subject<any> = new Subject();\n\n    private _disposeCallback: () => void;\n\n    constructor(\n        private _container: ComponentRef<UIDialogContainer>,\n        private _appRef: ApplicationRef,\n        public config: UIDialogConfig\n    ) {}\n\n    attachComponent<T>(componentType: Type<T>,  injector?: Injector): ComponentRef<T> {\n        const containerInstance = this._container.instance;\n        const componentRef = containerInstance.attachDialogContent(componentType, injector);\n        if (!this.config.stickyDialog) {\n            this._subscription.add(\n                containerInstance.close\n                    .subscribe(() => this.close(null))\n            );\n        }\n        this._disposeCallback = () => {\n            this._appRef.detachView(this._container.hostView);\n            this._container.destroy();\n        };\n        return componentRef;\n    }\n\n    close(dialogResult?: any): void {\n        this._disposeCallback();\n        this._afterClosed.next(dialogResult);\n        this._afterClosed.complete();\n        this._subscription.unsubscribe();\n    }\n\n    afterClosed(): Observable<any> {\n        return this._afterClosed.asObservable();\n    }\n}\n","import { Injector, ProviderToken } from '@angular/core';\nimport {UIDialogRef} from './dialog-ref';\n\nexport class DialogInjector implements Injector {\n\n    constructor(private _dialogRef: UIDialogRef<any>, private _parentInjector: Injector) {}\n\n    get(token: ProviderToken<any>, notFoundValue?: any): any {\n        if (token === UIDialogRef) {\n            return this._dialogRef;\n        }\n        return this._parentInjector.get(token, notFoundValue);\n    }\n}\n","// Optional is unused here but in order to emit declaration files, we need to import it.\n// https://github.com/Microsoft/TypeScript/issues/9944#issuecomment-244448079\nimport {\n    Optional,\n    ApplicationRef,\n    ComponentRef,\n    EmbeddedViewRef,\n    Injectable,\n    Injector,\n    Type, ViewContainerRef, createComponent\n} from '@angular/core';\nimport {UIDialogRef} from './dialog-ref';\nimport {UIDialogContainer} from './dialog-container';\nimport {DialogInjector} from './dialog-injector';\n\n@Injectable({providedIn: 'root'})\nexport class UIDialog {\n    constructor(\n        private _appRef: ApplicationRef,\n        private _injector: Injector\n    ) {}\n\n    open<T>(component: Type<T>, config: UIDialogConfig, viewContainer?: ViewContainerRef): UIDialogRef<T> {\n        let container: ComponentRef<UIDialogContainer>;\n        if (viewContainer) {\n            container = viewContainer.createComponent<UIDialogContainer>(UIDialogContainer, {injector: this._injector});\n        } else {\n            const environmentInjector = this._appRef.injector;\n            container = createComponent<UIDialogContainer>(UIDialogContainer, {environmentInjector});\n            this._appRef.attachView(container.hostView);\n            if (document) {\n                document.body.appendChild(this.getComponentRootNode(container));\n            }\n        }\n        container.instance.dialogConfig = config;\n        container.instance.insideParent = !!viewContainer;\n        return this.createDialogContent(component, container, config);\n    }\n\n    createDialogContent<T>(component: Type<T>, containerRef: ComponentRef<UIDialogContainer>, config: UIDialogConfig): UIDialogRef<T> {\n        let dialogRef = new UIDialogRef<T>(containerRef, this._appRef, config);\n        let dialogInjector = new DialogInjector(dialogRef, this._injector);\n        let componentRef = dialogRef.attachComponent(component, dialogInjector);\n        dialogRef.componentInstance = componentRef.instance;\n        return dialogRef;\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\nexport class UIDialogConfig {\n    // stickyDialog means it cannot be closed through click on the backdrop or press escape key.\n    stickyDialog: boolean = false;\n    backdrop: boolean = true;\n}\n","import {NgModule} from '@angular/core';\nimport {UIDialogContainer} from './dialog-container';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n    imports: [CommonModule, UIDialogContainer],\n    exports: [UIDialogContainer]\n})\nexport class UIDialogModule {\n\n}\n\nexport * from './dialog';\nexport * from './dialog-container';\nexport * from './dialog-ref';\n","import { Injector, ProviderToken } from '@angular/core';\nimport {UIToastRef} from './toast-ref';\n\nexport class ToastInjector implements Injector {\n\n    constructor(private _toastRef: UIToastRef<any>, private _parentInjector: Injector){}\n\n    get(token: ProviderToken<any>, notFoundValue?: any): any {\n        if (token === UIToastRef) {\n            return this._toastRef;\n        }\n        return this._parentInjector.get(token, notFoundValue);\n    }\n}\n","import {\n    Injectable, Injector, ApplicationRef, Type, ComponentRef,\n    EmbeddedViewRef,\n    createComponent, Inject, PLATFORM_ID\n} from '@angular/core';\nimport {UIToastRef} from './toast-ref';\nimport {UIToastComponent} from './toast.component';\nimport {ToastInjector} from './toast-injector';\nimport {Subscription} from 'rxjs';\nimport {UIToastAnimation} from './toast-interface';\nimport { isPlatformServer } from '@angular/common';\n\n@Injectable({providedIn: 'root'})\nexport class UIToast {\n    private _currentActiveToast: ComponentRef<any>;\n    // private _lastActiveToast: ComponentRef<any>;\n\n    private _pendingToast: ComponentRef<any>;\n    private _pendingToastDuration: number;\n\n    private _leaveAnimationSubscription: Subscription;\n\n    private timerId: any;\n\n    constructor(private _injector: Injector,\n                private _appRef: ApplicationRef,\n                @Inject(PLATFORM_ID) private platformId: object) {\n    }\n\n    make<T>(componentType?: Type<T>): UIToastRef<T> {\n        return new UIToastRef(this, componentType);\n    }\n\n    makeText(): UIToastRef<UIToastComponent> {\n        return this.make(UIToastComponent);\n    }\n\n    makeComponent<T>(toastRef: UIToastRef<T>): ComponentRef<T> {\n        let toastInject = new ToastInjector(toastRef, this._injector);\n        return createComponent(toastRef.componentType, {environmentInjector: this._appRef.injector, elementInjector: toastInject});\n    }\n\n    activeToast<T>(component: ComponentRef<T>, duration: number) {\n        if (isPlatformServer(this.platformId)) {\n            return;\n        }\n        if (this._pendingToast) {\n            this._pendingToast = component;\n            this._pendingToastDuration = duration;\n        } else {\n            this._pendingToast = component;\n            this._pendingToastDuration = duration;\n            if (!this._currentActiveToast) {\n                this.activePendingToast();\n            } else {\n                this.deactiveToast();\n            }\n        }\n    }\n\n    activePendingToast() {\n        this._currentActiveToast = this._pendingToast;\n        this._pendingToast = null;\n        let duration  = this._pendingToastDuration;\n\n        this._appRef.attachView(this._currentActiveToast.hostView);\n        document.body.appendChild(this._getComponentRootNode(this._currentActiveToast));\n        this.timerId = setTimeout(() => {\n            this.deactiveToast();\n        }, duration);\n    }\n\n    deactiveToast() {\n        if (isPlatformServer(this.platformId)) {\n            return;\n        }\n        clearTimeout(this.timerId);\n        if (this._currentActiveToast) {\n            if (this._currentActiveToast.instance['animationEvent'] && this._currentActiveToast.instance['uiLeaveAnimationDone']) {\n                this._leaveAnimationSubscription = (this._currentActiveToast.instance as UIToastAnimation).animationEvent.subscribe(\n                    () => {\n                        this._leaveAnimationSubscription.unsubscribe();\n                        // if (this._lastActiveToast !== this._currentActiveToast && this._lastActiveToast) {\n                        //     console.log('destroy lastActiveToast: ', this._lastActiveToast, this._currentActiveToast);\n                        //     this._lastActiveToast.destroy();\n                        // }\n                        // this._lastActiveToast = this._currentActiveToast;\n                        this._currentActiveToast.destroy();\n                        this._currentActiveToast = null;\n                        if (this._pendingToast) {\n                            this.activePendingToast();\n                        }\n                    }\n                );\n                this._appRef.detachView(this._currentActiveToast.hostView);\n            } else {\n                // if (this._lastActiveToast !== this._currentActiveToast && this._lastActiveToast) {\n                //     this._lastActiveToast.destroy();\n                // }\n                // this._lastActiveToast = this._currentActiveToast;\n                this._currentActiveToast.destroy();\n                this._currentActiveToast = null;\n            }\n        }\n    }\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\nexport const LONG_TOAST = 6 * 1000;\nexport const SHORT_TOAST = 3 * 1000;\n","import {SHORT_TOAST, UIToast} from './toast';\nimport {Type} from '@angular/core';\nexport class UIToastRef<T> {\n\n    duration = SHORT_TOAST;\n\n    messageObject: any;\n\n    constructor(\n        private _toastService: UIToast,\n        public componentType: Type<T>\n    ) {}\n\n    show(message: any): void {\n        if (typeof message !== 'undefined') {\n            this.messageObject = message;\n        }\n        let componentRef = this._toastService.makeComponent(this);\n        this._bindingMessage(this.messageObject, componentRef.instance);\n        this._toastService.activeToast(componentRef, this.duration);\n    }\n\n    hide(): void {\n        this._toastService.deactiveToast();\n    }\n\n    private _bindingMessage(message: any, componentInstance: any) {\n        if (typeof message === 'string') {\n            componentInstance.message = message;\n        } else {\n            Object.assign(componentInstance, message);\n        }\n    }\n}\n","import {\n    Component,\n    EventEmitter, HostBinding,\n    Input,\n    OnDestroy, OnInit,\n    Output,\n    ViewEncapsulation\n} from '@angular/core';\nimport {animate, state, style, transition, trigger, AnimationEvent} from '@angular/animations';\nimport {UIToastRef} from './toast-ref';\nimport {UIToastAnimation} from './toast-interface';\nimport { DARK_THEME, DarkThemeService } from '../dark-theme.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'ui-toast',\n    template: '<div class=\"toast-content ui black message\">{{message}}</div>',\n    animations: [\n        trigger('fade', [\n            state('in', style({ opacity: 1 })),\n            transition('void => *', [\n                style({ opacity: 0 }),\n                animate(300)\n            ]),\n            transition('* => void', [\n                animate(300, style({ opacity: 0 }))\n            ])\n        ])\n    ],\n    host: {\n        '[@fade]': '\"in\"',\n        '(@fade.done)': 'uiLeaveAnimationDone($event)'\n    },\n    styleUrls: ['toast.less'],\n    encapsulation: ViewEncapsulation.Emulated\n})\nexport class UIToastComponent implements OnInit, OnDestroy, UIToastAnimation {\n    private _subscription = new Subscription();\n    @Input() message: string;\n\n    @Output()\n    animationEvent = new EventEmitter<any>();\n\n    @HostBinding('class.dark-theme')\n    isDarkTheme: boolean;\n\n    constructor(private _toastRef: UIToastRef<UIToastComponent>,\n                private _darkThemeService: DarkThemeService) {}\n\n    public ngOnInit() {\n        this._subscription.add(\n            this._darkThemeService.themeChange\n                .subscribe((theme) => { this.isDarkTheme = theme === DARK_THEME; })\n        );\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    uiLeaveAnimationDone(event: AnimationEvent): void {\n        if (event.toState === 'void') {\n            this.animationEvent.emit(null);\n        }\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {UIToastComponent} from './toast.component';\n\n@NgModule({\n    imports: [UIToastComponent],\n    exports: [UIToastComponent]\n})\nexport class UIToastModule {\n\n}\n\nexport * from './toast.component';\nexport * from './toast';\nexport * from './toast-injector';\nexport * from './toast-ref';\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { DARK_THEME, DarkThemeService } from '../dark-theme.service';\nimport { Subscription } from 'rxjs';\nimport { NgClass } from '@angular/common';\n\n\nexport interface PageNumber {\n    number: number,\n    text: string,\n    active: boolean\n}\n\n@Component({\n    selector: 'ui-pagination',\n    template: `\n        <div class=\"ui pagination menu pagination-container\" [ngClass]=\"{inverted: isDarkTheme}\">\n          <a class=\"item page-navigator\" [ngClass]=\"{disabled: currentPage <= 1}\" (click)=\"prevPage()\">\n            <i class=\"angle left icon\"></i>\n          </a>\n          @for (page of pageNumberList; track page) {\n            <a class=\"item page-num\" [ngClass]=\"{active: page.active}\"\n              (click)=\"onClickPage(page)\">\n              {{page.text}}\n            </a>\n          }\n          <a class=\"item page-navigator\" [ngClass]=\"{disabled: currentPage >= totalPages}\" (click)=\"nextPage()\">\n            <i class=\"angle right icon\"></i>\n          </a>\n        </div>\n        `,\n    styles: [`\n        .pagination-container.ui.pagination.menu.inverted {\n            border: 1px solid rgba(255, 255, 255, 0.08);\n        }\n    `],\n    imports: [NgClass]\n})\nexport class UIPagination implements OnInit, OnDestroy {\n    private _subscription = new Subscription();\n    _currentPageNumber: number;\n    private _total: number;\n    private _countPerPage: number;\n    private _max: number = Number.MAX_SAFE_INTEGER;\n\n    pageNumberList: PageNumber[] = [];\n    totalPages: number;\n    isDarkTheme: boolean;\n\n    @Output()\n    pageChange = new EventEmitter<number>();\n\n    @Input()\n    set currentPage(page: number) {\n        if (page !== this._currentPageNumber) {\n            this._currentPageNumber = page;\n            this.pageNumberList = this.updatePageNumberList();\n        }\n    }\n\n    get currentPage(): number {\n        return this._currentPageNumber;\n    }\n\n    @Input()\n    set total(total: number) {\n        this._total = total;\n        if (!this.isUndefined(this._total) && !this.isUndefined(this._currentPageNumber) && !this.isUndefined(this._countPerPage)) {\n            this.pageNumberList = this.updatePageNumberList();\n        }\n    }\n\n    @Input()\n    set countPerPage(count: number) {\n        this._countPerPage = count;\n        this.pageNumberList = this.updatePageNumberList();\n    }\n\n    @Input()\n    set max(max: number) {\n        if (max <= 1) {\n            throw new Error('max size must greater than 1');\n        }\n        this._max = max;\n        this.pageNumberList = this.updatePageNumberList();\n    }\n\n    constructor(private _darkThemeService: DarkThemeService) {\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    ngOnInit(): void {\n        this._subscription.add(\n            this._darkThemeService.themeChange\n                .subscribe(theme => { this.isDarkTheme = theme === DARK_THEME; })\n        );\n    }\n\n    onClickPage(page: PageNumber) {\n        if (page.number !== this._currentPageNumber) {\n            this.currentPage = page.number;\n            this.pageChange.emit(page.number);\n        }\n    }\n\n    prevPage() {\n        if (this._currentPageNumber <= 1) {\n            return;\n        }\n        this.currentPage--;\n        this.pageChange.emit(this._currentPageNumber);\n    }\n\n    nextPage() {\n        if (this._currentPageNumber >= this.totalPages) {\n            return;\n        }\n        this.currentPage++;\n        this.pageChange.emit(this._currentPageNumber);\n    }\n\n    private isUndefined(obj: any) {\n        return typeof obj === 'undefined';\n    }\n\n    private makePage(number: number, text: string): PageNumber {\n        return {\n            number: number,\n            text: text,\n            active: number == this.currentPage\n        }\n    }\n\n    private updatePageNumberList(): PageNumber[] {\n        // console.log('rebuild pages');\n        let maxSize = this._max;\n        let currentPage = this.currentPage;\n        this.totalPages = Math.ceil(this._total / this._countPerPage);\n        let pages: PageNumber [] = [];\n        let startPage = 1, endPage = this.totalPages;\n        let isMaxSized = maxSize < this.totalPages;\n        if (!isMaxSized) {\n            for (let i = startPage; i <= endPage; i++) {\n                if (i == currentPage) {\n                    pages.push(this.makePage(i, i + ''))\n                } else {\n                    pages.push(this.makePage(i, i + ''))\n                }\n            }\n        } else {\n            let lp = Math.max(currentPage - 1, startPage);\n            let rp = Math.min(currentPage + 1, endPage);\n            if (lp != currentPage && rp !== currentPage) {\n                pages.push(this.makePage(currentPage, currentPage + ''));\n            }\n            while (rp - lp < maxSize) {\n                if (lp > startPage) {\n                    pages.unshift(this.makePage(lp, lp + ''));\n                    lp--;\n                }\n                if (rp < endPage) {\n                    pages.push(this.makePage(rp, rp + ''));\n                    rp++;\n                }\n            }\n\n            if (lp > startPage) {\n                pages.unshift(this.makePage(lp, '...'));\n                pages.unshift(this.makePage(startPage, startPage + ''));\n            } else if (lp == startPage) {\n                pages.unshift(this.makePage(startPage, startPage + ''));\n            }\n\n            if (rp < endPage) {\n                pages.push(this.makePage(rp, '...'));\n                pages.push(this.makePage(endPage, endPage + ''));\n            } else if (rp == endPage) {\n                pages.push(this.makePage(endPage, endPage + ''));\n            }\n        }\n        return pages;\n    }\n}\n","import {UIPagination} from './pagination';\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@NgModule({\n    imports: [CommonModule, UIPagination],\n    exports: [UIPagination]\n})\nexport class UIPaginationModule {\n\n}\n\nexport * from './pagination';\n","export type InfiniteDataBucket = {\n    start: number;\n    end: number;\n    filled?: boolean;\n    fetching?: boolean;\n}\n\nexport class InfiniteDataBucketsStub {\n    constructor(public buckets: InfiniteDataBucket[],\n                public context: any,\n                public onLoadBucket: (bucketIndex: number) => Promise<Iterable<any>>) {\n    }\n\n    loadBucket(bucketIndex: number): Promise<Iterable<any>> {\n        return this.onLoadBucket.call(this.context, bucketIndex);\n    }\n}\n","/**\n * determine whether a point is inside a rectangle\n * @param x\n * @param y\n * @param rect\n * @returns {boolean}\n */\nexport function isInRect(x: number, y: number, rect: DOMRect): boolean {\n    return x > rect.left && x < rect.right && y > rect.top && y < rect.bottom;\n}\n\nexport function ancestor(curr: Element, selector: string): Element {\n    let node = curr.parentElement;\n    while(node !== null) {\n        if (node.classList.contains(selector)) {\n            return node;\n        }\n        node = node.parentElement;\n    }\n    return node;\n}\n","\nimport {fromEvent as observableFromEvent, Subscription} from 'rxjs';\n\nimport {takeUntil, mergeMap, tap, filter, debounceTime} from 'rxjs/operators';\nimport {\n    AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport {isInRect} from '../core/helpers';\nimport { DARK_THEME, DarkThemeService } from '../dark-theme.service';\nimport { NgClass } from '@angular/common';\n\nexport const SCROLL_DISTANCE = 10;\n\n@Component({\n    selector: 'ui-scrollbar',\n    templateUrl: 'scrollbar.html',\n    styleUrls: ['scrollbar.less'],\n    imports: [NgClass]\n})\nexport class UIScrollbar implements AfterViewInit, OnChanges, OnDestroy, OnInit {\n\n    private _subscription = new Subscription();\n    private _isDrag: boolean;\n    /**\n     * when _isDrag is false, we need to smoothly move the scrollbarThumb to our final y position.\n     * so we need to store current point position. this position may be updated by mousemove event\n     */\n    private _finalY: number;\n\n    private _timer: number;\n\n    private _dragStartOffset: number = 0;\n\n    private _isDraging: boolean = false;\n\n    @Input()\n    contentHeight: number;\n\n    @Input()\n    set scrollPosition(percentage: number) {\n        if (this._isDraging) {\n            return;\n        }\n        if (percentage >= 0 && percentage <=1 && this.scrollbarRect && this.scrollbarThumbHeight) {\n            this.updateScrollBarThumbPosition((this.scrollbarRect.height - this.scrollbarThumbHeight) * percentage);\n        }\n    }\n\n    @Output()\n    scrollChange = new EventEmitter<number>();\n\n    scrollbarRect: ClientRect;\n\n    showScrollbar: boolean;\n    scrollbarThumbHeight: number;\n    scrollbarThumbTop: number = 0;\n\n    isDarkTheme: boolean;\n\n    @ViewChild('scrollbar') scrollbar: ElementRef;\n\n    constructor(private _darkThemeService: DarkThemeService) {\n    }\n\n    ngOnInit(): void {\n        this._subscription.add(\n            this._darkThemeService.themeChange\n                .subscribe(theme => {this.isDarkTheme = theme === DARK_THEME})\n        );\n    }\n\n    ngAfterViewInit(): void {\n        let scrollbar = this.scrollbar.nativeElement;\n        setTimeout(() => {\n            this.scrollbarRect = scrollbar.getBoundingClientRect();\n            if (this.contentHeight && this.scrollbarRect.height) {\n                this.determineScrollbar(this.contentHeight);\n            }\n        });\n\n        this._subscription.add(\n            observableFromEvent(window, 'resize').pipe(\n                debounceTime(300))\n                .subscribe(\n                    () => {\n                        this.scrollbarRect = scrollbar.getBoundingClientRect();\n                        if (this.contentHeight && this.scrollbarRect.height) {\n                            this.determineScrollbar(this.contentHeight);\n                        }\n                    }\n                )\n        );\n\n        this._subscription.add(\n            observableFromEvent<MouseEvent>(document.body, 'mousedown').pipe(\n                filter((event: MouseEvent) => {\n                    return isInRect(event.clientX, event.clientY, this.scrollbarRect);\n                }),\n                tap((event: MouseEvent) => {\n                    this._isDraging = true;\n                    event.preventDefault();\n                    let scrollbarThumbOffset = this.scrollbarThumbTop + this.scrollbarRect.top;\n                    this._isDrag = event.clientY > scrollbarThumbOffset && event.clientY < scrollbarThumbOffset + this.scrollbarThumbHeight;\n                    if (!this._isDrag) {\n                        this._finalY = event.clientY - this.scrollbarRect.top;\n                        // console.log(this._finalY);\n                        this.smoothScrollTo();\n                        this._dragStartOffset = 0;\n                    } else {\n                        this._dragStartOffset = event.clientY - scrollbarThumbOffset;\n                    }\n                }),\n                mergeMap(() => {\n                    return observableFromEvent<MouseEvent>(document.body, 'mousemove').pipe(\n                        takeUntil(\n                            observableFromEvent<MouseEvent>(document.body, 'mouseup').pipe(\n                                tap(() => {\n                                    this._isDraging = false;\n                                    this._dragStartOffset = 0;\n                                    clearTimeout(this._timer);\n                                }))\n                        ));\n                }),)\n                .subscribe(\n                    (event: MouseEvent) => {\n                        if (this._isDrag) {\n                            this.updateScrollBarThumbPosition(event.clientY - this.scrollbarRect.top);\n                            this.scrollTo(event.clientY - this.scrollbarRect.top);\n                        } else {\n                            this._finalY = event.clientY - this.scrollbarRect.top;\n                            if (!isInRect(event.clientX, event.clientY, this.scrollbarRect)) {\n                                clearTimeout(this._timer);\n                            } else {\n                                this.smoothScrollTo();\n                            }\n                        }\n                    }\n                )\n        );\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('contentHeight' in changes && changes['contentHeight'].currentValue) {\n            setTimeout(() => {\n                this.scrollbarRect = this.scrollbar.nativeElement.getBoundingClientRect();\n                this.determineScrollbar(changes['contentHeight'].currentValue);\n            });\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    private smoothScrollTo() {\n        window.clearTimeout(this._timer);\n        this._timer = window.setTimeout(() => {\n            if (this._finalY >= this.scrollbarThumbTop && this._finalY <= this.scrollbarThumbTop + this.scrollbarThumbHeight) {\n                return;\n            }\n            let offset = this._finalY > this.scrollbarThumbTop + this.scrollbarThumbHeight ? this._finalY - this.scrollbarThumbTop + this.scrollbarThumbHeight : this._finalY - this.scrollbarThumbTop;\n            let scrollDistance = Math.min(SCROLL_DISTANCE, Math.abs(offset));\n            let scrollY = offset > 0 ? this.scrollbarThumbTop + scrollDistance : this.scrollbarThumbTop - scrollDistance;\n            this.updateScrollBarThumbPosition(scrollY);\n            this.scrollTo(scrollY);\n            this.smoothScrollTo();\n        }, 20);\n    }\n\n    private updateScrollBarThumbPosition(pos: number) {\n        let scrollbarAvailableHeight = (this.scrollbarRect.height - this.scrollbarThumbHeight);\n        this.scrollbarThumbTop = Math.max(0, Math.min(pos - this._dragStartOffset, scrollbarAvailableHeight));\n    }\n\n    private determineScrollbar(contentHeight: number) {\n        this.scrollbarThumbHeight = Math.floor(this.scrollbarRect.height / contentHeight * this.scrollbarRect.height);\n        this.showScrollbar = this.scrollbarThumbHeight < this.scrollbarRect.height;\n    }\n\n    private scrollTo(pos: number) {\n        let scrollbarAvailableHeight = this.scrollbarRect.height - this.scrollbarThumbHeight;\n        let scrollPercentage = Math.max(0, Math.min((pos - this._dragStartOffset) / scrollbarAvailableHeight, 1));\n        this.scrollChange.emit(scrollPercentage);\n    }\n}\n","<div class=\"scrollbar\" [ngClass]=\"{show: showScrollbar, 'dark-theme': isDarkTheme}\" #scrollbar>\n    <div class=\"scrollbar-thumb\"\n         [style.height]=\"scrollbarThumbHeight + 'px'\"\n         [style.transform]=\"'translate3d(0, ' + scrollbarThumbTop + 'px, 0)'\"></div>\n</div>\n","import {UIScrollbar} from './scrollbar';\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@NgModule({\n    imports: [CommonModule, UIScrollbar],\n    exports: [UIScrollbar]\n})\nexport class UIScrollbarModule {\n}\n\nexport * from './scrollbar';\n","\nimport {fromEvent as observableFromEvent, BehaviorSubject, Observable, Subscription} from 'rxjs';\n\nimport {debounceTime, tap, takeUntil, map, mergeMap, filter} from 'rxjs/operators';\nimport {\n    AfterViewInit, Component, ElementRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport {isInRect} from '../core/helpers';\nimport {SCROLL_STATE, SCROLL_STOP_TIME_THRESHOLD} from '../infinite-list';\nimport { DARK_THEME, DarkThemeService } from '../dark-theme.service';\nimport { NgClass } from '@angular/common';\nimport { UIScrollbar } from '../scrollbar';\n\nexport class RowItem {\n    // use native Date instead Momentjs to get a good performance\n    // https://jsperf.com/moment-js-vs-native-date\n    date: Date;\n    rowHeightPercent: number;\n    // used by pointedItem;\n    label: string;\n    pos: string;\n}\n\nexport class Marker {\n    items: RowItem[] = [];\n    totalHeightPercent: number = 0;\n    showMarker: boolean = false;\n}\n\nexport class Label {\n    label: string;\n    leadDate: Date;\n    markers: Marker[] = [];\n    totalHeightPercent: number = 0;\n    showLabel: boolean = true;\n}\n\nexport class RenderEntity {\n    constructor(public isLabel: boolean, public label: string, public top: string) {\n    }\n}\n\nexport const LABEL_MARGIN = 15;\n\nexport const MARKER_MARGIN = 8;\n/**\n * Minimum speed to show tooltip when scroll\n * @type {number} unit is rows/sec\n */\nexport const MIN_VELOCITY = 4;\n\nexport const TOOLTIP_FADE_TIME = 800;\n\n@Component({\n    selector: 'ui-timeline-meter',\n    templateUrl: 'timeline-meter.html',\n    styleUrls: ['timeline-meter.less'],\n    imports: [NgClass, UIScrollbar]\n})\nexport class UITimeLineMeter implements AfterViewInit, OnInit, OnDestroy, OnChanges {\n    private _subscription = new Subscription();\n\n    private _scrollPosition = new BehaviorSubject<number>(0);\n    private _onContentScroll = new BehaviorSubject<number>(-1);\n\n    private _itemList: RowItem[];\n\n    private _meterWidth: number;\n    private _meterHeight: number;\n    private _isBuilding: boolean;\n    private _isInMeasure: boolean;\n\n    contentScrollState: SCROLL_STATE = SCROLL_STATE.IDLE;\n\n    scrollPercentage: number;\n\n    /**\n     * the scrollable content height\n     */\n    contentHeight: number;\n\n    // availableHeight is _meterHeight - toolTipHeight\n    availableHeight: number;\n\n    toolTipHeight: number;\n\n    labelList: Label[];\n    /**\n     * we maintain this list which only contains label an mark whose showLabel or showMarker property is true.\n     * this approach could reduce DOM elements and increase speed and save memory\n     */\n    renderEntityList: RenderEntity[];\n\n    showTooltip: boolean = false;\n    floatMarkPos: string;\n    pointedItem: RowItem;\n\n    @Input()\n    disableDarkTheme: boolean = false;\n\n    isDarkTheme: boolean;\n\n    @ViewChild('meter') meter: ElementRef;\n    @ViewChild('container') container: ElementRef;\n    @ViewChild('renderWrapper') renderWrapper: ElementRef;\n\n    @Input()\n    timestampList: number[];\n\n    /**\n     * labelSpan describes what span of time should a label be displayed.\n     * The labels display may vary base on timestamp list, height of each row and height of meter.\n     * But the minimal time span of the label is not less than this value.\n     * @type {string}\n     */\n    @Input()\n    labelSpan: 'year' | 'month' | 'day' | 'hour' = 'year';\n\n    /**\n     * markSpan should always smaller than labelSpan\n     * @type {string}\n     */\n    @Input()\n    markSpan: 'month' | 'week' | 'day' | 'hour' = 'month';\n\n    @Input()\n    showMarker: boolean = true;\n\n    /**\n     * if rowHeight is set, meter will use this height for all rows.\n     * mark on meter will be evenly placed.\n     * If you use InfiniteList as content, row height must be set.\n     */\n    @Input()\n    rowHeight: number = 0;\n\n    set rowHeightList(list: number[]) {\n        this.contentHeight = list.reduce((prev, curr) => prev + curr, 0);\n        this._itemList = list.map((rowHeight, index) => {\n            let item = new RowItem();\n            item.rowHeightPercent = rowHeight / this.contentHeight;\n            if (this.timestampList && this.timestampList[index]) {\n                item.date = new Date(this.timestampList[index]);\n            }\n            return item;\n        });\n        this.buildMeter();\n    }\n\n    constructor(private _darkThemeService: DarkThemeService) {\n    }\n\n    ngOnInit(): void {\n        if (this.disableDarkTheme) {\n            this.isDarkTheme = false;\n        } else {\n            this._subscription.add(\n                this._darkThemeService.themeChange\n                    .subscribe(theme => { this.isDarkTheme = theme === DARK_THEME })\n            );\n        }\n    }\n\n    /**\n     * This method is called by content component to update its\n     * @param scrollPercentage should be percentage digital of scroll y position\n     */\n    setScrollY(scrollPercentage: number) {\n        this.scrollPercentage = scrollPercentage;\n        let scrollY = scrollPercentage * this.availableHeight;\n        this.updatePointedItem(scrollPercentage);\n        this.updateCursorPosition(scrollY + this.toolTipHeight / 2);\n        this._onContentScroll.next(scrollPercentage);\n    }\n\n    onScrollbarChange(scrollPercentage: number) {\n        this.setScrollY(scrollPercentage);\n        this._scrollPosition.next(scrollPercentage);\n    }\n    /**\n     * scroll position is a percentage float number.\n     * content component should calculate actual scrollY multiply its own height\n     * @returns {Observable<number>}\n     */\n    get scrollPosition(): Observable<number> {\n        return this._scrollPosition.asObservable();\n    }\n\n    ngAfterViewInit(): void {\n        let meterEl = this.meter.nativeElement;\n        let container = this.container.nativeElement;\n        let renderWrapper = this.renderWrapper.nativeElement;\n        // for mouse event\n        this._subscription.add(\n            observableFromEvent<MouseEvent>(meterEl, 'mousedown').pipe(\n                filter(() => {\n                    return this.timestampList && this.timestampList.length > 0;\n                }),\n                mergeMap((event: MouseEvent) => {\n                    event.preventDefault();\n                    return observableFromEvent<MouseEvent>(document, 'mousemove').pipe(\n                        takeUntil(observableFromEvent(document, 'mouseup')));\n                }),\n                map((event: MouseEvent) => {\n                    return Math.max(0, Math.min(event.clientY - renderWrapper.getBoundingClientRect().top, this.availableHeight));\n                }),)\n                .subscribe((pos: number) => {\n                    this.scrollTo(pos);\n                })\n        );\n\n        // for click\n        this._subscription.add(\n            observableFromEvent<MouseEvent>(meterEl, 'click').pipe(\n                filter(() => {\n                    return this.timestampList && this.timestampList.length > 0;\n                }),\n                map((event: MouseEvent) => {\n                    return Math.max(0, Math.min(event.clientY - renderWrapper.getBoundingClientRect().top, this.availableHeight));\n                }),)\n                .subscribe(\n                    (pos: number) => {\n                        this.scrollTo(pos);\n                    }\n                )\n        );\n\n        // for touch event\n        this._subscription.add(\n            observableFromEvent<TouchEvent>(renderWrapper, 'touchstart').pipe(\n                filter(() => {\n                    return this.timestampList && this.timestampList.length > 0;\n                }),\n                tap(() => {\n                    this.showTooltip = true;\n                }),\n                map((event: TouchEvent) => {\n                    event.preventDefault();\n                    return event.touches[0].clientY;\n                }),\n                mergeMap(() => {\n                    return observableFromEvent<TouchEvent>(renderWrapper, 'touchmove').pipe(\n                        map((event: TouchEvent) => {\n                            event.preventDefault();\n                            return event.touches[0].clientY;\n                        }),\n                        takeUntil(\n                            observableFromEvent<TouchEvent>(renderWrapper, 'touchend').pipe(\n                                map((event: TouchEvent) => {\n                                    event.preventDefault();\n                                    return event.changedTouches[0].clientY;\n                                }))\n                        ),\n                        tap(\n                            () => {\n                            },\n                            () => {\n                            },\n                            () => {\n                                this.showTooltip = false;\n                            }\n                        ),);\n                }),)\n                .subscribe(\n                    (viewportOffsetY: number) => {\n                        let rect = this.renderWrapper.nativeElement.getBoundingClientRect();\n                        let scrollY = Math.max(Math.min(viewportOffsetY - rect.top, rect.height), 0);\n                        this.updatePointedItem(scrollY / this.availableHeight);\n                        this.updateCursorPosition(scrollY + this.toolTipHeight / 2);\n                        this.scrollTo(scrollY);\n                    }\n                )\n        );\n\n        if (window) {\n            this._subscription.add(observableFromEvent(window, 'resize').pipe(\n                debounceTime(300))\n                .subscribe(\n                    () => {\n                        this.measure();\n                    }\n                ));\n        }\n\n        this._subscription.add(\n            observableFromEvent<MouseEvent>(container, 'mouseenter').pipe(\n                filter(() => {\n                    return this.timestampList && this.timestampList.length > 0;\n                }),\n                mergeMap(() => {\n                    return observableFromEvent<MouseEvent>(container, 'mousemove').pipe(\n                        takeUntil(observableFromEvent<MouseEvent>(container, 'mouseleave')),\n                        tap(\n                            () => {\n                            },\n                            () => {\n                            },\n                            () => {\n                                this.showTooltip = false;\n                            }\n                        ),);\n                }),\n                filter(() => this.contentScrollState === SCROLL_STATE.IDLE),) // skip when scroll state is scrolling.\n                .subscribe(\n                    (event: MouseEvent) => {\n                        let meterRect = meterEl.getBoundingClientRect();\n                        let wrapperRect = renderWrapper.getBoundingClientRect();\n                        if (!isInRect(event.clientX, event.clientY, meterRect)) {\n                            this.showTooltip = false;\n                            return;\n                        } else {\n                            this.showTooltip = true;\n                        }\n                        let scrollY = Math.max(0, Math.min(event.clientY - wrapperRect.top, this.availableHeight));\n                        this.updatePointedItem(scrollY / this.availableHeight);\n                        this.updateCursorPosition(scrollY + this.toolTipHeight / 2);\n                    }\n                )\n        );\n        let lastScrollTime = 0;\n        let lastScrollPos = 0;\n        this._subscription.add(\n            this._onContentScroll.pipe(\n                filter(() => {\n                    return this.timestampList && this.timestampList.length > 0;\n                }),\n                filter((scrollPercentage: number) => scrollPercentage !== -1),\n                map((scrollPercentage: number) => {\n                    let currentTime = performance.now();\n                    let velocity = 0;\n                    let averageRowHeight = this.contentHeight / this._itemList.length;\n                    if (lastScrollTime) {\n                        // unit is rows/sec\n                        velocity = Math.abs((scrollPercentage - lastScrollPos) * this.contentHeight) / averageRowHeight / ((currentTime - lastScrollTime) / 1000);\n                    }\n                    lastScrollTime = currentTime;\n                    lastScrollPos = scrollPercentage;\n                    return velocity;\n                }),\n                tap((velocity: number) => {\n                    if (velocity > MIN_VELOCITY) {\n                        this.showTooltip = true;\n                    }\n                }),\n                debounceTime(TOOLTIP_FADE_TIME),)\n                .subscribe(\n                    () => {\n                        if (this.showTooltip) {\n                            this.showTooltip = false;\n                        }\n                    }\n                ));\n\n        // track the scroll state change\n        this._subscription.add(\n            this._onContentScroll.pipe(\n                tap(() => {\n                    if (this.contentScrollState === SCROLL_STATE.IDLE) {\n                        this.contentScrollState = SCROLL_STATE.SCROLLING;\n                    }\n                }),\n                debounceTime(SCROLL_STOP_TIME_THRESHOLD),)\n                .subscribe(\n                    ()=> {\n                        if (this.contentScrollState === SCROLL_STATE.SCROLLING) {\n                            this.contentScrollState = SCROLL_STATE.IDLE;\n                        }\n                    }\n                )\n        );\n\n        // measure once view is ready\n        setTimeout(() => {\n            this.measure();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('timestampList' in changes && changes['timestampList'].currentValue && !this.rowHeight && this._itemList) {\n            let currentTimestampList = changes['timestampList'].currentValue;\n            if (currentTimestampList.length === this._itemList.length) {\n                this._itemList.forEach((item, index) => {\n                    item.date = new Date(currentTimestampList[index]);\n                });\n            }\n        }\n        if ('timestampList' in changes || 'rowHeight' in changes) {\n            let timestampList = 'timestampList' in changes ? changes['timestampList'].currentValue : this.timestampList;\n            let rowHeight = 'rowHeight' in changes ? changes['rowHeight'].currentValue : this.rowHeight;\n            if (rowHeight && timestampList) {\n                this._itemList = [];\n                this._itemList = timestampList.map((timestamp: number) => {\n                    let item = new RowItem();\n                    item.date = new Date(timestamp);\n                    item.rowHeightPercent = 1 / timestampList.length;\n                    return item;\n                });\n                this.contentHeight = rowHeight * timestampList.length;\n            }\n            this.buildMeter();\n\n        }\n        if ('showMarker' in changes && !this._isBuilding && !this._isInMeasure) {\n            this.makeRenderEntity();\n        }\n    }\n\n    /**\n     * to increase performance. we only render a list of entity which can be both label and marker but only those to be shown\n     * will be in this list.\n     */\n    private makeRenderEntity() {\n        if (!this.labelList || this.labelList.length === 0) {\n            return;\n        }\n        let labelTop = 0;\n        let markerTop = 0;\n        this.renderEntityList = [];\n        let label: Label, marker: Marker;\n        for (let i = 0; i < this.labelList.length; i++) {\n            label = this.labelList[i];\n            markerTop = labelTop;\n            if (label.showLabel) {\n                this.renderEntityList.push(new RenderEntity(true, label.label, labelTop * 100 + '%'));\n            }\n            if (this.showMarker) {\n                for (let j = 0; j < label.markers.length; j++) {\n                    marker = label.markers[j];\n                    if (marker.showMarker) {\n                        this.renderEntityList.push(new RenderEntity(false, null, markerTop * 100 + '%'));\n                    }\n                    markerTop += marker.totalHeightPercent;\n                }\n            }\n            labelTop += label.totalHeightPercent;\n        }\n    }\n\n    /**\n     * measure the marker\n     * @param computedFontSize\n     */\n    private measureMarker(computedFontSize: number) {\n        let markerTopMargin = 0;\n        let markerBottomMargin = 0;\n        let label, prevLabel, lastMarker, bp;\n        for (let i = 0; i < this.labelList.length; i++) {\n            label = this.labelList[i];\n            if (label.showLabel) {\n                // check previous label's last marker margin to avoid it too close to current label.\n                if (i > 0) {\n                    prevLabel = this.labelList[i - 1];\n                    bp = prevLabel.markers.length - 1;\n                    lastMarker = prevLabel.markers[bp];\n                    markerBottomMargin = lastMarker.totalHeightPercent * this.availableHeight;\n                    while (markerBottomMargin < MARKER_MARGIN && bp > 0) {\n                        lastMarker.showMarker = false;\n                        bp--;\n                        lastMarker = prevLabel.markers[bp];\n                        markerBottomMargin += lastMarker.totalHeightPercent * this.availableHeight;\n                    }\n                }\n                markerTopMargin -= computedFontSize + MARKER_MARGIN;\n            }\n            for (let j = 0; j < label.markers.length; j++) {\n                let marker = label.markers[j];\n                if (markerTopMargin > MARKER_MARGIN) {\n                    marker.showMarker = true;\n                    markerTopMargin = marker.totalHeightPercent * this.availableHeight;\n                } else {\n                    markerTopMargin += marker.totalHeightPercent * this.availableHeight;\n                }\n            }\n        }\n    }\n\n    private measureTooltipSize() {\n        let baseSize = parseFloat(window.getComputedStyle(document.body).getPropertyValue('font-size').match(/(\\d+(?:\\.\\d+)?)/)[1]);\n        this.toolTipHeight = baseSize * 2; // 2rem\n    }\n\n    /**\n     * Once we have labelList ready. we need to measure the meter height and width. then if height is available. we need to decide\n     * which label and marker should be show depending on their height and our rule.\n     */\n    private measure() {\n        if (!this.labelList || this._isInMeasure || !this.meter) {\n            return;\n        }\n        this.measureTooltipSize();\n        this._isInMeasure = true;\n        let computedFontSize = parseFloat(window.getComputedStyle(this.meter.nativeElement).getPropertyValue('font-size').match(/(\\d+(?:\\.\\d+)?)px/)[1]);\n        let rect = this.meter.nativeElement.getBoundingClientRect();\n        this._meterWidth = rect.width;\n        this._meterHeight = rect.height;\n        this.availableHeight = this._meterHeight - this.toolTipHeight;\n        if (!this._meterWidth || !this._meterHeight) {\n            return;\n        }\n        let lp = 0, rp = this.labelList.length - 2;\n        let heightFromTop = 0, heightFromBottom = 0;\n        // console.log(computedFontSize + LABEL_MARGIN);\n        while (lp < rp) {\n            heightFromTop += this.labelList[lp].totalHeightPercent * this.availableHeight;\n            // console.log(heightFromTop);\n            if (heightFromTop < (computedFontSize + LABEL_MARGIN)) {\n                this.labelList[++lp].showLabel = false;\n            } else {\n                lp++;\n                // this.marker[++lp].showLabel = true;\n                heightFromTop = 0;\n            }\n            heightFromBottom += this.labelList[rp].totalHeightPercent * this.availableHeight;\n            if (heightFromBottom < (computedFontSize + LABEL_MARGIN)) {\n                this.labelList[rp--].showLabel = false;\n            } else {\n                rp--;\n                heightFromBottom = 0;\n            }\n        }\n        this.measureMarker(computedFontSize);\n        this.makeRenderEntity();\n        this._isInMeasure = false;\n    }\n\n    /**\n     * build our labelList to store the label, mark tree. each row item is group to markers and then markers group\n     * to labels depending on their label time span and marker time span.\n     * this method will be called in two situation:\n     * - rowHeight and timestampList are all available. then build _itemList base on these two information. in this case,\n     *  every row has some height. this is usually happened when you use InfiniteList with this component.\n     * - rowHeightList is set by content child, this is the case when you use ScrollableContent component with this component.\n     *  In this case, _itemList has already built.\n     */\n    private buildMeter() {\n        if (this._isBuilding) {\n            return;\n        }\n        this._isBuilding = true;\n        if (!this._itemList || this._itemList.length === 0) {\n            this.labelList = [];\n            this.renderEntityList = [];\n            this._isBuilding = false;\n            return;\n        }\n        // performance.mark('start_building');\n        this.labelList = [];\n        let lastLabel = new Label();\n        this.labelList.push(lastLabel);\n        let lastMarker = new Marker();\n        lastMarker.totalHeightPercent = this._itemList[0].rowHeightPercent;\n        lastMarker.items.push(this._itemList[0]);\n        lastLabel.markers.push(lastMarker);\n        lastLabel.leadDate = this._itemList[0].date;\n        lastLabel.label = this.getLabel(lastLabel.leadDate, true);\n        for (let i = 1; i < this._itemList.length; i++) {\n            let item = this._itemList[i];\n            let sameMarker = this.isInSameSpan(lastMarker.items[0].date, item.date, this.markSpan);\n            if (sameMarker.same) {\n                lastMarker.items.push(item);\n                lastMarker.totalHeightPercent += item.rowHeightPercent;\n            } else {\n                lastLabel.totalHeightPercent += lastMarker.totalHeightPercent;\n                lastMarker = new Marker();\n                lastMarker.items.push(item);\n                lastMarker.totalHeightPercent = item.rowHeightPercent;\n                let sameLabel = this.isInSameSpan(lastLabel.leadDate, item.date, this.labelSpan);\n                if (sameLabel.same) {\n                    lastLabel.markers.push(lastMarker);\n                } else {\n                    lastLabel = new Label();\n                    lastLabel.markers.push(lastMarker);\n                    lastLabel.leadDate = lastMarker.items[0].date;\n                    lastLabel.label = this.getLabel(lastLabel.leadDate, !sameLabel.parentSame);\n                    this.labelList.push(lastLabel);\n                }\n            }\n        }\n        this.measure();\n        // performance.mark('end_building');\n        // performance.measure('building_performance', 'start_building', 'end_building');\n        // console.log(window.performance.getEntriesByType('measure'));\n        // performance.clearMarks();\n        this._isBuilding = false;\n    }\n\n    private isInSameSpan(date1: Date, date2: Date, span: string): { same: boolean, parentSame: boolean } {\n        let sameHours = date1.getHours() === date2.getHours();\n        let sameDay = date1.getDay() === date2.getDay();\n        let sameMonth = date1.getMonth() === date2.getMonth();\n        let sameYear = date1.getFullYear() === date2.getFullYear();\n        switch (span) {\n            case 'hour':\n                return {\n                    same: sameHours && sameDay && sameMonth && sameYear,\n                    parentSame: sameDay && sameMonth && sameYear\n                };\n            case 'day':\n                return {\n                    same: sameDay && sameMonth && sameYear,\n                    parentSame: sameMonth && sameYear\n                };\n            case 'month':\n                return {\n                    same: sameMonth && sameYear,\n                    parentSame: sameYear\n                };\n            case 'year':\n                return {\n                    same: sameYear,\n                    parentSame: true\n                }\n        }\n        // should not be here\n        throw new Error('span must be hour, day, month, year');\n    }\n\n    /**\n     * get label string represent for given date in label time span\n     * TODO: need i18n compatibility for label.\n     * @param date the date used to get label.\n     * @param needParentUnit sometimes, a label in certain time span is reset from the beginning. to give enough information\n     * a parent time span will added to this label. e.g. labelSpan = 'hour', we have a series of label 11, 12, 1, 2... 11,\n     * we know that second 11 is the 11hrs of second day. But add the day will be more informative.\n     * @returns {string}\n     */\n    private getLabel(date: Date, needParentUnit: boolean): string {\n        switch (this.labelSpan) {\n            case 'year':\n                return date.getFullYear() + '';\n            case 'month':\n                let month = (date.getMonth() + 1) + '';\n                if (needParentUnit) {\n                    return date.getFullYear() + '-' + month;\n                }\n                return month;\n            case 'day':\n                let day = (date.getDay() + 1) + '';\n                if (needParentUnit) {\n                    return (date.getMonth() + 1) + '-' + day;\n                }\n                break;\n            case 'hour':\n                let hour = (date.getHours()) + ':00';\n                if (needParentUnit) {\n                    return (date.getDay() + 1) + ' ' + hour;\n                }\n                return hour;\n            // no default\n        }\n        // should not be here\n        throw new Error('this.labelSpan must be year, month, day, hour');\n    }\n\n    private getTooltipLabel(date: Date): string {\n        switch (this.markSpan) {\n            case 'month':\n                return date.getFullYear() + '-' + (date.getMonth() + 1);\n            case 'day':\n                return (date.getMonth() + 1) + '-' + (date.getDay() + 1);\n            case 'hour':\n                return (date.getDay() + 1) + ' ' + date.getHours() + ':00';\n            // no default\n        }\n        throw new Error('this.markSpan must be month, day, hour');\n    }\n\n    /**\n     * This method is called every time a user click or move on this meter.\n     * A popover should be shown contain current pointed item date (up to marker span accuracy).\n     * then content component should be scroll to corresponding position.\n     * @param pos\n     */\n    private scrollTo(pos: number) {\n        if (!this.availableHeight || !this._itemList) {\n            return;\n        }\n        let scrollYPercentage = pos / this.availableHeight;\n        // let content component know\n        this._scrollPosition.next(scrollYPercentage);\n        this.scrollPercentage = scrollYPercentage;\n    }\n\n    /**\n     * update pointedItem\n     * @param percentage\n     */\n    private updatePointedItem(percentage: number) {\n        if (!this._itemList || this._itemList.length === 0) {\n            return;\n        }\n        let heightFromTop = 0;\n        let pointedIndex = -1;\n        if (percentage === 0) {\n            pointedIndex = 0;\n        } else {\n            for (let i = 0; i < this._itemList.length; i++) {\n                let item = this._itemList[i];\n                if (heightFromTop > percentage && i > 0) {\n                    pointedIndex = i - 1;\n                    break;\n                }\n                heightFromTop += item.rowHeightPercent;\n            }\n        }\n        if (pointedIndex === -1) {\n            pointedIndex = this._itemList.length - 1;\n        }\n        if (!this.pointedItem || this.pointedItem.date.valueOf() !== this._itemList[pointedIndex].date.valueOf()) {\n            this.pointedItem = Object.assign({}, this._itemList[pointedIndex]);\n            this.pointedItem.label = this.getTooltipLabel(this.pointedItem.date);\n        }\n    }\n\n    private updateCursorPosition(pos: number) {\n        if (this.pointedItem) {\n            this.pointedItem.pos = `translate3d(-100%, ${pos - this.toolTipHeight / 2}px, 0)`;\n        }\n        this.floatMarkPos = `translate3d(0, ${pos}px, 0)`;\n    }\n}\n\n","<div class=\"ui-timeline-meter-container\" [ngClass]=\"{'dark-theme': isDarkTheme}\" #container>\n  <div class=\"scrollable-content-wrapper\">\n    <ng-content></ng-content>\n  </div>\n  <div class=\"ui-timeline-meter\" #meter [ngClass]=\"labelSpan\">\n    <div class=\"render-wrapper\"\n      [style.top]=\"toolTipHeight / 2 + 'px'\"\n      [style.height]=\"availableHeight + 'px'\" #renderWrapper>\n      @for (renderEntity of renderEntityList; track renderEntity) {\n        <div class=\"render-entity\" [style.top]=\"renderEntity.top\">\n          @if (renderEntity.isLabel) {\n            <div class=\"label\">{{renderEntity.label}}</div>\n          }\n          @if (!renderEntity.isLabel) {\n            <div class=\"marker\"></div>\n          }\n        </div>\n      }\n    </div>\n    @if (showTooltip) {\n      <div\n        class=\"meter-tooltip\"\n        [ngClass]=\"markSpan\"\n      [style.transform]=\"pointedItem?.pos\">{{pointedItem?.label}}</div>\n    }\n    @if (showTooltip) {\n      <div\n        class=\"float-mark\"\n      [style.transform]=\"floatMarkPos\"></div>\n    }\n  </div>\n  <ui-scrollbar\n    [contentHeight]=\"contentHeight\"\n    [scrollPosition]=\"scrollPercentage\"\n  (scrollChange)=\"onScrollbarChange($event)\"></ui-scrollbar>\n</div>\n","\nimport {fromEvent as observableFromEvent, Subscription} from 'rxjs';\n\nimport {map} from 'rxjs/operators';\nimport {AfterViewInit, Component, DoCheck, ElementRef, OnDestroy, ViewChild} from '@angular/core';\nimport {UITimeLineMeter} from './timeline-meter';\n\n@Component({\n    selector: 'ui-scrollable-content',\n    template: `\n        <div class=\"scrollable-content\" #scrollableContent>\n        </div>\n    `\n})\nexport class UIScrollableContent implements AfterViewInit, OnDestroy, DoCheck {\n\n    private _subcription = new Subscription();\n\n    @ViewChild('scrollableContent') scrollableContent: ElementRef;\n\n    private _contentHeight: number;\n    private _containerHeight: number;\n\n    constructor(private _timelineMeter: UITimeLineMeter) {\n    }\n\n    ngAfterViewInit(): void {\n        let content = this.scrollableContent.nativeElement;\n        this._subcription.add(observableFromEvent(content, 'scroll').pipe(\n            map(() => {\n                return this.scrollableContent.nativeElement.scrollTop;\n            }))\n            .subscribe(\n                (scrollY: number) => {\n                    let rect = content.getBoundingClientRect();\n                    this._timelineMeter.setScrollY(scrollY / (content.scrollHeight - rect.height));\n                }\n            ));\n        this._subcription.add(\n            this._timelineMeter.scrollPosition.pipe(\n                map((scrollPercentage: number) => {\n                    let rect = content.getBoundingClientRect();\n                    return scrollPercentage * (content.scrollHeight - rect.height);\n                }))\n                .subscribe(\n                    (scrollY: number) => {\n                        content.scrollTop = scrollY;\n                        content.dispatchEvent(new UIEvent('scroll', {\n                            bubbles: true,\n                            cancelable: true,\n                            view: window,\n                            detail: 0\n                        }));\n                    }\n                ));\n    }\n\n    ngDoCheck(): void {\n        if(this.scrollableContent && this.scrollableContent.nativeElement) {\n            let content = this.scrollableContent.nativeElement;\n            let totalHeight = 0;\n            if (content.children && content.children.length > 0) {\n                let rowHeightList = [];\n                for(let i = 0; i< content.children.length; i++) {\n                    let rect = content.children[i].getBoundingClientRect();\n                    totalHeight += rect.height;\n                    rowHeightList.push(rect);\n                }\n                this._contentHeight = totalHeight;\n                this._containerHeight = content.getBoundingClientRect().height;\n                if (this._contentHeight > 0) {\n                    this._timelineMeter.rowHeightList = rowHeightList;\n                }\n            }\n\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._subcription.unsubscribe();\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {UITimeLineMeter} from './timeline-meter';\nimport {UIScrollableContent} from './scrollable-content';\nimport {CommonModule} from '@angular/common';\nimport {UIScrollbarModule} from '../scrollbar';\n\nconst directives = [\n    UITimeLineMeter,\n    UIScrollableContent\n];\n\n@NgModule({\n    exports: directives,\n    imports: [CommonModule, UIScrollbarModule, ...directives]\n})\nexport class UITimelineMeterModule {\n}\n\nexport * from './scrollable-content';\nexport * from './timeline-meter';\n","\nimport {fromEvent as observableFromEvent,  BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport {debounceTime, tap, skip, map, filter} from 'rxjs/operators';\nimport { AfterViewInit, Component, ElementRef, Input, OnDestroy, Optional, Output, ViewChild } from '@angular/core';\nimport { UITimeLineMeter } from '../timeline-meter';\nimport { NgClass } from '@angular/common';\n\nexport const SCROLL_STOP_TIME_THRESHOLD = 200; // in milliseconds\n\nconst INVALID_POSITION = -1;\n\n@Component({\n    selector: 'infinite-list',\n    templateUrl: 'infinite-list.html',\n    styleUrls: ['infinite-list.less'],\n    imports: [NgClass]\n})\nexport class InfiniteList implements AfterViewInit, OnDestroy {\n    private _holderHeight: number;\n    private _containerWidth: number;\n    private _containerHeight: number;\n\n    private _subscription: Subscription = new Subscription();\n\n    private _scrollStateChange: BehaviorSubject<SCROLL_STATE> = new BehaviorSubject<SCROLL_STATE>(SCROLL_STATE.IDLE);\n    private _scrollPosition: BehaviorSubject<number> = new BehaviorSubject(0);\n    private _sizeChange: BehaviorSubject<number[]> = new BehaviorSubject([0, 0]);\n\n    private ignoreScrollEvent = false;\n\n    private _initialScrollTop = INVALID_POSITION;\n\n    currentScrollState: SCROLL_STATE = SCROLL_STATE.IDLE;\n\n    @ViewChild('listContainer') listContainer: ElementRef;\n\n    scrollbarStyle: string;\n    scrollbarWidth: number;\n\n    set holderHeight(height: number) {\n        if (typeof height !== 'undefined') {\n            this._holderHeight = height;\n            if (this._holderHeight === 0 && this.listContainer) {\n                this.listContainer.nativeElement.scrollTop = 0;\n            }\n            // When initialization, the list-holder doesn't have its height. So the scrollTop should be delayed for waiting\n            // the list-holder rendered bigger than the list-container.\n            if (this._initialScrollTop !== INVALID_POSITION && this._holderHeight !== 0) {\n                setTimeout(() => {\n                    this.listContainer.nativeElement.scrollTop = this._initialScrollTop;\n                    this._initialScrollTop = INVALID_POSITION;\n                });\n            }\n        }\n    }\n\n    get holderHeight(): number {\n        return this._holderHeight;\n    }\n\n    get holderHeightInPx(): string {\n        if (this.holderHeight) {\n            return this.holderHeight + 'px';\n        }\n        return '100%';\n    }\n\n    /**\n     * scroll state change\n     * @returns {Observable<SCROLL_STATE>}\n     */\n    get scrollStateChange(): Observable<SCROLL_STATE> {\n        return this._scrollStateChange.asObservable();\n    }\n\n    /**\n     * current scroll position.\n     * @type {number}\n     */\n    @Output()\n    get scrollPosition(): Observable<number> {\n        return this._scrollPosition.asObservable();\n    }\n\n    /**\n     * list container width and height.\n     */\n    get sizeChange(): Observable<number[]> {\n        return this._sizeChange.asObservable();\n    }\n\n    @Input() rowHeight: number;\n\n    @Input()\n    set newScrollPosition(p: number) {\n        // console.log('p', p);\n        if (this.listContainer) {\n            this.listContainer.nativeElement.scrollTop = p;\n        }\n        // if list-holder has no height at the certain time. scrollTop will not be set.\n        if (!this.holderHeight) {\n            this._initialScrollTop = p;\n        }\n        this._scrollPosition.next(p);\n    }\n\n    /**\n     * UITimelineMeter is optional injection. when this component used inside a UITimelineMeter.\n     * it is responsible to update the scrollY\n     * @param _timelineMeter\n     */\n    constructor(@Optional() private _timelineMeter: UITimeLineMeter) {\n        this.scrollbarStyle = !!this._timelineMeter ? 'hide-scrollbar' : 'normal';\n        this.scrollbarWidth = getScrollBarWidth();\n    }\n\n    ngAfterViewInit(): void {\n        if (this.scrollbarStyle === 'hide-scrollbar') {\n            this.listContainer.nativeElement.style.right = (0 - this.scrollbarWidth) + 'px';\n            this.listContainer.nativeElement.style.paddingRight = this.scrollbarWidth + 'px';\n        }\n\n        if (window) {\n            this._subscription.add(observableFromEvent(window, 'resize')\n                .subscribe(() => {\n                    this.requestMeasure();\n                }));\n        }\n        this._subscription.add(observableFromEvent(this.listContainer.nativeElement, 'scroll').pipe(\n            filter(() => {\n                if (this.ignoreScrollEvent) {\n                    this.ignoreScrollEvent = false;\n                    return false;\n                }\n                return true;\n            }),\n            map(() => {\n                return this.listContainer.nativeElement.scrollTop;\n            }),)\n            .subscribe((scrollY: number) => {\n                this._scrollPosition.next(scrollY);\n            }));\n        this._subscription.add(this.scrollPosition.pipe(\n            skip(1))\n            .subscribe((scrollY) => {\n                if (this._timelineMeter) {\n                    this._timelineMeter.setScrollY(scrollY / (this.holderHeight - this._containerHeight));\n                }\n            })\n        );\n        this._subscription.add(this.scrollPosition.pipe(\n            tap(() => {\n                if (this.currentScrollState === SCROLL_STATE.IDLE) {\n                    this.currentScrollState = SCROLL_STATE.SCROLLING;\n                    this._scrollStateChange.next(this.currentScrollState);\n                }\n            }),\n            debounceTime(SCROLL_STOP_TIME_THRESHOLD),)\n            .subscribe(\n                () => {\n                    if (this.currentScrollState === SCROLL_STATE.SCROLLING) {\n                        this.currentScrollState = SCROLL_STATE.IDLE;\n                        this._scrollStateChange.next(this.currentScrollState);\n                    }\n                }\n            ));\n\n        if (this._timelineMeter) {\n            this._subscription.add(this._timelineMeter.scrollPosition.pipe(\n                skip(1),\n                map((scrollPercentage: number) => {\n                    return scrollPercentage * (this.holderHeight - this._containerHeight);\n                }),\n                filter((scrollY: number) => {\n                    return scrollY >= 0 && scrollY <= (this.holderHeight - this._containerHeight);\n                }),\n                tap(\n                    (scrollY: number) => {\n                        this.ignoreScrollEvent = true;\n                        this.listContainer.nativeElement.scrollTop = scrollY;\n                        this._scrollPosition.next(scrollY);\n                        if (this.currentScrollState === SCROLL_STATE.IDLE) {\n                            this.currentScrollState = SCROLL_STATE.SCROLLING;\n                            this._scrollStateChange.next(this.currentScrollState);\n                        }\n                    }\n                ),\n                debounceTime(SCROLL_STOP_TIME_THRESHOLD),)\n                .subscribe(\n                    () => {\n                        if (this.currentScrollState === SCROLL_STATE.SCROLLING) {\n                            this.currentScrollState = SCROLL_STATE.IDLE;\n                            this._scrollStateChange.next(this.currentScrollState);\n                        }\n                    }\n                ));\n        }\n        setTimeout(() => {\n            this.requestMeasure();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    measure(): { width: number, height: number } {\n        if (this.listContainer && this.listContainer.nativeElement) {\n            // let measuredWidth = this.listContainer.nativeElement.clientWidth;\n            // let measuredHeight = this.listContainer.nativeElement.clientHeight;\n            let rect = this.listContainer.nativeElement.getBoundingClientRect();\n            this._containerWidth = rect.width - this.scrollbarWidth;\n            this._containerHeight = rect.height;\n            return {width: this._containerWidth, height: this._containerHeight};\n        }\n        return {width: 0, height: 0};\n    }\n\n    requestMeasure() {\n        let {width, height} = this.measure();\n        this._sizeChange.next([width, height]);\n    }\n}\n\nexport enum SCROLL_STATE {\n    SCROLLING,\n    IDLE\n}\n\nexport function getScrollBarWidth() {\n    let inner = document.createElement('p');\n    inner.style.width = \"100%\";\n    inner.style.height = \"200px\";\n\n    let outer = document.createElement('div');\n    outer.style.position = \"absolute\";\n    outer.style.top = \"0px\";\n    outer.style.left = \"0px\";\n    outer.style.visibility = \"hidden\";\n    outer.style.width = \"200px\";\n    outer.style.height = \"150px\";\n    outer.style.overflow = \"hidden\";\n    outer.appendChild(inner);\n\n    document.body.appendChild(outer);\n    let w1 = inner.offsetWidth;\n    outer.style.overflow = 'scroll';\n    let w2 = inner.offsetWidth;\n\n    if (w1 == w2) {\n        w2 = outer.clientWidth;\n    }\n\n    document.body.removeChild(outer);\n\n    return (w1 - w2);\n}\n","<div class=\"infinite-list\" #listContainer\n     [ngClass]=\"scrollbarStyle\">\n    <div class=\"infinite-list-holder\" [style.height]=\"holderHeightInPx\">\n        <ng-content></ng-content>\n    </div>\n</div>\n","\nimport {filter} from 'rxjs/operators';\nimport {\n    Directive,\n    DoCheck,\n    EmbeddedViewRef,\n    Input,\n    isDevMode,\n    IterableChangeRecord,\n    IterableChanges,\n    IterableDiffer,\n    IterableDiffers,\n    NgIterable,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n    TemplateRef,\n    TrackByFunction,\n    ViewContainerRef,\n    ViewRef\n} from '@angular/core';\nimport {InfiniteList} from './infinite-list';\nimport {Subscription} from 'rxjs';\nimport { InfiniteDataBucket, InfiniteDataBucketsStub } from './infinite-data-collection';\n\nexport class Recycler {\n    private limit: number = 0;\n    private scrapViews: Map<number, ViewRef> = new Map();\n\n    getView(position: number): ViewRef | null {\n        let view = this.scrapViews.get(position);\n        if (!view && this.scrapViews.size > 0) {\n            position = this.scrapViews.keys().next().value;\n            view = this.scrapViews.get(position);\n        }\n        if (view) {\n            this.scrapViews.delete(position);\n        }\n        return view || null;\n    }\n\n    recycleView(position: number, view: ViewRef) {\n        view.detach();\n        this.scrapViews.set(position, view);\n    }\n\n    /**\n     * scrap view count should not exceed the number of current attached views.\n     */\n    pruneScrapViews() {\n        if (this.limit <= 1) {\n            return;\n        }\n        let keyIterator = this.scrapViews.keys();\n        let key: number;\n        while (this.scrapViews.size > this.limit) {\n            key = keyIterator.next().value;\n            this.scrapViews.get(key).destroy();\n            this.scrapViews.delete(key);\n        }\n    }\n\n    setScrapViewsLimit(limit: number) {\n        this.limit = limit;\n        this.pruneScrapViews();\n    }\n\n    clean() {\n        this.scrapViews.forEach((view: ViewRef) => {\n            view.destroy();\n        });\n        this.scrapViews.clear();\n    }\n}\n\nexport class InfiniteRow {\n    constructor(public $implicit: any, public index: number, public count: number, public isInitialized: boolean) {\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\n@Directive({ selector: '[infiniteFor][infiniteForOf]' })\nexport class InfiniteForOf<T> implements OnChanges, DoCheck, OnInit, OnDestroy {\n\n    private _differ: IterableDiffer<T>;\n    private _trackByFn: TrackByFunction<T>;\n    private _subscription: Subscription = new Subscription();\n    /**\n     * scroll offset of y-axis in pixel\n     */\n    private _scrollY: number = 0;\n    /**\n     * first visible item index in collection\n     */\n    private _firstItemPosition: number;\n    /**\n     * last visible item index in collection\n     */\n    private _lastItemPosition: number;\n\n    private _containerWidth: number;\n    private _containerHeight: number;\n\n    /**\n     * when this value is true, a full clean layout is required, every element must be reposition\n     * @type {boolean}\n     * @private\n     */\n    private _invalidate: boolean = true;\n    /**\n     * when this value is true, a layout is in process\n     * @type {boolean}\n     * @private\n     */\n    private _isInLayout: boolean = false;\n\n    private _isInMeasure: boolean = false;\n\n    private _pendingMeasurement: number;\n\n    private _collection: any[] = [];\n\n    private _recycler: Recycler = new Recycler();\n\n    private _bucketsStub: InfiniteDataBucketsStub;\n\n    @Input() infiniteForOf: NgIterable<T>;\n\n    @Input()\n    set infiniteForTrackBy(fn: TrackByFunction<T>) {\n        if (isDevMode() && fn != null && typeof fn !== 'function') {\n            if (<any>console && <any>console.warn) {\n                console.warn(\n                    `trackBy must be a function, but received ${JSON.stringify(fn)}. ` +\n                    `See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.`);\n            }\n        }\n        this._trackByFn = fn;\n    }\n\n    get infiniteForTrackBy(): TrackByFunction<T> {\n        return this._trackByFn;\n    }\n\n    @Input()\n    set infiniteForWithBucket(stub: InfiniteDataBucketsStub) {\n        if (!stub) {\n            this._bucketsStub = new InfiniteDataBucketsStub([], null, null);\n        }\n        this._bucketsStub = stub;\n    }\n\n    get infiniteForWithBucket(): InfiniteDataBucketsStub {\n        return this._bucketsStub;\n    }\n\n    @Input()\n    set infiniteForTemplate(value: TemplateRef<InfiniteRow>) {\n        if (value) {\n            this._template = value;\n        }\n    }\n\n    get buckets(): InfiniteDataBucket[] {\n        return this._bucketsStub ? this._bucketsStub.buckets : [];\n    }\n\n    get length() {\n        if (this.buckets.length === 0) {\n            return this._collection ? this._collection.length : 0;\n        } else {\n            return this.buckets[this.buckets.length - 1].end + 1 - this.buckets[0].start;\n        }\n    }\n\n    constructor(private _infiniteList: InfiniteList,\n                private _differs: IterableDiffers,\n                private _template: TemplateRef<InfiniteRow>,\n                private _viewContainerRef: ViewContainerRef) {\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('infiniteForWithBucket' in changes && this._differ) {\n            const currentValue = changes['infiniteForWithBucket'].currentValue;\n            const previousValue = changes['infiniteForWithBucket'].previousValue;\n            if (currentValue !== previousValue && previousValue && !this._differ.diff(this.infiniteForOf)) {\n                // clean state of buckets\n                this.buckets.forEach((bucket: InfiniteDataBucket) => {\n                    bucket.fetching = false;\n                    bucket.filled = false;\n                });\n                this._collection = [];\n                this.requestMeasure();\n            }\n        }\n        if ('infiniteForOf' in changes) {\n            // React on infiniteForOf only once all inputs have been initialized\n            const value = changes['infiniteForOf'].currentValue;\n            if (!this._differ && value) {\n                try {\n                    this._differ = this._differs.find(value).create(this._trackByFn);\n                } catch (e) {\n                    throw new Error(`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'. NgFor only supports binding to Iterables such as Arrays.`);\n                }\n            }\n        }\n    }\n\n    ngDoCheck(): void {\n        if (this._differ) {\n            const changes = this._differ.diff(this.infiniteForOf);\n            if (changes) {\n                this.applyChanges(changes);\n            }\n        }\n    }\n\n    private applyChanges(changes: IterableChanges<T>) {\n        let isMeasurementRequired = false;\n        changes.forEachOperation((item: IterableChangeRecord<any>, adjustedPreviousIndex: number, currentIndex: number) => {\n            if (item.previousIndex == null) {\n                // new item\n                isMeasurementRequired = true;\n                this._collection.splice(currentIndex, 0, item.item);\n            } else if (currentIndex == null) {\n                // remove item\n                isMeasurementRequired = true;\n                this._collection.splice(adjustedPreviousIndex, 1);\n            } else {\n                // move item\n                this._collection.splice(currentIndex, 0, this._collection.splice(adjustedPreviousIndex, 1)[0]);\n            }\n        });\n        changes.forEachIdentityChange((record: any) => {\n            this._collection[record.currentIndex] = record.item;\n        });\n\n        if (isMeasurementRequired) {\n            this.requestMeasure();\n            return;\n        }\n\n        this.requestLayout();\n    }\n\n    ngOnInit(): void {\n        this._subscription.add(this._infiniteList.scrollPosition.pipe(\n            filter((scrollY) => {\n                return Math.abs(scrollY - this._scrollY) >= this._infiniteList.rowHeight;\n            }))\n            .subscribe(\n                (scrollY) => {\n                    this._scrollY = scrollY;\n                    this.requestLayout();\n                }\n            ));\n        this._subscription.add(this._infiniteList.sizeChange\n            .pipe(filter(([width, height]) => {\n                return width !== 0 && height !== 0;\n            })).subscribe(\n            ([width, height]) => {\n                this._containerWidth = width;\n                this._containerHeight = height;\n                this.requestMeasure();\n            }\n        ));\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n        this._recycler.clean();\n    }\n\n    private requestMeasure() {\n        if (this._isInMeasure || this._isInLayout) {\n            clearTimeout(this._pendingMeasurement);\n            this._pendingMeasurement = window.setTimeout(() => {\n                this.requestMeasure();\n            }, 60);\n            return;\n        }\n        this.measure();\n    }\n\n    private requestLayout() {\n        if (!this._isInMeasure && this._infiniteList.rowHeight) {\n            this.layout();\n        }\n    }\n\n    private measure() {\n        this._isInMeasure = true;\n        this._infiniteList.holderHeight = this._infiniteList.rowHeight * this.length;\n        // calculate a approximate number of which a view can contain\n        this.calculateScrapViewsLimit();\n        this._isInMeasure = false;\n        this._invalidate = true;\n        this.requestLayout();\n    }\n\n    private layout() {\n        if (this._isInLayout) {\n            return;\n        }\n        this._isInLayout = true;\n        let {width, height} = this._infiniteList.measure();\n        this._containerWidth = width;\n        this._containerHeight = height;\n        if (this.length === 0) {\n            // detach all views without recycle them.\n            for (let i = 0; i < this._viewContainerRef.length; i++) {\n                let child = <EmbeddedViewRef<InfiniteRow>> this._viewContainerRef.get(i);\n                // if (child.context.index < this._firstItemPosition || child.context.index > this._lastItemPosition || this._invalidate) {\n                this._viewContainerRef.detach(i);\n                // this._recycler.recycleView(child.context.index, child);\n                i--;\n                // }\n            }\n            this._isInLayout = false;\n            this._invalidate = false;\n            return;\n        }\n        this.findPositionInRange();\n        for (let i = 0; i < this._viewContainerRef.length; i++) {\n            let child = <EmbeddedViewRef<InfiniteRow>> this._viewContainerRef.get(i);\n            // if (child.context.index < this._firstItemPosition || child.context.index > this._lastItemPosition || this._invalidate) {\n            this._viewContainerRef.detach(i);\n            this._recycler.recycleView(child.context.index, child);\n            i--;\n            // }\n        }\n        this.insertViews();\n        this._recycler.pruneScrapViews();\n        this._isInLayout = false;\n        this._invalidate = false;\n    }\n\n    private calculateScrapViewsLimit() {\n        let limit = this._containerHeight / this._infiniteList.rowHeight + 2;\n        this._recycler.setScrapViewsLimit(limit);\n    }\n\n    private insertViews() {\n        if (this._viewContainerRef.length > 0) {\n            let firstChild = <EmbeddedViewRef<InfiniteRow>> this._viewContainerRef.get(0);\n            let lastChild = <EmbeddedViewRef<InfiniteRow>> this._viewContainerRef.get(this._viewContainerRef.length - 1);\n            for (let i = firstChild.context.index - 1; i >= this._firstItemPosition; i--) {\n                let view = this.getView(i);\n                this.dispatchLayout(i, view, true);\n            }\n            for (let i = lastChild.context.index + 1; i <= this._lastItemPosition; i++) {\n                let view = this.getView(i);\n                this.dispatchLayout(i, view, false);\n            }\n        } else {\n            for (let i = this._firstItemPosition; i <= this._lastItemPosition; i++) {\n                let view = this.getView(i);\n                this.dispatchLayout(i, view, false);\n            }\n        }\n    }\n\n    //noinspection JSMethodCanBeStatic\n    private applyStyles(viewElement: HTMLElement, y: number) {\n        viewElement.style.transform = `translate3d(0, ${y}px, 0)`;\n        viewElement.style.webkitTransform = `translate3d(0, ${y}px, 0)`;\n        viewElement.style.width = `${this._containerWidth}px`;\n        viewElement.style.height = `${this._infiniteList.rowHeight}px`;\n        viewElement.style.position = 'absolute';\n    }\n\n    private dispatchLayout(position: number, view: ViewRef, addBefore: boolean) {\n        let startPosY = position * this._infiniteList.rowHeight;\n        this.applyStyles((view as EmbeddedViewRef<InfiniteRow>).rootNodes[0], startPosY);\n        if (addBefore) {\n            this._viewContainerRef.insert(view, 0);\n        } else {\n            this._viewContainerRef.insert(view);\n        }\n        view.reattach();\n    }\n\n    private findPositionInRange() {\n        let scrollY = this._scrollY;\n        let firstPosition = Math.floor(scrollY / this._infiniteList.rowHeight);\n        let firstPositionOffset = scrollY - firstPosition * this._infiniteList.rowHeight;\n        let lastPosition = Math.ceil((this._containerHeight + firstPositionOffset) / this._infiniteList.rowHeight) + firstPosition;\n        this._firstItemPosition = Math.max(firstPosition - 1, 0);\n        this._lastItemPosition = Math.min(lastPosition + 1, this.length - 1);\n    }\n\n    private getView(position: number): ViewRef {\n        let bucketIndex = -1;\n        if (this.buckets.length > 0) {\n            bucketIndex = this.findBucketIndexByPosition(position);\n        }\n        if (bucketIndex > -1) {\n            const bucket = this.buckets[bucketIndex];\n            if (!bucket.filled) {\n                this.loadBucket(bucketIndex);\n            }\n        }\n        let item = this._collection[position];\n        const isInitialized = !!item;\n        let count = this.length;\n        let view = this._recycler.getView(position);\n        if (!view) {\n            view = this._template.createEmbeddedView(new InfiniteRow(item || {}, position, count, isInitialized));\n        } else {\n            (view as EmbeddedViewRef<InfiniteRow>).context.$implicit = item || {};\n            (view as EmbeddedViewRef<InfiniteRow>).context.index = position;\n            (view as EmbeddedViewRef<InfiniteRow>).context.count = count;\n            (view as EmbeddedViewRef<InfiniteRow>).context.isInitialized = isInitialized;\n        }\n        return view;\n    }\n\n    private findBucketIndexByPosition(position: number): number {\n        const offset = position + this.buckets[0].start;\n        for (let i = 0; i < this.buckets.length; i++) {\n            let bucket = this.buckets[i];\n            if (bucket.start <= offset && offset <= bucket.end) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n    private loadBucket(bucketIndex: number): void {\n        if (this.buckets.length === 0) {\n            return;\n        }\n        const bucket = this.buckets[bucketIndex];\n        if (!bucket || bucket.fetching) {\n            return;\n        }\n        bucket.fetching = true;\n        this._bucketsStub.loadBucket(bucketIndex)\n            .then((bucketData: Iterable<any>) => {\n                bucket.fetching = false;\n                let i = 0;\n                let firstStart = this.buckets[0].start;\n                for (let item of bucketData) {\n                    let offset = bucket.start - firstStart + i\n                    this._collection[offset] = item;\n                    i++;\n                }\n                bucket.filled = true;\n                this.requestLayout();\n            });\n    }\n}\n\n\nexport function getTypeNameForDebugging(type: any): string {\n    return type['name'] || typeof type;\n}\n","import {NgModule} from '@angular/core';\nimport {InfiniteForOf} from './infinite-for-of';\nimport {InfiniteList} from './infinite-list';\nimport {CommonModule} from '@angular/common';\n@NgModule({\n    imports: [CommonModule, InfiniteForOf,\n        InfiniteList],\n    exports: [\n        InfiniteForOf,\n        InfiniteList\n    ]\n})\nexport class UIInfiniteListModule {\n\n}\n\nexport * from './infinite-for-of';\nexport * from './infinite-list';\nexport * from './infinite-data-collection';\n","\nimport {fromEvent as observableFromEvent, Subscription } from 'rxjs';\n\nimport {takeUntil, delay, takeWhile, mergeMap, tap} from 'rxjs/operators';\nimport { Directive, ElementRef, HostListener, Inject, Input, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Directive({\n    selector: '[uiDropdown]',\n    host: {\n        '[class.active]': 'menuOpen',\n        '[class.visible]': 'menuOpen'\n    }\n})\nexport class UIDropdown implements OnInit, OnDestroy {\n\n    private _subscription = new Subscription();\n    private _menuOpen: boolean = false;\n    private _timestamp: number = 0;\n\n    /**\n     * determine what event should trigger dropdown open.\n     * @type {string}\n     */\n    @Input()\n    uiDropdown: 'click' | 'hover' = 'click';\n\n    @Input()\n    stopPropagation = false;\n\n    set menuOpen(value: boolean) {\n        let menu = this._element.nativeElement.querySelector('.menu');\n        if (value) {\n            menu.classList.add('transition');\n            menu.classList.add('visible');\n            menu.classList.remove('hidden');\n        } else {\n            menu.classList.remove('visible');\n            menu.classList.add('hidden')\n        }\n        this._menuOpen = value;\n    }\n\n    get menuOpen(): boolean {\n        return this._menuOpen;\n    }\n\n    constructor(private _element: ElementRef,\n                @Inject(PLATFORM_ID) private platformId: object) {\n    }\n\n    @HostListener('click', ['$event'])\n    onHostClick(event: MouseEvent) {\n        event.preventDefault();\n        if (this.stopPropagation) {\n            event.stopPropagation();\n        }\n        this._timestamp = event.timeStamp;\n        this.menuOpen = !this.menuOpen;\n    }\n\n    ngOnInit(): void {\n        if (isPlatformServer(this.platformId)) {\n            return;\n        }\n        let _el = this._element.nativeElement;\n        this._subscription.add(\n            observableFromEvent<MouseEvent>(document.body, 'click')\n                .subscribe((event: MouseEvent) => {\n                    if (event.timeStamp !== this._timestamp && this.menuOpen) {\n                        event.preventDefault();\n                        this.menuOpen = false;\n                    }\n                    this._timestamp = 0;\n                })\n        );\n        if (this.uiDropdown === 'hover') {\n            this._subscription.add(\n                observableFromEvent<MouseEvent>(_el, 'mouseenter').pipe(\n                    tap((event: MouseEvent) => {\n                        event.preventDefault();\n                        event.stopPropagation();\n                        this.menuOpen = true;\n                    }),\n                    mergeMap(() => {\n                        return observableFromEvent(_el, 'mouseleave').pipe(\n                            takeWhile(() => this.menuOpen),\n                            delay(300),\n                            takeUntil(observableFromEvent(_el, 'mouseenter')),);\n                    }),)\n                    .subscribe(\n                        () => {\n                            this.menuOpen = false;\n                        }\n                    )\n            );\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {UIDropdown} from './dropdown';\n@NgModule({\n    imports: [UIDropdown],\n    exports: [UIDropdown]\n})\nexport class UIDropdownModule {\n\n}\n\nexport * from './dropdown';\n","import { Component, Input, ExistingProvider, forwardRef, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DARK_THEME, DarkThemeService } from '../dark-theme.service';\nimport { NgClass } from '@angular/common';\n\nlet nextId = 0;\n\nexport class UIToggleChange {\n    constructor(\n        /** The source UIToggle of the event. */\n        public source: UIToggle,\n        /** The new `checked` value of the UIToggle. */\n        public checked: boolean) { }\n}\n\nexport const UI_TOGGLE_VALUE_ACCESSOR: ExistingProvider = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => UIToggle),\n    multi: true\n};\n\n@Component({\n    selector: 'ui-toggle',\n    templateUrl: './toggle.html',\n    styleUrls: ['./toggle.less'],\n    providers: [UI_TOGGLE_VALUE_ACCESSOR],\n    imports: [NgClass]\n})\nexport class UIToggle implements ControlValueAccessor, OnInit, OnDestroy {\n    private _subscription = new Subscription();\n    ready = false;\n    isDisabled: boolean;\n    checked: boolean;\n\n    @Input() value: any;\n\n    @Input('id') inputId = `toggleId${nextId++}`;\n\n    @Input()\n    text: string;\n\n    @Output()\n    readonly change = new EventEmitter<UIToggleChange>();\n\n    isDarkTheme: boolean;\n\n    private _onChangeHandler = (_: any) => {};\n\n    constructor(private _darkThemeService: DarkThemeService) {\n    }\n\n    ngOnInit(): void {\n        this._subscription.add(\n            this._darkThemeService.themeChange\n                .subscribe((theme) => { this.isDarkTheme = theme === DARK_THEME})\n        );\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    toggle(): void {\n        this.checked = !this.checked;\n    }\n\n    writeValue(value: any): void {\n        if (typeof value === 'boolean') {\n            if (!this.ready) {\n                this.ready = true;\n            }\n            this.checked = !!value;\n        }\n    }\n\n    registerOnChange(fn: any): void {\n        this._onChangeHandler = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.isDisabled = isDisabled;\n    }\n\n    onInputChange() {\n        if (!this.isDisabled) {\n            this.ready =  true;\n            this.toggle();\n            this._onChangeHandler(this.checked);\n            this.change.emit(new UIToggleChange(this, this.checked));\n        }\n    }\n}\n","<input type=\"checkbox\"\n       [id]=\"inputId\"\n       [value]=\"value\"\n       [checked]=\"checked\"\n       [disabled]=\"isDisabled\"\n       class=\"hidden\"\n       tabindex=\"0\"\n       (change)=\"onInputChange()\">\n<label [ngClass]=\"{ready: ready, disabled: isDisabled, inverted: isDarkTheme}\" [for]=\"inputId\">\n    {{text}}\n    <ng-content></ng-content>\n</label>\n","import { NgModule } from '@angular/core';\nimport { UIToggle } from './toggle';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n    imports: [CommonModule, UIToggle],\n    exports: [UIToggle]\n})\nexport class UIToggleModule {\n\n}\n\nexport * from './toggle';\n","import { ApplicationRef, ComponentRef, EmbeddedViewRef } from '@angular/core';\nimport Popper from \"popper.js\";\nimport { Observable, Subject } from 'rxjs';\n\nexport class UIPopoverRef<T> {\n    private _popper: Popper;\n    private _disposeCallback: () => void;\n    private _afterClosed = new Subject<any>();\n\n    componentInstance: T;\n\n    constructor(private _appRef: ApplicationRef,\n                public placement: Popper.Placement) {}\n\n    afterClosed(): Observable<any> {\n        return this._afterClosed.asObservable();\n    }\n\n    applyProps(props: {[prop: string]: any}): void {\n        if (!props) {\n            return;\n        }\n        Object.keys(props).forEach((propKey) => {\n            (this.componentInstance as {[prop: string]: any})[propKey] = props[propKey];\n        });\n    }\n\n    attach(refElement: Element, componentRef: ComponentRef<T>) {\n        this.componentInstance = componentRef.instance;\n        const componentElement = this.getComponentRootNode(componentRef);\n        this.appendToBody(componentElement);\n        this._appRef.attachView(componentRef.hostView);\n        this._popper = new Popper(refElement, componentElement, {\n            placement: this.placement\n        });\n        this._disposeCallback = () => {\n            this._appRef.detachView(componentRef.hostView);\n            componentRef.destroy();\n        };\n    }\n\n    close(result?: any) {\n        this._disposeCallback();\n        this._afterClosed.next(result);\n        this._afterClosed.complete();\n        this._popper.destroy();\n    }\n\n    updatePosition() {\n        this._popper.scheduleUpdate();\n    }\n\n    private appendToBody(componentElement: HTMLElement) {\n        componentElement.style.webkitTransform = 'translate3d(-1000px, 0, 0)';\n        componentElement.style.transform = 'translate3d(-1000px, 0, 0)';\n        document.body.appendChild(componentElement);\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 { Injector, ProviderToken } from '@angular/core';\nimport { UIPopoverRef } from './popover-ref';\n\nexport class UIPopoverInjector implements Injector {\n    constructor(private _popoverRef: UIPopoverRef<any>, private _parentInjector: Injector) {}\n    get(token: ProviderToken<any>, notFoundValue?: any): any {\n        if (token === UIPopoverRef) {\n            return this._popoverRef;\n        }\n        return this._parentInjector.get(token, notFoundValue);\n    }\n}\n","import { Type } from '@angular/core';\n\nexport const registry = new Map<string, Type<any>>();\n\n/**\n * Decorator for register the popover content component\n * @param {string} name\n * @constructor\n */\nexport function Popover(name: string) {\n    if (registry.has(name)) {\n        throw new Error('name already registered');\n    }\n    return function<T>(target: {new (...args: any[]): T}) {\n        registry.set(name, target);\n        return target;\n    }\n}\n","import { ApplicationRef, createComponent, Injectable, Injector, Type } from '@angular/core';\nimport { UIPopoverInjector } from './popover-injector';\nimport { UIPopoverRef } from './popover-ref';\nimport { registry } from './register';\nimport Popper from 'popper.js';\n\n@Injectable({providedIn: 'root'})\nexport class UIPopover {\n    constructor(\n        private _appRef: ApplicationRef,\n        private _injector: Injector\n    ) {}\n\n    createPopover<T>(refElement: Element, PopoverComponent: Type<T>, placement: Popper.Placement = 'bottom-end') {\n        let popoverRef = new UIPopoverRef<T>(this._appRef, placement);\n        let popoverInjector = new UIPopoverInjector(popoverRef, this._injector);\n        let componentRef = createComponent(PopoverComponent, {\n            environmentInjector: this._appRef.injector,\n            elementInjector: popoverInjector\n        });\n        popoverRef.attach(refElement, componentRef);\n        return popoverRef;\n    }\n\n    createPopoverFromRegistry(refElement: Element, registeredPopover: string, placement?: Popper.Placement) {\n        let popoverComponentClass = registry.get(registeredPopover);\n        if (!popoverComponentClass) {\n            throw new Error('popover not registered');\n        }\n        return this.createPopover(refElement, popoverComponentClass, placement);\n    }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { UIPopover } from './popover';\nimport { Subscription } from 'rxjs';\nimport { UIPopoverRef } from './popover-ref';\nimport Popper from 'popper.js';\n\n@Directive({ selector: '[ui-popover]' })\nexport class UIPopoverDirective implements OnInit, OnDestroy {\n    private _subscription = new Subscription();\n    private _popoverRef: UIPopoverRef<any>;\n\n    @Input()\n    popover: string;\n\n    @Input()\n    popoverProp: {[prop: string]: any};\n\n    @Input()\n    trigger: 'alwaysOn' | 'click' = 'click';\n\n    @Input()\n    placement: Popper.Placement;\n\n    @Output()\n    onClose = new EventEmitter<any>();\n\n    constructor(private _element: ElementRef, private _popoverService: UIPopover) {\n    }\n\n    @HostListener('click')\n    onClickListener(): void {\n        this.initPopover();\n    }\n\n    ngOnInit(): void {\n        if (this.trigger === 'alwaysOn') {\n            this.initPopover();\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this._popoverRef) {\n            this._popoverRef.close();\n        }\n        this._subscription.unsubscribe();\n    }\n\n    private initPopover(): void {\n        this._popoverRef = this._popoverService.createPopoverFromRegistry(this._element.nativeElement, this.popover, this.placement);\n        this._popoverRef.applyProps(this.popoverProp);\n        this._subscription.add(\n            this._popoverRef.afterClosed()\n                .subscribe((result: any) => {\n                    this.onClose.emit(result);\n                })\n        );\n    }\n}\n","/**\n * All popover content component should extend this class\n */\nimport { afterEveryRender, Directive } from '@angular/core';\nimport { UIPopoverRef } from './popover-ref';\n\n@Directive()\nexport abstract class UIPopoverContent{\n\n    protected constructor(protected popoverRef: UIPopoverRef<UIPopoverContent>) {\n        afterEveryRender(() => {\n            this.popoverRef.updatePosition();\n        });\n    }\n}\n","\nimport {fromEvent as observableFromEvent,  Subscription } from 'rxjs';\n\nimport {skip} from 'rxjs/operators';\nimport { AfterViewInit, Component, HostBinding, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Popover } from '../register';\nimport { UIPopoverRef } from '../popover-ref';\nimport { UIPopoverContent } from '../popover-content';\nimport { DARK_THEME, DarkThemeService } from '../../dark-theme.service';\nimport { NgClass } from '@angular/common';\n\n@Popover('ui-basic')\n@Component({\n    selector: 'ui-basic-popover',\n    templateUrl: './basic-popover.html',\n    styleUrls: ['./basic-popover.less'],\n    imports: [NgClass]\n})\nexport class BasicPopoverComponent extends UIPopoverContent implements AfterViewInit, OnInit, OnDestroy {\n    private _subscription = new Subscription();\n\n    @Input()\n    title: string;\n\n    @Input()\n    content: string;\n\n    @Input()\n    clickToClose: boolean;\n\n    @Input()\n    triggeredBy: 'click' | 'alwaysOn' = 'click';\n\n    @HostBinding('style.zIndex')\n    zIndex: number;\n\n    placement: string;\n\n    @HostBinding('class.inverted')\n    isDarkTheme: boolean = false;\n\n    constructor(popoverRef: UIPopoverRef<BasicPopoverComponent>, private _darkThemeService: DarkThemeService) {\n        super(popoverRef);\n        this.placement = this.popoverRef.placement;\n        switch (this.placement) {\n            case 'auto':\n            case 'auto-start':\n            case 'auto-end':\n            case 'left-start':\n            case 'left-end':\n            case 'right-start':\n            case 'right-end':\n                const warningMessage= `This popover content component doesn\\'t support the ${this.placement} placement`;\n                if (console.warn) {\n                    console.warn(warningMessage);\n                } else {\n                    console.log(warningMessage);\n                }\n                break;\n            default:\n                // otherwise this is fine.\n        }\n    }\n\n    ngOnInit(): void {\n        this._subscription.add(\n            this._darkThemeService.themeChange\n                .subscribe(theme => {this.isDarkTheme = theme === DARK_THEME})\n        );\n    }\n\n    @HostListener('click', ['$event'])\n    onPopoverClick(event: Event) {\n        if (this.clickToClose) {\n            event.stopPropagation();\n        }\n    }\n\n    ngAfterViewInit(): void {\n        if (this.clickToClose) {\n            let skipCount = this.triggeredBy === 'click' ? 1: 0;\n            this._subscription.add(\n                observableFromEvent(document.body, 'click').pipe(\n                    skip(skipCount))\n                    .subscribe(() => {\n                        this.popoverRef.close();\n                    })\n            );\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n}\n","<div class=\"ui-basic-popover\" [ngClass]=\"placement\">\n  @if (!!title) {\n    <div class=\"popover-title\" [innerHTML]=\"title\"></div>\n  }\n  <div class=\"popover-content\" [innerHTML]=\"content\">\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { UIPopoverDirective } from './popover.directive';\nimport { CommonModule } from '@angular/common';\nimport { BasicPopoverComponent } from './basic-popover/basic-popover.component';\n\n@NgModule({\n    imports: [CommonModule, UIPopoverDirective, BasicPopoverComponent],\n    exports: [UIPopoverDirective]\n})\nexport class UIPopoverModule {\n\n}\n\nexport * from './popover';\nexport * from './popover-ref';\nexport * from './popover.directive';\nexport * from './register';\nexport * from './popover-content';\nexport * from './basic-popover/basic-popover.component';\n","// select closet parent element\nexport function closest(el: any, selector: string) {\n  const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;\n\n  while (el) {\n    if (matchesSelector.call(el, selector)) {\n      return el;\n    } else {\n      el = el.parentElement;\n    }\n  }\n  return null;\n}\n\nexport function getRemPixel(remValue: number): number {\n    return remValue * parseFloat(window.getComputedStyle(document.body).getPropertyValue('font-size').match(/(\\d+(?:\\.\\d+)?)px/)[1]);\n}\n\n/**\n * get the vw in pixel\n * @param value\n */\nexport function getVwInPixel(value: number): number {\n    let w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    return value / 100 * w;\n}\n\nexport function getVhInPixel(value: number): number {\n    let h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    return value / 100 * h;\n}\n","export const SRC_GENERATOR_SERVICE = 'SRC_GENERATOR_SERVICE';\n\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\nexport interface ObservableStub {\n    target: Element;\n    callback(rect: ClientRect): void;\n    unobserveOnVisible: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class UIResponsiveService {\n    private _observer: IntersectionObserver | ServerIntersectionObserverFallback;\n\n    private _observableStubList: ObservableStub[] = [];\n\n    constructor(@Inject(PLATFORM_ID) platformId: object) {\n        if (isPlatformServer(platformId)) {\n            this._observer = new ServerIntersectionObserverFallback(this.intersectionCallback.bind(this));\n        } else {\n            this._observer = new IntersectionObserver(this.intersectionCallback.bind(this));\n        }\n    }\n\n    intersectionCallback(entries: IntersectionObserverEntry[]) {\n        entries.filter(entry => {\n            return entry['isIntersecting']; // current lib.es6.d.ts not updated.\n        }).forEach((entry: IntersectionObserverEntry) => {\n            let stub = this.getStub(entry.target);\n            if (stub) {\n                stub.callback(entry.boundingClientRect);\n                if (stub.unobserveOnVisible) {\n                    this.unobserve(stub);\n                }\n            }\n        });\n    }\n\n    observe(stub: ObservableStub) {\n        if (this.getStub(stub.target)) {\n            throw new Error('Duplicate ObservableStub on target');\n        }\n        this._observableStubList.push(stub);\n        this._observer.observe(stub.target);\n    }\n\n    unobserve(stub: ObservableStub) {\n        let index = this._observableStubList.findIndex(obStub => obStub == stub);\n        if (index !== -1) {\n            this._observableStubList.splice(index, 1);\n            this._observer.unobserve(stub.target);\n        }\n    }\n\n    private getStub(target: Element) {\n        if (!this._observableStubList) {\n            return null;\n        }\n        return this._observableStubList.find(stub => stub.target === target);\n    }\n}\n\nclass ServerIntersectionObserverFallback  {\n    constructor(private callback: IntersectionObserverCallback) {}\n    observe(target: Element) {\n    }\n    unobserve(target: Element) {}\n}\n","import {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges\n} from '@angular/core';\nimport { ObservableStub, UIResponsiveService } from './responsive.service';\nimport { getRemPixel, getVhInPixel, getVwInPixel } from '../core/dom';\nimport { SRC_GENERATOR_SERVICE } from './DI';\nimport { IResponsiveGenerateSrc } from './responsive.generate-src.service';\n\nexport interface ResponsiveDimension {\n    width: string; // px, rem, vw, auto, 100%\n    height: string; // px, rem, vh, auto, 100%\n    originalWidth: number;\n    originalHeight: number;\n}\n/**\n * This directive will let a normal HTMLImageElement load a resized image from source url according to its current dimension.\n * It use different approach to decide the dimension depends on `dimension` property.\n * If `dimension` property is not defined or width and height are both set to auto, it will use IntersectionObserver to measure\n * the actual dimension when image is visible in viewport.\n * Otherwise, it will calculate the dimension base on width and height\n * The src will be set to {originalSrc}?size={width}x{height}\n * - originalSrc is the source url of the image\n * - width is calculated or measured width\n * - height is calculated or measured height\n */\n@Directive({\n    selector: 'img[originalSrc]',\n    host: { ngSkipHydration: 'true' }\n})\nexport class UIResponsiveImage implements OnInit, OnChanges, OnDestroy {\n    private _src: string;\n    private _respSrc: string;\n\n    private _width: number;\n    private _height: number;\n\n    @Input()\n    set originalSrc(url: string) {\n        this._src = url;\n        this.makeRespSrc(false);\n    }\n\n    @Input()\n    dimension: ResponsiveDimension;\n\n    @HostBinding() get src(): string {\n        if (!this._respSrc) {\n            return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQI12NgYAAAAAMAASDVlMcAAAAASUVORK5CYII=';\n        }\n        return this._respSrc;\n    }\n\n    @Output()\n    imageLoad = new EventEmitter<Event>();\n\n    @Output()\n    imageError = new EventEmitter<Event>();\n\n    observableStub: ObservableStub;\n\n    constructor(private _element: ElementRef,\n                private _responsiveService: UIResponsiveService,\n                private _changeDetector: ChangeDetectorRef,\n                @Inject(SRC_GENERATOR_SERVICE) private _srcGeneratorService: IResponsiveGenerateSrc) {\n    }\n\n    @HostListener('load', ['$event'])\n    onLoad(event: Event) {\n        if (this._respSrc) {\n            this.imageLoad.emit(event);\n        }\n    }\n\n    @HostListener('error', ['$event'])\n    onError(event: Event) {\n        if (this._respSrc) {\n            this.imageError.emit(event);\n        }\n    }\n\n    ngOnInit(): void {\n        this.dimensionChange(this.dimension);\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('dimension' in changes && !changes['dimension'].firstChange) {\n            const dimension = changes['dimension'].currentValue as ResponsiveDimension;\n            this.dimensionChange(dimension);\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.observableStub) {\n            this._responsiveService.unobserve(this.observableStub);\n        }\n    }\n\n    private dimensionChange(dimension: ResponsiveDimension) {\n        const width = dimension.width;\n        const height = dimension.height;\n        if (!dimension ||\n            width === '100%' || height === '100%') {\n            this.needMeasure();\n            return;\n        }\n        if (width !== 'auto') {\n            this._width = Math.round(UIResponsiveImage.getPx(width));\n        } else {\n            this._width = 0;\n        }\n        if (height !== 'auto') {\n            this._height = Math.round(UIResponsiveImage.getPx(height));\n        } else {\n            this._height = 0;\n        }\n        this.makeRespSrc(false);\n    }\n\n    private needMeasure() {\n        if (this.observableStub) {\n            this._responsiveService.unobserve(this.observableStub);\n        }\n        this.observableStub = {\n            target: this._element.nativeElement,\n            callback: (rect: ClientRect) => {\n                if (!this.dimension || this.dimension.width !== 'auto') {\n                    if (rect.width)\n                    this._width = Math.min(this.dimension.originalWidth, Math.round(rect.width));\n                } else {\n                    this._width = 0;\n                }\n                if (!this.dimension || this.dimension.height !== 'auto') {\n                    this._height = Math.min(this.dimension.originalHeight, Math.round(rect.height));\n                } else {\n                    this._height = 0;\n                }\n                this.makeRespSrc(true);\n            },\n            unobserveOnVisible: true\n        };\n        this._responsiveService.observe(this.observableStub);\n    }\n\n    static getPx(dimen: string): number {\n        let match = dimen.match(/(\\d*(?:.\\d+)?)(px|rem|em|vw|vh)$/);\n        if (!match) {\n            return 0;\n        }\n        let value = parseInt(match[1]);\n        let unit = match[2];\n        switch (unit) {\n            case 'rem':\n                return getRemPixel(value);\n            case 'vw':\n                return getVwInPixel(value);\n            case 'vh':\n                return getVhInPixel(value);\n            default:\n                return value;\n        }\n    }\n\n    private makeRespSrc(manualChangeDetection: boolean) {\n        if (typeof this._width !== 'undefined' && typeof this._height !== 'undefined' && this._src) {\n            if (/^(?:data:).+/.test(this._src)) {\n                this._respSrc = this._src;\n            } else {\n                let width = this._width;\n                let height = this._height;\n                let ratio = 0;\n                if (this._width !== 0 && this._height !== 0\n                    && Number.isFinite(this.dimension.originalWidth)\n                    && Number.isFinite(this.dimension.originalHeight)) {\n                    ratio = this._height / this._width;\n                    let originalRatio = this.dimension.originalHeight / this.dimension.originalWidth;\n                    if (originalRatio > ratio) {\n                        width = this._width;\n                        height = 0;\n                    } else if (originalRatio < ratio) {\n                        width = 0;\n                        height = this._height;\n                    }  else {\n                        width = this._width;\n                        height = this._height;\n                    }\n                }\n                this._respSrc = this._srcGeneratorService.makeRespSrc(\n                    this._src, width, height, this.dimension.originalWidth, this.dimension.originalHeight, ratio);\n            }\n            if (manualChangeDetection) {\n                this._changeDetector.detectChanges();\n            }\n        }\n    }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ResponsiveDimension, UIResponsiveImage } from './responsive-image.directive';\n\nexport interface ResponsiveWrapperSize {\n    /**\n     * can be rem, em, pixel, %, vw, auto\n     */\n    width?: string;\n    /**\n     * can be rem, em, pixel, %, vh, auto\n     */\n    height?: string;\n    /**\n     * A value represents height / width\n     * If ratio is used, width must have value and cannot be auto,\n     * and height will be ignored.\n     */\n    ratio?: number;\n\n    /**\n     * the image original width and height in pixel\n     */\n    originalWidth: number;\n    originalHeight: number;\n}\n\nexport const DEFAULT_HIDDEN_OPACITY = 0.01;\n\n@Component({\n    selector: 'ui-responsive-image',\n    template: `<img class=\"responsive-image\"\n                    [originalSrc]=\"src\"\n                    [dimension]=\"dimension\"\n                    [style.width]=\"imageWidth\"\n                    [style.height]=\"imageHeight\" \n                    [style.position]=\"imagePosition\"\n                    [style.opacity]=\"imageOpacity\"\n                    (imageLoad)=\"onLoad($event)\"\n                    (imageError)=\"onError($event)\">`,\n    styles: [`\n        :host {\n            box-sizing: border-box;\n            position: relative;\n        }\n\n        .responsive-image {\n            display: block;\n            object-fit: cover;\n            transition: opacity 500ms;\n        }\n    `],\n    host: {\n        '[style.display]': 'display',\n        '[style.width]': 'hostWidth',\n        '[style.height]': 'hostHeight',\n        '[style.paddingBottom]': 'hostPaddingBottom',\n        '[style.background]': 'background',\n        ngSkipHydration: 'true'\n    },\n    imports: [UIResponsiveImage]\n})\nexport class UIResponsiveImageWrapper {\n\n    dimension: ResponsiveDimension;\n\n    @Input()\n    src: string;\n\n    @Input()\n    display: string = 'block';\n\n    @Input()\n    set size(s: ResponsiveWrapperSize) {\n        let dimen: ResponsiveDimension;\n        if (s.ratio) {\n            this.imageWidth = '100%';\n            this.imageHeight = '100%';\n            this.hostWidth = s.width;\n            this.hostHeight = '0';\n            this.hostPaddingBottom = `${s.ratio * 100}%`;\n            this.imagePosition = 'absolute';\n            let widthInPixel = UIResponsiveImage.getPx(s.width);\n            if (widthInPixel !== 0) {\n                dimen = {\n                    width: `${widthInPixel}px`,\n                    height: `${widthInPixel * s.ratio}px`,\n                    originalWidth: s.originalWidth,\n                    originalHeight: s.originalHeight\n                };\n            } else {\n                if (s.originalHeight / s.originalWidth < s.ratio) {\n                    dimen = {\n                        width: 'auto',\n                        height: '100%',\n                        originalWidth: s.originalWidth,\n                        originalHeight: s.originalHeight\n                    }\n                } else {\n                    dimen = {\n                        width: '100%',\n                        height: 'auto',\n                        originalWidth: s.originalWidth,\n                        originalHeight: s.originalHeight\n                    }\n                }\n            }\n        } else {\n            this.hostWidth = s.width;\n            this.hostHeight = s.height;\n            dimen = {\n                width: 'auto',\n                height: 'auto',\n                originalWidth: s.originalWidth,\n                originalHeight: s.originalHeight\n            };\n            if (s.width === 'auto') {\n                this.imageWidth = 'auto';\n            } else {\n                this.imageWidth = '100%';\n                let widthInPixel = Math.round(UIResponsiveImage.getPx(s.width));\n                if (widthInPixel !== 0) {\n                    dimen.width = `${widthInPixel}px`;\n                } else {\n                    dimen.width = '100%';\n                }\n            }\n\n            if (s.height === 'auto') {\n                this.imageHeight = 'auto';\n            } else {\n                this.imageHeight = '100%';\n                let heightInPixel = Math.round(UIResponsiveImage.getPx(s.height));\n                if (heightInPixel !== 0) {\n                    dimen.height = `${heightInPixel}px`;\n                } else {\n                    dimen.height = '100%';\n                }\n            }\n        }\n        this.dimension = dimen;\n    };\n\n    @Input()\n    background: string = '#cccccc'; // color\n\n    hostWidth: string;\n    hostHeight: string;\n    hostPaddingBottom: string = '0';\n\n    imageWidth: string;\n    imageHeight: string;\n    imagePosition: string = 'static';\n\n    imageOpacity: number = DEFAULT_HIDDEN_OPACITY;\n\n    @Output()\n    imageLoad = new EventEmitter<Event>();\n\n    @Output()\n    imageError = new EventEmitter<Event>();\n\n    onLoad(event: Event) {\n        this.imageOpacity = 1;\n        this.imageLoad.emit(event);\n    }\n\n    onError(event: Event) {\n        this.imageOpacity = DEFAULT_HIDDEN_OPACITY;\n        this.imageError.emit(event);\n    }\n}\n","import { Injectable } from '@angular/core';\n\nexport interface IResponsiveGenerateSrc {\n    /**\n     * return an url for the real src, the width or height may be 0 that means it will be automatic to keep ratio.\n     * @param src\n     * @param width\n     * @param height\n     * @param originalWidth\n     * @param originalHeight\n     * @param ratio the client height/width ratio, can be 0 means the width or height is 0\n     */\n    makeRespSrc(src: string, width: number, height: number, originalWidth: number, originalHeight: number, ratio: number): string;\n}\n\n@Injectable()\nexport class ResponsiveGenerateSrcService implements IResponsiveGenerateSrc {\n    makeRespSrc(src: string, width: number, height: number, originalWidth: number, originalHeight: number, ratio: number): string {\n        return `${src}?size=${width}x${height}`;\n    }\n}\n\n@Injectable()\nexport class RoundGenerateSrcService implements IResponsiveGenerateSrc {\n    makeRespSrc(src: string, width: number, height: number, originalWidth: number, originalHeight: number, ratio: number): string {\n        if (width !== 0) {\n            width = Math.round(width / 20) * 20;\n            if (height !== 0) {\n                height = width * ratio;\n            }\n        } else if (height !== 0) {\n            height = Math.round(height / 20) * 20;\n            if (width !== 0) {\n                width = height / ratio;\n            }\n        }\n        return `${src}?size=${width}x${height}`;\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { UIResponsiveImage } from './responsive-image.directive';\nimport { UIResponsiveImageWrapper } from './responsive-image-wrapper';\n\n@NgModule({\n    imports: [UIResponsiveImage, UIResponsiveImageWrapper],\n    exports: [UIResponsiveImage, UIResponsiveImageWrapper]\n})\nexport class UIResponsiveImageModule {\n\n}\n\nexport * from './responsive.service';\nexport * from './responsive-image.directive'\nexport * from './responsive-image-wrapper';\nexport * from './responsive.generate-src.service';\nexport * from './DI';\n","import { NgModule } from '@angular/core';\nimport { UIDialogModule } from './dialog';\nimport { UIToastModule } from './toast';\nimport { UIPaginationModule } from './pagination';\nimport { UIInfiniteListModule } from './infinite-list';\nimport { UITimelineMeterModule } from './timeline-meter';\nimport { UIScrollbarModule } from './scrollbar';\nimport { UIDropdownModule } from './dropdown';\nimport { UIToggleModule } from './toggle';\nimport { UIPopoverModule } from './popover';\nimport { UIResponsiveImageModule } from './responsive-image';\n\nconst UI_MODULES = [\n    UIDialogModule,\n    UIToastModule,\n    UIPaginationModule,\n    UIInfiniteListModule,\n    UITimelineMeterModule,\n    UIScrollbarModule,\n    UIDropdownModule,\n    UIToggleModule,\n    UIPopoverModule,\n    UIResponsiveImageModule\n];\n\n@NgModule({\n    imports: UI_MODULES,\n    exports: UI_MODULES\n})\nexport class UIModule {\n\n}\n\nexport * from './dialog';\nexport * from './toast';\nexport * from './pagination';\nexport * from './infinite-list';\nexport * from './timeline-meter';\nexport * from './scrollbar';\nexport * from './dropdown';\nexport * from './toggle';\nexport * from './popover';\nexport * from './responsive-image';\n\nexport * from './dark-theme.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DarkThemeService","i1.UIToastRef","i2.DarkThemeService","observableFromEvent","i1.UITimeLineMeter","i1.InfiniteList","i1.UIPopover","i1.UIPopoverRef"],"mappings":"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"}