{"version":3,"file":"gentics-ui-core.mjs","sources":["../../../src/module.config.ts","../../../src/components/modal/user-agent-ref.ts","../../../src/components/icon/icon.directive.ts","../../../src/components/breadcrumbs/breadcrumbs.component.ts","../../../src/components/breadcrumbs/breadcrumbs.tpl.html","../../../src/components/button/button.component.ts","../../../src/components/button/button.tpl.html","../../../src/common/keycodes.ts","../../../src/components/checkbox/checkbox.component.ts","../../../src/components/checkbox/checkbox.tpl.html","../../../src/components/contents-list-item/contents-list-item.component.ts","../../../src/components/contents-list-item/contents-list-item.tpl.html","../../../src/common/coerce-to-boolean.ts","../../../src/components/date-time-picker/date-time-picker-default-strings.ts","../../../src/components/date-time-picker/date-time-picker-format-provider.service.ts","../../../src/common/momentjs.import.ts","../../../src/common/rome.import.ts","../../../src/components/dropdown-list/dropdown-item.component.ts","../../../src/components/dropdown-list/dropdown-trigger.directive.ts","../../../src/components/dropdown-list/dropdown-content.component.ts","../../../src/components/overlay-host/overlay-host.service.ts","../../../src/components/dropdown-list/dropdown-content-wrapper.component.ts","../../../src/components/dropdown-list/scroll-mask.component.ts","../../../src/components/dropdown-list/dropdown-list.component.ts","../../../src/components/dropdown-list/dropdown-list.tpl.html","../../../src/components/select/option.component.ts","../../../src/components/select/select.component.ts","../../../src/components/select/select.tpl.html","../../../src/components/input/input.component.ts","../../../src/components/input/input.tpl.html","../../../src/components/date-time-picker/date-time-picker-controls.component.ts","../../../src/components/date-time-picker/date-time-picker-controls.tpl.html","../../../src/components/date-time-picker/date-time-picker-modal.component.ts","../../../src/components/date-time-picker/date-time-picker-modal.tpl.html","../../../src/components/modal/dynamic-modal-wrapper.component.ts","../../../src/components/modal/dynamic-modal-wrapper.tpl.html","../../../src/components/modal/modal-dialog.component.ts","../../../src/components/modal/modal-dialog.tpl.html","../../../src/components/modal/blank-modal.component.ts","../../../src/components/modal/modal.service.ts","../../../src/components/date-time-picker/date-time-picker.component.ts","../../../src/components/date-time-picker/date-time-picker.tpl.html","../../../src/components/file-drop-area/drag-drop-utils.ts","../../../src/components/file-drop-area/drag-state-tracker.service.ts","../../../src/components/file-drop-area/matches-mime-type.ts","../../../src/components/file-drop-area/page-file-drag-handler.service.ts","../../../src/components/file-drop-area/file-drop-area.directive.ts","../../../src/components/file-drop-area/matches-mime-type.pipe.ts","../../../src/components/file-drop-area/prevent-file-drop.directive.ts","../../../src/components/file-picker/file-picker.component.ts","../../../src/components/file-picker/file-picker.tpl.html","../../../src/components/grouped-tabs/tab-content.ts","../../../src/components/grouped-tabs/tab-label.ts","../../../src/components/grouped-tabs/tab-pane.component.ts","../../../src/components/grouped-tabs/tab-group.component.ts","../../../src/components/grouped-tabs/grouped-tabs.component.ts","../../../src/components/grouped-tabs/grouped-tabs.tpl.html","../../../src/components/menu-toggle-button/menu-toggle-button.component.ts","../../../src/components/notification/toast.component.ts","../../../src/components/notification/toast.tpl.html","../../../src/components/notification/notification.service.ts","../../../src/components/overlay-host/overlay-host.component.ts","../../../src/components/progress-bar/progress-bar.component.ts","../../../src/components/progress-bar/progress-bar.tpl.html","../../../src/components/radio-button/radio-button.component.ts","../../../src/components/radio-button/radio-button.tpl.html","../../../src/components/range/range.component.ts","../../../src/components/range/range.tpl.html","../../../src/components/search-bar/search-bar.component.ts","../../../src/components/search-bar/search-bar.tpl.html","../../../src/components/side-menu/side-menu.component.ts","../../../src/components/side-menu/side-menu.tpl.html","../../../src/components/sortable-list/sortable-list.component.ts","../../../src/components/sortable-list/sortable-list.tpl.html","../../../src/components/split-button/split-button-primary-action.component.ts","../../../src/directives/autofocus/autofocus.directive.ts","../../../src/components/split-button/split-button.component.ts","../../../src/components/split-button/split-button.tpl.html","../../../src/components/split-view-container/split-view-container.component.ts","../../../src/components/split-view-container/split-view-container.tpl.html","../../../src/components/tabs/tab.component.ts","../../../src/components/tabs/tabs.component.ts","../../../src/components/tabs/tabs.tpl.html","../../../src/components/textarea/textarea.component.ts","../../../src/components/textarea/textarea.tpl.html","../../../src/components/top-bar/top-bar.component.ts","../../../src/components/top-bar/top-bar.tpl.html","../../../src/module.ts","../../../src/index.ts","../../../src/gentics-ui-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/* Default values */\nexport const defaultConfig: Config = {\n    dropDownPageMargin: 50,\n    dropDownMaxHeight: 650\n}\n\nexport interface Config {\n    dropDownPageMargin?: number;\n    dropDownMaxHeight?: number;\n}\n\nexport type optionsConfig = Partial<Config>;\nexport const ConfigService: InjectionToken<Config> = new InjectionToken('ConfigService');\nexport const CustomConfig: InjectionToken<Config> = new InjectionToken('CustomConfig');\nexport const PredefinedConfig: InjectionToken<Config> = new InjectionToken('PredefinedConfig');\n\nexport function configFactory(\n    initConfig: optionsConfig,\n    configValue: optionsConfig | (() => optionsConfig)\n): optionsConfig {\n    return configValue instanceof Function ? { ...initConfig, ...configValue() } : { ...initConfig, ...configValue };\n}","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UserAgentRef {\n    static _window: any = window;\n    readonly isIE11: boolean;\n    readonly isEdge: boolean;\n\n    constructor() {\n        const window = UserAgentRef._window;\n        this.isIE11 = !!(window.MSInputMethodContext && window.document.documentMode);\n        this.isEdge = !!(window.navigator.userAgent.indexOf('Edge') > -1);\n    }\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n    selector: 'icon'\n})\nexport class Icon {}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n    ChangeDetectorRef,\n    AfterViewInit\n} from '@angular/core';\nimport {RouterLinkWithHref} from '@angular/router';\nimport {BehaviorSubject, Subscription, timer} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\n\nimport {UserAgentRef} from '../modal/user-agent-ref';\n\nexport interface IBreadcrumbLink {\n    href?: string;\n    route?: any;\n    text: string;\n    tooltip?: string;\n    [key: string]: any;\n}\n\nexport interface IBreadcrumbRouterLink {\n    route: any[];\n    text: string;\n    tooltip?: string;\n    [key: string]: any;\n}\n\n/** The width configured in the .ellipsis CSS class. */\nconst ELLIPSIS_WIDTH = 13;\n\n/**\n * A Breadcrumbs navigation component.\n *\n * ```html\n * <gtx-breadcrumbs></gtx-breadcrumbs>\n * ```\n */\n@Component({\n    selector: 'gtx-breadcrumbs',\n    templateUrl: './breadcrumbs.tpl.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Breadcrumbs implements OnChanges, OnDestroy, AfterViewInit {\n\n    /**\n     * A list of links to display\n     */\n    @Input() links: IBreadcrumbLink[];\n\n    /**\n     * A list of RouterLinks to display\n     */\n    @Input() routerLinks: IBreadcrumbRouterLink[];\n\n    /**\n     * A color that is used for collapsed state background.\n     */\n    @Input() collapsedColor: string;\n\n    /**\n     * If true the first folder and all the folder names from the end of the breadcrumbs, which fit into one line are shown\n     * and an ellipsis in between.\n     */\n    @Input() get multiline(): boolean {\n        return this.isMultiline;\n    }\n    set multiline(val: boolean) {\n        this.isMultiline = val != undefined && val !== false;\n    }\n\n    /**\n     * If true the breadcrumbs are always expanded\n     */\n    @Input() get multilineExpanded(): boolean {\n        return this.isMultilineExpanded;\n    }\n    set multilineExpanded(val: boolean) {\n        this.isMultilineExpanded = val != undefined && val !== false;\n    }\n\n    /**\n     * Controls whether the navigation is disabled.\n     */\n    @Input() get disabled(): boolean {\n        return this.isDisabled;\n    }\n    set disabled(val: boolean) {\n        this.isDisabled = val != undefined && val !== false;\n    }\n\n    /**\n     * Fires when a link is clicked\n     */\n    @Output() linkClick = new EventEmitter<IBreadcrumbLink | IBreadcrumbRouterLink>();\n\n    /**\n     * Fires when the expand button is clicked\n     */\n    @Output() multilineExpandedChange = new EventEmitter<boolean>();\n\n    isMultiline: boolean = false;\n    isMultilineExpanded: boolean = false;\n    isDisabled: boolean = false;\n    isOverflowing: boolean = false;\n\n    showArrow: boolean = false;\n\n    backLink: IBreadcrumbLink | IBreadcrumbRouterLink;\n    @ViewChildren(RouterLinkWithHref) routerLinkChildren: QueryList<RouterLinkWithHref>;\n\n    @ViewChild('navWrapper')\n    navWrapper: ElementRef;\n\n    @ViewChild('lastPart')\n    lastPart: ElementRef;\n\n    private subscriptions = new Subscription();\n    private resizeEvents = new BehaviorSubject<void>(null);\n\n    constructor(private changeDetector: ChangeDetectorRef,\n                private elementRef: ElementRef,\n                private userAgent: UserAgentRef) { }\n\n    ngAfterViewInit(): void {\n        let element: HTMLElement = this.elementRef.nativeElement;\n        if (element) {\n            // Listen in the \"capture\" phase to prevent routerLinks when disabled\n            element.firstElementChild.addEventListener('click', this.preventClicksWhenDisabled, true);\n            element.style.setProperty('--collapsedColor', this.collapsedColor);\n        }\n\n        const timerSub = timer(500, 500)\n            .subscribe(() => this.resizeEvents.next());\n        this.subscriptions.add(timerSub);\n        this.setUpResizeSub();\n\n        this.preventDisabledRouterLinks();\n        this.routerLinkChildren.changes.subscribe(() => this.preventDisabledRouterLinks());\n        this.resizeEvents.next(null);\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['links'] || changes['routerLinks']) {\n            let allLinks = (this.links || []).concat(this.routerLinks || []);\n            this.backLink = allLinks[allLinks.length - 2];\n            this.resizeEvents.next(null);\n        }\n        if (changes['multiline'] || changes['multilineExpanded']) {\n            this.resizeEvents.next(null);\n        }\n    }\n\n    ngOnDestroy(): void {\n        let element: HTMLElement = this.elementRef.nativeElement;\n        element.firstElementChild.removeEventListener('click', this.preventClicksWhenDisabled, true);\n        this.subscriptions.unsubscribe();\n    }\n\n    onLinkClicked(link: IBreadcrumbLink | IBreadcrumbRouterLink, event: Event): void {\n        if (this.isDisabled) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n        } else {\n            this.linkClick.emit(link);\n        }\n    }\n\n    toggleMultilineExpanded(): void {\n        this.multilineExpanded = !this.multilineExpanded;\n        this.multilineExpandedChange.emit(this.multilineExpanded);\n        this.resizeEvents.next(null);\n        this.changeDetector.markForCheck();\n    }\n\n    private setUpResizeSub() {\n        let prevLinks: IBreadcrumbLink[];\n        let prevRouterLinks: IBreadcrumbRouterLink[];\n        let prevIsExpanded: boolean;\n        let prevNavWidth = -1;\n\n        const resizeSub = this.resizeEvents\n            .pipe(debounceTime(5))\n            .subscribe(() => {\n                if (!this.lastPart || !this.navWrapper) {\n                    return;\n                }\n                // If neither the links, nor isMultilineExpanded, nor the navWrapper element's clientWidth has changed, we don't need to do anything.\n                const currNavWidth = this.navWrapper.nativeElement.clientWidth;\n                if (prevLinks === this.links && prevRouterLinks === this.routerLinks && prevIsExpanded === this.isMultilineExpanded && prevNavWidth === currNavWidth) {\n                    return;\n                }\n                prevLinks = this.links;\n                prevRouterLinks = this.routerLinks;\n                prevIsExpanded = this.isMultilineExpanded;\n                prevNavWidth = currNavWidth;\n\n                const elements = this.lastPart.nativeElement.querySelectorAll('a.breadcrumb');\n                if (elements.length > 0) {\n                    const firstOffsetBottom = elements[0].offsetTop + elements[0].offsetHeight;\n                    const lastOffsetBottom = elements[elements.length - 1].offsetTop + elements[elements.length - 1].offsetHeight;\n                    this.showArrow = firstOffsetBottom !== lastOffsetBottom;\n                } else {\n                    this.showArrow = false;\n                }\n                this.shortenTexts();\n                this.changeDetector.markForCheck();\n            });\n\n        this.subscriptions.add(resizeSub);\n    }\n\n    private shortenTexts() {\n        const navWrapper = this.navWrapper.nativeElement as HTMLElement;\n        const lastPart = this.lastPart.nativeElement as HTMLElement;\n        const innerElements = lastPart.querySelectorAll('a.breadcrumb');\n        const defaultElements = this.getCuttableBreadcrumbsTexts();\n\n        this.isOverflowing = false;\n\n        // Reset all elements to their default states.\n        const offset = this.multilineExpanded ? 0 : 1;\n        for (let i = 0; i < innerElements.length; i++) {\n            const innerElement = innerElements[i];\n            innerElement.classList.remove('without');\n            innerElement.classList.remove('hidden');\n            innerElement.textContent = defaultElements[i + offset];\n        }\n\n        if (this.multilineExpanded) {\n            return;\n        }\n\n        for (let i = 0; i < innerElements.length; ++i) {\n            const innerElement = innerElements[i];\n            while (lastPart.offsetLeft + lastPart.scrollWidth + ELLIPSIS_WIDTH > navWrapper.clientWidth) {\n                this.isOverflowing = true;\n                if (innerElement.textContent.length === 0) {\n                    innerElement.classList.add('hidden');\n                    const nextInnerElement = innerElements[i + 1];\n                    if (nextInnerElement) {\n                        nextInnerElement.classList.add('without');\n                    }\n                    break;\n                } else {\n                    innerElement.textContent = innerElement.textContent.substring(1);\n                }\n            }\n        }\n    }\n\n    private getCuttableBreadcrumbsTexts(): string[] {\n        let defaultBreadcrumbs: string[] = [];\n        if (this.links) {\n            for (let i = 0; i < this.links.length; i++) {\n                defaultBreadcrumbs.push(this.links[i].text);\n            }\n        }\n        if (this.routerLinks) {\n            for (let i = 0; i < this.routerLinks.length; i++) {\n                defaultBreadcrumbs.push(this.routerLinks[i].text);\n            }\n        }\n        return defaultBreadcrumbs;\n    }\n\n    onResize(event: any): void {\n        this.resizeEvents.next(null);\n    }\n\n    private preventClicksWhenDisabled = (ev: Event): void => {\n        if (this.isDisabled) {\n            let target = ev.target as HTMLElement;\n            if (target.tagName.toLowerCase() === 'a' && target.classList.contains('breadcrumb')) {\n                ev.preventDefault();\n                ev.stopImmediatePropagation();\n            }\n        }\n    }\n\n    /**\n     * Workaround/Hack for the native angular \"RouterLink\" having no way to disable navigation on click.\n     */\n    private preventDisabledRouterLinks(): void {\n        const thisComponent = this;\n        const createsCompileErrorIfRouterLinkAPIChanges: keyof RouterLinkWithHref = 'onClick';\n\n        for (const link of this.routerLinkChildren.filter(link => !link.hasOwnProperty('onClick'))) {\n            const originalOnClick = link.onClick;\n            link.onClick = function interceptedOnClick(...args: any[]): boolean {\n                if (thisComponent.isDisabled) {\n                    return true;\n                } else {\n                    return originalOnClick.apply(this, args);\n                }\n            };\n        }\n    }\n}\n","<nav [class.disabled]=\"isDisabled\" [class.multiline]=\"multiline\">\n    <div #navWrapper class=\"nav-wrapper\" [class.is-overflowing]=\"isOverflowing\" [class.multilineExpanded]=\"multilineExpanded\" [class.multiline]=\"multiline\" (window:resize)=\"onResize($event)\">\n        <div class=\"inner-wrapper\">\n            <a class=\"back-button\" *ngIf=\"backLink && backLink.route\"\n                (click)=\"onLinkClicked(backLink, $event)\"\n                [routerLink]=\"backLink.route\"\n                [title]=\"backLink.text\"></a>\n            <a class=\"back-button\" *ngIf=\"backLink && !backLink.route\"\n                (click)=\"onLinkClicked(backLink, $event)\"\n                [attr.href]=\"isDisabled ? null : backLink?.href\"\n                [title]=\"backLink.text\"></a>\n\n            <div class=\"other-content\">\n                <ng-content></ng-content>\n            </div>\n\n            <ng-template [ngIf]=\"links\">\n                <a *ngIf=\"!multilineExpanded && links[0]\" class=\"breadcrumb\"\n                    [attr.href]=\"isDisabled ? null : links[0].href\"\n                    (click)=\"onLinkClicked(links[0], $event)\"\n                    [title]=\"links[0].tooltip || links[0].text\"\n                >{{ links[0].text }}</a>\n                <div class=\"ellipsis\" *ngIf=\"isOverflowing && !multilineExpanded\" [class.multilineExpanded]=\"multilineExpanded\" (click)=\"toggleMultilineExpanded()\">\n                    ...\n                </div>\n                <div #lastPart class=\"lastPart\">\n                    <ng-container *ngFor=\"let link of links; let i = index\">\n                        <a *ngIf=\"!multilineExpanded && i > 0\"\n                            class=\"breadcrumb last\"\n                            [attr.href]=\"isDisabled ? null : link?.href\"\n                            (click)=\"onLinkClicked(link, $event)\"\n                            [title]=\"link.tooltip || link.text\"\n                        >{{ link.text }}</a>\n                        <a *ngIf=\"multilineExpanded\"\n                            class=\"breadcrumb last\"\n                            [attr.href]=\"isDisabled ? null : link?.href\"\n                            (click)=\"onLinkClicked(link, $event)\"\n                            [title]=\"link.tooltip || link.text\"\n                        >{{ link.text }}\n                       </a>\n                    </ng-container>\n                    <span *ngIf=\"multiline && multilineExpanded && !isOverflowing && showArrow\" class=\"back_arrow\" [class.multilineExpanded]=\"multilineExpanded\" (click)=\"toggleMultilineExpanded()\">\n                        <icon>arrow_back</icon>\n                    </span>\n                </div>\n            </ng-template>\n\n            <ng-template [ngIf]=\"routerLinks\">\n                <a *ngIf=\"!multilineExpanded && routerLinks[0]\" class=\"breadcrumb\"\n                    [routerLink]=\"routerLinks[0].route\"\n                    (click)=\"onLinkClicked(routerLinks[0], $event)\"\n                    [title]=\"routerLinks[0].tooltip || routerLinks[0].text\"\n                >{{ routerLinks[0].text }}</a>\n                <div class=\"ellipsis\" *ngIf=\"isOverflowing && !multilineExpanded\" [class.multilineExpanded]=\"multilineExpanded\" (click)=\"toggleMultilineExpanded()\">\n                    ...\n                </div>\n                <div #lastPart class=\"lastPart\">\n                    <ng-container *ngFor=\"let routerLink of routerLinks; let i = index\">\n                        <a *ngIf=\"!multilineExpanded && i > 0\"\n                            class=\"breadcrumb last\"\n                            [routerLink]=\"routerLink.route\"\n                            (click)=\"onLinkClicked(routerLink, $event)\"\n                            [title]=\"routerLink.tooltip || routerLink.text\"\n                        >{{ routerLink.text }}</a>\n                        <a *ngIf=\"multilineExpanded\"\n                            class=\"breadcrumb last\"\n                            [routerLink]=\"routerLink.route\"\n                            (click)=\"onLinkClicked(routerLink, $event)\"\n                            [title]=\"routerLink.tooltip || routerLink.text\"\n                        >{{ routerLink.text }}\n                        </a>\n                    </ng-container>\n                    <span *ngIf=\"multiline && multilineExpanded && !isOverflowing && showArrow\" class=\"back_arrow\" [class.multilineExpanded]=\"multilineExpanded\" (click)=\"toggleMultilineExpanded()\">\n                        <icon>arrow_back</icon>\n                    </span>\n                </div>\n            </ng-template>\n        </div>\n    </div>\n</nav>\n","import { Component, Input, HostListener } from '@angular/core';\n\n/**\n * A Button component.\n *\n * ```html\n * <gtx-button>Click me</gtx-button>\n * <gtx-button size=\"large\">Buy Now!</gtx-button>\n * <gtx-button type=\"alert\">Delete all stuff</gtx-button>\n * <gtx-button icon>\n *     <i class=\"material-icons\">settings</i>\n * </gtx-button>\n * ```\n */\n@Component({\n    selector: 'gtx-button',\n    templateUrl: './button.tpl.html'\n})\nexport class Button {\n    /**\n     * Sets the input field to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Specify the size of the button. Can be \"small\", \"regular\" or \"large\".\n     */\n    @Input() size: 'small' | 'regular' | 'large' = 'regular';\n\n    /**\n     * Type determines the style of the button. Can be \"default\", \"secondary\",\n     * \"success\", \"warning\" or \"alert\".\n     */\n    @Input() type: 'default' | 'secondary' | 'success' | 'warning' | 'alert' = 'default';\n\n    /**\n     * Setting the \"flat\" attribute gives the button a transparent background\n     * and only depth on hover.\n     */\n    @Input()\n    get flat(): boolean {\n        return this.isFlat;\n    }\n    set flat(val: boolean) {\n        this.isFlat = val != null && val !== false;\n    }\n\n    /**\n     * Setting the \"icon\" attribute turns the button into an \"icon button\", which is\n     * like a flat button without a border, suitable for wrapping an icon.\n     */\n    @Input()\n    get icon(): boolean {\n        return this.isIcon;\n    }\n    set icon(val: boolean) {\n        this.isIcon = val != null && val !== false;\n    }\n\n    /**\n     * Controls whether the button is disabled.\n     */\n    @Input()\n    get disabled(): boolean {\n        return this.isDisabled;\n    }\n    set disabled(disabled: boolean) {\n        this.isDisabled = (<any> disabled) === '' || !!disabled;\n    }\n\n    /**\n     * Set button as a submit button.\n     */\n    @Input()\n    set submit(value: boolean) {\n        this.buttonType = (value != null && value !== false) ? 'submit' : 'button';\n    }\n\n    buttonType = 'button';\n    isFlat: boolean = false;\n    isIcon: boolean = false;\n    isDisabled: boolean = false;\n\n    // In some browsers, disabled elements don't fire mouse events, but bubble them up the DOM tree.\n    // To not trigger actions when the button is disabled, we need to prevent them manually.\n    @HostListener('click', ['$event'])\n    preventDisabledClick(event: Event): void {\n        if (event && this.isDisabled) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n        }\n    }\n}\n","<div class=\"button-event-wrapper\" (click)=\"preventDisabledClick($event)\">\n    <button class=\"btn {{size}} {{type}}\"\n            [type]=\"buttonType\"\n            [disabled]=\"disabled\"\n            [class.btn-flat]=\"flat || icon\"\n            [class.btn-icon]=\"icon\"\n            (click)=\"preventDisabledClick($event)\"\n    ><ng-content></ng-content></button>\n</div>\n","export enum KeyCode {\n    UpArrow = 38,\n    DownArrow = 40,\n    RightArrow = 39,\n    LeftArrow = 37,\n    PageUp = 33,\n    PageDown = 34,\n    Home = 36,\n    End = 35,\n    Enter = 13,\n    Space = 32,\n    Tab = 9,\n    Escape = 27,\n    Backspace = 8,\n    Delete = 46\n}\n","import {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostListener,\n    Input,\n    Output,\n    ViewChild\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {KeyCode} from '../../common/keycodes';\n\nexport type CheckState = boolean | 'indeterminate';\n\nconst GTX_CHECKBOX_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Checkbox),\n    multi: true\n};\n\n/**\n * Checkbox wraps the native `<input type=\"checkbox\">` form element.\n *\n * ```html\n * <gtx-checkbox [(ngModel)]=\"isOkay\" label=\"Is it okay?\"></gtx-checkbox>\n * <gtx-checkbox [(ngModel)]=\"checkStates.B\" value=\"B\" label=\"B\"></gtx-checkbox>\n * ```\n *\n * ## Stateless Mode\n * By default, the Checkbox keeps track of its own internal checked state. This makes sense\n * for most use cases, such as when used in a form bound to NgControl.\n *\n * However, in some cases we want to explicitly set the state from outside. This is done by binding\n * to the <code>checked</code> attribute. When this attribute is bound, the checked state of the\n * Checkbox will *only* change when the value of the binding changes. Clicking on the Checkbox\n * will have no effect other than to emit an event which the parent can use to update the binding.\n *\n * Here is a basic example of a stateless checkbox where the parent component manages the state:\n *\n * ```html\n * <gtx-checkbox [checked]=\"isChecked\"\n *               (change)=\"isChecked = $event\"></gtx-checkbox>\n * ```\n */\n@Component({\n    selector: 'gtx-checkbox',\n    templateUrl: './checkbox.tpl.html',\n    providers: [GTX_CHECKBOX_VALUE_ACCESSOR]\n})\nexport class Checkbox implements ControlValueAccessor {\n    /**\n     * Sets the checkbox to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Checked state of the checkbox. When set, the Checkbox will be\n     * in stateless mode.\n     */\n    @Input() get checked(): boolean {\n        return this.checkState === true;\n    }\n    set checked(value: boolean) {\n        this.statelessMode = true;\n        let val: boolean | 'true' | '' | 'indeterminate' = <any> value;\n        let nowChecked = val === true || <any> val === 'true' || <any> val === '';\n        if (nowChecked != this.checkState) {\n            this.onChange(this.checkState = nowChecked);\n            this.changeDetector.markForCheck();\n        }\n    }\n\n    /**\n     * Set to \"indeterminate\" for an indeterminate state (-)\n     */\n    @Input() get indeterminate(): boolean {\n        return this.checkState === 'indeterminate';\n    }\n    set indeterminate(val: boolean) {\n        if (val != (this.checkState === 'indeterminate')) {\n            this.checkState = val ? 'indeterminate' : false;\n            this.change.emit(this.checkState);\n            this.onChange(this.checkState);\n        }\n    }\n\n    /**\n     * Set the checkbox to its disabled state.\n     */\n    @Input() disabled: boolean = false;\n    /**\n     * Checkbox ID\n     */\n    @Input() id: string = randomID();\n    /**\n     * Label for the checkbox\n     */\n    @Input() label: string = '';\n    /**\n     * Form name for the checkbox\n     */\n    @Input() name: string;\n    /**\n     * Sets the required property\n     */\n    @Input() required: boolean = false;\n    /**\n     * The value of the checkbox\n     */\n    @Input() value: any = '';\n\n    /**\n     * Blur event\n     */\n    @Output() blur = new EventEmitter<CheckState>();\n    /**\n     * Focus event\n     */\n    @Output() focus = new EventEmitter<CheckState>();\n    /**\n     * Change event\n     */\n    @Output() change = new EventEmitter<CheckState>();\n\n    checkState: CheckState = false;\n    tabbedFocus: boolean = false;\n\n    @ViewChild('labelElement', { static: true }) labelElement: ElementRef;\n\n    /**\n     * See note above on stateless mode.\n     */\n    private statelessMode: boolean = false;\n\n\n    constructor(private changeDetector: ChangeDetectorRef) { }\n\n    onBlur(): void {\n        this.blur.emit(this.checkState);\n        this.onTouched();\n        this.tabbedFocus = false;\n    }\n\n    onFocus(): void {\n        this.focus.emit(this.checkState);\n    }\n\n    @HostListener('keyup', ['$event'])\n    focusHandler(e: KeyboardEvent): void {\n        if (e.keyCode === KeyCode.Tab) {\n            if (!this.tabbedFocus) {\n                this.tabbedFocus = true;\n            }\n        }\n    }\n\n    writeValue(value: any): void {\n        if (value !== this.checkState) {\n            this.checkState = value;\n            this.changeDetector.markForCheck();\n        }\n    }\n\n    ngOnInit(): void {\n        this.onChange(this.checkState);\n    }\n\n    ngAfterViewInit(): void {\n        this.fixInitialAnimation();\n    }\n\n    onInputChanged(e: Event, input: HTMLInputElement): boolean {\n        if (e) {\n            e.stopPropagation();\n        }\n        let newState: CheckState = input.indeterminate ? 'indeterminate' : input.checked;\n        if (this.statelessMode) {\n            if (input.checked !== this.checkState) {\n                input.checked = !!this.checkState;\n            }\n            this.change.emit(newState);\n            return false;\n        }\n        if (newState != this.checkState) {\n            this.checkState = newState;\n            this.onChange(newState);\n            this.change.emit(newState);\n            return true;\n        }\n    }\n\n    registerOnChange(fn: Function): void { this.onChange = fn; }\n    registerOnTouched(fn: Function): void { this.onTouched = fn; }\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.changeDetector.markForCheck();\n    }\n\n    private onChange: Function = () => {};\n    private onTouched: Function = () => {};\n\n    /**\n     * This is a hacky fix to prevent Materialize from animating ticked checkboxes which\n     * kicks in when a checkbox is added to the dom with checked=false and immediately\n     * set to checked=true.\n     */\n    private fixInitialAnimation(): void {\n        if (this.labelElement && this.labelElement.nativeElement) {\n            let label: HTMLLabelElement = this.labelElement.nativeElement;\n            label.style.display = 'none';\n            let ignored = label.offsetWidth;\n            label.style.display = '';\n        }\n    }\n}\n\nfunction randomID(): string {\n    return 'checkbox-' + Math.random().toString(36).substr(2);\n}\n","<div>\n    <input type=\"checkbox\"\n           [attr.id]=\"id\"\n           [attr.name]=\"name\"\n           [checked]=\"checkState === true\"\n           [indeterminate]=\"checkState === 'indeterminate'\"\n           [disabled]=\"disabled\"\n           [required]=\"required\"\n           [value]=\"value\"\n\n           (blur)=\"onBlur()\"\n           (focus)=\"onFocus()\"\n           (change)=\"onInputChanged($event, input)\"\n\n           [class.tabbed]=\"tabbedFocus\"\n\n           #input\n    >\n    <label [attr.for]=\"id\" #labelElement>{{ label }}</label>\n</div>\n","import {Component} from '@angular/core';\n\n/**\n * A wrapper around items that appear in the list pane of the SplitViewComponent.\n *\n * Two component-specific classes can be used:\n *\n * * `.item-avatar`: The content of this element will be styled in a circular container.\n * * `.item-primary`: The primary content of the item, which will take up all the remaining space via `flex: 1`.\n * * `.show-on-hover`: Any element with this class will appear faded out until the user hovers the list item.\n *\n *\n * ```html\n * <gtx-contents-list-item *ngFor=\"let item of listItems\">\n *     <!-- this will be styled as a circular icon -->\n *     <div class=\"item-avatar\"><i class=\"material-icons\">{{ item.icon }}</i></div>\n *     <!-- this will stretch to use all available space -->\n *     <div class=\"item-primary\"><a [routerLink]=\"[item.route]\">{{ item.title }}</a></div>\n *     <!-- these will use remaining space to the right -->\n *     <i class=\"material-icons show-on-hover\">edit</i>\n *     <i class=\"material-icons show-on-hover\">star</i>\n * </gtx-contents-list-item>\n * ```\n */\n@Component({\n    selector: 'gtx-contents-list-item',\n    templateUrl: './contents-list-item.tpl.html'\n})\nexport class ContentsListItem {}\n","<ng-content></ng-content>\n","/**\n * Components with boolean inputs may receive the value as an actual boolean (if data-bound `[prop]=\"false\"`) or as\n * a string representation of a boolean (if passed as a regular attribute `prop=\"false\"`).\n * In the latter case, we want to ensure that the string version is correctly coerced to its boolean counterpart.\n */\nexport function coerceToBoolean(val: any): boolean {\n    return val === true || val === 'true' || val === '';\n}\n","import {DateTimePickerStrings} from './date-time-picker-strings';\n\nexport const defaultStrings: DateTimePickerStrings = {\n    hours: 'Hours',\n    minutes: 'Minutes',\n    seconds: 'Seconds',\n    okay: 'Okay',\n    cancel: 'Cancel',\n    months: [\n        'January',\n        'February',\n        'March',\n        'April',\n        'May',\n        'June',\n        'July',\n        'August',\n        'September',\n        'October',\n        'November',\n        'December'\n    ],\n    monthsShort: [\n        'Jan',\n        'Feb',\n        'Mar',\n        'Apr',\n        'May',\n        'Jun',\n        'Jul',\n        'Aug',\n        'Sep',\n        'Oct',\n        'Nov',\n        'Dec'\n    ],\n    weekdays: [\n        'Sunday',\n        'Monday',\n        'Tuesday',\n        'Wednesday',\n        'Thursday',\n        'Friday',\n        'Saturday'\n    ],\n    weekdaysShort: [\n        'Sun',\n        'Mon',\n        'Tue',\n        'Wed',\n        'Thu',\n        'Fri',\n        'Sat'\n    ],\n    weekdaysMin: [\n        'Su',\n        'Mo',\n        'Tu',\n        'We',\n        'Th',\n        'Fr',\n        'Sa'\n    ]\n};\n","import {Injectable} from '@angular/core';\nimport {NEVER, Observable} from 'rxjs';\n\nimport {defaultStrings} from './date-time-picker-default-strings';\nimport {DateTimePickerStrings} from './date-time-picker-strings';\n\n/**\n * A simplified subset of the Moment interface which we expose via the first arg of the\n * DateTimePickerFormatProvider.format() method.\n */\nexport interface MomentLike {\n    format(format: string): string;\n    format(): string;\n\n    year(): number;\n    quarter(): number;\n    month(): number;\n    day(): number;\n    date(): number;\n    hour(): number;\n    hours(): number;\n    minute(): number;\n    minutes(): number;\n    second(): number;\n    seconds(): number;\n    millisecond(): number;\n    milliseconds(): number;\n    weekday(): number;\n    isoWeekday(): number;\n    weekYear(): number;\n    isoWeekYear(): number;\n    week(): number;\n    weeks(): number;\n    isoWeek(): number;\n    isoWeeks(): number;\n    weeksInYear(): number;\n    isoWeeksInYear(): number;\n    dayOfYear(): number;\n\n    toArray(): number[];\n    toDate(): Date;\n    toISOString(): string;\n    toJSON(): string;\n    unix(): number;\n\n    isLeapYear(): boolean;\n    zone(): number;\n    utcOffset(): number;\n    daysInMonth(): number;\n    isDST(): boolean;\n}\n\n/**\n * Format provider to localize the DateTimePicker component.\n */\n@Injectable()\nexport class DateTimePickerFormatProvider {\n\n    /** Texts uses by the DateTimePicker modal. */\n    strings: DateTimePickerStrings = defaultStrings;\n\n    /** May emit a value when the translations or the date format changed. */\n    changed$: Observable<any> = NEVER;\n\n    /** Formats a human-readable string to be displayed in the control input field. */\n    format(date: MomentLike, displayTime: boolean, displaySeconds: boolean): string {\n        let formatString = displayTime ? (displaySeconds ? 'L, LTS' : 'L, LT') : 'L';\n        return date.format(formatString);\n    }\n}\n","/**\n * This is a workaround for loading moment JS in TypeScript 3.2 and Angular 7.\n * This is based on https://github.com/rollup/rollup/issues/1267#issuecomment-446681320\n */\n\nimport * as moment_ from 'moment';\n\n/** The moment namespace and moment function. */\nexport const momentjs = (moment_ as any).default || moment_;\n\n/** The Moment class. This must be used as a type instead of momentjs.Moment. */\nexport type Moment = moment_.Moment;\n","import {momentjs} from './momentjs.import';\n\nimport * as rome_ from '@bevacqua/rome';\nimport * as momentum from '@bevacqua/rome/src/momentum';\n\n(window as any).moment = momentjs;\nrome_.use(momentjs);\ndelete (window as any).moment;\n\nif (momentum.moment === void 0) {\n  throw new Error('rome depends on moment.js, you can get it at http://momentjs.com.');\n}\n\n/** The rome namespace and rome function. */\nexport const rome = (rome_ as any).default || rome_;","import {Component, HostBinding, Input} from '@angular/core';\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\n\n@Component({\n    selector: 'gtx-dropdown-item',\n    template: `<ng-content></ng-content>`\n})\nexport class DropdownItem {\n\n    /**\n     * If true, the DropdownItem cannot be clicked or selected. *Default: false*\n     */\n    @Input()\n    get disabled(): boolean {\n        return this.isDisabled;\n    }\n    set disabled(value: boolean) {\n        this.isDisabled = coerceToBoolean(value);\n    }\n\n    @HostBinding('tabindex') tabIndex = 0;\n\n    @HostBinding('class.disabled') isDisabled = false;\n}\n","import {Directive, ElementRef} from '@angular/core';\n\nexport const FOCUSABLE_SELECTOR = `gtx-dropdown-item, a[href], area[href], input:not([disabled]), select:not([disabled]), \n    textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]`;\n\n@Directive({\n    selector: 'gtx-dropdown-trigger'\n})\nexport class DropdownTriggerDirective {\n    constructor(public elementRef: ElementRef) {}\n\n    /**\n     * Focus the first focusable descendant of this element.\n     */\n    focus(): void {\n        const focusable = this.elementRef.nativeElement.querySelector(FOCUSABLE_SELECTOR);\n        if (focusable && focusable.focus) {\n            focusable.focus();\n        }\n    }\n}\n","import {Component, ContentChildren, HostListener, EventEmitter, forwardRef, QueryList, ElementRef, AfterContentInit} from '@angular/core';\nimport {DropdownItem} from './dropdown-item.component';\nimport {KeyCode} from '../../common/keycodes';\nimport {FOCUSABLE_SELECTOR} from './dropdown-trigger.directive';\n\n/**\n * Wraps the content and handles keyboard control (tabbing and focus) of the contents.\n */\n@Component({\n    selector: 'gtx-dropdown-content',\n    template: `<div class=\"scroller\"><ng-content></ng-content></div>`\n})\nexport class DropdownContent implements AfterContentInit {\n    focusLost = new EventEmitter<boolean>();\n    focusableItems: HTMLElement[] = [];\n\n    @ContentChildren(forwardRef(() => DropdownItem), { read: ElementRef }) items: QueryList<ElementRef>;\n\n    constructor(public elementRef: ElementRef) {}\n\n    @HostListener('keydown', ['$event'])\n    keyHandler(e: KeyboardEvent): void {\n        if (e.keyCode === KeyCode.Tab) {\n            if (e.shiftKey) {\n                this.focusPrevious(e.target as HTMLElement, e);\n            } else {\n                this.focusNext(e.target as HTMLElement, e);\n            }\n        }\n    }\n\n    ngAfterContentInit(): void {\n        this.focusableItems = Array.from<HTMLElement>(this.elementRef.nativeElement.querySelectorAll(FOCUSABLE_SELECTOR));\n    }\n\n    focusFirstItem(): void {\n        const firstItem = this.focusableItems[0];\n        if (firstItem && firstItem.focus) {\n            firstItem.focus();\n        }\n    }\n\n    focusNext(currentElement: HTMLElement, e: KeyboardEvent): void {\n        const items = this.focusableItems;\n        const index = this.getIndexOfElement(currentElement);\n        if (index === items.length - 1) {\n            e.preventDefault();\n            this.focusLost.emit(true);\n        }\n    }\n\n    focusPrevious(currentElement: HTMLElement, e: KeyboardEvent): void {\n        const index = this.getIndexOfElement(currentElement);\n        if (index === 0) {\n            e.preventDefault();\n            this.focusLost.emit(true);\n        }\n    }\n\n    private getIndexOfElement(element: HTMLElement): number {\n        return this.focusableItems.indexOf(element);\n    }\n}\n","import {Injectable, ViewContainerRef, Optional, SkipSelf} from '@angular/core';\n\n/**\n * The OverlayHostService is used to get a reference to the ViewConainerRef of the\n * OverlayHost component, so that other components may insert components & elements\n * into the DOM at that point.\n */\n@Injectable()\nexport class OverlayHostService {\n\n    public hostView: ViewContainerRef;\n    public promiseResolveFns: Function[] = [];\n\n    /**\n     * The OverlayHostService expects to be used by the OverlayHostComponent in the root module of the app.\n     * In the case that the GenticsUICore is imported into a lazy-loaded child module, this service may be\n     * instantiated a second time. This second instance will not have been registered with the OverlayHostComponent,\n     * so we need to check out the injector tree and grab the hostView from the parent OverlayHostService.\n     */\n    constructor(@Optional() @SkipSelf() private parentInstance?: OverlayHostService) {\n        if (parentInstance) {\n            this.hostView = parentInstance.hostView;\n            this.promiseResolveFns = parentInstance.promiseResolveFns;\n        }\n    }\n\n    /**\n     * Used to pass in the ViewContainerRef from the OverlayHost component.\n     * Should not be used by any other component.\n     */\n    registerHostView(viewContainerRef: ViewContainerRef): void {\n        this.hostView = viewContainerRef;\n        if (0 < this.promiseResolveFns.length) {\n            this.resolveHostView();\n        }\n    }\n\n    /**\n     * Returns a promise which resolves to the ViewContainerRef of the OverlayHost\n     * component. This can then be used to insert components and elements into the\n     * DOM at that point.\n     */\n    getHostView(): Promise<ViewContainerRef> {\n        return new Promise((resolve: Function) => {\n            this.promiseResolveFns.push(resolve);\n            if (this.hostView !== undefined) {\n                this.resolveHostView();\n            }\n        });\n    }\n\n    private resolveHostView(): void {\n        this.promiseResolveFns.forEach(resolve => resolve(this.hostView));\n        this.promiseResolveFns = [];\n    }\n}\n","import {\n    Component,\n    HostListener,\n    TemplateRef,\n    ElementRef,\n    ChangeDetectorRef,\n    EventEmitter,\n    ChangeDetectionStrategy,\n    Inject, OnDestroy, AfterViewInit\n} from '@angular/core';\nimport {KeyCode} from '../../common/keycodes';\nimport {DropdownAlignment, DropdownWidth} from './dropdown.model';\nimport {Config, ConfigService} from '../../module.config';\n\n@Component({\n    selector: 'gtx-dropdown-content-wrapper',\n    template: `<div class=\"dropdown-content-wrapper\"\n                    (click)=\"onContentClick()\"\n                    [ngStyle]=\"contentStyles\">\n                    <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n               </div>`,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DropdownContentWrapper implements AfterViewInit, OnDestroy {\n    pageMargin: Config['dropDownPageMargin'];\n    dropDownMaxHeight: Config['dropDownMaxHeight'];\n    content: TemplateRef<any>;\n    contentStyles: any = {\n        position: 'absolute'\n    };\n    options = {\n        alignment: 'left' as DropdownAlignment,\n        width: 'contents' as DropdownWidth,\n        belowTrigger: false\n    };\n    trigger: HTMLElement;\n    id: string = 'dropdown-' + Math.random().toString(36).substr(2);\n    clicked = new EventEmitter<any>();\n    escapeKeyPressed = new EventEmitter<any>();\n    private widthHasBeenAdjusted = false;\n\n    constructor(private elementRef: ElementRef,\n                private cd: ChangeDetectorRef,\n                @Inject(ConfigService) private config: Config) {\n        this.pageMargin = this.config.dropDownPageMargin;\n        this.dropDownMaxHeight = this.config.dropDownMaxHeight;\n    }\n\n    ngAfterViewInit(): void {\n        this.setPositionAndSize(true);\n    }\n\n    /**\n     * Positions and resizes the dropdown contents container.\n     */\n    setPositionAndSize(initialOpening: boolean = false): void {\n        const content = this.getDropdownContent();\n        if (!content) {\n            return;\n        }\n        if (initialOpening) {\n            // When opening for the first time, some extra logic is required\n            this.contentStyles.height = 0;\n            this.contentStyles.opacity = 0;\n            content.setAttribute('id', this.id);\n        }\n\n        const positionStyles = this.calculatePositionStyles();\n        Object.assign(this.contentStyles, positionStyles);\n        // const flowUpwards = parseInt(positionStyles.top, 10) < Math.floor(this.trigger.getBoundingClientRect().top);\n        const contentHeight = this.innerHeight(this.elementRef.nativeElement.querySelector('gtx-dropdown-content'));\n\n        // when flowing upwards, we animate the `top` property, so must remember the final value.\n        const finalTop = parseInt(this.contentStyles.top);\n        if (positionStyles.flowUpwards) {\n            this.contentStyles.top = finalTop + Math.min(contentHeight, parseInt(positionStyles.maxHeight)) + 'px';\n        }\n\n        this.contentStyles.width = this.calculateContainerWidth() + 'px';\n        this.cd.markForCheck();\n        this.cd.detectChanges();\n\n        // Show dropdown. Wrapped in a setTimeout to allow the contents of the dropdown\n        // to re-flow (if needed) so that the true dimensions can then be re-calculated.\n        setTimeout(() => {\n            const maxHeightValue = parseInt(positionStyles.maxHeight);\n            let contentHeight = this.innerHeight(content);\n            if (maxHeightValue < contentHeight) {\n                contentHeight = maxHeightValue;\n            }\n            content.style.maxHeight = Math.max(contentHeight, maxHeightValue) + 'px';\n\n            this.contentStyles.height = contentHeight + 'px';\n            this.contentStyles.width = this.calculateContainerWidth() + 'px';\n\n            if (positionStyles.flowUpwards) {\n                this.contentStyles.top = finalTop + 'px';\n            }\n            this.contentStyles.transform = `translateZ(0)`;\n            this.contentStyles.opacity = 1;\n\n            if (this.options.width === 'contents') {\n                this.contentStyles.whiteSpace = 'nowrap';\n            }\n            this.widthHasBeenAdjusted = true;\n            this.cd.markForCheck();\n        }, 0);\n    }\n\n    @HostListener('keydown', ['$event'])\n    clickHandler(e: KeyboardEvent): void {\n        if (e.keyCode === KeyCode.Escape) {\n            this.escapeKeyPressed.emit(true);\n        }\n    }\n\n    ngOnDestroy(): void {\n        const content = this.getDropdownContent();\n        if (content) {\n            content.style.maxHeight = 'none';\n        }\n        this.contentStyles.opacity = 0;\n        this.contentStyles.maxHeight = 'none';\n    }\n    /**\n     * Calculates the position of the dropdown based on the height, width. alignment and screen boundaries.\n     */\n    calculatePositionStyles(): { top: string, left: string, maxHeight: string, flowUpwards: boolean; } {\n        const positionStyles: any = {\n            flowUpwards: false,\n            maxHeight: this.dropDownMaxHeight + 'px'\n        };\n        const content = this.getDropdownContent();\n        const fullHeightContent = content && content.querySelector('.scroller') as HTMLElement;\n        const contentHeight = this.innerHeight(fullHeightContent) + this.pageMargin;\n\n        // Offscreen detection\n        const windowHeight: number = window.innerHeight;\n        const triggerHeight: number = this.innerHeight(this.trigger);\n        const offset = this.offset(this.trigger);\n        const triggerLeft = offset.left;\n        const triggerTop = offset.top;\n        const containerWidth = this.calculateContainerWidth();\n        const currAlignment = this.calculateAlignment(triggerLeft, containerWidth);\n\n        // Below Origin\n        let verticalOffset = 0;\n        if (this.options.belowTrigger === true) {\n            verticalOffset = triggerHeight;\n        }\n\n        // Vertical bottom offscreen detection\n        if (verticalOffset + triggerTop + contentHeight > windowHeight) {\n            let adjustedHeight = this.limitHeight(this.innerHeight(content));\n            const contentLargerThanWindow = windowHeight <= adjustedHeight;\n\n            // If content is greater than half of the window height, it should\n            // flow upward if the trigger is below the half-way point\n            if (contentLargerThanWindow) {\n                positionStyles.flowUpwards = windowHeight / 2 < triggerTop;\n            } else {\n                positionStyles.flowUpwards = (windowHeight <= triggerTop + adjustedHeight) && (windowHeight / 2 < triggerTop);\n            }\n\n            if (!positionStyles.flowUpwards) {\n                // If going upwards still goes offscreen, just crop height of dropdown.\n                if (triggerTop + triggerHeight - contentHeight < 0) {\n                    adjustedHeight = windowHeight - triggerTop - verticalOffset - this.pageMargin;\n                }\n            } else {\n                if (!verticalOffset) {\n                    verticalOffset += triggerHeight + 1;\n                }\n                if (this.options.belowTrigger === true) {\n                    verticalOffset -= triggerHeight;\n                }\n\n                if (triggerTop + triggerHeight - this.pageMargin < adjustedHeight) {\n                    adjustedHeight = (triggerTop + triggerHeight) - this.pageMargin;\n                }\n                adjustedHeight = this.limitHeight(adjustedHeight);\n                verticalOffset -= adjustedHeight;\n            }\n            positionStyles.maxHeight = this.limitHeight(adjustedHeight) + 'px';\n        }\n\n        // Handle edge alignment\n        let leftPosition: number = 0;\n        switch (currAlignment) {\n            case 'left':\n                leftPosition = triggerLeft;\n                break;\n            case 'right':\n                leftPosition =  triggerLeft + this.trigger.offsetWidth - containerWidth;\n                break;\n            case 'center':\n            default:\n                leftPosition = 0;\n        }\n\n        positionStyles.top = this.trigger.getBoundingClientRect().top + verticalOffset + 'px';\n        positionStyles.left = leftPosition + 'px';\n\n        return positionStyles;\n    }\n\n    onContentClick(): void {\n        this.clicked.emit(true);\n    }\n\n    /**\n     * Calculates the optimal alignment of the dropdown contents to avoid clipping over the edge of the window.\n     */\n    private calculateAlignment(triggerLeft: number, containerWidth: number): DropdownAlignment | 'center' {\n        let currAlignment: DropdownAlignment | 'center' = this.options.alignment;\n\n        const doesNotFitOnRight = triggerLeft - containerWidth + this.innerWidth(this.trigger) < 0;\n        const doesNotFitOnLeft = window.innerWidth < triggerLeft + containerWidth;\n        if (doesNotFitOnRight && doesNotFitOnLeft) {\n            // Dropdown is wider than screen, force center alignment\n            currAlignment = 'center';\n        } else if (doesNotFitOnLeft) {\n            // Dropdown goes past screen on right, force right alignment\n            currAlignment = 'right';\n        } else if (doesNotFitOnRight) {\n            // Dropdown goes past screen on left, force left alignment\n            currAlignment = 'left';\n        }\n        return currAlignment;\n    }\n\n    /**\n     * Given a true height of an element, returns a new height which is limited by both\n     * the height of the window and the value of this.dropDownMaxHeight.\n     */\n    private limitHeight(trueHeight: number): number {\n        const windowHeight = window.innerHeight - this.pageMargin * 2;\n        return Math.min(trueHeight, this.dropDownMaxHeight, windowHeight);\n    }\n\n    private getDropdownContent(): HTMLElement | null {\n        return this.elementRef.nativeElement.querySelector('gtx-dropdown-content');\n    }\n\n    /**\n     * Returns the width of the container according to the `width` input passed into the component.\n     */\n    private calculateContainerWidth(): number {\n        switch (this.options.width) {\n            case 'contents':\n                return this.calculateWidthContents();\n            case 'trigger':\n                return this.calculateWidthTrigger();\n            case 'expand':\n                return this.calculateWidthExpand();\n            default:\n                return this.calculateWidthNumber();\n        }\n    }\n\n    private calculateWidthContents(): number {\n        const content = this.getDropdownContent();\n        // if the container is wider than the window, we just set the width to take up the full window\n        if (window.innerWidth < content.offsetWidth) {\n            return window.innerWidth;\n        } else {\n            // adjust the width by 1px once, to eliminate unwanted x-scrollbar when there is a y-scrollbar.\n            // The `widthHasBeenAdjusted` flag prevents the contents from further widening on subsequent\n            // calls to calculatePositionStyles()\n            const adjustment = this.widthHasBeenAdjusted ? 0 : 1;\n            return content.offsetWidth + adjustment;\n        }\n    }\n\n    private calculateWidthTrigger(): number {\n        return this.trigger.offsetWidth + 1;\n    }\n\n    private calculateWidthExpand(): number {\n        return Math.max(this.calculateWidthTrigger(), this.calculateWidthContents());\n    }\n\n    private calculateWidthNumber(): number {\n        return +this.options.width;\n    }\n\n    /**\n     * Returns the offset of the element relative to the document.\n     */\n    private offset(elem: HTMLElement): { top: number; left: number; } {\n        let box = elem.getBoundingClientRect();\n\n        let body = document.body;\n        let docEl = document.documentElement;\n\n        let scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n        let scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n        let clientTop = docEl.clientTop || body.clientTop || 0;\n        let clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n        let top  = box.top +  scrollTop - clientTop;\n        let left = box.left + scrollLeft - clientLeft;\n\n        return { top: Math.round(top), left: Math.round(left) };\n    }\n\n\n    private innerWidth(el: HTMLElement): number {\n        if (el) {\n            let style = window.getComputedStyle(el, null);\n            return Number.parseInt(style.getPropertyValue('width')) || el.offsetWidth;\n        }\n        return 0;\n    }\n\n    private innerHeight(el: HTMLElement): number {\n        if (el) {\n            let style = window.getComputedStyle(el, null);\n            return Number.parseInt(style.getPropertyValue('height')) || el.offsetHeight;\n        }\n        return 0;\n    }\n}\n","import {Component, HostListener, EventEmitter} from '@angular/core';\n\n/**\n * The scroll mask is a transparent div covering the entire viewport which is intended to prevent scrolling.\n */\n@Component({\n    selector: 'gtx-scroll-mask',\n    template: ``\n})\nexport class ScrollMask {\n    clicked = new EventEmitter<any>();\n\n    @HostListener('click')\n    clickHandler(): void {\n        this.clicked.emit(true);\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ComponentRef,\n    ContentChild,\n    EventEmitter,\n    HostListener,\n    Input,\n    OnDestroy,\n    Output,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef\n} from '@angular/core';\nimport {take} from 'rxjs/operators';\n\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\nimport {KeyCode} from '../../common/keycodes';\nimport {OverlayHostService} from '../overlay-host/overlay-host.service';\nimport {DropdownContentWrapper} from './dropdown-content-wrapper.component';\nimport {DropdownContent} from './dropdown-content.component';\nimport {DropdownTriggerDirective} from './dropdown-trigger.directive';\nimport {DropdownAlignment, DropdownWidth} from './dropdown.model';\nimport {ScrollMask} from './scroll-mask.component';\n\n/**\n * A Dropdown component. Depends on the [`<gtx-overlay-host>`](#/overlay-host) being present in the app.\n *\n * The component expects two child elements:\n *\n * * `<gtx-dropdown-trigger>` - this element is the button/label which the user will click to open the dropdown.\n * * `<gtx-dropdown-content>` - contains the contents of the dropdown. If it contains a `<ul>`, specific styles will be applied\n *\n * The `<gtx-dropdown-content>` element may contain arbitrary content, but list items should be wrapped in `<gtx-dropdown-item>`.\n * This will allow keyboard support for list navigation.\n *\n *\n * ```html\n * <gtx-dropdown-list>\n *     <gtx-dropdown-trigger>\n *         <a>Show List</a>\n *     </gtx-dropdown-trigger>\n *     <gtx-dropdown-content>\n *          <gtx-dropdown-item>First</gtx-dropdown-item>\n *          <gtx-dropdown-item>Second</gtx-dropdown-item>\n *          <gtx-dropdown-item>Third</gtx-dropdown-item>\n *     </gtx-dropdown-content>\n * </gtx-dropdown-list>\n * ```\n *\n * ## Programmatic Use\n * When used programmatically (e.g. by getting a reference to the component via `@ContentChild(DropdownList)`, the\n * following extended API is available:\n *\n * - `dropdownList.isOpen: boolean`\n * - `dropdownList.openDropdown(): void`\n * - `dropdownList.closeDropdown(): void`\n * - `dropdownList.resize(): void`\n */\n@Component({\n    selector: 'gtx-dropdown-list',\n    templateUrl: './dropdown-list.tpl.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DropdownList implements OnDestroy {\n    options = {\n        alignment: 'left' as DropdownAlignment,\n        width: 'contents' as DropdownWidth,\n        belowTrigger: false,\n        sticky: false,\n        closeOnEscape: true\n    };\n    @ViewChild(TemplateRef, { static: true }) contentsTemplate: TemplateRef<any>;\n    @ContentChild(DropdownTriggerDirective, { static: true }) trigger: DropdownTriggerDirective;\n    @ContentChild(DropdownContent) content: DropdownContent;\n\n    /**\n     * Fired whenever the dropdown contents are opened.\n     */\n    @Output() open = new EventEmitter<void>();\n\n    /**\n     * Fired whenever the dropdown contents are closed.\n     */\n    @Output() close = new EventEmitter<void>();\n\n    private _disabled: boolean = false;\n    private overlayHostView: ViewContainerRef;\n    private scrollMaskFactory: ScrollMask;\n    private scrollMaskRef: ComponentRef<ScrollMask>;\n    private contentComponentFactory: DropdownContentWrapper;\n    private contentComponentRef: ComponentRef<DropdownContentWrapper>;\n\n    /**\n     * Set the alignment of the dropdown, either 'left' or 'right'. *Default: 'left'*.\n     */\n    @Input()\n    get align(): DropdownAlignment {\n        return this.options.alignment;\n    }\n    set align(val: DropdownAlignment) {\n        this.options.alignment = val;\n    }\n\n    /**\n     * Set the width of the dropdown. Can be either `contents`, `trigger`, `expand` or a numeric value. 'Contents' will\n     * set a width sufficient to accommodate the widest list item. 'Trigger' sets the width to equal the width\n     * of the trigger element. 'Expand' is equivalent to the maximum of 'trigger' and 'contents'.\n     * A numeric value sets the width the a specific number of pixels. *Default: 'contents'*.\n     */\n    @Input()\n    get width(): DropdownWidth {\n        return this.options.width;\n    }\n    set width(val: DropdownWidth) {\n        const isValid = (s: string) => /^(trigger|contents|expand|[\\d\\.]+)$/.test(s);\n        if (isValid(val as string)) {\n            this.options.width = val;\n        }\n    }\n\n    /**\n     * If true, the dropdown will be positioned below the bottom of the trigger element. *Default: false*.\n     */\n    @Input()\n    get belowTrigger(): boolean {\n        return this.options.belowTrigger;\n    }\n    set belowTrigger(val: boolean) {\n        this.options.belowTrigger = coerceToBoolean(val);\n    }\n\n    /**\n     * If true, the dropdown will not close when clicked, but may only be closed by clicking outside the dropdown or\n     * pressing escape. *Default: false*\n     */\n    @Input()\n    get sticky(): boolean {\n        return this.options.sticky;\n    }\n    set sticky(val: boolean) {\n        this.options.sticky = coerceToBoolean(val);\n    }\n\n    /**\n     * If true, the dropdown will close when the escape key is pressed. *Default: true*\n     */\n    @Input()\n    get closeOnEscape(): boolean {\n        return this.options.closeOnEscape;\n    }\n    set closeOnEscape(val: boolean) {\n        this.options.closeOnEscape = coerceToBoolean(val);\n    }\n\n    /**\n     * If true, the dropdown will not open when the trigger is clicked.\n     */\n    @Input()\n    get disabled(): boolean {\n        return this._disabled;\n    }\n    set disabled(val: boolean) {\n        this._disabled = coerceToBoolean(val);\n    }\n\n    get isOpen(): boolean {\n        return !!this.contentComponentRef;\n    }\n\n    constructor(overlayHostService: OverlayHostService) {\n        overlayHostService.getHostView().then(view => this.overlayHostView = view);\n    }\n\n    /**\n     * Remove the content wrapper from the body.\n     */\n    ngOnDestroy(): void {\n        this.closeDropdown();\n    }\n\n    /**\n     * Prevent the user from causing a scroll via the keyboard.\n     */\n    @HostListener('keydown', ['$event'])\n    keyHandler(e: KeyboardEvent): void {\n        const keyCode = e.keyCode;\n        const toPrevent = [\n            KeyCode.UpArrow,\n            KeyCode.DownArrow,\n            KeyCode.PageUp,\n            KeyCode.PageDown,\n            KeyCode.Space,\n            KeyCode.Home,\n            KeyCode.End\n        ];\n\n        if (-1 < toPrevent.indexOf(keyCode)) {\n            e.preventDefault();\n        }\n\n        switch (keyCode) {\n            case KeyCode.Escape:\n                if (this.options.closeOnEscape === true) {\n                    this.closeDropdown();\n                }\n                break;\n            case KeyCode.Tab:\n                if (this.isOpen) {\n                    e.preventDefault();\n                    this.content.focusFirstItem();\n                }\n        }\n    }\n\n    /**\n     * Open the dropdown contents in the correct position.\n     */\n    openDropdown(): void {\n        if (this._disabled) {\n            return;\n        }\n        this.contentComponentRef = this.overlayHostView.createComponent(DropdownContentWrapper, null);\n        const contentInstance = this.contentComponentRef.instance;\n        contentInstance.content = this.contentsTemplate;\n        contentInstance.trigger = this.trigger.elementRef.nativeElement;\n        Object.assign(contentInstance.options, this.options);\n        contentInstance.clicked.pipe(take(1)).subscribe(() => {\n            if (!this.sticky) {\n                this.closeDropdown();\n            }\n        });\n        contentInstance.escapeKeyPressed.pipe(take(1)).subscribe(() => {\n            if (this.closeOnEscape) {\n                this.closeDropdown();\n            }\n        });\n        // When focus is lost from the list items (by tabbing), close the dropdown and focus the\n        // first child of the trigger is possible.\n        this.content.focusLost.pipe(take(1)).subscribe(() => {\n            this.closeDropdown();\n            this.trigger.focus();\n        });\n\n        this.scrollMaskRef = this.overlayHostView.createComponent(ScrollMask, null);\n        this.scrollMaskRef.instance.clicked.pipe(take(1)).subscribe(() => this.closeDropdown());\n        this.open.emit();\n    }\n\n    resize(): void {\n        if (this.contentComponentRef) {\n            this.contentComponentRef.instance.setPositionAndSize();\n        }\n    }\n\n    onTriggerClick(): void {\n        if (!this.isOpen) {\n            this.openDropdown();\n        } else {\n            this.closeDropdown();\n        }\n    }\n\n    /**\n     * Close the dropdown.\n     */\n    closeDropdown(): void {\n        if (this.scrollMaskRef) {\n            this.scrollMaskRef.destroy();\n        }\n        if (this.contentComponentRef) {\n            this.contentComponentRef.destroy();\n            this.contentComponentRef = null;\n        }\n        this.close.emit();\n    }\n}\n","<div (click)=\"onTriggerClick()\"><ng-content select=\"gtx-dropdown-trigger\"></ng-content></div>\n<ng-template>\n    <ng-content select=\"gtx-dropdown-content\"></ng-content>\n</ng-template>\n","import {Input, Directive, ElementRef, ContentChildren, QueryList} from '@angular/core';\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\n\n@Directive({\n    selector: 'gtx-option'\n})\nexport class SelectOption {\n    @Input() icon: string;\n\n    private _value: any;\n    private _disabled: any;\n\n    constructor(public elementRef: ElementRef) {}\n\n    @Input()\n    set value(value: any) {\n        this._value = value;\n    }\n    get value(): any {\n        return this._value;\n    }\n\n    @Input()\n    set disabled(value: boolean) {\n        this._disabled = coerceToBoolean(value);\n    }\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /**\n     * Returns the value of the option as displayed in the view, i.e. a string representation.\n     */\n    get viewValue(): string {\n        const textContent = this.elementRef.nativeElement.textContent.trim();\n        if (textContent) {\n            return textContent;\n        }\n        if (!this.isPrimitive(this.value)) {\n            return '[Object]';\n        }\n        return this.value.toString();\n    }\n\n    private isPrimitive(value: any): boolean {\n        return value !== null && (typeof value !== 'function' && typeof value !== 'object');\n    }\n}\n\n@Directive({\n    selector: 'gtx-optgroup'\n})\nexport class SelectOptionGroup {\n    @Input() label: string;\n\n    @Input()\n    set disabled(value: boolean) {\n        this._disabled = coerceToBoolean(value);\n    }\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    private _disabled: any;\n\n    @ContentChildren(SelectOption) private _options: QueryList<SelectOption>;\n\n    get options(): SelectOption[] {\n        return this._options.toArray();\n    }\n}\n","import {\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Input,\n    Output,\n    QueryList,\n    ViewChild\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subscription} from 'rxjs';\n\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\nimport {KeyCode} from '../../common/keycodes';\nimport {DropdownContent} from '../dropdown-list/dropdown-content.component';\nimport {DropdownList} from '../dropdown-list/dropdown-list.component';\nimport {SelectOption, SelectOptionGroup} from './option.component';\n\nconst GTX_SELECT_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Select),\n    multi: true\n};\n\nexport interface NormalizedOptionGroup {\n    options: SelectOption[];\n    label: string;\n    disabled: boolean;\n    isDefaultGroup: boolean;\n}\n\nexport type SelectedSelectOption = [number, number];\n\n/**\n * A Select form control which works with any kind of value - as opposed to the native HTML `<select>` which only works\n * with strings. The Select control depends on the [`<gtx-overlay-host>`](#/overlay-host) being present in the app.\n *\n * ```html\n * <gtx-select label=\"Choose an option\" [(ngModel)]=\"selectVal\">\n *     <gtx-option *ngFor=\"let item of options\"\n *                 [value]=\"item\"\n *                 [disabled]=\"item.disabled\">{{ item.label }}</gtx-option>\n * </gtx-select>\n * ```\n *\n */\n@Component({\n    selector: 'gtx-select',\n    templateUrl: './select.tpl.html',\n    providers: [GTX_SELECT_VALUE_ACCESSOR]\n})\nexport class Select implements ControlValueAccessor {\n    /**\n     * Sets the select box to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /** If true the clear button is displayed, which allows the user to clear the selection. */\n    @Input()\n    get clearable(): boolean {\n        return this._clearable;\n    }\n    set clearable(val: boolean) {\n        this._clearable = coerceToBoolean(val);\n    }\n\n    /**\n     * Sets the disabled state.\n     */\n    @Input()\n    get disabled(): boolean {\n        return this._disabled;\n    }\n    set disabled(value: boolean) {\n        this._disabled = coerceToBoolean(value);\n    }\n\n    /**\n     * When set to true, allows multiple options to be selected. In this case, the input value should be\n     * an array of strings; events will emit an array of strings.\n     */\n    @Input() multiple: boolean = false;\n\n    /**\n     * Sets the required state.\n     */\n    @Input() required: boolean = false;\n\n    /**\n     * The value determines which of the options are selected.\n     */\n    @Input() value: any;\n\n    /**\n     * Placeholder which is shown if nothing is selected.\n     */\n    @Input() placeholder: string = '';\n\n    /**\n     * A text label for the input.\n     */\n    @Input() label: string;\n\n    /**\n     * Blur event.\n     */\n    @Output() blur = new EventEmitter<any>();\n    /**\n     * Focus event.\n     */\n    @Output() focus = new EventEmitter<any>();\n    /**\n     * Change event.\n     */\n    @Output() change = new EventEmitter<any>();\n\n    // An array of abstracted containers for options, which allows us to treat options and groups in a\n    // consistent way.\n    optionGroups: NormalizedOptionGroup[] = [];\n\n    subscriptions: Subscription[] = [];\n    selectedOptions: SelectOption[] = [];\n    viewValue: string = '';\n\n    // Keeps track of the selected option. Two dimensional because options may be nested inside groups. The first\n    // value is the index of the group (-1 is the default \"no group\" group), and the second number is the index\n    // of the option within that group.\n    selectedIndex: SelectedSelectOption = [0, -1];\n\n    _clearable: boolean = false;\n    _disabled: boolean = false;\n    private preventDeselect: boolean = false;\n    @ViewChild(DropdownList, { static: true }) private dropdownList: DropdownList;\n    @ViewChild(DropdownContent, { static: true }) private dropdownContent: DropdownContent;\n    @ContentChildren(SelectOption, { descendants: false }) private _selectOptions: QueryList<SelectOption>;\n    @ContentChildren(SelectOptionGroup, { descendants: false }) private _selectOptionGroups: QueryList<SelectOptionGroup>;\n\n    // ValueAccessor members\n    onChange = (): void => { };\n    onTouched = (): void => { };\n\n    constructor(private changeDetector: ChangeDetectorRef,\n                private elementRef: ElementRef) { }\n\n    ngAfterViewInit(): void {\n        // Update the value if there are any changes to the options\n        this.subscriptions.push(\n            this._selectOptions.changes.subscribe(() => {\n                this.writeValue(this.value);\n                this.optionGroups = this.buildOptionGroups();\n                this.selectedOptions = this.getInitiallySelectedOptions();\n            })\n        );\n\n        this.elementRef.nativeElement.querySelector('gtx-dropdown-list')\n                                .addEventListener('keydown', this.handleKeydown.bind(this));\n    }\n\n    ngAfterContentInit(): void {\n        this.optionGroups = this.buildOptionGroups();\n        this.selectedOptions = this.getInitiallySelectedOptions();\n        this.updateViewValue();\n    }\n\n    ngOnDestroy(): void {\n        this.subscriptions.forEach(s => s.unsubscribe());\n    }\n\n    /**\n     * Event handler for when one of the Materialize-generated LI elements is clicked.\n     */\n    selectItem(groupIndex: number, optionIndex: number): void {\n        const option = this.optionGroups[groupIndex] && this.optionGroups[groupIndex].options[optionIndex];\n        if (!this.optionGroups[groupIndex].disabled && option && !option.disabled) {\n            this.toggleSelectedOption(option);\n            const selectedValues = this.selectedOptions.map(o => o.value);\n            this.value = this.multiple ? selectedValues : selectedValues[0];\n            this.onChange();\n            this.change.emit(this.value);\n            this.updateViewValue();\n            this.scrollToSelectedOption();\n        }\n    }\n\n    inputBlur(e: Event): void {\n        e.stopPropagation();\n        this.onTouched();\n        this.blur.emit(this.value);\n    }\n\n    /**\n     * Select the initial value when the dropdown is opened.\n     */\n    dropdownOpened(): void {\n        if (0 < this.selectedOptions.length) {\n            this.preventDeselect = true;\n            const selected = this.selectedOptions[0];\n            this.selectedIndex = this.getIndexFromSelectOption(selected);\n            setTimeout(() => {\n                this.scrollToSelectedOption();\n                this.preventDeselect = false;\n            }, 100);\n        }\n    }\n\n    /**\n     * Handle keydown events to enable keyboard navigation and selection of options.\n     */\n    handleKeydown(event: KeyboardEvent): void {\n        if (event.ctrlKey || event.altKey || event.metaKey) {\n            return;\n        }\n\n        const keyCode = event.keyCode;\n\n        switch (keyCode) {\n            case KeyCode.UpArrow:\n                this.updateSelectedIndex(this.getPreviousIndex(this.selectedIndex));\n                break;\n            case KeyCode.DownArrow:\n                this.updateSelectedIndex(this.getNextIndex(this.selectedIndex));\n                break;\n            case KeyCode.PageUp:\n            case KeyCode.Home:\n                this.updateSelectedIndex(this.getFirstIndex());\n                break;\n            case KeyCode.PageDown:\n            case KeyCode.End:\n                this.updateSelectedIndex(this.getLastIndex());\n                break;\n            case KeyCode.Enter:\n            case KeyCode.Space:\n                if (!this.dropdownList.isOpen) {\n                    this.dropdownList.openDropdown();\n                } else {\n                    this.selectItem(this.selectedIndex[0], this.selectedIndex[1]);\n                    if (!this.multiple) {\n                        this.dropdownList.closeDropdown();\n                    }\n                }\n                break;\n            default:\n                // Other keys are treated as if the user is trying to jump to an option by character\n                const indexOfMatch = this.searchByKey(event.key);\n                if (indexOfMatch) {\n                    this.updateSelectedIndex(indexOfMatch);\n                }\n\n        }\n    }\n\n    isSelected(option: SelectOption): boolean {\n        return -1 < this.selectedOptions.indexOf(option);\n    }\n\n    deselect(): void {\n        if (!this.preventDeselect) {\n            this.selectedIndex = [0, -1];\n        }\n    }\n\n    // ValueAccessor members\n    writeValue(value: string|string[]): void {\n        this.value = value;\n\n        if (this._selectOptions) {\n            // select any options matching the initial value\n            this.selectedOptions = [];\n            const optionsArray = this._selectOptions.toArray();\n\n            if (this.multiple && this.value instanceof Array) {\n                optionsArray.forEach(o => {\n                    if (-1 < this.value.indexOf(o.value)) {\n                        this.selectedOptions.push(o);\n                    }\n                });\n            } else {\n                this.selectedOptions = optionsArray.filter(o => this.value === o.value);\n            }\n            this.updateViewValue();\n        }\n    }\n\n    registerOnChange(fn: (newValue: any) => any): void {\n        this.onChange = () => {\n            fn(this.value);\n        };\n    }\n\n    registerOnTouched(fn: () => any): void {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this._disabled = isDisabled;\n        this.changeDetector.markForCheck();\n    }\n\n    /** Clears the selected value and emits `null` with the `change` event. */\n    clearSelection(): void {\n        this.selectedOptions = [];\n        this.value = null;\n\n        this.change.emit(this.value);\n        this.onChange();\n        this.updateViewValue();\n    }\n\n    /**\n     * Given a SelectOption, returns the position in the 2D selectedIndex array.\n     */\n    private getIndexFromSelectOption(selected: SelectOption): SelectedSelectOption {\n        if (selected) {\n            let selectedGroup = 0;\n            let selectedOption = 0;\n            for (let i = 0; i < this.optionGroups.length; i++) {\n                const group = this.optionGroups[i];\n                selectedGroup = i;\n                for (let j = 0; j < group.options.length; j++) {\n                    const option = group.options[j];\n                    selectedOption = j;\n                    if (option === selected) {\n                        return [selectedGroup, selectedOption];\n                    }\n                }\n            }\n        } else {\n            return [0, 0];\n        }\n    }\n\n    /**\n     * Once the contents have been compiled, we can build up the optionGroups array, grouping options into\n     * a \"default\" group, i.e. the group of options which are not children of a <gtx-optgroup>, and then any\n     * other groups as specified by optgroups.\n     */\n    private buildOptionGroups(): NormalizedOptionGroup[] {\n        const groups = this._selectOptionGroups.map(g => {\n            return {\n                get options(): SelectOption[] { return g.options; },\n                get label(): string { return g.label; },\n                get disabled(): boolean { return g.disabled; },\n                isDefaultGroup: false\n            };\n        });\n\n        if (this._selectOptions.length) {\n            groups.unshift({\n                options: this._selectOptions.toArray(),\n                label: '',\n                isDefaultGroup: true,\n                disabled: false\n            });\n        }\n        return groups;\n    }\n\n    /**\n     * Select any options which match the value passed in via the `value` attribute.\n     */\n    private getInitiallySelectedOptions(): SelectOption[] {\n        let selectedOptions: SelectOption[] = [];\n        const flatOptionsList = this.optionGroups.reduce(\n            (options, group) => options.concat(group.options), []);\n\n        if (this.value !== undefined) {\n            if (this.multiple) {\n                if (this.value instanceof Array) {\n                    selectedOptions = flatOptionsList.filter(o => -1 < this.value.indexOf(o.value));\n                }\n            } else {\n                selectedOptions = flatOptionsList.filter(o => this.value === o.value) || [];\n                return flatOptionsList.filter(o => this.value === o.value) || [];\n            }\n        }\n        return selectedOptions;\n    }\n\n    /**\n     * Toggle the selection of the given SelectOption, taking into account whether this is a multiple\n     * select.\n     */\n    private toggleSelectedOption(option: SelectOption): void {\n        if (!this.multiple) {\n            this.selectedOptions = [];\n        }\n        let index = this.selectedOptions.indexOf(option);\n        if (-1 < index) {\n            // de-select the existing option\n            this.selectedOptions.splice(index, 1);\n        } else {\n            this.selectedOptions.push(option);\n        }\n    }\n\n    private updateViewValue(): void {\n        this.viewValue = this.selectedOptions.map(o => o.viewValue).join(', ');\n        this.changeDetector.markForCheck();\n    }\n\n    /**\n     * When a list of options is too long, there will be a scroll bar. This method ensures that the currently-selected\n     * options is scrolled into view in the options list.\n     */\n    private scrollToSelectedOption(): void {\n        setTimeout(() => {\n            const container = this.dropdownContent.elementRef.nativeElement;\n            const selectedItem = container.querySelector('li.selected');\n            if (selectedItem) {\n                const belowContainer = container.offsetHeight + container.scrollTop < selectedItem.offsetTop + selectedItem.offsetHeight;\n                const aboveContainer = selectedItem.offsetTop < container.scrollTop;\n\n                if (belowContainer) {\n                    container.scrollTop = selectedItem.offsetTop + selectedItem.offsetHeight - container.offsetHeight;\n                }\n                if (aboveContainer) {\n                    container.scrollTop = selectedItem.offsetTop;\n                }\n            }\n        });\n    }\n\n    /**\n     * Searches through the available options and locates the next option with a viewValue whose first character\n     * matches the character passed in. Useful for jumping to options quickly by typing the first letter of the\n     * option view value.\n     */\n    private searchByKey(key: string): SelectedSelectOption {\n        const keyUpperCase = key.toLocaleUpperCase();\n        const totalOptionCount = this.optionGroups.reduce((total, group) => total + group.options.length, 0);\n        let currentIndex = this.selectedIndex.slice() as SelectedSelectOption;\n\n        for (let counter = 0; counter < totalOptionCount; counter++) {\n            currentIndex = this.getNextIndex(currentIndex);\n            const option = this.optionGroups[currentIndex[0]].options[currentIndex[1]];\n            const firstLetterUppercase = option.viewValue.charAt(0).toLocaleUpperCase();\n\n            if (firstLetterUppercase === keyUpperCase) {\n                return currentIndex;\n            }\n        }\n    }\n\n    private getFirstIndex(): SelectedSelectOption {\n        return [0, 0];\n    }\n\n    private getLastIndex(): SelectedSelectOption {\n        const lastGroupIndex = this.optionGroups.length - 1;\n        return [lastGroupIndex, this.optionGroups[lastGroupIndex].options.length - 1];\n    }\n\n    private getNextIndex(currentIndex: SelectedSelectOption): SelectedSelectOption {\n        let nextIndex = currentIndex.slice() as SelectedSelectOption;\n        const isLastGroup = currentIndex[0] === this.optionGroups.length - 1;\n        const isLastOptionInGroup = currentIndex[1] === this.optionGroups[currentIndex[0]].options.length - 1;\n        if (isLastOptionInGroup) {\n            if (isLastGroup) {\n                nextIndex = this.getFirstIndex();\n            } else {\n                nextIndex[0] ++;\n                nextIndex[1] = 0;\n            }\n        } else {\n            nextIndex[1]++;\n        }\n        return nextIndex;\n    }\n\n    private getPreviousIndex(currentIndex: SelectedSelectOption): SelectedSelectOption {\n        let nextIndex = currentIndex.slice() as SelectedSelectOption;\n        if (currentIndex[0] <= 0) {\n            if (0 < currentIndex[1]) {\n                nextIndex[1] --;\n            } else {\n                nextIndex = this.getLastIndex();\n            }\n        } else {\n            if (0 < currentIndex[1]) {\n                nextIndex[1] --;\n            } else {\n                nextIndex[0] --;\n                nextIndex[1] = this.optionGroups[currentIndex[0]].options.length - 1;\n            }\n        }\n        return nextIndex;\n    }\n\n    /**\n     * Sets the `selectedOptions` array to contain the single option at the selectedIndex.\n     */\n    private updateSelectedIndex(index: SelectedSelectOption): void {\n        this.selectedIndex = index;\n        const options = this.optionGroups[index[0]].options;\n\n        if (options && 0 <= index[1] && index[1] < options.length) {\n            if (!this.multiple) {\n                this.selectItem(index[0], index[1]);\n            } else {\n                this.scrollToSelectedOption();\n            }\n        }\n    }\n}\n","<gtx-dropdown-list width=\"expand\"\n                   belowTrigger=\"false\"\n                   [sticky]=\"multiple\"\n                   [disabled]=\"disabled\"\n                   (open)=\"dropdownOpened()\"\n                   [class.clearable]=\"_clearable\">\n\n    <gtx-dropdown-trigger [class.with-label]=\"label != null\">\n        <div class=\"view-value select-input\"\n             [attr.tabindex]=\"disabled ? null : 0\"\n             [attr.disabled]=\"disabled ? true : null\"\n             (blur)=\"inputBlur($event)\"\n             #viewValueContainer>\n            <div *ngIf=\"selectedOptions.length > 0\">{{ viewValue }}</div>\n            <div class=\"placeholder\" *ngIf=\"placeholder && selectedOptions.length == 0\">{{ placeholder }}</div>\n            <div *ngIf=\"!placeholder && selectedOptions.length == 0\"></div>\n            <icon>arrow_drop_down</icon>\n        </div><label *ngIf=\"label != null\" (click)=\"viewValueContainer.focus()\">{{ label }}</label>\n    </gtx-dropdown-trigger>\n\n    <gtx-dropdown-content (keydown)=\"handleKeydown($event)\">\n         <ul class=\"select-options\"\n             (click)=\"viewValueContainer.focus()\"\n             (mouseover)=\"deselect()\">\n             <ng-template ngFor [ngForOf]=\"optionGroups\" let-group let-groupIndex=\"index\">\n                 <li *ngIf=\"!group.isDefaultGroup\"\n                     class=\"group-label\">{{ group.label }}</li>\n                 <li *ngFor=\"let option of group.options; let optionIndex = index\"\n                     [class.disabled]=\"group.disabled || option.disabled\"\n                     [class.selected]=\"selectedIndex[0] === groupIndex && selectedIndex[1] === optionIndex\"\n                     class=\"select-option\"\n                     (click)=\"selectItem(groupIndex, optionIndex)\">\n                     <gtx-checkbox *ngIf=\"multiple\"\n                                   [checked]=\"isSelected(option)\"\n                                   (change)=\"selectItem(groupIndex, optionIndex)\"></gtx-checkbox>\n                     <icon *ngIf=\"option.icon\" class=\"material-icons\">{{option.icon}}</icon>\n                     {{ option.viewValue }}\n                 </li>\n             </ng-template>\n         </ul>\n    </gtx-dropdown-content>\n\n</gtx-dropdown-list>\n\n<gtx-button icon\n        class=\"clear-button\"\n        *ngIf=\"_clearable\"\n        type=\"secondary\"\n        [disabled]=\"_disabled\"\n        (click)=\"!_disabled && clearSelection()\">\n        <icon>clear</icon>\n</gtx-button>\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostListener,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    Renderer2,\n    SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nconst GTX_INPUT_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => InputField),\n    multi: true\n};\n\n/**\n * E-mail validator regex from Angular 8\n * @todo Implement with validators\n * @see https://github.com/angular/angular/blob/8.2.9/packages/forms/src/validators.ts#L60\n */\nconst EMAIL_REGEXP =\n    \"^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$\";\n\n/**\n * Telephone number validator regex\n * @todo Implement with validators\n * @see https://stackoverflow.com/a/26516985\n */\nconst TEL_REGEXP = \"^([()\\\\- x+]*\\d[()\\\\- x+]*){4,16}$\";\n\n/**\n * URL validator regex\n * @todo Implement with validators\n * @see https://stackoverflow.com/a/52017332\n */\nconst URL_REGEXP = \"(^|\\\\s)((https?:\\\\/\\\\/)?[\\\\w-]+(\\\\.[\\\\w-]+)+\\\\.?(:\\\\d+)?(\\\\/\\\\S*)?)\";\n\nconst ACTIVE_CLASS = 'active';\n\n/**\n * The InputField wraps the native `<input>` form element but should only be used for\n * text, number, password, tel, email or url types. Other types (date, range, file) should have dedicated components.\n *\n *\n * Note that the class is named `InputField` since `Input` is used by the Angular framework to denote\n * component inputs.\n *\n * ```html\n * <gtx-input label=\"Text Input Label\"></gtx-input>\n * <gtx-input placeholder=\"Number Input Placeholder\"\n *            type=\"number\" min=\"0\" max=\"100\" step=\"5\"></gtx-input>\n * ```\n */\n@Component({\n    selector: 'gtx-input',\n    templateUrl: './input.tpl.html',\n    providers: [GTX_INPUT_VALUE_ACCESSOR]\n})\nexport class InputField implements AfterViewInit, ControlValueAccessor, OnInit, OnChanges {\n    /**\n     * Sets autocomplete attribute on the input field\n     */\n    @Input() autocomplete: string;\n    /**\n     * Sets the input field to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Sets the disabled state\n     */\n    @Input() disabled: boolean = false;\n\n    /**\n     * Input field id\n     */\n    @Input() id: string;\n\n    /**\n     * A label for the input\n     */\n    @Input() label: string = '';\n\n    /**\n     * Max allowed value (applies when type = \"number\")\n     */\n    @Input() max: number;\n\n    /**\n     * Min allowed value (applies when type = \"number\")\n     */\n    @Input() min: number;\n\n    /**\n     * Max allowed length in characters\n     */\n    @Input() maxlength: number;\n\n    /**\n     * Input field name\n     */\n    @Input() name: string;\n\n    /**\n     * Regex pattern for complex validation\n     */\n    @Input() pattern: string;\n\n    /**\n     * Placeholder text to display when the field is empty\n     */\n    @Input() placeholder: string;\n\n    /**\n     * Sets the readonly state of the input\n     */\n    @Input() readonly: boolean = false;\n\n    /**\n     * Sets the required state of the input\n     */\n    @Input() required: boolean = false;\n\n    /**\n     * Increment step (applies when type = \"number\")\n     */\n    @Input() step: number;\n\n    /**\n     * Can be \"text\", \"number\", \"password\", \"tel\", \"email\" or \"url\".\n     */\n    @Input() type: 'text' | 'number' | 'password' | 'tel' | 'email' | 'url' = 'text';\n\n    /**\n     * Sets the value of the input.\n     */\n    @Input() value: string|number = '';\n\n    /**\n     * Fires when the input loses focus.\n     */\n    @Output() blur = new EventEmitter<string|number>();\n\n    /**\n     * Fires when the input gains focus.\n     */\n    @Output() focus = new EventEmitter<string|number>();\n\n    /**\n     * Fires whenever a char is entered into the field.\n     */\n    @Output() change = new EventEmitter<string|number>();\n\n    @ViewChild('inputElement', { static: true }) private inputElement: ElementRef;\n    @ViewChild('labelElement', { static: true }) private labelElement: ElementRef;\n\n    private currentValue: string | number;\n\n    constructor(private renderer: Renderer2,\n                private changeDetector: ChangeDetectorRef) { }\n\n\n    ngOnInit(): void {\n        /**\n         * Set default regex patterns for specific field types if not set\n         */\n        if (!this.pattern) {\n            switch (this.type) {\n                case 'email':\n                    this.pattern = EMAIL_REGEXP;\n                    break;\n                case 'tel':\n                    this.pattern = TEL_REGEXP;\n                    break;\n                case 'url':\n                    this.pattern = URL_REGEXP;\n                    break;\n                default:\n            }\n        }\n    }\n\n    /**\n     * The Materialize input includes a dynamic label that changes position depending on the state of the input.\n     * When the label has the \"active\" class, it moves above the input, otherwise it resides inside the input\n     * itself.\n     *\n     * The Materialize \"forms.js\" script normally takes care of adding/removing the active class on page load,\n     * but this does not work in a SPA setting where new views with inputs can be created without a page load\n     * event to trigger the `Materialize.updateTextFields()` method. Therefore we need to handle it ourselves\n     * when the input component is created.\n     */\n    ngAfterViewInit(): void {\n        const input: HTMLInputElement = this.inputElement.nativeElement;\n        const label: HTMLLabelElement = this.labelElement.nativeElement;\n\n        if (input && label) {\n            if (String(this.value).length > 0 || this.placeholder) {\n                this.renderer.addClass(label, ACTIVE_CLASS);\n            } else {\n                this.renderer.removeClass(label, ACTIVE_CLASS);\n            }\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const valueChange = changes['value'];\n        if (valueChange) {\n            this.writeValue(valueChange.currentValue);\n        }\n    }\n\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event) {\n        if (this.type === 'number') {\n            const keyboardEvent = event as KeyboardEvent;\n            if ((keyboardEvent.key === '-' && event.target.value) || keyboardEvent.key === '+') {\n                keyboardEvent.preventDefault();\n            } else if (keyboardEvent.key === '-' && !event.target.value) {\n                event.target.value = '-';\n            }\n        }\n    }\n\n    onBlur(e: Event): void {\n        e.stopPropagation();\n        const target = e.target as HTMLInputElement;\n        this.blur.emit(this.normalizeValue(target.value));\n        this.onTouched();\n    }\n\n    onFocus(e: Event): void {\n        const target = e.target as HTMLInputElement;\n        this.focus.emit(this.normalizeValue(target.value));\n    }\n\n    onInput(e: Event): void {\n        const target = e.target as HTMLInputElement;\n        this.updateValue(target);\n        const value = this.currentValue = this.normalizeValue(target.value);\n        this.onChange(value);\n        this.change.emit(value);\n    }\n\n    writeValue(valueToWrite: any): void {\n        const value = this.normalizeValue(valueToWrite);\n        if (value !== this.currentValue) {\n            this.renderer.setProperty(this.inputElement.nativeElement, 'value', this.currentValue = value);\n        }\n    }\n\n    // ValueAccessor members\n    registerOnChange(fn: (newValue: string | number) => void): void {\n        this.onChange = fn;\n    }\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.changeDetector.markForCheck();\n    }\n    private onChange = (newValue: string | number): void => {};\n    private onTouched = (): void => {};\n\n    private normalizeValue(val: any): string|number {\n        if (this.type === 'number') {\n            return val == null ? 0 : Number(val);\n        } else {\n            return val == null ? '' : String(val);\n        }\n    }\n\n    private updateValue(target: HTMLInputElement): void {\n        if (this.type === 'number') {\n            if (this.max && Number(target.value) > this.max) {\n                target.value = String(this.max);\n            } else if (this.min && Number(target.value) < this.min) {\n                target.value = String(this.min);\n            }\n        }\n    }\n}\n","<input\n    [attr.autocomplete]=\"autocomplete || null\"\n    [attr.id]=\"id\"\n    [attr.max]=\"max\"\n    [attr.maxlength]=\"maxlength\"\n    [attr.min]=\"min\"\n    [attr.name]=\"name\"\n    [attr.pattern]=\"pattern\"\n    [attr.placeholder]=\"placeholder\"\n    [attr.step]=\"step\"\n\n    [disabled]=\"disabled\"\n    [readonly]=\"readonly\"\n    [required]=\"required\"\n    [type]=\"type\"\n\n    (blur)=\"onBlur($event)\"\n    (change)=\"onBlur($event)\"\n    (focus)=\"onFocus($event)\"\n    (input)=\"onInput($event)\"\n\n    #inputElement\n><label [attr.for]=\"id\" (click)=\"inputElement.focus()\" #labelElement>{{ label }}</label>\n","import {\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnDestroy,\n    Optional,\n    Output,\n    SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport {NEVER, of as observableOf, Subscription} from 'rxjs';\nimport {concat} from 'rxjs/operators';\n\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\nimport {defaultStrings} from './date-time-picker-default-strings';\nimport {DateTimePickerFormatProvider} from './date-time-picker-format-provider.service';\nimport {DateTimePickerStrings} from './date-time-picker-strings';\nimport {momentjs, Moment} from '../../common/momentjs.import';\nimport {rome} from '../../common/rome.import'; \n\n// http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.1\nconst MAX_DATE_MILLISECONDS = 8640000000000000;\n\nexport type TimeUnit = 'hours' | 'minutes' | 'seconds';\n\n/**\n * The controls (calendar view, year & time inputs) powering the `DateTimePicker` component. Can be used as a stand-alone component.\n */\n@Component({\n    selector: 'gtx-date-time-picker-controls',\n    templateUrl: './date-time-picker-controls.tpl.html'\n})\nexport class DateTimePickerControls implements OnDestroy {\n\n    private static momentLocales: [DateTimePickerStrings, string][] = [[defaultStrings, 'en']];\n\n    /**\n     * The date/time value as a unix timestamp (in seconds)\n     */\n    @Input() timestamp: number;\n\n    /**\n     * Set to overwrite texts and date formatting in the modal.\n     */\n    @Input() formatProvider: DateTimePickerFormatProvider;\n\n    /**\n     * The minimum date allowable. E.g. `new Date(2015, 2, 12)`\n     */\n    @Input() min: Date;\n\n    /**\n     * The maximum date allowable. E.g. `new Date(2031, 1, 30)`\n     */\n    @Input() max: Date;\n\n    /**\n     * If true, the year may be selected from a Select control\n     */\n    @Input() set selectYear(val: any) {\n        this._selectYear = coerceToBoolean(val);\n    }\n    get selectYear(): any { return this._selectYear; }\n\n    /**\n     * Set to `true` to disable the input field and not show the date picker on click.\n     */\n    @Input() set disabled(val: any) {\n        this._disabled = coerceToBoolean(val);\n    }\n    get disabled(): any { return this._disabled; }\n\n    /**\n     * Set to `false` to omit the time picker part of the component. Defaults to `true`\n     */\n    @Input() set displayTime(val: any) {\n        this._displayTime = coerceToBoolean(val);\n    }\n    get displayTime(): any { return this._displayTime; }\n\n    /**\n     * Set to `false` to omit the seconds of the time picker part. Defaults to `true`\n     */\n    @Input() set displaySeconds(val: any) {\n        this._displaySeconds = coerceToBoolean(val);\n    }\n    get displaySeconds(): any { return this._displaySeconds; }\n\n    /**\n     * When `true`, the controls use the \"compact\" (small screen) styling for all screen sizes. Defaults to `false`\n     */\n    @Input() set compact(val: any) {\n        this._compact = coerceToBoolean(val);\n    }\n    get compact(): any { return this._compact; }\n\n    /**\n     * Emits the unix timestamp of the current value on changes.\n     */\n    @Output() change = new EventEmitter<number>();\n\n    @ViewChild('calendarContainer', { static: true })\n    calendarContainer: ElementRef;\n\n    dateOrder: 'dmy' | 'ymd' | 'mdy' = 'mdy';\n\n    years: number[] = [];\n\n    _selectYear: boolean = false;\n    _disabled: boolean = false;\n    _displayTime: boolean = false;\n    _displaySeconds: boolean = false;\n    @HostBinding('class.compact')\n    _compact: boolean = false;\n\n    /** @internal */\n    value = momentjs();\n\n    /** @internal */\n    time: any = {\n        h: 0,\n        m: 0,\n        s: 0\n    };\n\n    /**\n     * cal is an instance of a Rome calendar, for the API see https://github.com/bevacqua/rome#rome-api\n     */\n    private cal: any;\n\n    private subscription: Subscription;\n\n    constructor(@Optional() private defaultFormatProvider: DateTimePickerFormatProvider) {}\n\n    ngOnInit(): void {\n        if (this.defaultFormatProvider == null) {\n            this.defaultFormatProvider = new DateTimePickerFormatProvider();\n        }\n        if (this.formatProvider == null) {\n            this.formatProvider = this.defaultFormatProvider;\n        }\n\n        this.value = momentjs.unix(Number(this.timestamp));\n        this.setupProviderChangeHook();\n\n        this.min = this.min instanceof Date ? this.min : new Date(-MAX_DATE_MILLISECONDS);\n        this.max = this.max instanceof Date ? this.max : new Date(MAX_DATE_MILLISECONDS);\n        // We don't want a date select which is stupidly long\n        const MAX_YEAR_RANGE = 500;\n\n        let minYear = this.min.getFullYear();\n        let maxYear = this.max.getFullYear();\n        const thisYear = new Date().getFullYear();\n        if (MAX_YEAR_RANGE < maxYear - minYear) {\n            minYear = thisYear - Math.floor(MAX_YEAR_RANGE / 2);\n            maxYear = thisYear + Math.floor(MAX_YEAR_RANGE / 2);\n        }\n\n        for (let year = minYear; year <= maxYear; year ++) {\n            this.years.push(year);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['timestamp']) {\n            this.value = momentjs.unix(Number(this.timestamp));\n            this.updateTimeObject(this.value);\n            if (this.cal) {\n                this.cal.setValue(this.value);\n            }\n        }\n        if (changes['min']) {\n            const currentValue = changes['min'].currentValue;\n            if (currentValue && !(changes['min'].currentValue instanceof Date)) {\n                throw new Error(`min must be a Date object. Got ${typeof changes['min'].currentValue}`);\n            }\n        }\n        if (changes['max']) {\n            const currentValue = changes['max'].currentValue;\n            if (currentValue && !(changes['max'].currentValue instanceof Date)) {\n                throw new Error(`max must be a Date object. Got ${typeof changes['max'].currentValue}`);\n            }\n        }\n        if (changes['formatProvider'] && !changes['formatProvider'].firstChange) {\n            this.setupProviderChangeHook();\n        }\n    }\n\n    /**\n     * Initialize the Rome widget instance.\n     */\n    ngAfterViewInit(): void {\n        let calendarEl: Element = this.calendarContainer.nativeElement;\n\n        this.cal = rome(calendarEl, this.getRomeConfig())\n            .on('data', () => {\n                this.value = this.cal.getMoment();\n                this.change.emit(this.value.unix());\n            });\n    }\n\n    ngOnDestroy(): void {\n        if (this.cal) {\n            this.cal.off('data');\n            this.cal.destroy();\n            this.cal = undefined;\n        }\n\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n    getRomeConfig() {\n        const romeConfig: any = {\n            appendTo: this.calendarContainer.nativeElement,\n            time: false,\n            initialValue: this.value\n        };\n        if (this.min) {\n            romeConfig.min = this.min;\n        }\n        if (this.max) {\n            romeConfig.max = this.max;\n        }\n        if (this.value != null) {\n            romeConfig.weekdayFormat = this.value.localeData().weekdaysMin();\n            romeConfig.weekStart = this.value.localeData().firstDayOfWeek();\n        }\n\n        return romeConfig;\n    }\n\n    setupProviderChangeHook() {\n        // Unsubscribe from the old subscription\n        if (this.subscription != null) {\n            this.subscription.unsubscribe();\n        }\n\n        // Update strings and date format when format provider emits a change\n        this.subscription = observableOf(1)\n            .pipe(concat(this.formatProvider.changed$ || NEVER))\n            .subscribe(() => {\n                this.value.locale(this.getMomentLocale());\n                this.updateTimeObject(this.value);\n                // When the locale changes, re-initialize the calendar to update the\n                // weekdays as these are only updated when initialized.\n                if (this.cal != null) {\n                    this.cal.options(this.getRomeConfig());\n                    this.cal.show();\n                }\n                this.determineDateOrder();\n            });\n    }\n\n    /**\n     * Update the this.value in accordance with the input of one of the\n     * time fields (h, m, s).\n     */\n    updateTime(unit: TimeUnit, value: number): void {\n        const newValue = this.updateByUnits(this.value.clone(), unit, value);\n        if (newValue.isBefore(this.min) || newValue.isAfter(this.max)) {\n            // the new year is out of the allowed range\n            return;\n        }\n\n        this.updateByUnits(this.value, unit, value);\n        this.updateTimeObject(this.value);\n        this.updateCalendar(this.value);\n    }\n\n    /**\n     * Handler for the incrementing the time values when up or down arrows are pressed.\n     */\n    timeKeyHandler(unit: TimeUnit, e: KeyboardEvent): void {\n        // UP arrow key\n        if (e.keyCode === 38) {\n            e.preventDefault();\n            this.incrementTime(unit);\n        }\n        // DOWN arrow key\n        if (e.keyCode === 40) {\n            e.preventDefault();\n            this.decrementTime(unit);\n        }\n    }\n\n    incrementTime(unit: TimeUnit): void {\n        this.addToTime(unit, 1);\n    }\n\n    decrementTime(unit: TimeUnit): void {\n        this.addToTime(unit, -1);\n    }\n\n    formatWith(formatString: string): string {\n        return this.value.format(formatString);\n    }\n\n    getUnixTimestamp(): number {\n        return this.value.unix();\n    }\n\n    setYear(year: number): void {\n        const newValue = this.value.clone().year(year);\n        if (newValue.isBefore(this.min) || newValue.isAfter(this.max)) {\n            // the new year is out of the allowed range\n            return;\n        }\n        this.value.year(year);\n        this.updateCalendar(this.value);\n    }\n\n    private updateByUnits(moment: Moment, unit: TimeUnit, value: number): Moment {\n        switch (unit) {\n            case 'hours':\n                moment.hour(value);\n                break;\n            case 'minutes':\n                moment.minute(value);\n                break;\n            case 'seconds':\n                moment.second(value);\n                break;\n            default:\n        }\n        return moment;\n    }\n\n    /**\n     * Create a momentjs locale from the (possibly localized) strings.\n     * @internal\n     */\n    private getMomentLocale(): string {\n        const localeStrings = this.formatProvider.strings;\n        const momentLocales = DateTimePickerControls.momentLocales;\n\n        for (let [strings, locale] of momentLocales) {\n            if (strings === localeStrings) {\n                return locale;\n            }\n        }\n\n        const newLocale = momentjs.locale('x-gtx-date-picker-' + momentLocales.length, {\n            months: localeStrings.months,\n            monthsShort: localeStrings.monthsShort ||\n            (localeStrings.months &&\n                localeStrings.months.map(month => month.substr(0, 3))),\n            weekdays: localeStrings.weekdays,\n            weekdaysMin: localeStrings.weekdaysMin ||\n            (localeStrings.weekdays &&\n                localeStrings.weekdays.map(weekday => weekday.substr(0, 2)))\n        });\n        momentLocales.push([localeStrings, newLocale]);\n        return newLocale;\n    }\n\n    private determineDateOrder(): void {\n        // Stringify 1999-08-22 with the dateProvider to determine the date order (D-M-Y, M-D-Y or Y-M-D).\n        const time: string = this.formatProvider.format(momentjs(935272800000), false, false);\n        const yearPos = time.indexOf('99');\n        const monthPos = time.indexOf('8');\n        const dayPos = time.indexOf('22');\n\n        if (dayPos < monthPos && monthPos < yearPos) {\n            this.dateOrder =  'dmy';\n        } else if (monthPos < dayPos) {\n            this.dateOrder =  'mdy';\n        } else {\n            this.dateOrder =  'ymd';\n        }\n    }\n\n    /**\n     * Increment or decrement the value and update the time object.\n     */\n    private addToTime(unit: TimeUnit, increment: number): void {\n        const newValue = this.value.clone().add(increment, unit);\n        if (newValue.isBefore(this.min) || newValue.isAfter(this.max)) {\n            // the new time is out of the allowed range\n            return;\n        }\n        this.value.add(increment, unit);\n        this.updateTimeObject(this.value);\n        this.updateCalendar(this.value);\n    }\n\n    /**\n     * Update the time object based on the value of this.value.\n     */\n    private updateTimeObject(date: Moment): void {\n        this.time.h = date.hour();\n        this.time.m = date.minute();\n        this.time.s = date.second();\n    }\n\n    /**\n     * Update the Rome calendar widget with the current value.\n     */\n    private updateCalendar(value: Moment): void {\n        if (this.cal) {\n            this.cal.setValue(value);\n            this.change.emit(value.unix());\n        }\n    }\n}\n","<div class=\"controls-header\">\n    <div class=\"day\">{{ formatWith('dddd') }}</div>\n    <div class=\"year\" *ngIf=\"!selectYear && dateOrder === 'ymd'\">{{ formatWith('YYYY') }}</div>\n    <div class=\"month\" *ngIf=\"dateOrder !== 'dmy'\">{{ formatWith('MMM') }}</div>\n    <div class=\"date\">{{ formatWith('D') }}</div>\n    <div class=\"month\" *ngIf=\"dateOrder === 'dmy'\">{{ formatWith('MMM') }}</div>\n    <div class=\"year\" *ngIf=\"!selectYear && dateOrder !== 'ymd'\">{{ formatWith('YYYY') }}</div>\n    <div *ngIf=\"selectYear\" class=\"year-selector\">\n        <gtx-select (change)=\"setYear($event)\" [ngModel]=\"value.year()\">\n            <gtx-option *ngFor=\"let year of years\" [value]=\"year\">{{ year }}</gtx-option>\n        </gtx-select>\n    </div>\n</div>\n<div class=\"controls-content\">\n    <div #calendarContainer class=\"calendar-container\"></div>\n    <div class=\"time-picker\" *ngIf=\"displayTime\">\n        <div class=\"row\">\n            <div class=\"column hours\" [ngClass]=\"displaySeconds ? 'small-4' : 'small-6'\">\n                <button class=\"increment-button\" (click)=\"incrementTime('hours')\"><i class=\"material-icons\">arrow_drop_up</i></button>\n                <gtx-input [(ngModel)]=\"time.h\"\n                            [label]=\"formatProvider.strings.hours\"\n                            (blur)=\"updateTime('hours', time.h)\"\n                            (keydown)=\"timeKeyHandler('hours', $event)\"\n                            type=\"number\"\n                            min=\"0\"\n                            max=\"23\"></gtx-input>\n                <button class=\"increment-button\" (click)=\"decrementTime('hours')\"><i class=\"material-icons\">arrow_drop_down</i></button>\n            </div>\n            <div class=\"column minutes\" [ngClass]=\"displaySeconds ? 'small-4' : 'small-6'\">\n                <button class=\"increment-button\" (click)=\"incrementTime('minutes')\"><i class=\"material-icons\">arrow_drop_up</i></button>\n                <gtx-input [(ngModel)]=\"time.m\"\n                            [label]=\"formatProvider.strings.minutes\"\n                            (blur)=\"updateTime('minutes', time.m)\"\n                            (keydown)=\"timeKeyHandler('minutes', $event)\"\n                            type=\"number\"\n                            min=\"0\"\n                            max=\"59\"></gtx-input>\n                <button class=\"increment-button\" (click)=\"decrementTime('minutes')\"><i class=\"material-icons\">arrow_drop_down</i></button>\n            </div>\n            <div class=\"column seconds small-4\" *ngIf=\"displaySeconds\">\n                <button class=\"increment-button\" (click)=\"incrementTime('seconds')\"><i class=\"material-icons\">arrow_drop_up</i></button>\n                <gtx-input [(ngModel)]=\"time.s\"\n                            [label]=\"formatProvider.strings.seconds\"\n                            (blur)=\"updateTime('seconds', time.s)\"\n                            (keydown)=\"timeKeyHandler('seconds', $event)\"\n                            type=\"number\"\n                            min=\"0\"\n                            max=\"59\"></gtx-input>\n                <button class=\"increment-button\" (click)=\"decrementTime('seconds')\"><i class=\"material-icons\">arrow_drop_down</i></button>\n            </div>\n        </div>\n    </div>\n</div>\n","import {Component, ElementRef, ViewChild} from '@angular/core';\n\nimport {IModalDialog} from '../modal/modal-interfaces';\nimport {DateTimePickerFormatProvider} from './date-time-picker-format-provider.service';\n\n/**\n * The modal powering the `DateTimePicker` component.\n */\n@Component({\n    selector: 'gtx-date-time-picker-modal',\n    templateUrl: './date-time-picker-modal.tpl.html'\n})\nexport class DateTimePickerModal implements IModalDialog {\n\n    /**\n     * The date/time value as a unix timestamp (in seconds)\n     */\n    timestamp: number;\n\n    /**\n     * Set to `false` to omit the time picker part of the component. Defaults to `true`\n     */\n    displayTime: boolean = true;\n\n    /**\n     * Set to `false` to omit the seconds of the time picker part. Defaults to `true`\n     */\n    displaySeconds: boolean = true;\n\n    /**\n     * Set to overwrite texts and date formatting in the modal.\n     */\n    formatProvider: DateTimePickerFormatProvider = new DateTimePickerFormatProvider();\n\n    min: Date;\n\n    max: Date;\n\n    selectYear: boolean;\n\n    @ViewChild('calendarContainer')\n    calendarContainer: ElementRef;\n\n    valueTimestamp: number;\n\n    closeFn(timestamp: number): void { }\n\n    cancelFn(val?: any): void { }\n\n    registerCloseFn(close: (timestamp: number) => void): void {\n        this.closeFn = close;\n    }\n\n    registerCancelFn(cancel: (val: any) => void): void {\n        this.cancelFn = cancel;\n    }\n\n    okayClicked(): void {\n        this.closeFn(this.valueTimestamp || this.timestamp);\n    }\n}\n","<gtx-date-time-picker-controls [timestamp]=\"timestamp\"\n                               [displayTime]=\"displayTime\"\n                               [displaySeconds]=\"displaySeconds\"\n                               [formatProvider]=\"formatProvider\"\n                               [min]=\"min\"\n                               [max]=\"max\"\n                               [selectYear]=\"selectYear\"\n                               (change)=\"valueTimestamp = $event\"></gtx-date-time-picker-controls>\n<div class=\"modal-footer\">\n    <gtx-button type=\"secondary\" flat (click)=\"cancelFn()\">{{ formatProvider.strings.cancel }}</gtx-button>\n    <gtx-button (click)=\"okayClicked()\">{{ formatProvider.strings.okay }}</gtx-button>\n</div>\n","import {\n    AfterViewChecked,\n    Component,\n    ComponentFactoryResolver,\n    ComponentRef,\n    HostListener,\n    OnDestroy,\n    OnInit,\n    Renderer2,\n    Type,\n    ViewChild,\n    ViewContainerRef\n} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\n\nimport {IModalDialog, IModalOptions} from './modal-interfaces';\nimport {UserAgentRef} from './user-agent-ref';\n\nconst defaultOptions: IModalOptions = {\n    modalBodyClass: 'modal-content',\n    padding: true,\n    width: null,\n    closeOnEscape: true,\n    closeOnOverlayClick: true\n};\n\n/**\n * This is an internal component which is responsible for creating the modal dialog window and overlay.\n */\n@Component({\n    selector: 'gtx-dynamic-modal',\n    templateUrl: './dynamic-modal-wrapper.tpl.html'\n})\nexport class DynamicModalWrapper implements OnInit, OnDestroy, AfterViewChecked {\n\n    @ViewChild('portal', { read: ViewContainerRef, static: true }) portal: ViewContainerRef;\n\n    isIE11: boolean;\n    dismissFn: Function;\n\n    modalElementsHeight: number = 0;\n    visible: boolean = false;\n    options: IModalOptions = defaultOptions;\n\n    private subscriptions = new Subscription();\n    private cmpRef: ComponentRef<IModalDialog>;\n    private openTimer: any;\n    private modalHeightEvents$: Subject<void> = new Subject();\n\n    constructor(\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private userAgent: UserAgentRef,\n        private renderer: Renderer2) {}\n\n    ngOnInit(): void {\n        this.isIE11 = this.userAgent.isIE11;\n\n        if (this.isIE11) {\n            this.subscriptions.add(\n                this.modalHeightEvents$.pipe(debounceTime(100)).subscribe(() => {\n                    this.ie11FixContentHeight();\n                })\n            );\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.subscriptions.unsubscribe();\n        clearTimeout(this.openTimer);\n        if(this.cmpRef && this.cmpRef.destroy) {\n            this.cmpRef.destroy();\n        }\n    }\n\n    setOptions(options: IModalOptions): void {\n        this.options = Object.assign({}, defaultOptions, options);\n    }\n\n    /**\n     * Inject the component which will appear within the modal.\n     */\n    injectContent(component: Type<IModalDialog>): ComponentRef<IModalDialog> {\n        let factory = this.componentFactoryResolver.resolveComponentFactory(component);\n        this.cmpRef = this.portal.createComponent(factory);\n        return this.cmpRef;\n    }\n\n    /**\n     * Display the modal\n     */\n    open(): void {\n        clearTimeout(this.openTimer);\n        this.openTimer = setTimeout(() => this.visible = true, 50);\n    }\n\n    /**\n     * Programatically force the modal to close and resolve with the value passed.\n     */\n    forceClose(val?: any): void {\n        this.cmpRef.instance.closeFn(val);\n    }\n\n    /**\n     * Close the modal and call the cancelFn of the embedded component.\n     */\n    cancel(): void {\n        clearTimeout(this.openTimer);\n        this.visible = false;\n        this.cmpRef.instance.cancelFn();\n        this.cmpRef.destroy();\n    }\n\n    overlayClick(): void {\n        if (this.options.closeOnOverlayClick) {\n            this.cancel();\n        }\n    }\n\n    @HostListener('document:keydown', ['$event'])\n    keyHandler(e: KeyboardEvent): void {\n        if (e.which === 27 && this.options.closeOnEscape) {\n            this.cancel();\n        }\n    }\n\n    /**\n     * IE11 Related fixes\n     */\n\n    /**\n     * Listen for browsers size changes, to notify IE for modal height change\n     */\n    @HostListener('window:resize')\n    onResize(): void {\n        if (this.isIE11) {\n            this.modalHeightEvents$.next();\n        }\n    }\n\n    /**\n     * Listen for content changes, to notify IE for modal height change\n     */\n    ngAfterViewChecked(): void {\n        if (this.isIE11 && this.cmpRef) {\n            // Trigger modalHeight event on view checks\n            let modalElements = Array.from(this.cmpRef.location.nativeElement.children as HTMLElement[]);\n            let currentModalElementsHeight = modalElements\n            .filter( element => element.className != this.options.modalBodyClass )\n            .map( element => {\n                let styles = window.getComputedStyle(element);\n                let margin = parseFloat(styles['marginTop']) +\n                        parseFloat(styles['marginBottom']);\n                return element.offsetHeight + margin;\n            })\n            .reduce((heights: number, height: number): number => heights + height);\n\n            if (this.modalElementsHeight !== currentModalElementsHeight) {\n                this.modalElementsHeight = currentModalElementsHeight;\n                this.modalHeightEvents$.next();\n            }\n        }\n    }\n\n    /**\n     * Fixes modal body height for IE11\n     */\n    ie11FixContentHeight(): void {\n        if (this.isIE11 && this.cmpRef) {\n            let injectedElement = this.cmpRef.location.nativeElement as HTMLElement;\n            let modalBodyElement = injectedElement.getElementsByClassName(this.options.modalBodyClass)[0] as HTMLElement;\n\n            this.renderer.setStyle(\n                modalBodyElement,\n                'max-height',\n                `calc(70vh - ${this.modalElementsHeight}px)`\n            );\n        }\n    }\n}\n","<div class=\"gtx-modal-overlay\"\n     [class.visible]=\"visible\"\n     (click)=\"overlayClick()\"></div>\n<div class=\"gtx-modal-dialog\"\n     [class.isIE11]=\"isIE11\"\n     [class.visible]=\"visible\"\n     [style.width]=\"options.width\"\n     [class.nopad]=\"options.padding === false\">\n    <ng-template #portal></ng-template>\n</div>\n","import {Component} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\nimport {IModalDialog, IDialogConfig} from './modal-interfaces';\n\n/**\n * Internal. The default modal dialog component. Should not be directly used as a component in a view. It\n * should only every be instantiated by the ModalService.dialog() method.\n */\n@Component({\n    selector: 'gtx-modal-dialog',\n    templateUrl: './modal-dialog.tpl.html'\n})\nexport class ModalDialog implements IModalDialog {\n    closeFn: (val: any) => void;\n    cancelFn: (val?: any) => void;\n\n    safeBody: SafeHtml;\n    config: IDialogConfig = <IDialogConfig> {};\n\n    constructor(private sanitizer: DomSanitizer) {\n    }\n\n    setConfig(config: IDialogConfig): void {\n        this.config = config;\n        if (this.config.body) {\n            this.safeBody = this.sanitizer.bypassSecurityTrustHtml(this.config.body);\n        }\n    }\n\n    onClick(button: { returnValue: any, shouldReject: boolean }): void {\n        if (button.shouldReject) {\n            this.cancelFn(button.returnValue);\n        } else {\n            this.closeFn(button.returnValue);\n        }\n    }\n\n    registerCloseFn(close: (val: any) => void): void {\n        this.closeFn = close;\n    }\n\n    registerCancelFn(cancel: (val?: any) => void): void {\n        this.cancelFn = cancel;\n    }\n}\n","<div class=\"modal-title\">\n    <h4>{{ config.title }}</h4>\n</div>\n<div class=\"modal-content\">\n    <div class=\"modal-body\" *ngIf=\"safeBody\" [innerHTML]=\"safeBody\"></div>\n</div>\n<div class=\"modal-footer\">\n    <ng-template ngFor let-button [ngForOf]=\"config.buttons\">\n        <gtx-button [type]=\"button.type\"\n                    [flat]=\"button.flat\"\n                    (click)=\"onClick(button)\">{{ button.label }}</gtx-button>\n    </ng-template>\n</div>\n","import { Component} from '@angular/core';\nimport {IModalDialog} from './modal-interfaces';\n\n/**\n * Internal. Used to house the contents of the ModalService.fromElement() method.\n */\n@Component({\n    selector: 'gtx-blank-modal',\n    template: ``\n})\nexport class BlankModal implements IModalDialog {\n    closeFn: (val: any) => void;\n    cancelFn: (val?: any) => void;\n\n    constructor() { }\n\n    registerCloseFn(close: (val: any) => void): void {\n        this.closeFn = close;\n    }\n\n    registerCancelFn(cancel: (val?: any) => void): void {\n        this.cancelFn = cancel;\n    }\n\n}\n","import {\n    ComponentRef,\n    ComponentFactoryResolver,\n    ElementRef,\n    Injectable,\n    ViewContainerRef,\n    Type,\n    Optional,\n    SkipSelf\n} from '@angular/core';\nimport {OverlayHostService} from '../overlay-host/overlay-host.service';\nimport {DynamicModalWrapper} from './dynamic-modal-wrapper.component';\nimport {ModalDialog} from './modal-dialog.component';\nimport {BlankModal} from './blank-modal.component';\nimport {IModalInstance, IDialogConfig, IModalDialog, IModalOptions} from './modal-interfaces';\n\n/**\n * A promise-based service for creating modal windows and dialogs.\n * Depends on the [`<gtx-overlay-host>`](#/overlay-host) being present in the app.\n *\n * ## Return Values\n * All the public methods return the `IModalInstance` object:\n *\n * ```\n * interface IModalInstance {\n *     instance: IModalDialog;\n *     element: HTMLElement;\n *     open: () => Promise<any>;\n * }\n * ```\n * Calling the `open()` method returns a promise which will be resolved when the modal is closed\n * or rejected when a button is set to `shouldReject` or the modal calls the passed error handler.\n *\n * ## `.dialog()`\n * To create a basic dialog modal, use the `.dialog()` method. This accepts an `IDialogConfig` object:\n *\n * ```TypeScript\n * interface IDialogConfig {\n *   title: string;\n *   body?: string;\n *   buttons: {\n *       label: string;\n *       type?: 'default' | 'secondary' | 'success'| 'warning' | 'alert';\n *       flat?: boolean;\n *       // If specified, will be returned as the\n *       // value of the resolved promise (or the reason if rejected).\n *       returnValue?: any;\n *       // If true, clicking the button will cause\n *       // the promise to reject rather than resolve\n *       shouldReject?: boolean;\n * }[];\n * ```\n *\n * Example:\n * ```TypeScript\n * modalService.dialog({\n *   title: 'Are you sure?',\n *   body: 'Do you <em>really</em> want to delete this thing?',\n *   buttons: [\n *     { label: 'Delete', type: 'alert', returnValue: true },\n *     { label: 'Cancel', type: 'secondary', shouldReject: true }\n *   ]\n * }).then(modal => modal.open())\n *   .then(result => console.log('deleting...'))\n *   .catch(() => console.log('cancelled');\n * ```\n *\n * ## `.fromComponent()`\n * For more complex modals, a component can be passed to the `.fromComponent()` method which will then be\n * placed inside a modal window. The component must implement the IModalDialog interface, which allows the\n * ModalService to hook into a `closeFn` & `cancelFn` so it knows to close the modal and resolve the promise.\n * To forward errors from the modal to the caller, implement `registerErrorFn` from the IModalDialog interface.\n *\n * Example:\n * ```TypeScript\n * @Component({\n *   selector: 'my-modal-form',\n *   template: '...' // some big form\n * })\n * export class MyModalForm implements IModalDialog {\n *   // IModalDialog interface members\n *   closeFn: (val: any) => void;\n *   cancelFn: (val?: any) => void;\n *   registerCloseFn(close: (val: any) => void): void {\n *       this.closeFn = close;\n *   }\n *   registerCancelFn(cancel: (val?: any) => void): void {\n *       this.cancelFn = cancel;\n *   }\n *\n *   someLocalVariable: string;\n *\n *   // Bound to the form's submit event.\n *   onSubmitClick() : void {\n *      this.closeFn(this.form.value);\n *   }\n *\n *   // Bound to the \"cancel\" button in the template\n *   onCancelClick(): void {\n *      this.cancelFn();\n *   }\n * }\n * ```\n * The above component could then be used as follows:\n * ```TypeScript\n * modalService.fromComponent(MyModalForm, {}, { someLocalVariable: 'foo' })\n *   .then(modal => modal.open())\n *   .then(result => console.log(result));\n * ```\n *\n * ## Modal Options\n * All public methods take an optional options parameter to describe the behavior and appearance of the modal window\n * itself:\n * ```TypeScript\n * interface IModalOptions {\n *     onOpen?: Function;\n *     onClose?: Function;\n *     closeOnOverlayClick?: boolean;\n *     closeOnEscape?: boolean;\n *     width?: string;\n *     padding?: boolean;\n *     modalBodyClass?: string;\n * }\n * ```\n */\n@Injectable()\nexport class ModalService {\n\n    private openModalComponents: ComponentRef<IModalDialog>[] = [];\n    private getHostViewContainer: () => Promise<ViewContainerRef>;\n\n    /**\n     * Returns an array of ComponentRefs for each currently-opened modal.\n     */\n    public get openModals(): ComponentRef<IModalDialog>[] {\n        return this._parentModalService ? this._parentModalService.openModals : this.openModalComponents;\n    }\n\n    constructor(private componentFactoryResolver: ComponentFactoryResolver,\n                overlayHostService: OverlayHostService,\n                @Optional() @SkipSelf() private _parentModalService: ModalService = null) {\n        this.getHostViewContainer = () => overlayHostService.getHostView();\n    }\n\n    /**\n     * Create a new modal instance containing the specified component, optionally specifying \"locals\" which\n     * will be defined on the component instance with the given value.\n     */\n    public fromComponent<T extends IModalDialog>(component: Type<T>,\n                         options?: IModalOptions,\n                         locals?: { [K in keyof T]?: T[K] }): Promise<IModalInstance<T>> {\n        let modal = this.wrapComponentInModal(component, options, locals);\n        return Promise.resolve(modal);\n    }\n\n    /**\n     * Create a new modal by appending the elementRef to a blank modal window. Primarily used internally\n     * for the implementation of the declarative [Modal](#/modal) component.\n     */\n    public fromElement(elementRef: ElementRef, options?: IModalOptions): Promise<IModalInstance<BlankModal>> {\n        return this.wrapComponentInModal(BlankModal, options)\n            .then(modal => {\n                modal.element.appendChild(elementRef.nativeElement);\n                return modal;\n            });\n    }\n\n    /**\n     * Creates and displays a standard modal dialog.\n     */\n    public dialog(config: IDialogConfig, options?: IModalOptions): Promise<IModalInstance<ModalDialog>> {\n       return this.wrapComponentInModal(ModalDialog, options)\n           .then(modal => {\n               modal.instance.setConfig(config);\n               return modal;\n           });\n    }\n\n    private wrapComponentInModal<T extends IModalDialog>(component: Type<T>,\n                                                         options?: IModalOptions,\n                                                         locals?: { [key: string]: any }): Promise<IModalInstance<T>> {\n        return this.createModalWrapper<T>(options)\n            .then(modalWrapper => {\n                const componentRef = modalWrapper.injectContent(component);\n                const dialog = componentRef.instance;\n                if (locals !== undefined) {\n                    for (let key in locals) {\n                        (<any> dialog)[key] = locals[key];\n                    }\n                    componentRef.changeDetectorRef.markForCheck();\n                }\n                this.checkModalDialogInterface(dialog);\n                return {\n                    instance: dialog as any,\n                    element: componentRef.location.nativeElement,\n                    open: (): Promise<any> => {\n                        this.invokeOnOpenCallback(options);\n                        this.openModals.push(componentRef);\n                        componentRef.onDestroy(() => {\n                            const index = this.openModals.indexOf(componentRef);\n                            if (-1 < index) {\n                                this.openModals.splice(index, 1);\n                            }\n                        });\n                        modalWrapper.open();\n                        return this.createPromiseFromDialog(modalWrapper, dialog);\n                    }\n                };\n            });\n    }\n\n    /**\n     * Ensure that the component passed in implements IModalDialog.\n     */\n    private checkModalDialogInterface(dialog: IModalDialog): void {\n        const conforms = typeof dialog.registerCancelFn === 'function' && typeof dialog.registerCloseFn === 'function';\n        if (!conforms) {\n            throw new Error('ModalService#wrapComponentInModal(): Component must implement IModalDialog.');\n        }\n    }\n\n    /**\n     * Creates the DynamicModalWrapper in place in the DOM and returns a reference to the\n     * created component.\n     */\n    private createModalWrapper<T extends IModalDialog>(options?: IModalOptions): Promise<DynamicModalWrapper> {\n        return this.getHostViewContainer()\n            .then(hostViewContainer => {\n                let modalFactoryFactory = this.componentFactoryResolver.resolveComponentFactory(DynamicModalWrapper);\n                if (!hostViewContainer) {\n                    throw new Error('No OverlayHost present, add a <gtx-overlay-host> element!');\n                }\n                const ref = hostViewContainer.createComponent(modalFactoryFactory);\n                return this.getConfiguredModalWrapper(ref, options);\n            });\n    }\n\n    /**\n     * Decorate the ModalWrapper instance with the dismissFn and return that instance.\n     */\n    private getConfiguredModalWrapper<T extends IModalDialog>(wrapperComponentRef: ComponentRef<DynamicModalWrapper>,\n                                      options?: IModalOptions): DynamicModalWrapper {\n        let modalWrapper = wrapperComponentRef.instance;\n        modalWrapper.dismissFn = () => {\n            this.invokeOnCloseCallback(options);\n            wrapperComponentRef.destroy();\n        };\n        modalWrapper.setOptions(options);\n        return modalWrapper;\n    }\n\n    /**\n     * Returns a promise which is bound to the closeFn and cancelFn of the dialog instance,\n     * and will be resolved/rejected when either of those methods are invoked.\n     */\n    private createPromiseFromDialog<T extends IModalDialog>(modalWrapper: DynamicModalWrapper, dialog: IModalDialog): Promise<any> {\n        return new Promise((resolve, reject) => {\n            dialog.registerCloseFn((value: any) => {\n                modalWrapper.dismissFn();\n                resolve(value);\n            });\n\n            dialog.registerCancelFn((value: any) => {\n                modalWrapper.dismissFn();\n            });\n\n            if (dialog.registerErrorFn) {\n                dialog.registerErrorFn((err: Error) => {\n                    reject(err);\n                    modalWrapper.dismissFn();\n                });\n            }\n        });\n    }\n\n    private invokeOnOpenCallback(options: IModalOptions): void {\n        if (options && options.onOpen && typeof options.onOpen === 'function') {\n            options.onOpen();\n        }\n    }\n\n    private invokeOnCloseCallback(options: IModalOptions): void {\n        if (options && options.onClose && typeof options.onClose === 'function') {\n            options.onClose();\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    forwardRef,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    SimpleChange\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subscription} from 'rxjs';\n\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\nimport {ModalService} from '../modal/modal.service';\nimport {DateTimePickerFormatProvider} from './date-time-picker-format-provider.service';\nimport {DateTimePickerModal} from './date-time-picker-modal.component';\nimport {DateTimePickerStrings} from './date-time-picker-strings';\nimport {momentjs, Moment} from '../../common/momentjs.import';\n\nexport {DateTimePickerStrings};\n\nconst GTX_DATEPICKER_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => DateTimePicker),\n    multi: true\n};\n\n/**\n * A form control for selecting a date and (optionally) a time.\n *\n * Depends on [ModalService](#/modal-service), which in turn\n * requires that the [`<gtx-overlay-host>`](#/overlay-host) is present in the app.\n *\n * ```html\n * <gtx-date-time-picker [(ngModel)]=\"dateOfBirth\"\n *                         label=\"Date of Birth\"\n *                         displayTime=\"false\"\n *                         format=\"Do MMMM YYYY\">\n * </gtx-date-time-picker>\n * ```\n */\n@Component({\n    selector: 'gtx-date-time-picker',\n    templateUrl: './date-time-picker.tpl.html',\n    providers: [GTX_DATEPICKER_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DateTimePicker implements ControlValueAccessor, OnInit, OnDestroy {\n    /** Sets the date picker to be auto-focused. Handled by `AutofocusDirective`. */\n    @Input() autofocus: boolean = false;\n\n    /** If true the clear button is displayed, which allows the user to clear the selected date. */\n    @Input() set clearable(val: any) {\n        this._clearable = coerceToBoolean(val);\n    }\n\n    /** Value to set on the ngModel when the DatePicker is cleared. */\n    @Input() emptyValue: any = null;\n\n    /** The date/time value as a unix timestamp (in seconds). */\n    @Input() timestamp: number;\n\n    /** A label for the control. */\n    @Input() label: string = '';\n\n    /**\n     * A [moment.js](http://momentjs.com/)-compatible format string which determines how the\n     * date/time will be displayed in the input field.\n     * See [the moment docs](http://momentjs.com/docs/#/displaying/format/) for valid strings.\n     */\n    @Input() format: string;\n\n    /** The minimum date allowed, e.g. `new Date(2015, 2, 12)`. */\n    @Input() min: Date;\n\n    /** The maximum date allowed, e.g. `new Date(2031, 1, 30)`. */\n    @Input() max: Date;\n\n    /** If true, the year may be selected from a Select control. */\n    @Input() set selectYear(val: any) {\n        this._selectYear = coerceToBoolean(val);\n    }\n\n    /** Set to `true` to disable the input field and not show the date picker on click. */\n    @Input() set disabled(val: any) {\n        this._disabled = coerceToBoolean(val);\n    }\n\n    /** Set to `false` to omit the time picker part of the component. Defaults to `true`. */\n    @Input() set displayTime(val: any) {\n        this._displayTime = coerceToBoolean(val);\n    }\n\n    /** Set to `false` to omit the seconds of the time picker part. Defaults to `true`. */\n    @Input() set displaySeconds(val: any) {\n        this._displaySeconds = coerceToBoolean(val);\n    }\n\n    /** Fires when the \"okay\" button is clicked to close the picker. */\n    @Output() change = new EventEmitter<number|null>();\n\n    /** Fires when the \"clear\" button is clicked on a clearable DateTimePicker. */\n    @Output() clear = new EventEmitter<any>();\n\n    _clearable: boolean = false;\n    _selectYear: boolean = false;\n    _disabled: boolean = false;\n    displayValue: string = '';\n    /** @internal */\n    private value: Moment;\n\n    private _displayTime: boolean = true;\n    private _displaySeconds: boolean = true;\n    private subscription: Subscription;\n\n    // ValueAccessor members\n    onChange: any = () => {};\n    onTouched: any = () => {};\n\n    constructor(@Optional() private formatProvider: DateTimePickerFormatProvider,\n                private modalService: ModalService,\n                private changeDetector: ChangeDetectorRef) {\n\n        if (!formatProvider) {\n            this.formatProvider = new DateTimePickerFormatProvider();\n        }\n    }\n\n    ngOnInit(): void {\n        this.subscription = this.formatProvider.changed$\n            .subscribe(() => this.updateDisplayValue());\n    }\n\n    ngOnChanges(changes: {[K in keyof DateTimePicker]: SimpleChange}): void {\n        if (changes.timestamp) {\n            // Whenever the timestamp input property changes, set the current value to it.\n            this.value = momentjs.unix(Number(changes.timestamp.currentValue));\n            this.updateDisplayValue();\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n    handleEnterKey(event: KeyboardEvent): void {\n        if (event.keyCode === 13 && !this._disabled) {\n            this.showModal();\n        }\n    }\n\n    showModal(): void {\n        this.modalService.fromComponent(\n            DateTimePickerModal,\n            {\n                padding: false\n            },\n            {\n                timestamp: (this.value || momentjs()).unix(),\n                formatProvider: this.formatProvider,\n                displayTime: this._displayTime,\n                displaySeconds: this._displaySeconds,\n                min: this.min,\n                max: this.max,\n                selectYear: this._selectYear\n            })\n            .then<number>(modal => modal.open())\n            .then((timestamp: number) => {\n                this.value = momentjs.unix(timestamp);\n                this.updateDisplayValue();\n                this.onChange();\n                this.change.emit(timestamp);\n            });\n    }\n\n    getUnixTimestamp(): number {\n        return this.value.unix();\n    }\n\n    writeValue(value: number): void {\n        this.value = value ? momentjs.unix(Number(value)) : undefined;\n        this.updateDisplayValue();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onChange = (value?: number | null) => {\n            if (value) {\n                fn(value);\n            } else if (this.value) {\n                fn(this.value.unix());\n            } else {\n                fn(this.emptyValue);\n            }\n        };\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.changeDetector.markForCheck();\n    }\n\n    /** Format date to a human-readable string for displaying in the component's input field. */\n    updateDisplayValue(): void {\n        if (!this.value) {\n            this.displayValue = '';\n        } else if (this.format) {\n            this.displayValue = this.value.format(this.format);\n        } else {\n            this.displayValue = this.formatProvider.format(this.value, this._displayTime, this._displaySeconds);\n        }\n\n        this.changeDetector.markForCheck();\n    }\n\n    /** Clear input value of DateTimePicker and emit `emptyValue` as value. */\n    clearDateTime(): void {\n        this.displayValue = '';\n        this.value = undefined;\n\n        const emptyValue = this.emptyValue;\n        this.clear.emit(emptyValue);\n        this.onChange(emptyValue);\n        this.change.emit(emptyValue);\n\n        this.changeDetector.markForCheck();\n    }\n\n}\n","<gtx-input [value]=\"displayValue\"\n           [label]=\"label\"\n           (click)=\"!_disabled && showModal()\"\n           (keydown)=\"handleEnterKey($event)\"\n           (blur)=\"onTouched()\"\n           [disabled]=\"_disabled\"\n           readonly=\"true\"\n           [class.clearable]=\"_clearable\"></gtx-input>\n<gtx-button icon\n    class=\"clear-button\"\n    *ngIf=\"_clearable\"\n    type=\"secondary\"\n    [disabled]=\"_disabled\"\n    (click)=\"!_disabled && clearDateTime()\">\n    <icon>clear</icon>\n</gtx-button>\n\n","export function getDataTransfer(event: any): DataTransfer {\n    // if jQuery wrapped the event which contains the dropped file, unwrap it\n    let ev: DragEvent = event.dataTransfer ? event : event.originalEvent;\n    return ev.dataTransfer;\n}\n\nexport function getEventTarget(event: any): HTMLElement {\n    // if jQuery wrapped the event, unwrap it\n    return (event.originalEvent ? event.originalEvent : event).target;\n}\n\n/**\n * Note: there are issues with current TypeScript lib defs for the DataTransfer interface, which\n * seems to define the `types` property as a `string[]` rather than a DOMStringList.\n * See https://github.com/Microsoft/TypeScript/issues/12069\n */\nexport function transferHasFiles(transfer: DataTransfer): boolean {\n    let types: any = transfer.types;\n    if (!transfer || !transfer.types) {\n        return false;\n    } else if (typeof types.contains === 'function') {\n        return types.contains('Files');\n    } else if (typeof types.indexOf === 'function') {\n        return types.indexOf('Files') >= 0;\n    } else if (typeof types.length === 'number') {\n        for (let i = 0; i < types.length; i++) {\n            if (types.item(i) === 'Files') {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nlet _mimeTypeSupport: boolean;\nexport function clientReportsMimeTypesOnDrag(): boolean {\n    if (_mimeTypeSupport === undefined) {\n        _mimeTypeSupport = 'items' in DataTransfer.prototype;\n    }\n    return _mimeTypeSupport;\n}\n\n/**\n * If the browser does not report a MIME type, match against this value instead.\n */\nexport const FALLBACK_MIME_TYPE = 'unknown/unknown';\n\nlet warnedThatBrowserDoesNotProvideNumberOfItems = false;\n\n/**\n * Returns a list of mime types in a DataTransfer if supported by the browser.\n *\n * This is a workaround for missing DataTransfer.items support in Firefox < 52\n * https://bugzilla.mozilla.org/show_bug.cgi?id=906420\n */\nexport function getTransferMimeTypes(transfer: DataTransfer): string[] {\n    if (!transfer) {\n        return [];\n    } else if (transfer.items && transfer.items.length > 0) {\n        return Array.from(transfer.items)\n            .filter(item => item.kind === 'file')\n            .map(item => item.type || FALLBACK_MIME_TYPE);\n    } else if ('mozItemCount' in transfer) {\n        return new Array((<any> transfer).mozItemCount).fill(FALLBACK_MIME_TYPE);\n    } else if (!transfer.items && transfer.types.length === 1 && transfer.types[0] === 'Files') {\n        // IE11\n        return [FALLBACK_MIME_TYPE];\n    } else {\n        if (!warnedThatBrowserDoesNotProvideNumberOfItems) {\n            console.warn('Client does not provide number of items during drag event');\n            warnedThatBrowserDoesNotProvideNumberOfItems = true;\n        }\n        return [FALLBACK_MIME_TYPE];\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subscriber} from 'rxjs';\n\nimport {getDataTransfer, getEventTarget, getTransferMimeTypes, transferHasFiles} from './drag-drop-utils';\n\n/**\n * A factory that creates a tracker instance that listens for dragenter/dragleave/drop events\n * on a DOM element and tracks the event state.\n * When the target element contains child elements, DOM events are fired in a confusing order.\n *\n * For example, when the user drags into the div, the into the <a>, then out:\n *   <div><a><span></span></a></div>\n * These events are triggered:\n *   type=dragenter target=<div>\n *   type=dragenter target=<a>\n *   type=dragleave target=<div>\n *   type=dragleave target=<div>\n *\n * This service wraps the browser-specific oddities into an rxjs Observable that emits on changes.\n */\n@Injectable()\nexport class DragStateTrackerFactory {\n    public trackElement(target: EventTarget): Observable<FileDragState> {\n        let tracker = new DragStateTracker(target);\n        return tracker.state$;\n    }\n}\n\nexport type FileDragState = { type: string }[];\n\n/**\n * Helper class that exposes dragenter/dragleave/drop events\n * as an observable stream of the resulting state.\n */\nclass DragStateTracker {\n    state$: Observable<FileDragState>;\n    enterLeaveCounter = 0;\n    enteredElements = new Set<Element>();\n    subscribers: Subscriber<FileDragState>[] = [];\n\n    constructor(private target: EventTarget) {\n        this.state$ = new Observable<FileDragState>((subscriber: Subscriber<FileDragState>) => {\n            if (this.subscribers.push(subscriber) === 1) {\n                this.bindEvents();\n            }\n            return subscriber.add(() => {\n                let index = this.subscribers.indexOf(subscriber);\n                this.subscribers.splice(index, 1);\n                if (!this.subscribers.length) {\n                    this.unbindEvents();\n                }\n            });\n        });\n\n    }\n\n    bindEvents(): void {\n        this.target.addEventListener('dragenter', this.onDragEnter, true);\n        this.target.addEventListener('dragleave', this.onDragLeave, true);\n        this.target.addEventListener('drop', this.onDrop, true);\n        this.target.addEventListener('mouseenter', this.detectUntrackedDrop, true);\n    }\n\n    unbindEvents(): void {\n        this.target.removeEventListener('dragenter', this.onDragEnter, true);\n        this.target.removeEventListener('dragleave', this.onDragLeave, true);\n        this.target.removeEventListener('drop', this.onDrop, true);\n        this.target.removeEventListener('mouseenter', this.detectUntrackedDrop, true);\n    }\n\n    emit(state: FileDragState): void {\n        this.subscribers.forEach(s => s.next(state));\n    }\n\n    onDragEnter = (event: DragEvent) => {\n        let element = getEventTarget(event);\n        if (this.enteredElements.has(element)) { return; }\n\n        let transfer = getDataTransfer(event);\n        if (!transferHasFiles(transfer)) { return; }\n\n        this.enteredElements.add(element);\n\n        if ((++this.enterLeaveCounter) === 1) {\n            let types = getTransferMimeTypes(transfer).map(type => ({ type }));\n            this.emit(types);\n        }\n    }\n\n    onDragLeave = (event: DragEvent) => {\n        let element = getEventTarget(event);\n        if (!transferHasFiles(getDataTransfer(event)) || !this.enteredElements.delete(element)) {\n            return;\n        }\n\n        if ((--this.enterLeaveCounter) === 0) {\n            this.emit([]);\n        }\n    }\n\n    onDrop = (event: DragEvent) => {\n        let element = getEventTarget(event);\n        if (!transferHasFiles(getDataTransfer(event)) || !this.enteredElements.delete(element)) {\n            return;\n        }\n\n        if (this.enterLeaveCounter > 0) {\n            this.enterLeaveCounter = 0;\n            this.enteredElements = new Set<Element>();\n            this.emit([]);\n        }\n    }\n\n    detectUntrackedDrop = (event: MouseEvent) => {\n        if (this.enterLeaveCounter > 0 && event.buttons === 0) {\n            this.enterLeaveCounter = 0;\n            this.enteredElements = new Set<Element>();\n            this.emit([]);\n        }\n    }\n}\n\n","/**\n * Matches a mime type against a list of allowed/disallowed types.\n * @example\n *   matchesMimeType('text/plain', 'text/*')              // true\n *   matchesMimeType('image/jpeg', 'text/*')              // false\n *   matchesMimeType('text/plain', 'text/*, image/*')     // true\n *   matchesMimeType('image/gif', 'image/*, !image/gif')  // false\n */\nexport function matchesMimeType(type: string, allowedTypes: string): boolean {\n    if (typeof type !== 'string' || typeof allowedTypes !== 'string' || !allowedTypes) {\n        return false;\n    }\n\n    if (allowedTypes === '*') {\n        return true;\n    }\n\n    let regex = compilePatternsToRegex(allowedTypes);\n    return regex.test(type);\n}\n\nconst patternCache: { [k: string]: RegExp } = {};\nfunction compilePatternsToRegex(pattern: string): RegExp {\n    if (patternCache[pattern]) {\n        return patternCache[pattern];\n    }\n\n    let globs = pattern.split(/,\\s*/).filter(pattern => pattern !== '');\n    let parts = globs.map(pattern => pattern.replace(/([\\/\\.\\\\\\?\\(\\)\\[\\]\\{\\}])/g, '\\\\$1').replace(/\\*/g, '.+'));\n    let inclusions: string = parts.filter(part => part[0] !== '!').map(s => s === '.+' ? '.*' : s).join('|');\n    let exclusions: string = parts.filter(part => part[0] === '!').map(s => s.substr(1)).join('|');\n    if (exclusions && (!inclusions || inclusions === '.+')) {\n        inclusions = '.*';\n    }\n    let regexStr = exclusions ? `^(?!(?:${exclusions}$))(?:${inclusions || '.+'})$` : `^(?:${inclusions})$`;\n    return patternCache[pattern] = new RegExp(regexStr);\n}\n","import { EventEmitter, Inject, Injectable, InjectionToken, Optional, Output, Directive } from '@angular/core';\nimport {Observable, Subscription} from 'rxjs';\nimport {filter, mapTo} from 'rxjs/operators';\n\nimport {getDataTransfer, transferHasFiles} from './drag-drop-utils';\nimport {DragStateTrackerFactory, FileDragState} from './drag-state-tracker.service';\nimport {matchesMimeType} from './matches-mime-type';\n\n/**\n * A token that can be used to inject a mock into the service\n * @internal\n */\nexport const PAGE_FILE_DRAG_EVENT_TARGET = new InjectionToken('PAGE_FILE_DRAG_EVENT_TARGET');\n\n/**\n * A helper service that listens for dragenter/dragleave/drop events on the window\n * and tracks when files are dragged into or out of the active tab.\n *\n * When files are accidentally dropped on the tab outside of a drop zone, the drop\n * can be cancelled to prevent the browser from opening/downloading the file.\n * See {@link gtxPreventFileDrop} for details.\n */\n@Injectable()\nexport class PageFileDragHandler {\n\n    /**\n     * Fires when a file is dragged into the current tab, dragged out or dropped.\n     * @exmample\n     *   class Component {\n     *     constructor(private pageDrag: PageFileDragStatusService) { }\n     *   }\n     *\n     *   <ul *ngIf=\"pageDrag.filesDragged$ | async\"> ... </ul>\n     */\n    @Output() filesDragged$: Observable<FileDragState>;\n\n    /**\n     * Emits a list when a file is dragged into the current tab.\n     * The list contains `{ \"type\": string }` elements.\n     */\n    @Output() dragEnter: Observable<FileDragState>;\n\n    /**\n     * Emits false when a file is dragged out of the current tab.\n     */\n    @Output() dragStop: Observable<boolean>;\n\n    /**\n     * Fires when a drop event is prevented.\n     */\n    @Output() dropPrevented = new EventEmitter<void>();\n\n\n    private _filesDragged: FileDragState = [];\n    private _subscription: Subscription;\n    private _eventTarget: EventTarget;\n    private _eventsBound = false;\n    private _componentsWantingToPreventFileDrop = new Set<any>();\n    private _preventAccidentalFileDrop = false;\n\n    /**\n     * Returns true if a file is dragged over the current page/tab.\n     * @example\n     *   class Component {\n     *     constructor(private pageDragStatus: PageFileDragStatusService) {}\n     *   }\n     *\n     *   <ul *ngIf=\"pageDragStatus.filesDragged\"> ... </ul>\n     */\n    public get filesDragged(): FileDragState {\n        return this._filesDragged;\n    }\n\n    /**\n     * Returns true if files are dragged over the current tab and any file matches the specified mime type.\n     * @example\n     *   class Component {\n     *     constructor(private pageDragStatus: PageFileDragStatusService) {}\n     *   }\n     *\n     *   <ul *ngIf=\"pageDragStatus.anyDraggedFileIs('image/*')\"> ... </ul>\n     */\n    public anyDraggedFileIs(allowedTypes: string): boolean {\n        return !!(this._filesDragged.length && this._filesDragged.some(file =>\n            matchesMimeType(file.type, allowedTypes)));\n    }\n\n    /**\n     * Returns true if files are dragged over the current page and all files match the specified mime type.\n     * @example\n     *   class Component {\n     *     constructor(private pageDragStatus: PageFileDragStatusService) {}\n     *   }\n     *\n     *   <ul *ngIf=\"pageDragStatus.allDraggedFilesAre('image/*')\"> ... </ul>\n     */\n    public allDraggedFilesAre(allowedTypes: string): boolean {\n        return !!(this._filesDragged.length && this._filesDragged.every(file =>\n            matchesMimeType(file.type, allowedTypes)));\n    }\n\n\n    constructor(@Optional() @Inject(PAGE_FILE_DRAG_EVENT_TARGET) eventTarget: any,\n                dragState: DragStateTrackerFactory) {\n\n        if (eventTarget) {\n            this._eventTarget = eventTarget;\n        } else if (typeof window === 'object') {\n            this._eventTarget = window;\n        } else {\n            throw new Error('No event target for PageFileDragHandler.');\n        }\n\n        this.filesDragged$ = dragState.trackElement(this._eventTarget);\n        this.dragEnter = this.filesDragged$.pipe(\n            filter(list => list.length > 0)\n        );\n        this.dragStop = this.filesDragged$.pipe(\n            filter(list => list.length === 0),\n            mapTo(false)\n        );\n        this.bindEvents();\n    }\n\n    destroy(): void {\n        this.unbindEvents();\n        if (this._subscription) {\n            this._subscription.unsubscribe();\n            this._subscription = undefined;\n        }\n        this._componentsWantingToPreventFileDrop = new Set<HTMLElement>();\n        this._preventAccidentalFileDrop = false;\n    }\n\n    /** @internal */\n    bindEvents(): void {\n        if (this._eventsBound) { return; }\n        this._subscription = this.filesDragged$.subscribe(dragged => this._filesDragged = dragged);\n        this._eventTarget.addEventListener('dragenter', this.preventAccidentalDrop, false);\n        this._eventTarget.addEventListener('dragover', this.preventAccidentalDrop, false);\n        this._eventTarget.addEventListener('drop', this.preventAccidentalDrop, false);\n        this._eventsBound = true;\n    }\n\n    /** @internal */\n    unbindEvents(): void {\n        this._eventTarget.removeEventListener('dragenter', this.preventAccidentalDrop, false);\n        this._eventTarget.removeEventListener('dragover', this.preventAccidentalDrop, false);\n        this._eventTarget.removeEventListener('drop', this.preventAccidentalDrop, false);\n        this._eventsBound = false;\n    }\n\n    /** @internal */\n    preventFileDropOnPageFor(directive: any, prevent: boolean): void {\n        if (prevent) {\n            this._componentsWantingToPreventFileDrop.add(directive);\n        } else {\n            this._componentsWantingToPreventFileDrop.delete(directive);\n        }\n        this._preventAccidentalFileDrop = this._componentsWantingToPreventFileDrop.size > 0;\n    }\n\n    private preventAccidentalDrop = (event: DragEvent) => {\n        let dataTransfer = getDataTransfer(event);\n        if (this._preventAccidentalFileDrop && !event.defaultPrevented && transferHasFiles(dataTransfer)) {\n            event.preventDefault();\n            dataTransfer.effectAllowed = 'none';\n            dataTransfer.dropEffect = 'none';\n            if (event.type === 'drop') {\n                this.dropPrevented.emit(undefined);\n            }\n        }\n    }\n\n}\n","import {Directive, ElementRef, EventEmitter, Inject, Input, NgZone} from '@angular/core';\nimport {InjectionToken, OnDestroy, OnInit, Optional, Output} from '@angular/core';\nimport {Observable, Subscription} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {clientReportsMimeTypesOnDrag, getDataTransfer, transferHasFiles} from './drag-drop-utils';\nimport {DragStateTrackerFactory, FileDragState} from './drag-state-tracker.service';\nimport {matchesMimeType} from './matches-mime-type';\nimport {PageFileDragHandler} from './page-file-drag-handler.service';\n\nexport interface IFileDropAreaOptions {\n    /**\n     * A list of mime types accepted by the drop area. Defaults to \"*\".\n     * Some mime types will not be reported by the client, they get matched as \"unknown/unknown\".\n     * @example\n     *   { accept: 'image/*, !image/gif' }\n     *   { accept: 'text/*' }\n     *   { accept: 'video/*, unknown/*' }\n     */\n    accept?: string;\n\n    /**\n     * Set to true to prevent interaction with the drop area.\n     */\n    disabled?: boolean;\n\n    /**\n     * Allow multiple files to be dropped on the drop area. Defaults to true.\n     */\n    multiple?: boolean;\n}\n\nconst defaultOptions: IFileDropAreaOptions = {\n    accept: '*',\n    disabled: false,\n    multiple: true\n};\n\nexport interface IDraggedFile {\n    type: string;\n}\n\n/**\n * A token that can be used to inject a mock into the directive\n * @internal\n */\nexport const FILE_DROPAREA_DRAG_EVENT_TARGET = new InjectionToken('FILE_DROPAREA_DRAG_EVENT_TARGET');\n\n\n/**\n * File upload area that accepts files via drag and drop.\n *\n * ```html\n * <gtx-file-drop-area (fileDrop)=\"files = $event\">Upload files via drag & drop</gtx-file-drop-area>\n * <div gtx-file-drop-area (fileDrop)=\"files = $event\">Upload files via drag & drop</div>\n * ```\n */\n@Directive({\n    selector: 'gtx-file-drop-area, [gtxFileDropArea]',\n    exportAs: 'gtxFileDropArea',\n    providers: [DragStateTrackerFactory, PageFileDragHandler]\n})\nexport class FileDropArea implements OnInit, OnDestroy {\n\n    /**\n     * Returns true if an accepted file is dragged on the drop area.\n     */\n    public get dragHovered(): boolean {\n        return this._isDraggedOver;\n    }\n\n    /**\n     * Returns a list of mime types of accepted files dragged over the drop area.\n     */\n    public get draggedFiles(): FileDragState {\n        return this._draggedFiles;\n    }\n\n    /**\n     * Returns true if an accepted file is dragged on the page.\n     */\n    public get pageDragHovered(): boolean {\n        return this._isPageDraggedOver;\n    }\n\n    /**\n     * If accepted files are dragged inside the current page / browser tab,\n     * returns a list of the dragged file types, `undefined` otherwise.\n     */\n    public get filesDraggedInPage(): FileDragState {\n        return this._filesDraggedInPage;\n    }\n\n    /**\n     * Sets options of this drop area.\n     */\n    @Input('gtxFileDropArea') get options(): IFileDropAreaOptions {\n        return this._options;\n    }\n    set options(options: IFileDropAreaOptions) {\n        this._options = Object.freeze(Object.assign({}, defaultOptions, options));\n    }\n\n    /**\n     * Emits a list when files are dragged over the drop area, `undefined` otherwise.\n     * Can be used with AsyncPipe for change detection and subscription handling.\n     */\n    @Output() draggedFiles$: Observable<FileDragState>;\n\n    /**\n     * Emits a list when files are dragged over the drop area, `false` otherwise.\n     * Can be used with AsyncPipe for change detection and subscription handling.\n     */\n    @Output() filesDraggedInPage$: Observable<FileDragState>;\n\n    /**\n     * Fires when a file or files are dragged over the drop area.\n     */\n    @Output() fileDragEnter = new EventEmitter<FileDragState>();\n\n    /**\n     * Fires when a file or files are dragged out of the drop area.\n     */\n    @Output() fileDragLeave = new EventEmitter<void>();\n\n    /**\n     * Fires when a file or files are dropped on the drop area.\n     */\n    @Output() fileDrop = new EventEmitter<File[]>();\n\n    /**\n     * Fires when a file or files which do not match the \"accepted\" option\n     * are dropped on the drop area.\n     */\n    @Output() fileDropReject = new EventEmitter<File[]>();\n\n    /**\n     * Fires when a file or files are dragged into the page.\n     */\n    @Output() pageDragEnter = new EventEmitter<FileDragState>();\n\n    /**\n     * Fires when a file or files is dragged out of the page.\n     */\n    @Output() pageDragLeave = new EventEmitter<void>();\n\n\n    private _draggedFiles: IDraggedFile[] = [];\n    private _isDraggedOver: boolean = false;\n    private _isPageDraggedOver: boolean = false;\n    private _filesDraggedInPage: IDraggedFile[] = [];\n    private _options = defaultOptions;\n    private _subscriptions: Subscription[] = [];\n    private _eventTarget: EventTarget;\n\n\n    constructor(elementRef: ElementRef,\n                @Optional() @Inject(FILE_DROPAREA_DRAG_EVENT_TARGET) dragEventTarget: any,\n                private pageDrag: PageFileDragHandler,\n                private fileDrag: DragStateTrackerFactory,\n                zone: NgZone) {\n\n        this._eventTarget = dragEventTarget || elementRef.nativeElement;\n\n        this.draggedFiles$ = fileDrag.trackElement(this._eventTarget).pipe(\n            map(files => files.filter(this.accepts))\n        );\n\n        this.filesDraggedInPage$ = pageDrag.filesDragged$.pipe(\n            map(files => files.filter(this.accepts))\n        );\n\n        this._subscriptions = [\n            this.draggedFiles$.subscribe(files => {\n                zone.runGuarded(() => {\n                    this._isDraggedOver = files.length > 0;\n                    this._draggedFiles = files;\n                    if (files.length > 0) {\n                        this.fileDragEnter.emit(files);\n                    } else {\n                        this.fileDragLeave.emit(undefined);\n                    }\n                });\n            }),\n            this.filesDraggedInPage$.subscribe(filesInPage => {\n                zone.runGuarded(() => {\n                    this._isPageDraggedOver = filesInPage.length > 0;\n                    this._filesDraggedInPage = filesInPage;\n                    if (filesInPage.length > 0) {\n                        this.pageDragEnter.emit(filesInPage);\n                    } else {\n                        this.pageDragLeave.emit(undefined);\n                    }\n                });\n            })\n        ];\n    }\n\n    ngOnInit(): void {\n        this._eventTarget.addEventListener('dragenter', this.onDragEnterOver);\n        this._eventTarget.addEventListener('dragover', this.onDragEnterOver);\n        this._eventTarget.addEventListener('drop', this.onDrop);\n    }\n\n    ngOnDestroy(): void {\n        this._subscriptions.forEach(s => s.unsubscribe());\n        this._eventTarget.removeEventListener('dragenter', this.onDragEnterOver);\n        this._eventTarget.removeEventListener('dragover', this.onDragEnterOver);\n        this._eventTarget.removeEventListener('drop', this.onDrop);\n        this.pageDrag.destroy();\n    }\n\n    private accepts = (file: {type: string}): boolean => {\n        return !clientReportsMimeTypesOnDrag() || matchesMimeType(file.type, this._options.accept);\n    }\n\n    private onDragEnterOver = (event: DragEvent) => {\n        let transfer = getDataTransfer(event);\n        if (!transferHasFiles(transfer)) {\n            return;\n        }\n\n        if (this._isDraggedOver && !this._options.disabled) {\n            transfer.dropEffect = 'copy';\n        } else {\n            transfer.dropEffect = 'none';\n            transfer.effectAllowed = 'none';\n        }\n        event.preventDefault();\n    }\n\n    private onDrop = (event: DragEvent) => {\n        let transfer = getDataTransfer(event);\n        if (event.defaultPrevented || !transferHasFiles(transfer) || this._options.disabled) {\n            return;\n        }\n\n        event.preventDefault();\n        transfer.dropEffect = 'copy';\n\n        let files = Array.from(transfer.files);\n        let acceptedFiles: File[] = [];\n        let rejectedFiles: File[] = [];\n\n        // Check if the dropped files match the \"accept\" option\n        for (let file of files) {\n            if (matchesMimeType(file.type, this._options.accept)) {\n                acceptedFiles.push(file);\n            } else {\n                rejectedFiles.push(file);\n            }\n        }\n        if (acceptedFiles.length > 0) {\n            this.fileDrop.emit(acceptedFiles);\n        }\n        if (rejectedFiles.length > 0) {\n            this.fileDropReject.emit(rejectedFiles);\n        }\n    }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {matchesMimeType} from './matches-mime-type';\n\n@Pipe({ name: 'matchesMimeType', pure: true })\nexport class MatchesMimeTypePipe implements PipeTransform {\n\n    transform(input: string, allowedMimeTypes: string): boolean;\n    transform(input: { type: string }[], allowedMimeTypes: string): { type: string }[];\n    transform(input: { type: string }[], mode: 'all' | 'any', allowedMimeTypes: string): { type: string }[];\n    transform(input: { type: string }[], allowedMimeTypes: string, mode: 'all' | 'any'): { type: string }[];\n    transform(value: string | { type: string }[], secondArg: string, thirdArg?: any): any {\n        if (typeof value === 'string') {\n            return matchesMimeType(value, secondArg);\n        } else if (!value) {\n            return value;\n        } else if (!value.length || !Array.isArray(value)) {\n            return undefined;\n        }\n\n        let array = <{ type: string }[]> value;\n        if (secondArg === 'all') {\n            return array.every(val => matchesMimeType(val.type, thirdArg));\n        } else if (secondArg === 'any') {\n            return array.some(val => matchesMimeType(val.type, thirdArg));\n        }\n        if (thirdArg === 'all') {\n            return array.every(val => matchesMimeType(val.type, secondArg));\n        } else if (thirdArg === 'any') {\n            return array.some(val => matchesMimeType(val.type, secondArg));\n        }\n\n        return false;\n    }\n\n}\n","import {Directive, HostListener, Input, OnDestroy} from '@angular/core';\n\nimport {PageFileDragHandler} from './page-file-drag-handler.service';\nimport {DragStateTrackerFactory} from './drag-state-tracker.service';\nimport {getDataTransfer, transferHasFiles} from './drag-drop-utils';\n\n/**\n * Prevents accidentally dropping files outside of a {@link FileDropArea}\n */\n@Directive({\n    selector: '[gtxPreventFileDrop]',\n    providers: [PageFileDragHandler, DragStateTrackerFactory]\n})\nexport class PreventFileDrop implements OnDestroy {\n\n    prevent: boolean | 'page' = true;\n\n    constructor(private dragHandler: PageFileDragHandler) { }\n\n    ngOnDestroy(): void {\n        this.dragHandler.preventFileDropOnPageFor(this, false);\n    }\n\n    @Input() set gtxPreventFileDrop(val: boolean | 'true' | 'false' | 'page') {\n        let mode: boolean | 'page' = val === 'page' ? 'page' : (val !== false && val !== 'false');\n        if (mode != this.prevent) {\n            this.dragHandler.preventFileDropOnPageFor(this, mode === 'page');\n            this.prevent = mode;\n        }\n    }\n\n    @HostListener('dragenter', ['$event'])\n    @HostListener('dragover', ['$event'])\n    @HostListener('drop', ['$event'])\n    preventAccidentalDrop(event: Event): void {\n        if (this.prevent !== true || event.defaultPrevented) { return; }\n        let dataTransfer = getDataTransfer(event);\n        if (transferHasFiles(dataTransfer)) {\n            event.preventDefault();\n            dataTransfer.effectAllowed = 'none';\n            dataTransfer.dropEffect = 'none';\n        }\n    }\n}\n","import {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    Self\n} from '@angular/core';\nimport {merge as observableMerge, Subscription} from 'rxjs';\n\nimport {FileDropArea, IFileDropAreaOptions} from '../file-drop-area/file-drop-area.directive';\nimport {matchesMimeType} from '../file-drop-area/matches-mime-type';\n\n/**\n * A file picker component.\n *\n * ```html\n * <gtx-file-picker (fileSelect)=\"uploadFiles($event)\"></gtx-file-picker>\n * ```\n */\n@Component({\n    selector: 'gtx-file-picker',\n    templateUrl: './file-picker.tpl.html'\n})\nexport class FilePicker implements OnInit, OnDestroy {\n    /**\n     * Sets the file picker button to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Set to a non-false value to disable the file picker. Defaults to `false` if absent.\n     */\n    @Input() get disabled(): boolean {\n        return this._disabled;\n    }\n    set disabled(value: boolean) {\n        let newValue = value !== false && <any> value !== 'false';\n        if (newValue != this._disabled) {\n            this._disabled = newValue;\n            this.setDropAreaOptions();\n        }\n    }\n\n    /**\n     * Set to a falsy value to disable picking multiple files at once. Defaults to `true` if absent.\n     */\n    @Input() get multiple(): boolean {\n        return this._multiple;\n    }\n    set multiple(value: boolean) {\n        let newValue = value !== false && <any> value !== 'false';\n        if (newValue != this._multiple) {\n            this._multiple = newValue;\n            this.setDropAreaOptions();\n        }\n    }\n\n    /**\n     * Provides feedback for accepted file types, if supported by the browser. Defaults to `\"*\"`.\n     */\n    @Input() get accept(): string {\n        return this._accept;\n    }\n    set accept(value: string) {\n        let usedValue = value == undefined ? '*' : value;\n        if (usedValue !== this._accept) {\n            this._accept = usedValue;\n            this.inputAccept = usedValue.replace(/,/g, ';');\n            this.setDropAreaOptions();\n        }\n    }\n\n    /**\n     * Button size - \"small\", \"regular\" or \"large\". Forwarded to the Button component.\n     */\n    @Input() get size(): 'small' | 'regular' | 'large' {\n        return this._size;\n    }\n    set size(val: 'small' | 'regular' | 'large') {\n        this._size = val == undefined ? 'regular' : val;\n    }\n\n    /**\n     * Display the button as a flat button or not. Forwarded to the Button component.\n     */\n    @Input() get flat(): boolean {\n        return this._flat;\n    }\n    set flat(val: boolean) {\n        this._flat = val != undefined && val !== false;\n    }\n\n    /**\n     * Sets the type of the button. Forwarded to the Button component.\n     */\n    @Input() type: 'primary' | 'secondary' | 'success' | 'warning' | 'alert' = 'primary';\n\n    /**\n     * Icon button without text. Forwarded to the Button component.\n     */\n    @Input()  get icon(): boolean {\n        return this._icon;\n    }\n    set icon(val: boolean) {\n        this._icon = val !== false && <any> val !== 'false';\n    }\n\n    /**\n     * Triggered when a file / files are selected via the file picker.\n     */\n    @Output() fileSelect = new EventEmitter<File[]>();\n\n    /**\n     * Triggered when a file / files are selected but do not fit the \"accept\" option.\n     */\n    @Output() fileSelectReject = new EventEmitter<File[]>();\n\n\n    inputAccept: string = '*';\n    private _icon: boolean = false;\n    private _size: 'small' | 'regular' | 'large' = 'regular';\n    private _flat = false;\n    private _accept: string = '*';\n    private _disabled = false;\n    private _multiple = true;\n    private _subscriptions: Subscription[] = [];\n\n\n    constructor(@Optional() @Self() public dropArea: FileDropArea,\n                private cd: ChangeDetectorRef) { }\n\n    ngOnInit(): void {\n        if (this.dropArea) {\n            this.setDropAreaOptions();\n            this._subscriptions = [\n                observableMerge(\n                    this.dropArea.pageDragEnter,\n                    this.dropArea.pageDragLeave,\n                    this.dropArea.fileDragEnter,\n                    this.dropArea.fileDragLeave\n                ).subscribe(() => this.cd.markForCheck()),\n\n                this.dropArea.fileDrop.subscribe((files: File[]) => {\n                    this.fileSelect.emit(files);\n                }),\n\n                this.dropArea.fileDropReject.subscribe((files: File[]) => {\n                    this.fileSelectReject.emit(files);\n                })\n            ];\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._subscriptions.forEach(s => s.unsubscribe());\n    }\n\n    onChange(event: Event, input: HTMLInputElement): void {\n        let files = input && input.files;\n        if (files && files.length) {\n            let accepted: File[] = [];\n            let rejected: File[] = [];\n            Array.from(files).forEach(file => {\n                if (matchesMimeType(file.type, this._accept)) {\n                    accepted.push(file);\n                } else {\n                    rejected.push(file);\n                }\n            });\n\n            // Remove the Files from the input\n            input.value = '';\n\n            if (accepted.length > 0) {\n                this.fileSelect.emit(accepted);\n            }\n            if (rejected.length > 0) {\n                this.fileSelectReject.emit(rejected);\n            }\n        }\n    }\n\n    private setDropAreaOptions(): void {\n        if (this.dropArea) {\n            let options: IFileDropAreaOptions = Object.assign({}, this.dropArea.options || {});\n            options.accept = this._accept;\n            options.disabled = this._disabled;\n            options.multiple = this._multiple;\n            this.dropArea.options = options;\n        }\n    }\n}\n","<div class=\"hidden-file-wrapper\">\n    <input type=\"file\" class=\"hidden-file-input\"\n        tabindex=\"-1\"\n        [accept]=\"inputAccept\"\n        [disabled]=\"disabled\"\n        [multiple]=\"multiple\"\n        (change)=\"onChange($event, fileInput)\"\n        #fileInput\n    />\n</div>\n<gtx-button (click)=\"!disabled && fileInput.click()\" [disabled]=\"disabled\"\n            [size]=\"size\" [icon]=\"icon\"\n            [type]=\"dropArea?.pageDragHovered ? 'success' : type\"\n            [flat]=\"flat || dropArea?.dragHovered\">\n    <ng-content></ng-content>\n</gtx-button>\n","import { Directive, TemplateRef } from '@angular/core';\n\n/** Decorates the `ng-template` tags and reads out the template from it. */\n@Directive({selector: '[gtx-tab-content]'})\nexport class GtxTabContent {\n  constructor(public template: TemplateRef<any>) { }\n}","import { Directive, TemplateRef } from '@angular/core';\n\n/** Decorates the `ng-template` tags and reads out the template from it. */\n@Directive({selector: '[gtx-tab-label]'})\nexport class GtxTabLabel {\n  constructor(public template: TemplateRef<any>) {}\n}","import { Component, Input, ContentChild, TemplateRef, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { GtxTabContent } from './tab-content';\nimport { GtxTabLabel } from './tab-label';\nimport { coerceToBoolean } from '../../common/coerce-to-boolean';\n\n/**\n * Tab Pane IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet uniqueTabPaneId = 0;\n\n/**\n * For documentation, see the GroupedTabs\n */\n@Component({\n    selector: 'gtx-tab-pane',\n    exportAs: 'gtxTabPane',\n    template: `<ng-template><ng-content></ng-content></ng-template>`\n})\nexport class TabPane  {\n  private uniqueId = `gtx-tab-pane-${uniqueTabPaneId++}`;\n\n  /** The unique ID of the tab pane. */\n  get id(): string { return this.uniqueId; }\n  get content(): GtxTabContent | TemplateRef<any> { return this._explicitContent || this._implicitContent }\n\n  /** Content for the tab label given by `<ng-template gtx-tab-label>`. */\n  @ContentChild(GtxTabLabel, { read: TemplateRef, static: true }) templateLabel: GtxTabLabel;\n\n  /** Plain text label for the tab, used when there is no template label. */\n  @Input('label') textLabel: string = '';\n\n  @Input() set id(val: string) {\n    this.uniqueId = val;\n  }\n\n  /**\n   * Hide status icon for this tab\n   */\n  @Input() set hideStatusIcon(val: any) {\n    this.displayStatusIcon = !coerceToBoolean(val);\n  }\n\n  /**\n   * Sets disabled state\n   */\n  @Input() set disabled(val: any) {\n    this.stateDisabled = coerceToBoolean(val);\n  }\n\n  /**\n   * Sets read-only state\n   */\n  @Input() set readonly(val: any) {\n    this.stateReadOnly = coerceToBoolean(val);\n  }\n\n  /**\n   * Sets inactive state\n   */\n  @Input() set inactive(val: any) {\n    this.stateInactive = coerceToBoolean(val);\n  }\n\n  /**\n   * Template provided in the tab content that will be used if present, used to enable lazy-loading\n   */\n  @ContentChild(GtxTabContent, { read: TemplateRef, static: true }) _explicitContent: GtxTabContent;\n\n  /** Template inside the TabPane view that contains an `<ng-content>`. */\n  @ViewChild(TemplateRef, { static: true }) _implicitContent: TemplateRef<any>;\n\n  /**\n   * When the tab is clicked, this event is fired with the tab id.\n   */\n  @Output() select = new EventEmitter<string>();\n  active: boolean = false;\n  stateDisabled: boolean = false;\n  stateReadOnly: boolean = false;\n  stateInactive: boolean = false;\n  displayStatusIcon: boolean = true;\n}\n","import { Component, ContentChildren, QueryList, Input, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { TabPane } from './tab-pane.component';\nimport { GtxTabLabel } from './tab-label';\nimport { coerceToBoolean } from '../../common/coerce-to-boolean';\n\n// Counter for unique group ids.\nlet uniqueTabGroupId = 0;\n\n/**\n * For documentation, see the GroupedTabs\n */\n@Component({\n  selector: 'gtx-tab-group',\n  exportAs: 'gtxTabGroup',\n  template: ``\n})\nexport class TabGroup {\n  /** Unique id for the tab group. */\n  uniqueId: string = `gtx-tag-group-${uniqueTabGroupId++}`;\n\n  /** Expand state for the group */\n  public expand: boolean = false;\n\n  /** Content for the tab label given by `<ng-template gtx-tab-label>`. */\n  @ContentChildren(GtxTabLabel, { read: TemplateRef, descendants: false }) templateLabels: QueryList<GtxTabLabel>;\n\n  get templateLabel(): GtxTabLabel {\n    return this.templateLabels.first || null;\n  }\n\n  /** Plain text label for the tab, used when there is no template label. */\n  @Input('label') textLabel: string = '';\n\n  @Input() set expanded(val: any) {\n    this.expand = coerceToBoolean(val);\n  }\n\n  @Input() set id(val: string) {\n    this.uniqueId = val;\n  }\n\n  get id(): string { return this.uniqueId; }\n\n  /**\n   * Fires an event whenever the tab group is toggled. Argument is the id and state of the tab group.\n   */\n  @Output() tabGroupToggle = new EventEmitter<{id: string, expand: boolean}>();\n\n  /** All of the defined tab panes. */\n  @ContentChildren(TabPane, { descendants: false }) tabs: QueryList<TabPane>;\n\n  get hasActiveChild(): boolean {\n    return this.tabs.some(tab => tab.active)\n  }\n\n  toggle(): void {\n    this.expand = !this.expand;\n    this.tabGroupToggle.emit({ id: this.id, expand: this.expand });\n  }\n}\n","import { Component, ContentChildren, QueryList, AfterContentInit, Input, Output, EventEmitter, SimpleChanges, ElementRef } from '@angular/core';\nimport { TabPane } from './tab-pane.component';\nimport { TabGroup } from './tab-group.component';\nimport { combineLatest, Subscription, BehaviorSubject, ObjectUnsubscribedError } from 'rxjs';\nimport { debounceTime, switchMap, startWith, delay } from 'rxjs/operators';\nimport { coerceToBoolean } from '../../common/coerce-to-boolean';\n\nlet uniqueGroupedTabsId = 0;\n\n/**\n * GroupedTabs supports tabs either with and without groups.\n *\n * Pure tabs will only change the active tab when the `activeId` property is updated.\n *\n * ## Tabs with simple labels\n * ```html\n * <gtx-grouped-tabs>\n *      <gtx-tab-pane label=\"First without Group\">Content 1</gtx-tab-pane>\n *      <gtx-tab-group label=\"1st Group name\" expanded=\"true\">\n *          <gtx-tab-pane label=\"First\">Content 2</gtx-tab-pane>\n *          <gtx-tab-pane label=\"Second\">Content 3</gtx-tab-pane>\n *      </gtx-tab-group>\n *      <gtx-tab-group label=\"2nd Group name\">\n *          <gtx-tab-pane label=\"First\">Content 4</gtx-tab-pane>\n *          <gtx-tab-pane label=\"Second\">Content 5</gtx-tab-pane>\n *      </gtx-tab-group>\n * </gtx-grouped-tabs>\n * ```\n *\n * ## Tabs with template labels\n * ```html\n * <gtx-grouped-tabs>\n *      <gtx-tab-pane>\n *          <ng-template gtx-tab-label>First without Group</ng-template>\n *          Implicit Content 1\n *      </gtx-tab-pane>\n *      <gtx-tab-group expanded=\"true\">\n *          <ng-template gtx-tab-label>\n *              <icon>add</icon> 1st Group name\n *          </ng-template>\n *          <gtx-tab-pane>\n *              <ng-template gtx-tab-label>First</ng-template>\n *              <ng-template gtx-tab-content>\n *                  Content 2\n *              </ng-template>\n *          </gtx-tab-pane>\n *          <gtx-tab-pane label=\"Second\">Content 3</gtx-tab-pane>\n *      </gtx-tab-group>\n *      <gtx-tab-group label=\"2nd Group name\">\n *          <gtx-tab-pane label=\"First\">Content 4</gtx-tab-pane>\n *          <gtx-tab-pane label=\"Second\">Content 5</gtx-tab-pane>\n *      </gtx-tab-group>\n * </gtx-grouped-tabs>\n * ```\n *\n * ## Export components to use in templates\n * ```html\n * <gtx-grouped-tabs #groupedTabs=\"gtxGroupedTabs\">\n *      <gtx-tab-pane label=\"First\" #tab1>First content</gtx-tab-pane>\n *      <gtx-tab-pane label=\"Second\">\n *          Seconds content\n *          <gtx-button (click)=\"groupedTabs.selectTab(tab1)\">Switch to Tab 1</gtx-button>\n *      </gtx-tab-pane>\n * </gtx-grouped-tabs>\n * ```\n *\n */\n@Component({\n    selector: 'gtx-grouped-tabs',\n    exportAs: 'gtxGroupedTabs',\n    templateUrl: './grouped-tabs.tpl.html'\n})\nexport class GroupedTabs implements AfterContentInit {\n\n    /** Unique id for this input. */\n    private uniqueId = `gtx-grouped-tabs-${uniqueGroupedTabsId++}`;\n\n    tabs$ = new BehaviorSubject<Array<TabPane|TabGroup>>(null);\n\n    /** All of the defined tab panes. */\n    @ContentChildren(TabPane, { descendants: true }) tabPanes: QueryList<TabPane>;\n\n    /** All of the defined groups of tab panes. */\n    @ContentChildren(TabGroup) tabGroups: QueryList<TabGroup>;\n\n    /**\n     * Fires an event whenever the active tab changes. Argument is the id of the selected tab.\n     */\n    @Output() tabChange = new EventEmitter<string>();\n\n    /**\n     * The id of the active tab. Should only be used in pure (stateless) mode.\n     */\n    @Input() activeId: string;\n\n    @Input() set id(val: string) {\n        this.uniqueId = val;\n    }\n\n    get id(): string { return this.uniqueId; }\n\n    /**\n     * When present, sets the tabs to pure (stateless) mode.\n     */\n    @Input() set pure(val: any) {\n        this.isPure = val != null;\n    }\n\n    /**\n     * When present (or set to true), tabs title will wrap onto a new line. Otherwise, tabs will remain on one line\n     * and the contents will be elided if all the available space is filled.\n     */\n    @Input() set wrap(val: any) {\n        this.tabsShouldWrap = coerceToBoolean(val);\n    }\n\n    @Input() set statusIcons(val: any) {\n        this.displayStatusIcons = coerceToBoolean(val);\n    }\n\n    get currentTab(): TabPane { return this.tabPanes.filter(tab => tab.active === true)[0]; }\n\n    tabsShouldWrap: boolean = false;\n    displayStatusIcons: boolean = false;\n    private isPure: boolean = false;\n    private subscriptions = new Subscription();\n\n    constructor(private elementRef: ElementRef) {}\n\n    isTabGroup(item) { return item.expand !== undefined; }\n\n    collectTabs(): void {\n        let tabs = Array<TabPane|TabGroup>();\n\n        // Collect all the available tabs and groups\n        this.tabPanes.map(item => {\n            const tabGroup = this.tabGroups.find(group => group.tabs.some(tab => tab === item));\n            if (tabGroup !== undefined) {\n                if (tabs.indexOf(tabGroup) === -1) {\n                    tabs.push(tabGroup);\n                }\n            } else {\n                tabs.push(item);\n            }\n        });\n\n        // Activates the first tab if there are no active currently\n        this.preActivateTab();\n        this.tabs$.next(tabs);\n    }\n\n    preActivateTab(): void {\n        if (this.isPure) {\n            setTimeout(() => this.setActiveTab());\n        } else {\n            let activeTabs = this.tabPanes.filter(tab => tab.active);\n\n            // if there is no active tab set, activate the first\n            if (activeTabs.length === 0) {\n                this.tabPanes.first.active = true;\n            }\n        }\n    }\n\n    ngAfterContentInit(): void {\n        const tabChanges = combineLatest(\n            this.tabPanes.changes,\n            this.tabGroups.changes\n        ).pipe(switchMap(([tabPanes, tabGroups]: [QueryList<TabPane>, QueryList<TabGroup>])  => {\n            let allChanges = [\n                tabPanes.changes.pipe(startWith(tabPanes)),\n                tabGroups.changes.pipe(startWith(tabGroups))\n            ];\n\n            tabGroups.map((group) => {\n                try {\n                    group.tabs.notifyOnChanges();\n                    allChanges.push(group.tabs.changes.pipe(startWith(group.tabs)));\n                } catch (e) {\n                    if (e instanceof ObjectUnsubscribedError) {\n                        // To prevent Unsubscribe error\n                    } else {\n                        throw e;\n                    }\n                }\n            });\n\n            return combineLatest(allChanges);\n        }),\n        debounceTime(5));\n\n        this.subscriptions.add(tabChanges.subscribe(() => {\n            this.collectTabs();\n        }));\n\n        this.tabPanes.notifyOnChanges();\n        this.tabGroups.notifyOnChanges();\n        this.collectTabs();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.setActiveTab();\n    }\n\n    ngOnDestroy(): void {\n        this.subscriptions.unsubscribe();\n    }\n\n    /**\n     * Sets the tab with id === this.activeId to active.\n     */\n    setActiveTab(): void {\n        if (this.tabPanes) {\n            let tabToActivate = this.tabPanes.filter(t => t.id === this.activeId)[0];\n            if (tabToActivate) {\n                this.setAsActive(tabToActivate);\n            }\n        }\n    }\n\n    /**\n     * Invoked when a tab link is clicked.\n     */\n    selectTab(tab: TabPane): void {\n        if (tab.stateDisabled) {\n            return;\n        }\n        if (!this.isPure) {\n            this.setAsActive(tab);\n            this.tabChange.emit(tab.id);\n        } else {\n            tab.select.emit(tab.id);\n        }\n    }\n\n    /**\n     * Toggle TabGroup open/close state.\n     */\n    toggleGroup(group: TabGroup): void {\n        group.toggle();\n    }\n\n    /**\n     * Calculates TabGroup body height to to make it correctly animateable.\n     */\n    tabsHeight(group: TabGroup): number {\n        if (group.expand) {\n            let body = this.elementRef.nativeElement.querySelector(`li#${group.uniqueId} div.collapsible-body > ul`);\n            if (body) {\n                return body.getBoundingClientRect().height + 30;\n            }\n        }\n\n        return 0;\n    }\n\n    private setAsActive(tab: TabPane): void {\n        this.tabPanes.toArray().forEach(tab => tab.active = false);\n        this.tabGroups.map(group => {\n            if (group.tabs.some(currentTab => currentTab === tab)) {\n                group.expand = true;\n            }\n        });\n        tab.active = true;\n    }\n}\n","<div class=\"grouped-tabs\">\n    <ul class=\"collapsible expandable\" [class.wrap-tab-title]=\"tabsShouldWrap\">\n        <ng-container *ngFor=\"let tabItem of tabs$ | async\">\n            <ng-template [ngIf]=\"isTabGroup(tabItem)\" [ngIfElse]=\"standaloneTabItem\">\n                <li class=\"tab-group\" [id]=\"tabItem.id\" [ngClass]=\"{\n                    expanded: tabItem.expand,\n                    'is-active': tabItem.hasActiveChild\n                }\">\n                    <div class=\"collapsible-header\" (click)=\"toggleGroup(tabItem)\">\n                        <ng-container *ngTemplateOutlet=\"labelTemplate;context:{tabItem: tabItem}\"></ng-container>\n                    </div>\n                    <div class=\"collapsible-body\" [style.max-height.px]=\"tabsHeight(tabItem)\">\n                        <ul class=\"tab-links\" *ngIf=\"tabItem.tabs.length > 0\">\n                            <ng-container *ngFor=\"let tab of tabItem.tabs\">\n                                <ng-container *ngTemplateOutlet=\"tabItemTemplate;context:{tabItem: tab}\"></ng-container>\n                            </ng-container>\n                        </ul>\n                    </div>\n                </li>\n            </ng-template>\n            <ng-template #standaloneTabItem>\n                <ng-container *ngTemplateOutlet=\"tabItemTemplate;context:{tabItem: tabItem}\">\n                </ng-container>\n            </ng-template>\n        </ng-container>\n    </ul>\n</div>\n<div class=\"grouped-tab-content\">\n    <ng-container *ngTemplateOutlet=\"currentTab?.content\"></ng-container>\n</div>\n<div class=\"clearfix\"></div>\n\n<ng-template #labelTemplate let-tabItem=\"tabItem\">\n    <ng-template [ngIf]=\"tabItem?.expand === true\">\n        <icon left>keyboard_arrow_down</icon>\n    </ng-template>\n    <ng-template [ngIf]=\"tabItem?.expand === false\">\n        <icon left>keyboard_arrow_right</icon>\n    </ng-template>\n    <!-- If there is a label template, use it. -->\n    <ng-template [ngIf]=\"tabItem.templateLabel\">\n        <ng-container *ngTemplateOutlet=\"tabItem.templateLabel\"></ng-container>\n    </ng-template>\n    <!-- If there is not a label template, fall back to the text label. -->\n    <ng-template [ngIf]=\"!tabItem.templateLabel\">{{ tabItem.textLabel }}</ng-template>\n</ng-template>\n\n<ng-template #tabItemTemplate let-tabItem=\"tabItem\">\n    <li class=\"tab-link\" role=\"presentation\"\n        (click)=\"selectTab(tabItem)\"\n        [ngClass]=\"{\n            disabled: tabItem.stateDisabled,\n            'is-active': tabItem.active,\n            'readonly': tabItem.stateReadOnly,\n            'inactive': tabItem.stateInactive,\n            'statusIcon': !tabItem.disabled && displayStatusIcons && tabItem.displayStatusIcon\n        }\">\n        <i *ngIf=\"!tabItem.stateDisabled && displayStatusIcons && tabItem.displayStatusIcon\" class=\"statusIcon\"></i>\n        <a role=\"tab\">\n            <ng-container *ngTemplateOutlet=\"labelTemplate;context:{tabItem: tabItem}\"></ng-container>\n        </a>\n    </li>\n</ng-template>\n","import {Component, HostBinding, Input} from '@angular/core';\n\n/**\n * An animated CSS hamburger menu icon. Works well with [SideMenu](#/side-menu), but can be used for any kind of menu.\n *\n * ```HTML\n * <gtx-menu-toggle-button [active]=\"isActive\"\n *                         (click)=\"isActive = !isActive\">\n * </gtx-menu-toggle-button>\n * ```\n *\n * The colors can be configured by locally defining the following rules:\n * ```css\n * gtx-menu-toggle-button .bar { background-color: someColor; }\n * gtx-menu-toggle-button.active .bar { background-color: someOtherColor; }\n * ```\n */\n@Component({\n    selector: 'gtx-menu-toggle-button',\n    template: `\n        <div>\n            <div class=\"bar top\"></div>\n            <div class=\"bar middle\"></div>\n            <div class=\"bar bottom\"></div>\n        </div>`\n})\nexport class MenuToggleButton {\n    @HostBinding('class.active')\n    /**\n     * When \"active\", the button will be an \"x\", otherwise it will be a \"hamburger\"\n     */\n    @Input() active: boolean = false;\n}\n","\nimport {Component, ElementRef, ViewChild} from '@angular/core';\n\nexport type ToastType = 'default' | 'error' | 'success' | 'warning';\n\n/**\n * A Toast notification component. Not to be used directly - see Notification service for\n * documentation.\n */\n@Component({\n    selector: 'gtx-toast',\n    templateUrl: './toast.tpl.html'\n})\nexport class Toast {\n    message: string;\n    messageLines: string[];\n    type: ToastType|string;\n    position: any = {\n        top: 10,\n        right: 10\n    };\n    actionLabel: string;\n    actionOnClick: Function;\n    dismissFn: Function;\n    dismissOnClick: boolean = true;\n    dismissing: boolean = false;\n    @ViewChild('toast', { static: true }) toastRef: ElementRef;\n\n    private hammerManager: HammerManager;\n\n    constructor(private elementRef: ElementRef) {}\n\n    ngOnInit(): void {\n        this.messageLines = (this.message || '').split('\\n');\n    }\n\n    ngAfterViewInit(): void {\n        this.initSwipeHandler();\n    }\n\n    ngOnDestroy(): void {\n        if (this.hammerManager) {\n            this.hammerManager.destroy();\n            this.hammerManager = undefined;\n        }\n    }\n\n    /**\n     * Returns the height of the toast div.\n     */\n    getHeight(): number {\n        return this.toastRef.nativeElement.getBoundingClientRect().height;\n    }\n\n    /**\n     * Returns a CSS transform string for positioning\n     */\n    getTransform(): string {\n        if (this.dismissing) {\n            return `translate3d(100%, ${this.position.top}px, 0)`;\n        } else {\n            return `translate3d(0, ${this.position.top}px, 0)`;\n        }\n    }\n\n    /**\n     * Begin the dismiss animation\n     */\n    startDismiss(): void {\n        this.dismissing = true;\n    }\n\n    /**\n     * Invoke the action onClick handler if defined.\n     */\n    actionClick(): void {\n        if (typeof this.actionOnClick === 'function') {\n            this.actionOnClick();\n        }\n    }\n\n\n    /**\n     * Manual dismiss which is invoked when the toast is clicked.\n     */\n    dismiss(): void {\n        if (this.dismissOnClick && typeof this.dismissFn === 'function') {\n            this.dismissFn();\n        }\n    }\n\n    /**\n     * Set up a Hammerjs-based swipe gesture handler to dismiss toasts.\n     */\n    private initSwipeHandler(): void {\n        this.hammerManager = new Hammer(this.elementRef.nativeElement);\n        this.hammerManager.on('swipe', (e: HammerInput) => {\n            if (e.pointerType === 'touch') {\n                // Hammerjs represents directions with an enum; 4 = right.\n                if (e.direction === 4) {\n                    this.dismiss();\n                }\n            }\n        });\n    }\n}\n","<div class=\"gtx-toast z-depth-3\" #toast\n     [class.dismissing]=\"dismissing\"\n     [style.transform]=\"getTransform()\"\n     [ngClass]=\"type\"\n     (click)=\"dismiss()\"\n>\n    <span class=\"gtx-toast-btn_close\"\n        [hidden]=\"!dismissOnClick\">\n        <icon>close</icon>\n    </span>\n    <span class=\"action\" *ngIf=\"actionLabel\">\n        <button (click)=\"actionClick()\">\n            {{ actionLabel }}\n        </button>\n    </span>\n    <span class=\"message\">\n        <ng-template ngFor let-line [ngForOf]=\"messageLines\" let-i=\"index\">\n            <br *ngIf=\"i > 0\">\n            <span class=\"line\">{{ line }}</span>\n        </ng-template>\n    </span>\n</div>\n","import {\n    ComponentRef,\n    Injectable,\n    EventEmitter,\n    ComponentFactoryResolver,\n    ViewContainerRef\n} from '@angular/core';\nimport {Toast, ToastType} from './toast.component';\nimport {OverlayHostService} from '../overlay-host/overlay-host.service';\n\nexport interface INotificationOptions {\n    message: string;\n    type?: ToastType|string;\n    /**\n     * The notification will automatically be dismissed after this delay.\n     * To turn off auto-dismissal, set this to 0.\n     */\n    delay?: number;\n    dismissOnClick?: boolean;\n    action?: {\n        label: string;\n        onClick?: Function;\n    };\n}\n\nconst defaultOptions: INotificationOptions = {\n    message: '',\n    type: 'default',\n    delay: 3000,\n    dismissOnClick: true\n};\n\ninterface IOpenToast {\n    toast: Toast;\n    dismissTimer: any;\n}\n\n/**\n * A toast notification service. Depends on the [`<gtx-overlay-host>`](#/overlay-host) being present in the app.\n *\n * ```typescript\n * let dismiss = this.notification.show({\n *     message: 'Content Saved',\n *     type: 'success',\n *     delay: 3000\n * });\n *\n * // to manually dismiss the toast\n * dismiss();\n * ```\n *\n * ## `INotificationOptions`\n *\n * The `show()` method takes an `INotificationOptions` object as its argument:\n *\n * | Property           | Type                                          | Default   | Description |\n * | --------           | ------------------------------                | -------   | ----------- |\n * | **message**        | `string`                                      | ''        | The message to display |\n * | **type**           | `'default'`,`'error'`,`'success'`,`'warning'` | 'default' | The style of toast |\n * | **delay**          | `number`                                      | 3000      | ms before toast is dismissed. 0 == no dismiss |\n * | **dismissOnClick** | `boolean`                                     | true      | If true, the toast can be dismissed by click or swipe|\n * | **action.label**   | `string`                                      |           | Optional action label |\n * | **action.onClick** | `Function`                                    |           | Callback if action label is clicked |\n *\n */\n@Injectable()\nexport class Notification {\n\n    open$ = new EventEmitter<INotificationOptions>();\n    private hostViewContainer: ViewContainerRef;\n    private openToasts: IOpenToast[] = [];\n    /*\n     * Spacing between stacked toasts\n     */\n    private verticalMargin: number = 10;\n\n    constructor(private componentFactoryResolver: ComponentFactoryResolver,\n                overlayHostService: OverlayHostService) {\n        overlayHostService.getHostView().then(view => {\n            this.hostViewContainer = view;\n        });\n    }\n\n    /**\n     * Show a toast notification. Returns an object with a dismiss() method, which will\n     * dismiss the toast when invoked.\n     */\n    public show(options: INotificationOptions): { dismiss: () => void } {\n        let mergedOptions: INotificationOptions = Object.assign({}, defaultOptions, options);\n        let toast = this.createToast(mergedOptions);\n        return {\n            dismiss: (): void => toast.dismissFn()\n        };\n    }\n\n    /**\n     * Used internally by the [OverlayHost](#/overlay-host) to clean up.\n     */\n    public destroyAllToasts(): void {\n        this.openToasts.forEach((o: IOpenToast) => {\n            if (typeof o.toast.dismissFn === 'function') {\n                o.toast.dismissFn();\n            }\n        });\n        this.openToasts = [];\n    }\n\n    /**\n     * Dispose of the Toast component and remove its reference from the\n     * openToasts array.\n     */\n    private destroyToast(componentRef: ComponentRef<Toast>): void {\n        let toast: Toast = componentRef.instance;\n        let index = this.getToastIndex(toast);\n        if (-1 < index) {\n            let timer: any = this.openToasts[index].dismissTimer;\n            if (timer) {\n                clearTimeout(timer);\n            }\n            this.openToasts.splice(index, 1);\n        }\n        toast.startDismiss();\n        setTimeout(() => {\n            componentRef.destroy();\n            this.positionOpenToasts();\n        }, 200);\n    }\n\n    /**\n     * Dynamically create and load a new Toast component next to the\n     * NotificationHost component in the DOM.\n     */\n    private createToast(options: INotificationOptions): Toast {\n        let toastFactory = this.componentFactoryResolver.resolveComponentFactory(Toast);\n        let ref = this.hostViewContainer.createComponent(toastFactory);\n        let toast: Toast = ref.instance;\n\n        let dismissTimer: any;\n        toast.message = options.message;\n        toast.type = options.type;\n        toast.dismissOnClick = options.dismissOnClick;\n        toast.dismissFn = () => this.destroyToast(ref);\n\n        if (options.action && options.action.label) {\n            toast.actionLabel = options.action.label;\n        }\n        if (options.action && options.action.onClick) {\n            toast.actionOnClick = options.action.onClick;\n        }\n\n        if (0 < options.delay) {\n            dismissTimer = setTimeout(() => toast.dismissFn(), options.delay);\n        }\n\n        this.openToasts.unshift({\n            toast,\n            dismissTimer\n        });\n        this.positionOpenToasts();\n        return toast;\n    }\n\n    private positionOpenToasts(): void {\n        setTimeout(() => {\n            this.openToasts.forEach((o: IOpenToast) => {\n                o.toast.position.top = this.getToastTop(o.toast);\n            });\n        });\n    }\n\n    /**\n     * Calculates the value of the \"top\" offset for this toast by adding up\n     * the heights of the other toasts which are open above this one.\n     */\n    private getToastTop(toast: Toast): number {\n        let index = this.getToastIndex(toast);\n\n        return this.openToasts\n            .filter((o: IOpenToast, i: number) => i < index)\n            .reduce((top: number, o: IOpenToast) => {\n                return top += o.toast.getHeight() + this.verticalMargin;\n            }, 0);\n    }\n\n    /**\n     * Returns the index of the toast object in the openToasts array.\n     */\n    private getToastIndex(toast: Toast): number {\n        return this.openToasts.map((o: IOpenToast) => o.toast).indexOf(toast);\n    }\n}\n","import {Component, ViewContainerRef} from '@angular/core';\nimport {OverlayHostService} from './overlay-host.service';\n\n/**\n * The OverlayHost is required to display any kind of overlay component such as a modal or\n * [toast notification](#/notification). It represents the location in the DOM into which new overlays\n * will be loaded. As such it should be at or close to the root of your app (i.e. a direct\n * child of your App's root component). There should only be one OverlayHost in your app.\n *\n * There are no attributes to configure nor events to listen to - all interaction with this\n * component happens via the `OverlayHostService`, which allows other components to grab a\n * reference (`ViewContainerRef`) to the OverlayHost DOM element and then insert components or elements\n * at that location.\n *\n * ```html\n * <gtx-overlay-host></gtx-overlay-host>\n * ```\n */\n@Component({\n    selector: 'gtx-overlay-host',\n    template: ``\n})\nexport class OverlayHost {\n\n    constructor(overlayHostService: OverlayHostService,\n                viewContainerRef: ViewContainerRef) {\n        overlayHostService.registerHostView(viewContainerRef);\n    }\n}\n","import {Component, ElementRef, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {Subscribable} from 'rxjs';\n\nfunction isPromise(obj: any): obj is PromiseLike<any> {\n    return typeof obj === 'object' && obj != null && typeof obj.then === 'function';\n}\n\nfunction isSubscribable(obj: any): obj is Subscribable<any> {\n    return typeof obj === 'object' && obj != null && typeof obj.subscribe === 'function';\n}\n\nfunction noop(): void {}\n\n/**\n * A progress bar that attachs to the top of the parent container and can be used to display activity or progress.\n * It can be used for determinate tasks with a known duration and an exact progress\n * or for indeterminate tasks for which only start/end calls exist, e.g. an xhr call.\n *\n * ```html\n * <!-- progress bar without a known progress duration (indeterminate) -->\n * <gtx-progress-bar [active]=\"isLoadingData\"></gtx-progress-bar>\n *\n * <!-- progress bar for tasks where the progress is known (determinate)-->\n * <gtx-progress-bar [active]=\"isUploadingFile\" [progress]=\"uploadProgress\"></gtx-progress-bar>\n *\n * <!-- progress bar for a Promise or Observable -->\n * <gtx-progress-bar [for]=\"backgroundProgress$\"></gtx-progress-bar>\n * ```\n *\n * ## Using the progress bar with observables\n *\n * When an observable is assigned to the ProgressBar with \"for\", the observable should emit numbers\n * in the range [0..1] for a determinate progress bar or boolean values for indeterminate progress.\n * This will instantly animate the progress bar instead of relying on angular change detection.\n *\n * ```html\n * <gtx-progress-bar [for]=\"uploadProgress$\"></gtx-progress-bar>\n * <gtx-progress-bar [for]=\"anythingLoading$\"></gtx-progress-bar>\n * ```\n * ```typescript\n * class MyComponent {\n *     uploadProgress$: Observable<number>;\n *     anythingLoading$: Observable<boolean>;\n * }\n * ```\n *\n * ## Using the progress bar programmatically inside another component\n *\n * The ProgressBar instance exposes two public methods, `start()`, `complete()` which can be used\n * to manually control the progress bar visibility and progress in a parent component.\n *\n * ```typescript\n * export class App {\n *   @ViewChild(ProgressBar)\n *   private progressBar: ProgressBar;\n *\n *   loadUserData() {\n *     this.progressBar.start();\n *     restclient.get('/users', (response, users) => {\n *       this.progressBar.complete();\n *       if (users) {\n *         doSomethingWith(users);\n *       } else {\n *         handleError(response);\n *       }\n *     });\n *   }\n * }\n * ```\n */\n@Component({\n    selector: 'gtx-progress-bar',\n    templateUrl: './progress-bar.tpl.html'\n})\nexport class ProgressBar implements OnDestroy {\n\n    /**\n     * Shows or hides the progress bar. When no \"progress\" value\n     * is provided, the progress bar is in \"indeterminate\" mode\n     * and grows until \"active\" is set to false.\n     */\n    @Input() get active(): boolean {\n        return this.isActive;\n    }\n    set active(active: boolean) {\n        if (active && !this.isActive) {\n            this.start();\n        } else if (!active && this.isActive) {\n            this.complete();\n        }\n    }\n\n    /**\n     * Sets the progress of the progress bar as a fraction [0...1].\n     * When set, the progress bar is in \"determinate\" mode and will only update\n     * when the \"progress\" value changes or `complete()` is called.\n     */\n    @Input() set progress(progress: number) {\n        if (progress == null) {\n            this.determinate = false;\n            this.wrapperClasses.add('is-indeterminate');\n            this.wrapperClasses.remove('is-determinate');\n        } else {\n            this.determinate = true;\n            this.wrapperClasses.add('is-determinate');\n            this.wrapperClasses.remove('is-indeterminate');\n\n            progress = Math.max(0, Math.min(100 * progress, 100));\n            if (progress !== this.progressPercentage) {\n                if (progress == 100) {\n                    this.complete();\n                } else {\n                    this.setProgressBarWidth(progress);\n                }\n            }\n        }\n    }\n\n    /**\n     * Sets the speed of the indeterminate animation required to reach\n     * 50% of the progress bar. Accepts values like \"500ms\", \"0.5s\", 500.\n     * *Default: 500ms*\n     */\n    @Input() set speed(speed: string|number) {\n        if (typeof speed === 'string') {\n            let match = speed.match(/^(\\d+(?:\\.\\d+)?)(ms|s)?$/);\n            if (match) {\n                let factor = (match[2] == 's' ? 1000 : 1);\n                this.indeterminateSpeed = Number.parseFloat(match[1]) * factor;\n            }\n        } else if (!isNaN(speed)) {\n            this.indeterminateSpeed = speed;\n        }\n    }\n\n    /**\n     * Automatically starts, stops and updates the progress bar for a Promise\n     * or when an Observable emits values or completes.\n     */\n    @Input() set for(promiseOrObservable: PromiseLike<any> | Subscribable<number>  | Subscribable<boolean>) {\n        this.cleanup();\n\n        if (promiseOrObservable) {\n            if (promiseOrObservable !== this.currentPromiseOrObservable) {\n                this.setProgressBarWidth(0, 'immediate');\n                this.start(promiseOrObservable);\n            }\n        } else if (this.isActive && this.currentPromiseOrObservable) {\n            this.cleanupSubscription();\n            this.complete();\n        }\n    }\n\n    @ViewChild('progressBarWrapper', { static: true }) progressBarWrapper: ElementRef;\n    @ViewChild('progressIndicator', { static: true }) progressIndicator: ElementRef;\n\n    private isActive: boolean = false;\n    private progressPercentage: number = 0;\n    private indeterminateSpeed: number = 500;\n    private determinate: boolean = false;\n    private animationRequest: number = undefined;\n    private lastAnimationFrame: number = undefined;\n    private removePendingHandler: () => void = noop;\n    private cleanupSubscription: () => void = noop;\n    private currentPromiseOrObservable: PromiseLike<any> | Subscribable<any>;\n    private wrapperClasses = { add(...cls: string[]): void {}, remove(...cls: string[]): void {} };\n\n    constructor(private zone: NgZone) { }\n\n    ngAfterViewInit(): void {\n        let wrapper: HTMLElement = this.progressBarWrapper && this.progressBarWrapper.nativeElement;\n        if (wrapper) {\n            this.wrapperClasses = wrapper.classList;\n            if (this.isActive) {\n                this.wrapperClasses.add('visible', this.determinate ? 'is-determinate' : 'is-indeterminate');\n                this.setProgressBarWidth(this.determinate ? this.progressPercentage : 0, 'immediate');\n            }\n        }\n    }\n\n    /** Starts showing the progress bar in \"indeterminate\" mode. */\n    public start(): void;\n\n    /** Starts animating the progress bar, animates as \"finished\" when the passed Promise resolves. */\n    public start(promise: PromiseLike<any>): void;\n\n    /** Animates the progress bar by discrete values ([0...1]) emitted by the passed observable. */\n    public start(progressObservable: Subscribable<number>): void;\n\n    /**\n     * Animates the progress bar based on the values emitted by the passed observable.\n     * `true` animates as \"active\", `false` as \"completed\".\n     */\n    public start(progressObservable: Subscribable<boolean>): void;\n\n    public start(promiseOrObservable?: PromiseLike<any> | Subscribable<number> | Subscribable<boolean>): void;\n\n    public start(promiseOrObservable?: PromiseLike<any> | Subscribable<any>): void {\n        if (promiseOrObservable !== this.currentPromiseOrObservable) {\n            this.cleanupSubscription();\n        }\n\n        if (!this.isActive) {\n            this.isActive = true;\n            this.lastAnimationFrame = undefined;\n            this.wrapperClasses.add('visible', this.determinate ? 'is-determinate' : 'is-indeterminate');\n            this.wrapperClasses.remove(this.determinate ? 'is-indeterminate' : 'is-determinate');\n\n            if (this.determinate) {\n                this.setProgressBarWidth(this.progressPercentage, 'immediate');\n            } else {\n                this.setProgressBarWidth(0, 'immediate');\n                this.animateIndeterminate();\n            }\n        }\n\n        if (isPromise(promiseOrObservable)) {\n            let observing = true;\n            promiseOrObservable.then(\n                () => observing && this.complete(),\n                () => observing && this.complete()\n            );\n            this.cleanupSubscription = () => {\n                observing = false;\n                this.cleanupSubscription = noop;\n            };\n            this.currentPromiseOrObservable = promiseOrObservable;\n        } else if (isSubscribable(promiseOrObservable)) {\n            let sub = promiseOrObservable.subscribe(\n                (value: number | boolean) => {\n                    if (typeof value === 'number') {\n                        this.progress = value;\n                    } else if (value === true && !this.isActive) {\n                        this.start(promiseOrObservable);\n                    } else if (value === false && this.isActive) {\n                        this.complete();\n                    }\n                },\n                (error: any) => this.complete(),\n                () => this.complete()\n            );\n            this.cleanupSubscription = () => {\n                sub.unsubscribe();\n                this.cleanupSubscription = noop;\n            };\n            this.currentPromiseOrObservable = promiseOrObservable;\n        }\n    }\n\n    /**\n     * Animates the progress bar to 100% and hides it\n     */\n    public complete(): void {\n        if (this.isActive) {\n            this.isActive = false;\n\n            if (this.determinate) {\n                if (this.progressPercentage == 100) {\n                    this.fadeOutProgressBar();\n                } else {\n                    this.transitionTo100Percent()\n                        .then(() => this.fadeOutProgressBar());\n                }\n            }\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.cleanup();\n    }\n\n    private cleanup(): void {\n        if (this.animationRequest) {\n            cancelAnimationFrame(this.animationRequest);\n            this.animationRequest = undefined;\n        }\n\n        this.removePendingHandler();\n        this.cleanupSubscription();\n    }\n\n    private fadeOutProgressBar(): Promise<void> {\n        if (this.removePendingHandler) {\n            this.removePendingHandler();\n        }\n\n        return new Promise<void>( (resolve: () => void) => this.zone.run(() => {\n            let element = this.progressBarWrapper.nativeElement;\n            const callback = () => {\n                this.removePendingHandler();\n                this.setProgressBarWidth(0, 'immediate');\n                this.zone.run(resolve);\n            };\n            this.removePendingHandler = () => {\n                element.removeEventListener('transitionend', callback);\n                this.removePendingHandler = noop;\n            };\n            element.addEventListener('transitionend', callback);\n            this.wrapperClasses.remove('visible');\n        }));\n    }\n\n    private setProgressBarWidth(percent: number, immediate?: string): void {\n        this.progressPercentage = percent;\n\n        const nativeElement: HTMLElement = this.progressIndicator && this.progressIndicator.nativeElement;\n        if (nativeElement) {\n            const style = nativeElement.style;\n            if (immediate) {\n                // Don't animate the change\n                style.transitionDuration = style.webkitTransitionDuration = '0s';\n                style.width = percent + '%';\n                let getWidthOnce = nativeElement.offsetWidth;\n                style.transitionDuration = style.webkitTransitionDuration = '';\n            } else {\n                style.width = percent + '%';\n            }\n        }\n    }\n\n    private transitionTo100Percent(): Promise<void> {\n        if (this.removePendingHandler) {\n            this.removePendingHandler();\n        }\n        return new Promise<void>(resolve => {\n            let element = this.progressIndicator.nativeElement;\n            if (this.determinate) {\n                // transition the progress indicator in a cancelable way\n                let callback = () => {\n                    this.removePendingHandler();\n                    this.zone.run(resolve);\n                };\n                this.removePendingHandler = () => {\n                    element.removeEventListener('transitionend', callback);\n                    this.removePendingHandler = noop;\n                };\n                element.addEventListener('transitionend', callback);\n                this.setProgressBarWidth(100);\n            } else {\n                // Use requestAnimationFrame() in a cancelable way\n                let frameRequest: number;\n                let waitUntilDone = () => {\n                    if (this.progressPercentage === 100) {\n                        frameRequest = undefined;\n                        resolve();\n                    } else {\n                        frameRequest = requestAnimationFrame(waitUntilDone);\n                    }\n                };\n                frameRequest = requestAnimationFrame(waitUntilDone);\n                this.removePendingHandler = () => {\n                    cancelAnimationFrame(frameRequest);\n                    this.removePendingHandler = noop;\n                };\n            }\n        });\n    }\n\n    private animateIndeterminate(): void {\n        this.animationRequest = undefined;\n        if (this.determinate) { return; }\n\n        let now = typeof performance === 'object' ? performance.now() : Date.now();\n        let delta = (now - this.lastAnimationFrame) / 1000;\n\n        if (!this.lastAnimationFrame) {\n            // Animation starting\n            this.setProgressBarWidth(0);\n        } else if (this.isActive) {\n            // Animate \"active\" state\n            let factor = delta * (900 / this.indeterminateSpeed);\n            let percent = this.progressPercentage + factor * Math.pow(1 - Math.sqrt(100 - this.progressPercentage), 2);\n            this.setProgressBarWidth(Math.max(0, Math.min(100, percent)));\n        } else if (this.progressPercentage < 100) {\n            // Done - animate to 100%\n            let speed = (900 / this.indeterminateSpeed);\n            let factor = speed + Math.max(0, 1 - speed);\n            let percent = this.progressPercentage + 250 * delta * factor;\n            this.setProgressBarWidth(Math.max(0, Math.min(100, percent)));\n        } else {\n            this.fadeOutProgressBar();\n            return;\n        }\n\n        this.lastAnimationFrame = now;\n        this.animationRequest = requestAnimationFrame(\n            () => this.animateIndeterminate()\n        );\n    }\n}\n","<div class=\"progress-bar-wrapper\" #progressBarWrapper>\n    <div class=\"progress-indicator\" #progressIndicator></div>\n</div>\n","import {\n    Attribute,\n    ChangeDetectorRef,\n    Component,\n    Directive,\n    EventEmitter,\n    HostListener,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    forwardRef\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {KeyCode} from '../../common/keycodes';\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\n\n\nconst GTX_RADIO_GROUP_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => RadioGroup),\n    multi: true\n};\n\nconst GTX_RADIO_BUTTON_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => RadioButton),\n    multi: true\n};\n\n/**\n * RadioGroup groups multiple {@link RadioButton} elements together.\n * Use ngModel to connect it to a form model.\n */\n@Directive({\n    selector: 'gtx-radio-group, [gtx-radio-group]',\n    providers: [GTX_RADIO_GROUP_VALUE_ACCESSOR]\n})\nexport class RadioGroup implements ControlValueAccessor {\n\n    private static instanceCounter: number = 0;\n\n    private radioButtons: RadioButton[] = [];\n    private groupID: number;\n\n    get uniqueName(): string {\n        return 'group-' + this.groupID;\n    }\n\n    constructor() {\n        this.groupID = RadioGroup.instanceCounter++;\n    }\n\n    add(radio: RadioButton): void {\n        if (this.radioButtons.indexOf(radio) < 0) {\n            this.radioButtons.push(radio);\n        }\n    }\n\n    remove(radio: RadioButton): void {\n        let pos: number = this.radioButtons.indexOf(radio);\n        if (pos >= 0) {\n            this.radioButtons.splice(pos, 1);\n        }\n    }\n\n    radioSelected(selected?: RadioButton): void {\n        for (let radio of this.radioButtons) {\n            if (radio != selected) {\n                radio.writeValue(selected ? selected.value : null);\n            }\n        }\n        // setTimeout because this method is invoked from a child component (RadioButton), which is the wrong direction\n        // for change propagation (which should normally always be parent -> child). If we synchronously now update the\n        // ngModel value, we will cause \"changed after checked\" errors in dev mode.\n        setTimeout(() => {\n            this.onChange(selected ? selected.value : null);\n        });\n    }\n\n    writeValue(value: any): void {\n        for (let radio of this.radioButtons) {\n            radio.writeValue(value);\n        }\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onTouched = fn;\n    }\n\n    private onTouched: Function = () => {};\n    private onChange: Function = (_: any) => {};\n}\n\n\n/**\n * RadioButton wraps the native `<input type=\"radio\">` form element.\n * To connect multiple radio buttons with a form via ngModel,\n * wrap them in a {@link RadioGroup} (`<gtx-radio-group>`).\n *\n * ```html\n * <gtx-radio-button [(ngModel)]=\"val\" value=\"A\" label=\"A\"></gtx-radio-button>\n * <gtx-radio-button [(ngModel)]=\"val\" value=\"B\" label=\"B\"></gtx-radio-button>\n * <gtx-radio-button [(ngModel)]=\"val\" value=\"C\" label=\"C\"></gtx-radio-button>\n * ```\n *\n * ## Stateless Mode\n * By default, the RadioButton keeps track of its own internal checked state. This makes sense\n * for most use cases, such as when used in a form bound to ngModel.\n *\n * However, in some cases we want to explicitly set the state from outside. This is done by binding\n * to the <code>checked</code> attribute. When this attribute is bound, the checked state of the\n * RadioButton will *only* change when the value of the binding changes. Clicking on the RadioButton\n * will have no effect other than to emit an event which the parent can use to update the binding.\n *\n * Here is a basic example of a stateless RadioButton where the parent component manages the state:\n *\n * ```html\n * <gtx-radio-button [checked]=\"isChecked\"></gtx-checkbox>\n * ```\n */\n@Component({\n    selector: 'gtx-radio-button',\n    templateUrl: './radio-button.tpl.html',\n    providers: [GTX_RADIO_BUTTON_VALUE_ACCESSOR]\n})\nexport class RadioButton implements ControlValueAccessor, OnInit, OnDestroy {\n    /**\n     * Sets the radio button to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * The checked state of the control. When set, the RadioButton will be\n     * in stateless mode.\n     */\n    @Input() get checked(): boolean {\n        return this.inputChecked;\n    }\n    set checked(val: boolean) {\n        this.statelessMode = true;\n        if (val != this.inputChecked) {\n            this.inputChecked = coerceToBoolean(val);\n            if (val && this.group) {\n                this.group.radioSelected(this);\n            }\n            if (val) {\n                this.onChange(this.value);\n            } else if (val === false) {\n                if (this.group) {\n                    this.group.radioSelected(null);\n                }\n                this.onChange(false);\n            }\n            this.change.emit(this.value);\n        }\n    }\n\n    /**\n     * The disabled state of the control\n     */\n    @Input() disabled: boolean = false;\n\n    /**\n     * ID of the control\n     */\n    @Input() id: string = randomID();\n\n    /**\n     * Label for the radio button\n     */\n    @Input() label: string = '';\n\n    /**\n     * Name of the input\n     */\n    @Input() name: string;\n\n    /**\n     * Sets the required state\n     */\n    @Input() required: boolean = false;\n\n    /**\n     * Value associated with this input\n     */\n    @Input() value: any = '';\n\n    /**\n     * Blur event\n     */\n    @Output() blur = new EventEmitter<boolean>(true);\n\n    /**\n     * Focus event\n     */\n    @Output() focus = new EventEmitter<boolean>(true);\n\n    /**\n     * Change event\n     */\n    @Output() change = new EventEmitter<any>(true);\n\n    tabbedFocus: boolean = false;\n    private inputChecked: boolean = false;\n    /**\n     * See note above on stateless mode.\n     */\n    private statelessMode: boolean = false;\n\n    constructor(@Optional() private group: RadioGroup,\n                @Attribute('ngModel') modelAttrib: string,\n                private changeDetector: ChangeDetectorRef) {\n\n        // Pre-set a common input name for grouped input elements\n        if (group) {\n            this.name = group.uniqueName;\n        } else if (modelAttrib) {\n            this.name = modelAttrib;\n        }\n    }\n\n    onBlur(): void {\n        this.blur.emit(this.checked);\n        this.onTouched();\n        this.tabbedFocus = false;\n    }\n\n    onFocus(): void {\n        this.focus.emit(this.checked);\n    }\n\n    @HostListener('keyup', ['$event'])\n      focusHandler(e: KeyboardEvent): void {\n          if (e.keyCode === KeyCode.Tab) {\n              if (!this.tabbedFocus) {\n                  this.tabbedFocus = true;\n              }\n          }\n      }\n\n    writeValue(value: any): void {\n        this.inputChecked = (value === this.value);\n    }\n\n    ngOnInit(): void {\n        if (this.inputChecked) {\n            this.onChange(this.value);\n        }\n\n        if (this.group) {\n            this.group.add(this);\n            if (this.inputChecked) {\n                this.group.radioSelected(this);\n            }\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.group) {\n            this.group.remove(this);\n        }\n    }\n\n    onInputChecked(e: Event, input: HTMLInputElement): boolean {\n        if (e) {\n            e.stopPropagation();\n        }\n        if (this.statelessMode) {\n            let newState = input.checked;\n            if (input.checked !== this.inputChecked) {\n                input.checked = !!this.inputChecked;\n            }\n            this.change.emit(newState);\n            return false;\n        }\n\n        this.inputChecked = true;\n        this.onChange(this.value);\n        this.change.emit(this.value);\n        if (this.group) {\n            this.group.radioSelected(this);\n        }\n        return true;\n    }\n\n    registerOnChange(fn: Function): void { this.onChange = fn; }\n    registerOnTouched(fn: Function): void { this.onTouched = fn; }\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.changeDetector.markForCheck();\n    }\n\n    private onChange: Function = (_: any) => {};\n    private onTouched: Function = () => {};\n}\n\nfunction randomID(): string {\n    return 'radio-' + Math.random().toString(36).substr(2);\n}\n","<div>\n    <input type=\"radio\"\n           [attr.id]=\"id\"\n           [attr.name]=\"name\"\n           [checked]=\"checked\"\n           [disabled]=\"disabled\"\n           [required]=\"required\"\n           [value]=\"value\"\n\n           (blur)=\"onBlur()\"\n           (focus)=\"onFocus()\"\n           (change)=\"onInputChecked($event, input)\"\n\n           [class.tabbed]=\"tabbedFocus\"\n\n           #input\n    >\n    <label [attr.for]=\"id\" (click)=\"input.focus()\">{{ label }}</label>\n</div>\n","import {ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\n\nconst GTX_RANGE_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Range),\n    multi: true\n};\n\n/**\n * The Range wraps the native `<input type=\"range\">` form element.\n *\n * ```html\n * <gtx-range [(ngModel)]=\"latitude\" step=\"5\" min=\"-180\" max=\"180\"></gtx-range>\n * ```\n */\n@Component({\n    selector: 'gtx-range',\n    templateUrl: './range.tpl.html',\n    providers: [GTX_RANGE_VALUE_ACCESSOR]\n})\nexport class Range implements ControlValueAccessor {\n    /**\n     * Sets the input field to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Sets the disabled state of the input.\n     */\n    @Input() disabled: boolean = false;\n\n    /**\n     * Sets a label for the slider.\n     */\n    @Input() label: string = '';\n\n    /**\n     * Maximum allowed value.\n     */\n    @Input() max: number;\n\n    /**\n     * Minimum allowed value.\n     */\n    @Input() min: number;\n\n    /**\n     * Name of the input.\n     */\n    @Input() name: string;\n\n    /**\n     * Sets the required state.\n     */\n    @Input() required: boolean = false;\n\n    /**\n     * Amount to increment by when sliding.\n     */\n    @Input() step: number;\n\n    /**\n     * Sets the value of the slider.\n     */\n    @Input() value: number;\n\n    /**\n     * Sets an id for the slider.\n     */\n    @Input() id: string;\n\n    /**\n     * Set to false to not show the thumb label. Defaults to true.\n     */\n    @Input()\n    get thumbLabel(): boolean {\n        return this.showThumbLabel;\n    }\n    set thumbLabel(value: boolean) {\n        this.showThumbLabel = coerceToBoolean(value);\n    }\n\n    /**\n     * Blur event\n     */\n    @Output() blur = new EventEmitter<number>();\n\n    /**\n     * Focus event\n     */\n    @Output() focus = new EventEmitter<number>();\n\n    /**\n     * Change event\n     */\n    @Output() change = new EventEmitter<number>();\n\n\n    active: boolean = false;\n    thumbLeft: string = '';\n    currentValue: number;\n    private showThumbLabel: boolean = true;\n\n\n    @ViewChild('input', { static: true }) private inputElement: ElementRef;\n\n    private get canModify(): boolean {\n        return !this.disabled;\n    }\n\n    // ValueAccessor members\n    onChange = (value: any): void => { };\n    onTouched = (): void => { };\n\n    constructor(private elementRef: ElementRef,\n                private changeDetector: ChangeDetectorRef) {}\n\n    ngOnInit(): void {\n        this.writeValue(this.value);\n    }\n\n    onBlur(e: FocusEvent): void {\n        e.stopPropagation();\n        const value = this.getValueFromEvent(e);\n        this.blur.emit(value);\n        this.change.emit(value);\n    }\n\n    /**\n     * IE11 only fires the 'change' event rather than the 'input' event as the range input value is changed.\n     */\n    onChangeEvent(e: Event): void | boolean {\n        e.stopPropagation();\n        if (this.canModify) {\n            const value = this.currentValue = this.getValueFromEvent(e);\n            this.onChange(value);\n            this.change.emit(value);\n        }\n    }\n\n    onFocus(e: FocusEvent): void {\n        e.stopPropagation();\n        this.focus.emit(this.value);\n    }\n\n    /**\n     * Browsers other than IE11 fire 'input' continuously as the range value is changed, and fires 'change' on mouseup.\n     */\n    onInput(e: Event): void {\n        e.stopPropagation();\n        if (this.canModify) {\n            const value = this.currentValue = this.getValueFromEvent(e);\n            this.onChange(value);\n            this.change.emit(value);\n        }\n    }\n\n    onMousedown(e: MouseEvent): void {\n        if (this.canModify) {\n            this.active = true;\n            this.setThumbPosition(e);\n        }\n    }\n\n    onMouseup(): void {\n        this.active = false;\n\n    }\n\n    onMousemove(e: MouseEvent): void {\n        if (this.canModify) {\n            if (this.active) {\n                this.setThumbPosition(e);\n            }\n        }\n    }\n\n    writeValue(value: any): void {\n        if (value !== this.currentValue) {\n            this.currentValue = value;\n            this.inputElement.nativeElement.value = this.currentValue;\n        }\n    }\n\n    registerOnChange(fn: (newValue: number) => void): void {\n        this.onChange = (value: any) => fn(Number(value));\n    }\n\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.changeDetector.markForCheck();\n    }\n\n    private getValueFromEvent(e: Event): number {\n        const target: HTMLInputElement = <HTMLInputElement> e.target;\n        return Number(target.value);\n    }\n\n    private setThumbPosition(e: MouseEvent): void {\n        const endMargin = 8;\n        const rangeWrapper = this.elementRef.nativeElement.querySelector('.range-field') as HTMLDivElement;\n        const boundingRect = rangeWrapper.getBoundingClientRect();\n        const wrapperLeft = boundingRect.left;\n        const wrapperWidth = boundingRect.width;\n        let left = e.pageX - wrapperLeft;\n        if (left < endMargin) {\n            left = endMargin;\n        } else if (left > wrapperWidth - endMargin) {\n            left = wrapperWidth - endMargin;\n        }\n        this.thumbLeft = left + 'px';\n    }\n}\n","<div class=\"range-field\">\n    <input type=\"range\"\n           [disabled]=\"disabled\"\n           [attr.max]=\"max\"\n           [attr.min]=\"min\"\n           [attr.name]=\"name\"\n           [required]=\"required\"\n           [attr.step]=\"step\"\n\n           [attr.id]=\"id\"\n\n           (blur)=\"onBlur($event)\"\n           (change)=\"onChangeEvent($event)\"\n           (focus)=\"onFocus($event)\"\n           (input)=\"onInput($event)\"\n           (mousedown)=\"onMousedown($event)\"\n           (mouseup)=\"onMouseup()\"\n           (mousemove)=\"onMousemove($event)\"\n\n           #input\n    >\n    <span class=\"thumb\"\n          [class.hidden]=\"!thumbLabel\"\n          [class.active]=\"active\"\n          [style.left]=\"thumbLeft\">\n        <span class=\"value\">{{ currentValue }}</span>\n    </span>\n</div>\n<label [attr.for]=\"id\">{{ label }}</label>\n","import {Component, ChangeDetectorRef, Input, Output, EventEmitter, forwardRef} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nconst GTX_SEARCH_BAR_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => SearchBar),\n    multi: true\n};\n\n/**\n * The SearchBar component should be the primary search input for the app. It should be\n * located near the top of the screen, below the [TopBar](#/top-bar).\n *\n * ```html\n * <gtx-search-bar [query]=\"searchQuery\"\n *                 (change)=\"onChange($event)\"\n *                 (search)=\"search($event)\">\n * </gtx-search-bar>\n * ```\n *\n * ## Use With NgModel\n * The search query can be bound with `NgModel`, which can be useful for implementing a reset function:\n *\n * ```html\n * <gtx-search-bar [(ngModel)]=\"searchQuery\"\n *                 (clear)=\"searchQuery = ''\">\n * </gtx-search-bar>\n * ```\n *\n * ## Content Projection\n * Content inside the `<gtx-search-bar>` tags will be projected inside the component, to the left of the\n * search bar. This can be used, for example, to display current filters being applied to the search.\n *\n * ```html\n * <gtx-search-bar>\n *      <div class=\"chip\">Tag 1<i class=\"material-icons\">close</i></div>\n * </gtx-search-bar>\n * ```\n *\n * ## Custom Icons\n * Icons in the `<gtx-search-bar>` can be replaced with custom ones.\n *\n * ```html\n * <gtx-search-bar submitIcon=\"filter_list\"\n *                 clearIcon=\"undo\">\n * </gtx-search-bar>\n * ```\n */\n@Component({\n    selector: 'gtx-search-bar',\n    templateUrl: './search-bar.tpl.html',\n    providers: [GTX_SEARCH_BAR_VALUE_ACCESSOR]\n})\nexport class SearchBar implements ControlValueAccessor {\n    /**\n     * Sets the input field to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Value that pre-fills the search input with a string value.\n     */\n    @Input() query: string = '';\n\n    /**\n     * Sets the icon displayed for the submit button\n     */\n    @Input() submitIcon: string = 'search';\n\n    /**\n     * Sets the icon displayed for the clear button\n     */\n    @Input() clearIcon: string = 'close';\n\n    /**\n     * Placeholder text which is shown when no text is entered.\n     */\n    @Input() placeholder = 'Search';\n\n    /**\n     * Setting this attribute will prevent the \"clear\" button from being displayed\n     * when the query is non-empty.\n     */\n    @Input()\n    get hideClearButton(): boolean {\n        return this._hideClearButton === true;\n    }\n    set hideClearButton(val: boolean) {\n        this._hideClearButton = val != null && val !== false;\n    }\n\n    /**\n     * Fired when either the search button is clicked, or\n     * the \"enter\" key is pressed while the input has focus.\n     */\n    @Output() search = new EventEmitter<string>();\n\n    /**\n     * Fired whenever the value of the input changes.\n     */\n    @Output() change = new EventEmitter<string>();\n\n    /**\n     * Fired when the clear button is clicked.\n     */\n    @Output() clear = new EventEmitter<boolean>();\n\n    private _hideClearButton: boolean = false;\n\n    // ValueAccessor members\n    onChange: any = (_: any) => {};\n    onTouched: any = () => {};\n\n    constructor(private changeDetector: ChangeDetectorRef) { }\n\n    doSearch(): void {\n        this.search.emit(this.query);\n    }\n\n    /**\n     * Handler for pressing \"enter\" key.\n     */\n    onKeyDown(event: KeyboardEvent): void {\n        if (event.keyCode === 13) {\n            this.doSearch();\n        }\n    }\n\n    onInputChange(event: string): void {\n        this.query = event;\n        if (typeof event === 'string') {\n            this.onChange(event);\n            this.change.emit(event);\n        }\n    }\n\n    onInputBlur(event: string): void {\n        if (typeof event === 'string') {\n            this.onTouched(event);\n        }\n    }\n\n    writeValue(value: any): void {\n        this.query = value;\n        this.changeDetector.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void { this.onChange = fn; }\n    registerOnTouched(fn: Function): void { this.onTouched = fn; }\n}\n","<div class=\"contents\">\n    <ng-content></ng-content>\n</div>\n<div class=\"input\">\n    <gtx-input [placeholder]=\"placeholder\"\n               [value]=\"query\"\n               (keydown)=\"onKeyDown($event)\"\n               (blur)=\"onInputBlur($event)\"\n               (change)=\"onInputChange($event)\"></gtx-input>\n</div>\n<div class=\"clear-button\" *ngIf=\"!hideClearButton && query && query !== ''\">\n    <gtx-button icon type=\"secondary\" (click)=\"clear.emit(true)\">\n        <i class=\"material-icons\">{{ clearIcon }}</i>\n    </gtx-button>\n</div>\n<div class=\"submit-button\">\n    <gtx-button flat (click)=\"doSearch()\">\n        <i class=\"material-icons\">{{ submitIcon }}</i>\n    </gtx-button>\n</div>\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    ViewChild\n} from '@angular/core';\nimport {\n    animate,\n    animateChild,\n    AnimationBuilder,\n    AnimationPlayer,\n    keyframes,\n    query,\n    state,\n    style,\n    transition,\n    trigger\n} from '@angular/animations';\n\nimport {UserAgentRef} from '../modal/user-agent-ref';\n\n// must export and be a function (not arrow function expression) to prevent ngc errors\nexport function animateCubicBezier(millis: number): any {\n    return animate(`${millis}ms cubic-bezier(0.215, 0.61, 0.355, 1)`);\n}\n\n/**\n * The SideMenu component is an off-canvas menu with a toggle button which can be\n * used to toggle the state. The component itself is stateless, and relies on the value passed in as\n * the `opened` prop to set its state. Toggling must also be handled by the host component.\n *\n * The toggle button must be placed within a `<gtx-side-menu-toggle>` element. All other content will be projected\n * into the main body of the menu.\n *\n * **Note**: For the side menu to be positioned correctly, its container must have the `position` CSS attribute set.\n *\n * ```html\n * <gtx-side-menu [opened]=\"displayMenu\" (toggle)=\"displayMenu = $event\">\n *     <gtx-side-menu-toggle>\n *         <button>Toggle</button>\n *     </gtx-side-menu-toggle>\n *     <div class=\"my-menu-content\">\n *         <ul>\n *             <li>Menu item 1</li>\n *             <li>Menu item 2</li>\n *             <li>Menu item 3</li>\n *             <li>Menu item 4</li>\n *             <li>Menu item 5</li>\n *         </ul>\n *     </div>\n * </gtx-side-menu>\n * ```\n */\n@Component({\n    selector: 'gtx-side-menu',\n    templateUrl: './side-menu.tpl.html',\n    animations: [\n        trigger('menuState', [\n            // There seems to be an open Angular bug with leaving animations on IE and Edge,\n            // so we only play that animation if we are not on IE or Edge.\n            // https://github.com/angular/angular/issues/29463\n            // https://jira.gentics.com/browse/SUP-8106\n            state('void', style('*')),\n            state('open', style('*')),\n            state('openIE', style('*')),\n            transition('void => *', [\n                query('@contentState', [animateChild({ delay: 100 })]),\n                animateCubicBezier(300)\n            ]),\n            transition('void => *', animateCubicBezier(300)),\n            transition('open => *', animateCubicBezier(300)),\n        ]),\n        trigger('toggleState', [\n            state('closed', style({ transform: '{{ transform }}' }), { params: { transform: 'translateX(0)' } }),\n            state('open', style({ transform: '{{ transform }}' }), { params: { transform: 'translateX(0)' } }),\n            transition('* => *', animateCubicBezier(300))\n        ]),\n        trigger('overlayState', [\n            state('closed', style({ opacity: 0 })),\n            state('open', style({ opacity: 1 })),\n            transition('* => *', animateCubicBezier(600))\n        ]),\n        trigger('contentState', [\n            state('void', style('*')),\n            state('*', style({ opacity: 1, transform: 'translateX(0)' })),\n            transition('* => *', animateCubicBezier(400))\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SideMenu {\n\n    /**\n     * Sets the state of the menu: true = opened, false = closed.\n     */\n    @HostBinding('class.opened')\n    @Input() opened: boolean = false;\n    /**\n     * Sets whether the menu should appear to the left or the right of the screen. Defaults to 'left'.\n     */\n    @Input() position: 'left' | 'right' = 'left';\n    /**\n     * Sets the width of the menu. Should be a valid CSS width value, e.g. '400px', '20vw', '30em'. **Note** that\n     * percentage values should be avoided, since they will produce unexpected results.\n     */\n    @Input() width: string = '300px';\n    /**\n     * The distance in pixels between the edge of the container and the toggle button when the menu is closed.\n     */\n    @Input() toggleButtonOffset: number = 20;\n\n    @HostBinding('class.align-left')\n    get alignmentClassLeft(): boolean {\n        return this.position === 'left';\n    }\n\n    @HostBinding('class.align-right')\n    get alignmentClassRight(): boolean {\n        return this.position === 'right';\n    }\n\n    get animationParams(): any {\n        const buttonWidth = parseInt(this.toggleButton.nativeElement.offsetWidth);\n        let transform = this.position === 'left' ?\n            `translateX(${this.toggleButtonOffset}px)` :\n            `translateX(-${this.toggleButtonOffset}px)`;\n        if (this.opened) {\n            // IE11 cannot use `calc()` with transform properties, so instead we can just use multiple separate\n            // translateX() statements.\n            transform = this.position === 'left' ?\n                `translateX(${this.responsiveWidth}) translateX(-${buttonWidth}px) translateX(-${this.toggleButtonOffset}px)` :\n                `translateX(-${this.responsiveWidth}) translateX(+${buttonWidth}px) translateX(+${this.toggleButtonOffset}px)`;\n        }\n        return {\n            value: this.opened ? 'open' : 'closed',\n            params: { transform }\n        };\n    }\n\n    get menuAnimationState(): any {\n        // There seems to be an open Angular bug with leaving animations on IE and Edge,\n        // so we only play that animation if we are not on IE or Edge.\n        // https://github.com/angular/angular/issues/29463\n        // https://jira.gentics.com/browse/SUP-8106\n        const openState = !this.userAgentRef.isEdge && !this.userAgentRef.isIE11 ? 'open' : 'openIE';\n        return this.opened ? openState : 'void';\n    }\n\n    @ViewChild('toggleButton', { static: true }) toggleButton: ElementRef;\n\n    /**\n     * Fired when the toggle button is clicked. The value is equal to\n     * the value of the `opened`\n     */\n    @Output() toggle = new EventEmitter<boolean>();\n\n    public player: AnimationPlayer;\n    private ancestorWithWidth: HTMLElement;\n\n    /**\n     * Returns the width of the menu, taking into account screen width\n     */\n    get responsiveWidth(): string {\n        const screenWidth = window.innerWidth;\n        if (screenWidth < 600) {\n            return `${this.ancestorWithWidth.offsetWidth}px`;\n        }\n        return this.width;\n    }\n\n    get menuParams(): string {\n        return this.opened ? 'open' : 'closed';\n    }\n\n    constructor(\n        private animationBuilder: AnimationBuilder,\n        private elementRef: ElementRef,\n        private userAgentRef: UserAgentRef\n    ) {}\n\n    /**\n     * We need to know the width of the element in which the SideMenu is nested. Here we traverse the DOM tree\n     * looking for the first ancestor element with a non-zero offsetWidth.\n     */\n    ngAfterViewInit(): void {\n        let ancestorWithWidth: HTMLElement | null;\n        let currentElement = this.elementRef.nativeElement;\n        const maxLevels = 10;\n        let i = 0;\n        while (!ancestorWithWidth && i < maxLevels) {\n            const parent = currentElement.parentElement;\n            if (0 < parent.offsetWidth) {\n                ancestorWithWidth = parent;\n            }\n            currentElement = parent;\n            i++;\n        }\n        this.ancestorWithWidth = ancestorWithWidth;\n    }\n\n    /**\n     * The AnimationBuilder is used here because the desired animation result could not be achieved using the\n     * metadata-based approach alone. This issue describes the problem: https://github.com/angular/angular/issues/20796\n     *\n     * If that issue gets resolved then this could be simplified and we may be able to drop the AnimationBuilder\n     * and move this logic into the animationParams getter.\n     */\n    animationStarted(event: any): void {\n        const menu = this.elementRef.nativeElement.querySelector('.menu');\n\n        if (menu) {\n            if (this.player) {\n                this.player.destroy();\n            }\n            const sign = this.position === 'right' ? '' : '-';\n            let startX = '0';\n            let endX = `${sign}${this.responsiveWidth}`;\n            if (event.toState === 'open') {\n                [startX, endX] = [endX, startX];\n            }\n            const factory = this.animationBuilder.build([\n                animate('0.3s', keyframes([\n                    style({transform: `translateX(${startX})`, offset: 0 }),\n                    style({transform: `translateX(${endX})`, offset: 0.7 })\n                ]))\n            ]);\n            this.player = factory.create(menu, {});\n            this.player.play();\n        }\n    }\n\n    toggleState(): void {\n        this.toggle.emit(!this.opened);\n    }\n\n    close(): void {\n        if (this.opened === true) {\n            this.toggleState();\n        }\n    }\n}\n\n@Directive({\n    selector: 'gtx-side-menu-toggle'\n})\nexport class SideMenuToggle {}\n","<div class=\"side-menu-overlay\"\n     [@overlayState]=\"animationParams\"\n     (click)=\"close()\"></div>\n\n<div #toggleButton\n     [@toggleState]=\"animationParams\"\n     (@toggleState.start)=\"animationStarted($event)\"\n     class=\"toggle-button\"\n     (click)=\"toggleState()\">\n    <ng-content select=\"gtx-side-menu-toggle\"></ng-content>\n</div>\n\n<div class=\"menu\"\n     [@menuState]=\"menuAnimationState\"\n     [style.width]=\"responsiveWidth\"\n     *ngIf=\"opened\">\n    <div [@contentState]=\"animationParams\"\n        class=\"menu-content\">\n        <ng-content></ng-content>\n    </div>\n</div>\n","import {Component, Directive, ElementRef, EventEmitter, Input, Output, SimpleChanges, HostBinding} from '@angular/core';\nimport * as Sortable from 'sortablejs';\n\nexport type sortFn<T> = (source: T[], byReference?: boolean) => T[];\n\n/**\n * An augmented version of the event object returned by each of the Sortablejs callbacks, which can then be emitted up\n * to the consuming component.\n */\nexport interface ISortableEvent extends Sortable.SortableEvent {\n    sort: sortFn<any>;\n}\n\nexport interface ISortableMoveEvent extends Sortable.MoveEvent {\n    sort: sortFn<any>;\n}\n\nexport interface SortableInstance {\n    el: HTMLElement;\n    nativeDraggable: boolean;\n    options: any;\n}\n\nexport type PutPullType = true | false | 'clone';\nexport interface PutPullFn {\n    (to: SortableInstance, from: SortableInstance): PutPullType;\n}\n\nexport type ISortableGroupOptions = Sortable.GroupOptions;\n\nexport type SortableGroup = string | ISortableGroupOptions;\n\n/**\n * Enables the creation of lists which can be re-ordered by dragging the items. Built on top of\n * [sortablejs](https://github.com/RubaXa/Sortable). Note that this component does not do the actual\n * sorting of the list data - this logic must be implemented by the consumer of the component. However,\n * this component provides a convenience `sort()` function which considerably simplifies this process - see below.\n *\n * ```html\n * <gtx-sortable-list (dragEnd)=\"sortList($event)\">\n *     <gtx-sortable-item *ngFor=\"let item of items\">\n *         <div>{{ item }}</div>\n *     </gtx-sortable-item>\n * </gtx-sortable-list>\n * ```\n *\n * ```typescript\n * items = ['foo', 'bar', 'baz'];\n * sortList(e: ISortableEvent): void {\n *     this.items = e.sort(this.items);\n * }\n * ```\n *\n * ## `ISortableEvent`\n *\n * The `dragEnd` event emits an `ISortableEvent` object. For a full listing of its properties, see the source. Below\n * are the more important properties:\n *\n * | Property       | Type         | Description |\n * | --------       | ------------ | ----------- |\n * | **oldIndex**   | `number`     | The index in the list that the item started from |\n * | **newIndex**   | `number`     | The index in the list that the item was dropped |\n * | **sort()**     | `Function`   | A pre-configured sort function - see below |\n *\n * ## `ISortableEvent.sort()`\n *\n * When the `dragEnd` event is fired, the event object exposes a `sort(array, byReference)` method. This is a convenience method for\n * sorting an array, so that the consumer of this component does not have to re-implement array sorting\n * each time the component is used.\n *\n * The sort function expects an array, and returns a new copy of that array, unless\n * `byReference === true`, in which case the original array is mutated and returned.\n *\n * ```typescript\n * items = [1, 2, 3, 4, 5];\n *\n * sortList(e: ISortableEvent): void {\n *     // assume that the 2nd item was dragged and dropped in the last place.\n *     this.items = e.sort(this.items);\n *     // this.items = [1, 3, 4, 5, 2]\n * }\n * ```\n */\n@Component({\n    selector: 'gtx-sortable-list',\n    templateUrl: './sortable-list.tpl.html'\n})\nexport class SortableList {\n\n    /**\n     * Set to true to disable sorting. i.e. items will no longer be draggable.\n     */\n    @Input() disabled: boolean = false;\n\n    /**\n     * Specify a group to allow dragging items between SortableLists. See\n     * [the Sortable docs](https://github.com/RubaXa/Sortable/blob/473bd8fecfd2f2834e4187fb033dfa6912eb3b98/README.md#group-option)\n     * for more information.\n     */\n    @Input() group: SortableGroup;\n\n    /**\n     * Invoked when an item is moved in the list or between lists. Return `false` to cancel the move.\n     */\n    @Input() onMove: (e: ISortableMoveEvent) => boolean;\n\n    /**\n     * Fired when an item drag is started.\n     */\n    @Output() dragStart = new EventEmitter<ISortableEvent>();\n\n    /**\n     * Fired when an item has been dragged and dropped to a new position in the list.\n     */\n    @Output() dragEnd = new EventEmitter<ISortableEvent>();\n\n    /**\n     * Fired when an item has been dropped onto this list from a different list.\n     */\n    @Output() addItem = new EventEmitter<ISortableEvent>();\n\n    /**\n     * Fired when creating a clone of element.\n     */\n    @Output() cloneItem = new EventEmitter<ISortableEvent>();\n\n\n    /**\n     * Fired when an item has been remove from this list to a different list.\n     */\n    @Output() removeItem = new EventEmitter<ISortableEvent>();\n\n    @HostBinding('class.gtx-dragging') dragging = false;\n    \n    private sortable: Sortable;\n\n    constructor(private elementRef: ElementRef) {}\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (this.sortable) {\n            this.sortable.option('disabled', this.disabled);\n        }\n    }\n\n    ngOnInit(): void {\n        this.sortable = Sortable.create(this.elementRef.nativeElement, {\n            animation: 150,\n            setData: (dataTransfer: any, dragEl: Element): void => {},\n            // dragging started\n            onStart: (e: ISortableEvent): void => {\n                this.dragging = true;\n                this.dragStart.emit(e);\n            },\n            // dragging ended\n            onEnd: (e: ISortableEvent): void => {\n                e.sort = this.sortFactory(e);\n                this.dragging = false;\n                this.dragEnd.emit(e);\n            },\n            // Element is dropped into the list from another list\n            onAdd: (e: ISortableEvent): void => {\n                this.addItem.emit(e);\n            },\n            // Changed sorting within list\n            onUpdate: (e: ISortableEvent): void => {},\n            // Called by any change to the list (add / update / remove)\n            onSort: (e: ISortableEvent): void => {},\n            // Element is removed from the list into another list\n            onRemove: (e: ISortableEvent): void => {\n                this.removeItem.emit(e);\n            },\n            // Attempt to drag a filtered element\n            onFilter: (e: ISortableEvent): void => {},\n            // Event when you move an item in the list or between lists\n            onMove: (e: ISortableMoveEvent): any => {\n                if (typeof this.onMove === 'function') {\n                    return this.onMove(e);\n                }\n            }\n        });\n\n        this.sortable.option('onClone', (e: ISortableEvent) => {\n            this.cloneItem.emit(e);\n        });\n\n        if (this.group) {\n            this.sortable.option('group', this.group);\n        }\n    }\n\n    ngAfterContentInit(): void {\n        let dragHandles = this.elementRef.nativeElement.querySelectorAll('gtx-drag-handle');\n        if (dragHandles && 0 < dragHandles.length) {\n            this.sortable.option('handle', '.gtx-drag-handle');\n        }\n    }\n\n    /**\n     * Returns a pre-configured sort function which uses the indexes of the sort operation.\n     */\n    sortFactory(e: ISortableEvent): sortFn<any> {\n        return (source: any[], byReference: boolean = false) => {\n            let result: any[] = byReference ? source : source.slice();\n            let oldIndex: number = e.oldIndex;\n            let newIndex: number = e.newIndex;\n\n            // Check that index i is an integer\n            const isInt = (i: any): boolean => Number(i) === i && i % 1 === 0;\n            // Check that index i is within the bounds of the array\n            const inBounds = (i: number): boolean => 0 <= i && i < result.length;\n            // Valid if numeric and in bounds\n            const valid = (i: any): boolean => isInt(i) && inBounds(i);\n\n            if (oldIndex !== newIndex && valid(oldIndex) && valid(newIndex)) {\n                result.splice(newIndex, 0, result.splice(oldIndex, 1)[0]);\n            }\n\n            return result;\n        };\n    }\n}\n\n@Directive({\n    selector: 'gtx-sortable-item'\n})\nexport class SortableItem {}\n\n\n@Component({\n    selector: 'gtx-drag-handle',\n    template: `<div class=\"gtx-drag-handle\"><i class=\"material-icons\">drag_handle</i></div>`\n})\nexport class SortableListDragHandle {}\n","<ng-content></ng-content>\n","import {Component} from '@angular/core';\n\n@Component({\n    selector: 'gtx-split-button-primary-action',\n    template: '<ng-content></ng-content>'\n})\nexport class SplitButtonPrimaryAction { }\n","import {AfterViewInit, Directive, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\n\n/**\n * Handles autofocus for all ui-core form elements.\n */\n@Directive({\n    selector: `\n        gtx-button[autofocus],\n        gtx-checkbox[autofocus],\n        gtx-date-time-picker[autofocus],\n        gtx-file-picker[autofocus],\n        gtx-input[autofocus],\n        gtx-radio-button[autofocus],\n        gtx-search-bar[autofocus],\n        gtx-select[autofocus],\n        gtx-textarea[autofocus]`\n})\nexport class AutofocusDirective implements AfterViewInit, OnChanges, OnDestroy {\n\n    @Input() get autofocus(): boolean {\n        return this._autofocus;\n    }\n    set autofocus(value: boolean) {\n        this._autofocus = value != null && value !== false;\n    }\n\n    private _autofocus: boolean = false;\n    private inputElement: HTMLButtonElement | HTMLInputElement | HTMLDivElement | HTMLTextAreaElement;\n    private timeout: any;\n\n\n    constructor(private element: ElementRef) { }\n\n    ngAfterViewInit(): void {\n        if (this.element && this.element.nativeElement) {\n            this.inputElement = this.element.nativeElement.querySelector('input, .select-input, textarea, button');\n\n            if (this._autofocus) {\n                if (!(this.inputElement instanceof HTMLDivElement)) {\n                    this.inputElement.autofocus = true;\n                }\n                this.focusNativeInput();\n            }\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const change = changes['autofocus'];\n        if (change && this.inputElement) {\n            if (!(this.inputElement instanceof HTMLDivElement)) {\n                this.inputElement.autofocus = this._autofocus;\n            }\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.cleanupTimer();\n        this.inputElement = undefined;\n    }\n\n    // HTML autofocus does not work with ngIf or modals.\n    // Therefore, the input element is focused programatically.\n    private focusNativeInput(): void {\n        this.cleanupTimer();\n        this.timeout = setTimeout(() => {\n            this.inputElement.focus();\n\n            if (typeof (<any> HTMLInputElement.prototype).scrollIntoViewIfNeeded === 'function') {\n                // Chrome only (1/2017)\n                (<any> this.inputElement).scrollIntoViewIfNeeded();\n            } else {\n                // Browser support varies\n                try {\n                    this.inputElement.scrollIntoView({\n                        behavior: 'smooth',\n                        block: 'nearest',\n                        inline: 'nearest'\n                    });\n                } catch (err) {\n                    try {\n                        this.inputElement.scrollIntoView({\n                            behavior: 'smooth',\n                            block: 'start',\n                            inline: 'start'\n                        });\n                    } catch (err) {\n                        this.inputElement.scrollIntoView({\n                            block: 'start'\n                        });\n                    }\n                }\n            }\n        }, 50);\n    }\n\n    private cleanupTimer(): void {\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n            this.timeout = undefined;\n        }\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    Input,\n    OnDestroy,\n    QueryList\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\nimport {DropdownItem} from '../dropdown-list/dropdown-item.component';\nimport {SplitButtonPrimaryAction} from './split-button-primary-action.component';\n\n/**\n * A split button component.\n *\n * The main content of the button and the handler of the main click event is specified by\n * using a `<gtx-split-button-primary-action>` child element.\n *\n * Secondary actions can be defined using `<gtx-dropdown-item>` child elements and\n * their click handlers. If secondary actions are defined, a dropdown trigger\n * will be displayed to the right of the main content.\n *\n * All input properties of `<gtx-button>`, except for `icon` and `submit` are supported.\n *\n * This component depends on the `<gtx-overlay-host>` being present in the app.\n *\n * ```html\n * <gtx-split-button>\n *     <gtx-split-button-primary-action (click)=\"save()\">Save Document</gtx-split-button-primary-action>\n *     <gtx-dropdown-item (click)=\"saveAndPublish()\">Save and Publish</gtx-dropdown-item>\n *     <gtx-dropdown-item (click)=\"saveAndEmail()\">Save and Send via E-Mail</gtx-dropdown-item>\n * </gtx-split-button>\n * ```\n */\n@Component({\n    selector: 'gtx-split-button',\n    templateUrl: './split-button.tpl.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SplitButton implements AfterViewInit, OnDestroy {\n\n    /**\n     * Sets the input field to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Specify the size of the button. Can be \"small\", \"regular\" or \"large\".\n     */\n    @Input() size: 'small' | 'regular' | 'large' = 'regular';\n\n    /**\n     * Type determines the style of the button. Can be \"default\", \"secondary\",\n     * \"success\", \"warning\" or \"alert\".\n     */\n    @Input() type: 'default' | 'secondary' | 'success' | 'warning' | 'alert' = 'default';\n\n    /**\n     * Setting the \"flat\" attribute gives the button a transparent background\n     * and only depth on hover.\n     */\n    @Input()\n    get flat(): boolean {\n        return this.isFlat;\n    }\n    set flat(value: boolean) {\n        this.isFlat = coerceToBoolean(value);\n    }\n\n    /**\n     * Controls whether the button is disabled.\n     */\n    @Input()\n    get disabled(): boolean {\n        return this.isDisabled;\n    }\n    set disabled(value: boolean) {\n        this.isDisabled = coerceToBoolean(value);\n    }\n\n    @ContentChild(SplitButtonPrimaryAction, { read: ElementRef, static: true })\n    primaryAction: ElementRef;\n\n    @ContentChildren(DropdownItem)\n    secondaryActions: QueryList<DropdownItem>;\n\n    isFlat = false;\n    isDisabled = false;\n\n    private queryListSub: Subscription;\n\n    constructor(private changeDetector: ChangeDetectorRef) {}\n\n    ngAfterViewInit(): void {\n        this.queryListSub = this.secondaryActions.changes.subscribe(\n            () => this.changeDetector.markForCheck()\n        );\n        this.secondaryActions.notifyOnChanges();\n    }\n\n    ngOnDestroy(): void {\n        if (this.queryListSub) {\n            this.queryListSub.unsubscribe();\n            this.queryListSub = null;\n        }\n    }\n\n    /**\n     * If the user does not click the primary action content itself, but the button around it,\n     * this method is used to trigger a click event on the primary action content.\n     */\n    onPrimaryButtonClick(event: Event): void {\n        if (this.primaryAction && this.isFromPrimaryButton(event)) {\n            this.primaryAction.nativeElement.click();\n        }\n    }\n\n    /**\n     * Returns true if the event was fired by the primary `gtx-button` element or one of its children,\n     * but not by the `gtx-split-button-primary-action` or one of its children.\n     */\n    private isFromPrimaryButton(event: Event): boolean {\n        if (event && event.srcElement && event.srcElement instanceof Node) {\n            // We traverse the DOM tree upwards from the srcElement.\n            // If we first find a gtx-split-button-primary-action, the click came from\n            // inside the primary action content.\n            // If we find a gtx-button first, the click didn't come from inside the primary action content.\n            let currNode: Node = event.srcElement;\n            do {\n                switch (currNode.nodeName) {\n                    case 'GTX-BUTTON':\n                        return true;\n                    case 'GTX-SPLIT-BUTTON-PRIMARY-ACTION':\n                        return false;\n                    default:\n                        break;\n                }\n            } while (currNode = currNode.parentNode);\n        }\n        return false;\n    }\n\n}\n","<div class=\"split-button-wrapper z-depth-1\">\n\n    <gtx-button class=\"primary-button\"\n            [autofocus]=\"autofocus\"\n            [size]=\"size\"\n            [type]=\"type\"\n            [flat]=\"isFlat\"\n            [disabled]=\"isDisabled\"\n            [class.has-secondary-actions]=\"secondaryActions.length > 0\"\n            (click)=\"onPrimaryButtonClick($event)\">\n        <ng-content select=\"gtx-split-button-primary-action\"></ng-content>\n    </gtx-button>\n\n    <ng-container *ngIf=\"secondaryActions.length > 0\">\n\n        <div class=\"spacer-line\"></div>\n\n        <gtx-dropdown-list align=\"right\" belowTrigger=\"true\">\n            <gtx-dropdown-trigger>\n                <gtx-button class=\"more-trigger\"\n                        [size]=\"size\"\n                        [type]=\"type\"\n                        [flat]=\"isFlat\"\n                        [disabled]=\"isDisabled\">\n                    <icon>arrow_drop_down</icon>\n                </gtx-button>\n            </gtx-dropdown-trigger>\n            <gtx-dropdown-content>\n                <ng-content select=\"gtx-dropdown-item\"></ng-content>\n            </gtx-dropdown-content>\n        </gtx-dropdown-list>\n\n    </ng-container>\n\n</div>\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    Renderer2,\n    SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport { coerceToBoolean } from '../../common/coerce-to-boolean';\n\nexport type FocusType = 'left' | 'right';\n\nexport const CURSOR_STYLE_CLASS = 'gtx-split-view-container-resizing';\n\n/**\n * A container that provides a [\"master-detail\" interface](https://en.wikipedia.org/wiki/Master%E2%80%93detail_interface)\n * with two resizable panels denoted by the `left` and `right` attributes on its children.\n *\n * There should only be a single instance of SplitViewContainer used at a time, and it is intended to be the\n * main structural container of the \"master/detail\" part of the app - i.e. the content listing and editing view.\n *\n * ```html\n * <gtx-split-view-container\n *     [rightPanelVisible]=\"hasContent\"\n *     [(focusedPanel)]=\"splitFocus\">\n *\n *     <div class=\"list-pane\" left>\n *         <!-- Left panel contents -->\n *     </div>\n *\n *     <div class=\"content-pane\" right>\n *         <!-- Right panel contents -->\n *     </div>\n *\n * </gtx-split-view-container>\n * ```\n *\n * ## Setting Scroll Positions\n *\n * The SplitViewContainer instance exposes two public methods which can be used to manually set the `scrollTop`\n * property of either the right or left panels: `.scrollLeftPanelTo()` and `.scrollRightPanelTo()`.\n *\n * This can be used, for example, to scroll the contents pane (right panel) back to the top when the route changes.\n * An example usage follows:\n *\n * ```typescript\n * export class App {\n *   @ViewChild(SplitViewContainer)\n *   private splitViewContainer: SplitViewContainer;\n *\n *   constructor(private router: Router) {\n *       this.subscription = router.subscribe(() => {\n *           // scroll the right panel to the top whenever\n *           // the route changes.\n *           this.splitViewContainer.scrollRightPanelTo(0);\n *       });\n *   }\n * }\n * ```\n */\n@Component({\n    selector: 'gtx-split-view-container',\n    templateUrl: './split-view-container.tpl.html'\n})\nexport class SplitViewContainer implements AfterViewInit, OnChanges, OnDestroy {\n    /**\n     * Tells if a panel is opened on the right side in the split view.\n     * Setting to false will also change {@link focusedPanel}.\n     */\n    @Input() rightPanelVisible: boolean;\n\n    /**\n     * Tells the SplitViewContainer which side should be focused.\n     * Can be used to double-bind the property:\n     * `<split-view-container [(focusedPanel)]=\"property\">`\n     */\n    @Input() focusedPanel: 'left' | 'right' = 'left';\n\n    /**\n     * Width of the left panel in \"large\" layout in percent of the container width.\n     * Use to control split percentage from the parent by double-binding with {@link splitChange}:\n     * `<gtx-split-view-container [(split)]=\"leftWidthPercent\">...</gtx-split-view-container>`\n     */\n    @Input()\n    split: number;\n\n    /** Initial width of the left panel in \"large\" layout in percent of the container width. */\n    @Input()\n    initialSplit: number = 50;\n\n    /**\n     * Emits when the split between the panels is changed. Allows double-binding:\n     * `<split-view-container [(split)]=\"leftWidth\">...</split-view-container>`\n     */\n    @Output()\n    splitChange = new EventEmitter<number>();\n\n    /**\n     * The smallest panel size in percent the left\n     * and right panels will shrink to when resizing.\n     */\n    @Input()\n    minPanelSizePercent: number = 5;\n\n    /**\n     * The smallest panel size in pixels the left\n     * and right panels will shrink to when resizing.\n     */\n    @Input()\n    minPanelSizePixels: number = 20;\n\n    /**\n     * Disable touch swipe gestures when used.\n     */\n    @Input() set noswipe(val: any) {\n        this.isSwipeable = !coerceToBoolean(val);\n\n        // Toggle Hammer gesture recognizers\n        if (this.hammerManager) {\n            this.hammerManager.set({ enable: this.isSwipeable });\n        }\n    }\n\n    /**\n     * Triggers when the right panel is closed.\n     */\n    @Output()\n    rightPanelClosed = new EventEmitter<void>(true);\n\n    /**\n     * Triggers when the right panel is opened.\n     */\n    @Output()\n    rightPanelOpened = new EventEmitter<void>(true);\n\n    /**\n     * Triggers when the left panel is focused.\n     */\n    @Output()\n    leftPanelFocused = new EventEmitter<void>();\n\n    /**\n     * Triggers when the right panel is focused.\n     */\n    @Output()\n    rightPanelFocused = new EventEmitter<void>();\n\n    /**\n     * Triggers when the focused panel changes.\n     * Can be used to double-bind the property:\n     * `<split-view-container [(focusedPanel)]=\"property\">`\n     */\n    @Output()\n    focusedPanelChange = new EventEmitter<'left' | 'right'>();\n\n    /**\n     * Triggers when the user starts resizing the split amount between the panels.\n     * Receives the size of the left panel in % of the container width as argument.\n     */\n    @Output()\n    splitDragStart = new EventEmitter<number>(true);\n\n    /**\n     * Triggers when the user resizes the split amount between the panels.\n     * Receives the size of the left panel in % of the container width as argument.\n     */\n    @Output()\n    splitDragEnd = new EventEmitter<number>(true);\n\n    /** @internal EventTarget for tracking when the mouse leaves the page. */\n    globalEventTarget: any = window.document;\n\n    /** @internal The Element to which cursor styles are applied. */\n    globalCursorStyleTarget: any = window.document && window.document.body;\n\n    @ViewChild('resizeContainer', { static: true }) resizeContainer: ElementRef;\n    @ViewChild('leftPanel', { static: true }) leftPanel: ElementRef;\n    @ViewChild('rightPanel', { static: true }) rightPanel: ElementRef;\n    @ViewChild('resizer', { static: true }) resizer: ElementRef;\n    @ViewChild('visibleResizer', { static: true }) visibleResizer: ElementRef;\n\n    resizing: boolean = false;\n\n    // Actual value used in the template. If the focus is set to the right panel,\n    // but the right panel has no content, the left panel is focused instead.\n    rightPanelActuallyFocused: boolean = false;\n\n    /**\n     * When split is passed by the parent component, only emit events on resize.\n     * Otherwise, the width is managed by the SplitViewContainer.\n     */\n    private widthHandledExternally = false;\n\n    /**\n     * To prevent race conditions by click events, do not emit a focusedPanelChange\n     * when the last change detection changed the focus. Example:\n     *  1. element in left panel is clicked, sets focus to \"right\"\n     *  2. click event bubbles to the SplitViewContainer, leftPanelClicked\n     *  3. focus would be set to the left panel again, but should be ignored\n     */\n    private focusJustChanged = false;\n    private focusJustChangedTimeout: any;\n\n    private isSwipeable = true;\n\n    private resizeMouseOffset: number;\n    private hammerManager: HammerManager;\n    private cleanups: Function[] = [];\n\n    constructor(private ownElement: ElementRef,\n                private changeDetector: ChangeDetectorRef,\n                private renderer: Renderer2) { }\n\n    ngOnInit(): void {\n        if (!this.split) {\n            this.split = this.initialSplit;\n        }\n    }\n\n    ngAfterViewInit(): void {\n        if (!this.ownElement || !this.ownElement.nativeElement) {\n            return;\n        }\n\n        // Allow any layout changes to stabilize (e.g. divs with ngIf showing/hiding)\n        // before we calculate the final position of the SplitViewContainer\n        const timeout = setTimeout(() => this.fitContainerToViewport());\n        this.cleanups.push(() => clearTimeout(timeout));\n\n        this.initSwipeHandler();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['focusedPanel'] || changes['rightPanelVisible']) {\n            // Prevent an invalid state where the SplitViewContainer\n            // has no right panel, but the right panel should be focused.\n            const shouldFocusRightPanel = this.focusedPanel === 'right' && this.rightPanelVisible;\n\n            if (shouldFocusRightPanel !== this.rightPanelActuallyFocused) {\n                this.rightPanelActuallyFocused = shouldFocusRightPanel;\n\n                if (shouldFocusRightPanel) {\n                    this.rightPanelFocused.emit();\n                } else {\n                    this.leftPanelFocused.emit();\n                }\n\n                clearTimeout(this.focusJustChangedTimeout);\n                this.focusJustChanged = true;\n                this.focusJustChangedTimeout = setTimeout(() => {\n                    this.focusJustChanged = false;\n                }, 50);\n            }\n        }\n\n        const rightPanelVisibleChange = changes['rightPanelVisible'];\n        if (rightPanelVisibleChange && !rightPanelVisibleChange.isFirstChange()) {\n            if (rightPanelVisibleChange.currentValue) {\n                this.rightPanelOpened.emit();\n            } else {\n                this.rightPanelClosed.emit();\n            }\n        }\n\n        if (changes['split']) {\n            this.widthHandledExternally = true;\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.cleanups.forEach(cleanup => cleanup());\n        this.cleanups = [];\n        clearTimeout(this.focusJustChangedTimeout);\n        this.destroySwipeHandler();\n    }\n\n    /**\n     * Set the scrollTop of the left panel\n     */\n    public scrollLeftPanelTo(scrollTop: number): void {\n        this.leftPanel.nativeElement.scrollTop = scrollTop;\n    }\n\n    /**\n     * Set the scrollTop of the right panel\n     */\n    public scrollRightPanelTo(scrollTop: number): void {\n        this.rightPanel.nativeElement.scrollTop = scrollTop;\n    }\n\n    leftPanelClicked(): void {\n        if (this.rightPanelActuallyFocused && !this.focusJustChanged) {\n            this.focusedPanelChange.emit('left');\n        }\n    }\n\n    rightPanelClicked(): void {\n        if (!this.rightPanelActuallyFocused && !this.focusJustChanged && this.rightPanelVisible) {\n            this.focusedPanelChange.emit('right');\n        }\n    }\n\n    startResizer(event: MouseEvent): void {\n        if (event.which != 1 || !this.leftPanel.nativeElement) { return; }\n        event.preventDefault();\n\n        const resizeHandle = <HTMLElement & { setCapture(): void, releaseCapture(): void }> event.currentTarget;\n        this.resizeMouseOffset = event.clientX - resizeHandle.getBoundingClientRect().left;\n\n        let mouseMoveTarget = this.globalEventTarget;\n\n        // Use setCapture on older browsers, document:mousemove on newer browsers\n        if (resizeHandle.setCapture) {\n            mouseMoveTarget = resizeHandle;\n            resizeHandle.setCapture();\n            this.cleanups.push(() => resizeHandle.releaseCapture());\n            this.cleanups.push(this.renderer.listen(resizeHandle, 'losecapture', this.endResizing));\n        }\n\n        // Set cursor styles & bind events on document (the Angular way)\n        this.renderer.addClass(this.globalCursorStyleTarget, CURSOR_STYLE_CLASS);\n        this.cleanups.push(\n            () => this.renderer.removeClass(this.globalCursorStyleTarget, CURSOR_STYLE_CLASS),\n            this.renderer.listen(mouseMoveTarget, 'mousemove', this.moveResizer),\n            this.renderer.listen(this.globalEventTarget, 'mouseup', this.endResizing)\n        );\n\n        // Start resizing\n        let resizerXPosition = this.getAdjustedPosition(event.clientX);\n        this.resizing = true;\n        this.visibleResizer.nativeElement.style.left = resizerXPosition + '%';\n        this.changeDetector.markForCheck();\n        this.splitDragStart.emit(resizerXPosition);\n    }\n\n    /**\n     * (hacky) After initializing the view, make this component fill the height of the viewport.\n     * Only applied if the split-view-container element is not styled in the consuming application.\n     */\n    private fitContainerToViewport(): void {\n        const element: HTMLElement = this.ownElement.nativeElement;\n        if ((element.firstElementChild as HTMLElement).offsetParent !== element) {\n            const css: CSSStyleDeclaration = element.style;\n            css.top = element.offsetTop + 'px';\n            css.bottom = css.left = css.right = '0';\n            css.position = 'absolute';\n        }\n    }\n\n    /**\n     * Set up a Hammerjs-based swipe gesture handler to allow swiping between two panes.\n     */\n    private initSwipeHandler(): void {\n        // set up swipe gesture handler\n        this.hammerManager = new Hammer(this.ownElement.nativeElement, { enable: this.isSwipeable });\n        this.hammerManager.on('swipe', (e: HammerInput) => {\n            if (e.pointerType === 'touch') {\n                // Hammerjs represents directions with an enum,\n                // 2 = left, 4 = right.\n                if (e.direction === 4) {\n                    this.leftPanelClicked();\n                }\n                if (e.direction === 2) {\n                    this.rightPanelClicked();\n                }\n            }\n        });\n    }\n\n    private destroySwipeHandler(): void {\n        this.hammerManager.destroy();\n    }\n\n    private moveResizer = (event: MouseEvent) => {\n        let resizerXPosition = this.getAdjustedPosition(event.clientX);\n        this.visibleResizer.nativeElement.style.left = resizerXPosition + '%';\n    }\n\n    private endResizing = (event: MouseEvent) => {\n        const adjustedWith = this.getAdjustedPosition(event.clientX);\n        this.splitChange.emit(adjustedWith);\n        if (!this.widthHandledExternally) {\n            this.split = adjustedWith;\n        }\n\n        this.resizing = false;\n        this.changeDetector.markForCheck();\n        this.cleanups.forEach(cleanup => cleanup());\n        this.cleanups = [];\n        this.splitDragEnd.emit(this.split);\n    }\n\n    /**\n     * Helper function to keep the resize functionality\n     * within its limits (minPanelSizePixels & minPanelSizePercent).\n     * @return Returns the adjusted X position in % of the container width.\n     */\n    private getAdjustedPosition(mouseClientX: number): number {\n        const container: HTMLElement = <HTMLElement> this.resizeContainer.nativeElement;\n        const containerOffset: number = container.getBoundingClientRect().left;\n        const containerWidth: number = container.clientWidth;\n        const resizerWidth: number = (<HTMLElement> this.resizer.nativeElement).offsetWidth;\n        const maxXPixels: number = containerWidth - resizerWidth - this.minPanelSizePixels;\n        const maxXPercent: number = 100 * (1 - resizerWidth / containerWidth) - this.minPanelSizePercent;\n\n        let relativeX: number = mouseClientX - this.resizeMouseOffset - containerOffset;\n        if (relativeX < this.minPanelSizePixels) {\n            relativeX = this.minPanelSizePixels;\n        } else if (relativeX > maxXPixels) {\n            relativeX = maxXPixels;\n        }\n\n        let percentX: number = 100 * (relativeX / containerWidth);\n        if (percentX < this.minPanelSizePercent) {\n            percentX = this.minPanelSizePercent;\n        } else if (percentX > maxXPercent) {\n            percentX = maxXPercent;\n        }\n\n        return percentX;\n    }\n}\n","<div class=\"slideable\"\n     [class.hasRightPanel]=\"rightPanelVisible\"\n     [class.hasNoRightPanel]=\"!rightPanelVisible\"\n     [class.focusedRight]=\"rightPanelActuallyFocused\"\n     [class.focusedLeft]=\"!rightPanelActuallyFocused\"\n     [class.resizing]=\"resizing\"\n     #resizeContainer>\n\n    <div class=\"left-panel\" #leftPanel\n         (click)=\"leftPanelClicked()\"\n         [style.minWidth.%]=\"split\"\n         [style.maxWidth.%]=\"split\">\n        <ng-content select=\"[left]\"></ng-content>\n    </div>\n\n    <div #resizer class=\"resizer\" (mousedown)=\"startResizer($event)\">\n        <i class=\"material-icons\">more_vert</i>\n    </div>\n\n    <div class=\"right-panel\" #rightPanel (click)=\"rightPanelClicked()\">\n        <ng-content select=\"[right]\"></ng-content>\n    </div>\n\n    <div class=\"focus-switcher-right\" (click)=\"rightPanelClicked()\"></div>\n    <div class=\"focus-switcher-left\" (click)=\"leftPanelClicked()\"></div>\n\n    <div class=\"visible-resizer\" [hidden]=\"!resizing\" #visibleResizer></div>\n    <div class=\"resizing-overlay\" *ngIf=\"resizing\"></div>\n\n</div>\n","import {Component, Input, Output, EventEmitter} from '@angular/core';\n\n/**\n * For documentation, see the Tabs\n */\n@Component({\n    selector: 'gtx-tab',\n    template: `\n    <div [class.is-active]=\"active\" class=\"tab-content\">\n      <ng-content></ng-content>\n    </div>\n  `\n})\nexport class Tab {\n    @Input() title: string;\n    @Input() icon: string;\n    @Input() id: string;\n    @Input() routerLink: any[];\n    @Input() disabled: boolean;\n    /**\n     * When the tab is clicked, this event is fired with the tab id.\n     */\n    @Output() select = new EventEmitter<string>();\n    active: boolean = false;\n}\n","import {Component, ContentChildren, QueryList, AfterContentInit, Input, Output, EventEmitter, SimpleChanges, OnChanges, OnDestroy} from '@angular/core';\nimport {Tab} from './tab.component';\nimport {coerceToBoolean} from '../../common/coerce-to-boolean';\nimport { Subscription } from 'rxjs';\n\n/**\n * Tabs can be either pure or stateful. Stateful tabs will keep track of which one is active by keeping an internal\n * state.\n *\n * Pure tabs will only change the active tab when the `activeId` property is updated.\n *\n * ## Stateful Tabs\n * ```html\n * <gtx-tabs (tabChange)=\"goToTab($event)\">\n *     <gtx-tab title=\"Details\">Optional content here.</gtx-tab>\n *     <gtx-tab title=\"Orders\"></gtx-tab>\n *     <gtx-tab title=\"Notes\"></gtx-tab>\n * </gtx-tabs>\n * ```\n *\n * ## Pure Tabs\n * ```html\n * <gtx-tabs pure [activeId]=\"activeTab\">\n *     <gtx-tab title=\"Details\" id=\"1\" (select)=\"activeTab = $event\"></gtx-tab>\n *     <gtx-tab title=\"Orders\" id=\"2\" (select)=\"activeTab = $event\"></gtx-tab>\n *     <gtx-tab title=\"Notes\" id=\"3\" (select)=\"activeTab = $event\"></gtx-tab>\n * </gtx-tabs>\n * ```\n *\n * ## With `routerLink`\n * A gtx-tab can take an optional `[routerLink]` binding which will set router links for the tabs.\n * ```html\n * <gtx-tabs pure [activeId]=\"activeTab\">\n *     <gtx-tab title=\"Details\" id=\"1\" [routerLink]=\"['customer', 'details']\"></gtx-tab>\n *     <gtx-tab title=\"Orders\" id=\"2\" [routerLink]=\"['customer', 'orders']\"></gtx-tab>\n *     <gtx-tab title=\"Notes\" id=\"3\" [routerLink]=\"['customer', 'notes']\"></gtx-tab>\n * </gtx-tabs>\n * ```\n *  * ##### Vertical Tabs\n * A gtx-tabs can take an optional `vertical` property which allows to display tabs vertically.\n * ```html\n * <gtx-tabs vertical>\n *        <gtx-tab title=\"Details\"></gtx-tab>\n *        <gtx-tab title=\"Orders\"></gtx-tab>\n *        <gtx-tab title=\"Notes\"></gtx-tab>\n * </gtx-tabs>\n * ```\n *  *  * ##### Active Tabs with Icons\n * A gtx-tabs can take an optional `hideTitle` property which allows to hide the title for non-active tabs with icons.\n * ```html\n * <gtx-tabs hideTitle>\n *           <gtx-tab icon=\"folder\" title=\"Tab 1\">Tab 1 Content</gtx-tab>\n *           <gtx-tab icon=\"cloud\" title=\"Tab 2\">Tab 2 Content</gtx-tab>\n * </gtx-tabs>\n * ```\n *\n */\n@Component({\n    selector: 'gtx-tabs',\n    templateUrl: './tabs.tpl.html'\n})\nexport class Tabs implements AfterContentInit, OnChanges, OnDestroy {\n\n    @ContentChildren(Tab) tabs: QueryList<Tab>;\n\n    /**\n     * Fires an event whenever the active tab changes. Argument is the id of the selected tab.\n     */\n    @Output() tabChange = new EventEmitter<string>();\n\n    /**\n     * When present (or set to true), tabs are displayed vertically.\n     */\n    @Input() set vertical(val: any) {\n        this.verticalTabs = coerceToBoolean(val);\n    }\n\n    /**\n     * When present (or set to true), only active tabs with icons will show the title.\n     * Non-active tabs with icons will hide the title, show only icon.\n     */\n    @Input() set hideTitle(val: any) {\n        this.shouldHideTitle = coerceToBoolean(val);\n    }\n\n    /**\n     * The id of the active tab. Should only be used in pure (stateless) mode.\n     */\n    @Input() activeId: string;\n\n    /**\n     * When present, sets the tabs to pure (stateless) mode.\n     */\n    @Input() set pure(val: any) {\n        this.isPure = val != null;\n    }\n\n    /**\n     * When present (or set to true), tabs which do not fit into the width of their container will wrap onto\n     * a new line. Otherwise, tabs will remain on one line and the contents will be elided if all the available\n     * space is filled.\n     */\n    @Input() set wrap(val: any) {\n        this.tabsShouldWrap = coerceToBoolean(val);\n    }\n\n    shouldHideTitle: boolean = false;\n    verticalTabs: boolean = false;\n    tabsShouldWrap: boolean = false;\n    private isPure: boolean = false;\n\n    tabsChangeSubscription: Subscription;\n\n    ngAfterContentInit(): void {\n        if (this.isPure) {\n            this.tabsChangeSubscription = this.tabs.changes.subscribe(() => {\n                setTimeout(() => this.setActiveTab());\n            });\n        } else {\n            let activeTabs = this.tabs.filter(tab => tab.active);\n\n            // if there is no active tab set, activate the first\n            if (activeTabs.length === 0) {\n                this.tabs.first.active = true;\n            }\n        }\n        this.tabs.notifyOnChanges();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.setActiveTab();\n    }\n\n    ngOnDestroy(): void {\n        if (this.tabsChangeSubscription) {\n            this.tabsChangeSubscription.unsubscribe();\n        }\n    }\n\n    /**\n     * Sets the tab with id === this.activeId to active.\n     */\n    setActiveTab(): void {\n        if (this.tabs) {\n            let tabToActivate = this.tabs.filter(t => t.id === this.activeId)[0];\n            if (tabToActivate) {\n                this.setAsActive(tabToActivate);\n            }\n        }\n    }\n\n    /**\n     * Invoked when a tab link is clicked.\n     */\n    selectTab(tab: Tab): void {\n        if (tab.disabled) {\n            return;\n        }\n        if (!this.isPure) {\n            this.setAsActive(tab);\n            this.tabChange.emit(tab.id);\n        } else {\n            tab.select.emit(tab.id);\n        }\n    }\n\n    private setAsActive(tab: Tab): void {\n        this.tabs.toArray().forEach(tab => tab.active = false);\n        tab.active = true;\n    }\n\n}\n","<ul class=\"tab-links\" [class.vertical]=\"verticalTabs\" [class.wrap]=\"tabsShouldWrap\">\n    <li class=\"tab-link\" role=\"presentation\"\n            *ngFor=\"let tab of tabs\"\n            [title]=\"tab.title\"\n            (click)=\"selectTab(tab)\"\n            [ngClass]=\"{\n                disabled: tab.disabled,\n                'is-active': tab.active,\n                'has-icon': !!tab.icon,\n                'icon-only': shouldHideTitle && !tab.active || (tab.icon && !tab.title)\n            }\">\n        <a role=\"tab\" *ngIf=\"tab.routerLink && !tab.disabled\" [routerLink]=\"tab.routerLink\">\n            <icon *ngIf=\"tab.icon\">{{tab.icon}}</icon><span [class.animatedTitle]=\"shouldHideTitle\" *ngIf=\"!shouldHideTitle || tab.active || (!tab.active && !tab.icon)\">{{ tab.title }}</span></a>\n        <a role=\"tab\" *ngIf=\"!tab.routerLink || tab.disabled\">\n            <icon *ngIf=\"tab.icon\">{{tab.icon}}</icon><span [class.animatedTitle]=\"shouldHideTitle\" *ngIf=\"!shouldHideTitle || tab.active || (!tab.active && !tab.icon)\">{{ tab.title }}</span></a>\n    </li>\n</ul>\n<ng-content></ng-content>\n","import {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Input,\n    OnChanges,\n    Output,\n    Renderer2,\n    SimpleChanges,\n    ViewChild\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n\nconst GTX_TEXTAREA_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Textarea),\n    multi: true\n};\n\n/**\n * The Textarea wraps the native `<textarea>` form element. Textareas automatically grow to accommodate their content.\n *\n * ```html\n * <gtx-textarea label=\"Message\" [(ngModel)]=\"message\"></gtx-textarea>\n * ```\n */\n@Component({\n    selector: 'gtx-textarea',\n    templateUrl: './textarea.tpl.html',\n    providers: [GTX_TEXTAREA_VALUE_ACCESSOR]\n})\nexport class Textarea implements ControlValueAccessor, OnChanges {\n    /**\n     * Sets the textarea to be auto-focused. Handled by `AutofocusDirective`.\n     */\n    @Input() autofocus: boolean = false;\n\n    /**\n     * Sets the disabled state.\n     */\n    @Input() disabled: boolean = false;\n\n    /**\n     * Sets the maximum number of characters permitted.\n     */\n    @Input() set maxlength(val: any) {\n        if (val != null && !isNaN(val) && val > 0) {\n            this._maxlength = Number(val);\n        } else {\n            this._maxlength = undefined;\n        }\n    }\n    get maxlength(): any {\n        return this._maxlength;\n    }\n\n    /**\n     * The name of the control.\n     */\n    @Input() name: string;\n\n    /**\n     * Regex pattern for complex validation.\n     * This requires that this control is either part of a form or that\n     * its value is bound with ngModel.\n     */\n    @Input() pattern: string;\n\n    /**\n     * A placeholder text to display when the control is empty.\n     */\n    @Input() placeholder: string;\n\n    /**\n     * Sets the readonly state.\n     */\n    @Input() readonly: boolean = false;\n\n    /**\n     * Sets the required state.\n     */\n    @Input() required: boolean = false;\n\n    /**\n     * Tooltip for validation errors.\n     */\n    @Input() validationErrorTooltip: string;\n\n    /**\n     * Sets the value of the control.\n     */\n    @Input() value: string = '';\n\n    /**\n     * Sets the label of the control.\n     */\n    @Input() label: string = '';\n\n    /**\n     * Sets an id for the control.\n     */\n    @Input() id: string;\n\n    /**\n     * Blur event.\n     */\n    @Output() blur = new EventEmitter<string>();\n\n    /**\n     * Focus event.\n     */\n    @Output() focus = new EventEmitter<string>();\n\n    /**\n     * Change event.\n     */\n    @Output() change = new EventEmitter<string>();\n\n    valueIsValid: boolean = true;\n\n    @ViewChild('textarea', { static: true }) private nativeTextarea: ElementRef;\n    private _maxlength: number;\n    private currentValue: string;\n    private previousHeight: number;\n\n    constructor(\n        private renderer: Renderer2,\n        private changeDetector: ChangeDetectorRef,\n        private elementRef: ElementRef\n    ) { }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const valueChange = changes['value'];\n        if (valueChange) {\n            this.writeValue(valueChange.currentValue);\n        }\n    }\n\n    onBlur(e: Event): void {\n        e.stopPropagation();\n        const value = (e.target as HTMLTextAreaElement).value;\n        this.blur.emit(this.normalizeValue(value));\n        this.onTouched();\n    }\n\n    onChangeEvent(e: Event): void {\n        e.stopPropagation();\n    }\n\n    onFocus(e: Event): void {\n        const value = (e.target as HTMLTextAreaElement).value;\n        this.focus.emit(value);\n    }\n\n    onInput(e: Event): void {\n        const value = this.currentValue = (e.target as HTMLTextAreaElement).value;\n        this.onChange(value);\n        this.change.emit(value);\n        this.onTouched();\n\n        setTimeout(() => {\n            const element: HTMLTextAreaElement = this.elementRef.nativeElement;\n            this.valueIsValid = !element.classList.contains('ng-touched') || !element.classList.contains('ng-invalid');\n        });\n    }\n\n    writeValue(valueToWrite: any): void {\n        const value = this.normalizeValue(valueToWrite);\n        if (value !== this.currentValue) {\n            this.renderer.setProperty(this.nativeTextarea.nativeElement, 'value', this.currentValue = value);\n        }\n    }\n\n    registerOnChange(fn: (newValue: string) => void): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.changeDetector.markForCheck();\n    }\n\n    private onChange(newValue: string): void { }\n    private onTouched(): void { }\n\n    private normalizeValue(value: any): string {\n        return (value == null ? '' : String(value)).replace(/\\r\\n?/g, '\\n');\n    }\n}\n","<textarea\n    class=\"materialize-textarea\"\n    autosize\n    [minRows]=\"1\"\n    [attr.id]=\"id\"\n    [attr.maxlength]=\"maxlength\"\n    [attr.name]=\"name\"\n    [attr.pattern]=\"pattern\"\n    [attr.placeholder]=\"placeholder\"\n    [attr.title]=\"(!valueIsValid && validationErrorTooltip) ? validationErrorTooltip : ''\"\n\n    [disabled]=\"disabled\"\n    [readonly]=\"readonly\"\n    [required]=\"required\"\n\n    (blur)=\"onBlur($event)\"\n    (change)=\"onChangeEvent($event)\"\n    (focus)=\"onFocus($event)\"\n    (input)=\"onInput($event)\"\n\n    #textarea\n></textarea>\n<label [attr.for]=\"id\">{{ label }}</label>\n","import {Component} from '@angular/core';\n\n\n/**\n * The top bar component is a container for top-level menu items, and acts as a header for the app.\n * Its immediate children will be displayed horizontally, vertically center-aligned, starting from the\n * left-hand-side.\n *\n * Items can be explicitly right-aligned by giving them the class `.gtx-top-bar-right`.\n *\n * ```html\n * <gtx-top-bar>\n *     <i class=\"material-icons\">menu</i>\n *     <h5>Title</h5>\n *\n *     <!-- this icon will be right-aligned -->\n *     <i class=\"material-icons gtx-top-bar-right\">person</i>\n * </gtx-top-bar>\n * ```\n */\n@Component({\n    selector: 'gtx-top-bar',\n    templateUrl: './top-bar.tpl.html'\n})\nexport class TopBar {}\n","<div class=\"content\">\n    <ng-content></ng-content>\n    <div class=\"content-right\">\n        <ng-content select=\".gtx-top-bar-right\"></ng-content>\n    </div>\n</div>\n","import 'hammerjs';\nimport {CommonModule} from '@angular/common';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {RouterModule} from '@angular/router';\nimport { AutosizeModule } from 'ngx-autosize';\n\nimport {ConfigService, optionsConfig, PredefinedConfig, CustomConfig, defaultConfig, configFactory} from './module.config';\nimport {Breadcrumbs} from './components/breadcrumbs/breadcrumbs.component';\nimport {Button} from './components/button/button.component';\nimport {Checkbox} from './components/checkbox/checkbox.component';\nimport {ContentsListItem} from './components/contents-list-item/contents-list-item.component';\nimport {DateTimePickerControls} from './components/date-time-picker/date-time-picker-controls.component';\nimport {DateTimePickerFormatProvider} from './components/date-time-picker/date-time-picker-format-provider.service';\nimport {DateTimePickerModal} from './components/date-time-picker/date-time-picker-modal.component';\nimport {DateTimePicker} from './components/date-time-picker/date-time-picker.component';\nimport {DropdownContentWrapper} from './components/dropdown-list/dropdown-content-wrapper.component';\nimport {DropdownContent} from './components/dropdown-list/dropdown-content.component';\nimport {DropdownItem} from './components/dropdown-list/dropdown-item.component';\nimport {DropdownList} from './components/dropdown-list/dropdown-list.component';\nimport {DropdownTriggerDirective} from './components/dropdown-list/dropdown-trigger.directive';\nimport {ScrollMask} from './components/dropdown-list/scroll-mask.component';\nimport {DragStateTrackerFactory} from './components/file-drop-area/drag-state-tracker.service';\nimport {FileDropArea} from './components/file-drop-area/file-drop-area.directive';\nimport {MatchesMimeTypePipe} from './components/file-drop-area/matches-mime-type.pipe';\nimport {PageFileDragHandler} from './components/file-drop-area/page-file-drag-handler.service';\nimport {PreventFileDrop} from './components/file-drop-area/prevent-file-drop.directive';\nimport {FilePicker} from './components/file-picker/file-picker.component';\nimport {GroupedTabs} from './components/grouped-tabs/grouped-tabs.component';\nimport {GtxTabContent} from './components/grouped-tabs/tab-content';\nimport {TabGroup} from './components/grouped-tabs/tab-group.component';\nimport {GtxTabLabel} from './components/grouped-tabs/tab-label';\nimport {TabPane} from './components/grouped-tabs/tab-pane.component';\nimport {Icon} from './components/icon/icon.directive';\nimport {InputField} from './components/input/input.component';\nimport {MenuToggleButton} from './components/menu-toggle-button/menu-toggle-button.component';\nimport {BlankModal} from './components/modal/blank-modal.component';\nimport {DynamicModalWrapper} from './components/modal/dynamic-modal-wrapper.component';\nimport {ModalDialog} from './components/modal/modal-dialog.component';\nimport {ModalService} from './components/modal/modal.service';\nimport {UserAgentRef} from './components/modal/user-agent-ref';\nimport {Notification} from './components/notification/notification.service';\nimport {Toast} from './components/notification/toast.component';\nimport {OverlayHost} from './components/overlay-host/overlay-host.component';\nimport {OverlayHostService} from './components/overlay-host/overlay-host.service';\nimport {ProgressBar} from './components/progress-bar/progress-bar.component';\nimport {RadioButton, RadioGroup} from './components/radio-button/radio-button.component';\nimport {Range} from './components/range/range.component';\nimport {SearchBar} from './components/search-bar/search-bar.component';\nimport {SelectOption, SelectOptionGroup} from './components/select/option.component';\nimport {Select} from './components/select/select.component';\nimport {SideMenu, SideMenuToggle} from './components/side-menu/side-menu.component';\nimport {SortableItem, SortableList, SortableListDragHandle} from './components/sortable-list/sortable-list.component';\nimport {SplitButtonPrimaryAction} from './components/split-button/split-button-primary-action.component';\nimport {SplitButton} from './components/split-button/split-button.component';\nimport {SplitViewContainer} from './components/split-view-container/split-view-container.component';\nimport {Tab} from './components/tabs/tab.component';\nimport {Tabs} from './components/tabs/tabs.component';\nimport {Textarea} from './components/textarea/textarea.component';\nimport {TopBar} from './components/top-bar/top-bar.component';\nimport {AutofocusDirective} from './directives/autofocus/autofocus.directive';\nimport { HammerModule } from '@angular/platform-browser';\n\nexport const UI_CORE_COMPONENTS: any[] = [\n    AutofocusDirective,\n    BlankModal,\n    Breadcrumbs,\n    Button,\n    Checkbox,\n    ContentsListItem,\n    DateTimePicker,\n    DateTimePickerControls,\n    DateTimePickerModal,\n    DropdownList,\n    DropdownContentWrapper,\n    DropdownContent,\n    DropdownItem,\n    DropdownTriggerDirective,\n    DynamicModalWrapper,\n    FileDropArea,\n    FilePicker,\n    GroupedTabs,\n    Icon,\n    InputField,\n    MenuToggleButton,\n    ModalDialog,\n    OverlayHost,\n    PreventFileDrop,\n    ProgressBar,\n    RadioButton,\n    RadioGroup,\n    Range,\n    ScrollMask,\n    SearchBar,\n    Select,\n    SelectOption,\n    SelectOptionGroup,\n    SideMenu,\n    SideMenuToggle,\n    SortableItem,\n    SortableList,\n    SortableListDragHandle,\n    SplitButton,\n    SplitButtonPrimaryAction,\n    SplitViewContainer,\n    Tab,\n    Tabs,\n    TabPane,\n    TabGroup,\n    Textarea,\n    TopBar,\n    Toast\n];\n\nexport const UI_CORE_DIRECTIVES: any[] = [\n    GtxTabLabel,\n    GtxTabContent\n];\n\nexport const UI_CORE_PIPES: any[] = [\n    MatchesMimeTypePipe\n];\n\nexport const UI_CORE_PROVIDERS: any[] = [\n    DateTimePickerFormatProvider,\n    DragStateTrackerFactory,\n    ModalService,\n    Notification,\n    OverlayHostService,\n    PageFileDragHandler,\n    UserAgentRef\n];\n\nexport const declarations = [...UI_CORE_COMPONENTS, ...UI_CORE_DIRECTIVES, ...UI_CORE_PIPES];\nexport const routerModuleForChild: ModuleWithProviders<GenticsUICoreModule> = RouterModule.forChild([]);\n\n@NgModule({\n    imports: [\n        CommonModule,\n        HammerModule,\n        FormsModule,\n        ReactiveFormsModule,\n        routerModuleForChild,\n        AutosizeModule,\n    ],\n    declarations,\n    exports: declarations\n})\nexport class GenticsUICoreModule {\n    /**\n     * Gentics UI Core exposes several providers which are intended to be used a singleton services, i.e. there should only\n     * be a single instance of each in an app. When this module is imported into lazy-loaded child modules, we do not want\n     * to include those providers, otherwise the app injector would create new instances of them to use in that child\n     * module.\n     *\n     * Therefore this method should be used only once in the app, at the level of the root module to ensure that only one\n     * instance of each provider is instantiated.\n     */\n    static forRoot(configValue?: optionsConfig | (() => optionsConfig)): ModuleWithProviders<GenticsUICoreModule> {\n        return {\n            ngModule: GenticsUICoreModule,\n            providers: [\n                {\n                    provide: CustomConfig,\n                    useValue: configValue,\n                },\n                {\n                    provide: PredefinedConfig,\n                    useValue: defaultConfig,\n                },\n                {\n                    provide: ConfigService,\n                    useFactory: configFactory,\n                    deps: [PredefinedConfig, CustomConfig],\n                },\n                ...UI_CORE_PROVIDERS\n            ]\n        };\n    }\n}\n","/**\n * This is the entry-point for apps which consume GUIC.\n * All components are exported from here, so no other internal files\n * should need to be imported.\n */\n\nexport * from './module';\n\nexport * from './components/breadcrumbs/breadcrumbs.component';\nexport * from './components/button/button.component';\nexport * from './components/checkbox/checkbox.component';\nexport * from './components/contents-list-item/contents-list-item.component';\nexport * from './components/date-time-picker/date-time-picker-controls.component';\nexport * from './components/date-time-picker/date-time-picker-format-provider.service';\nexport * from './components/date-time-picker/date-time-picker-modal.component';\nexport * from './components/date-time-picker/date-time-picker-strings';\nexport * from './components/date-time-picker/date-time-picker.component';\nexport * from './components/dropdown-list/dropdown-content.component';\nexport * from './components/dropdown-list/dropdown-content-wrapper.component';\nexport * from './components/dropdown-list/dropdown-item.component';\nexport * from './components/dropdown-list/dropdown-list.component';\nexport * from './components/dropdown-list/dropdown-trigger.directive';\nexport * from './components/dropdown-list/scroll-mask.component';\nexport * from './components/file-drop-area/matches-mime-type.pipe';\nexport * from './components/file-drop-area/drag-state-tracker.service';\nexport * from './components/file-drop-area/file-drop-area.directive';\nexport * from './components/file-drop-area/page-file-drag-handler.service';\nexport * from './components/file-drop-area/prevent-file-drop.directive';\nexport * from './components/file-picker/file-picker.component';\nexport * from './components/grouped-tabs/grouped-tabs.component';\nexport * from './components/grouped-tabs/tab-content';\nexport * from './components/grouped-tabs/tab-group.component';\nexport * from './components/grouped-tabs/tab-label';\nexport * from './components/grouped-tabs/tab-pane.component';\nexport * from './components/icon/icon.directive';\nexport * from './components/input/input.component';\nexport * from './components/menu-toggle-button/menu-toggle-button.component';\nexport * from './components/modal/blank-modal.component';\nexport * from './components/modal/modal-dialog.component';\nexport * from './components/modal/dynamic-modal-wrapper.component';\nexport * from './components/modal/dynamic-modal-wrapper.component';\nexport * from './components/modal/modal-interfaces';\nexport * from './components/modal/modal.service';\nexport * from './components/notification/notification.service';\nexport * from './components/notification/toast.component';\nexport * from './components/overlay-host/overlay-host.component';\nexport * from './components/overlay-host/overlay-host.service';\nexport * from './components/progress-bar/progress-bar.component';\nexport * from './components/radio-button/radio-button.component';\nexport * from './components/range/range.component';\nexport * from './components/search-bar/search-bar.component';\nexport * from './components/select/option.component';\nexport * from './components/select/select.component';\nexport * from './components/side-menu/side-menu.component';\nexport * from './components/sortable-list/sortable-list.component';\nexport * from './components/split-button/split-button-primary-action.component';\nexport * from './components/split-button/split-button.component';\nexport * from './components/split-view-container/split-view-container.component';\nexport * from './components/tabs/tab.component';\nexport * from './components/tabs/tabs.component';\nexport * from './components/textarea/textarea.component';\nexport * from './components/top-bar/top-bar.component';\nexport * from './directives/autofocus/autofocus.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.UserAgentRef","i2","i4.Icon","randomID","i1.OverlayHostService","i1.DropdownList","i2.DropdownContent","i3.Checkbox","i4.Button","i5.DropdownTriggerDirective","i6","i7.Icon","observableOf","i1.DateTimePickerFormatProvider","i2.Select","i3.InputField","i4","i6.SelectOption","i1.DateTimePickerControls","i2.Button","defaultOptions","i1","i3","i2.ModalService","i5","i6.Icon","i1.DragStateTrackerFactory","i1.PageFileDragHandler","i2.DragStateTrackerFactory","observableMerge","i1.FileDropArea","i2.Icon","i1.InputField","i2.UserAgentRef","i1.Button","i2.DropdownList","i3.DropdownContent","i4.AutofocusDirective","i6.DropdownTriggerDirective","i3.Icon"],"mappings":"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"}