{"version":3,"sources":["jsdelivr-header.js","/npm/@pxblue/components/src/core/app-bar/app-bar.component.ts","/npm/@pxblue/components/src/core/utility/spacer.module.ts","/npm/@pxblue/components/src/core/app-bar/app-bar.module.ts","/npm/@pxblue/components/src/utils/utils.ts","/npm/@pxblue/components/src/core/channel-value/channel-value.component.ts","/npm/@pxblue/components/src/core/channel-value/channel-value.module.ts","/npm/@pxblue/components/src/core/drawer/service/drawer.service.ts","/npm/@pxblue/components/src/core/drawer/state-listener.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-body/drawer-body.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-body/nav-item/drawer-nav-item.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-body/nav-group/drawer-nav-group.component.ts","/npm/@pxblue/components/src/core/info-list-item/info-list-item.component.ts","/npm/@pxblue/components/src/core/info-list-item/info-list-item.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-body/nav-group/drawer-nav-group.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-body/nav-item/drawer-nav-item.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-body/drawer-body.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-footer/drawer-footer.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-footer/drawer-footer.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-header/drawer-header.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-header/drawer-header.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-layout/drawer-layout.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-layout/drawer-layout.module.ts","/npm/@pxblue/components/src/core/drawer/drawer-subheader/drawer-subheader.component.ts","/npm/@pxblue/components/src/core/drawer/drawer-subheader/drawer-subheader.module.ts","/npm/@pxblue/components/src/core/drawer/drawer.component.ts","/npm/@pxblue/components/src/core/drawer/drawer.module.ts","/npm/@pxblue/components/src/core/empty-state/empty-state.component.ts","/npm/@pxblue/components/src/core/empty-state/empty-state.module.ts","/npm/@pxblue/components/src/core/hero/hero-banner.component.ts","/npm/@pxblue/components/src/core/hero/hero.component.ts","/npm/@pxblue/components/src/core/hero/hero.module.ts","/npm/@pxblue/components/src/core/score-card/score-card.component.ts","/npm/@pxblue/components/src/core/score-card/score-card.module.ts","/npm/@pxblue/components/src/core/list-item-tag/list-item-tag.component.ts","/npm/@pxblue/components/src/core/list-item-tag/list-item-tag.module.ts","/npm/@pxblue/components/src/core/dropdown-toolbar/dropdown-toolbar.component.ts","/npm/@pxblue/components/src/core/dropdown-toolbar/dropdown-toolbar.module.ts","/npm/@pxblue/components/src/core/three-liner/three-liner.component.ts","/npm/@pxblue/components/src/core/three-liner/three-liner.module.ts","/npm/@pxblue/components/src/core/user-menu/user-menu.component.ts","/npm/@pxblue/components/src/core/user-menu/user-menu-avatar.component.ts","/npm/@pxblue/components/src/core/user-menu/user-menu-header/user-menu-header.component.ts","/npm/@pxblue/components/src/core/user-menu/user-menu.module.ts","/npm/@pxblue/components/src/core/mobile-stepper/mobile-stepper.component.ts","/npm/@pxblue/components/src/core/mobile-stepper/mobile-stepper.module.ts"],"names":[],"mappings":"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","file":"/npm/@pxblue/angular-components@6.0.0/bundles/pxblue-angular-components.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@pxblue/angular-components@6.0.0/bundles/pxblue-angular-components.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { fromEvent, interval, Subscription } from 'rxjs';\nimport { throttle } from 'rxjs/operators';\nimport { Element } from '@angular/compiler';\n\n/**\n * [AppBar Component](https://pxblue-components.github.io/angular/?path=/info/components-app-bar--readme)\n *\n * The `<pxb-app-bar>` component is a wrapper around the `<mat-toolbar>` that can be resized as the page is scrolled.\n * It supports three variants: `snap`, `collapsed`, and `expanded`.\n * */\n@Component({\n    selector: 'pxb-app-bar',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./app-bar.component.scss'],\n    host: {\n        class: 'pxb-app-bar mat-elevation-z4',\n    },\n    template: `\n        <mat-toolbar\n            [color]=\"color\"\n            class=\"pxb-app-bar-content\"\n            [class.pxb-app-bar-collapsed]=\"isCollapsed\"\n            [class.pxb-app-bar-expanded]=\"!isCollapsed\"\n            [class.pxb-app-bar-view-init]=\"viewInit\"\n            [style.height]=\"calcCurrentToolbarHeight()\"\n        >\n            <mat-toolbar-row>\n                <div class=\"pxb-app-bar-background\"></div>\n                <ng-content select=\"[pxb-icon]\"></ng-content>\n                <div class=\"pxb-app-bar-body-wrapper\">\n                    <ng-content></ng-content>\n                </div>\n                <pxb-spacer></pxb-spacer>\n                <ng-content select=\"[pxb-actions]\"></ng-content>\n            </mat-toolbar-row>\n        </mat-toolbar>\n    `,\n})\nexport class AppBarComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n    /** Height (pixels) of the AppBar when collapsed */\n    @Input() collapsedHeight: number;\n    /** Color variant which is passed to the `<mat-toolbar>`\n     *\n     * @default primary\n     * */\n    @Input() color: 'primary' | 'accent' | 'warn' | undefined = 'primary';\n    /** Height (pixels) of the AppBar when expanded\n     *\n     * @default 200\n     * */\n    @Input() expandedHeight = 200;\n    // The thing that scrolls, we listen to this.\n    /** Scrollable element which dynamic app bar responds to.  This element is searched in the DOM `ngAfterViewInit`.*/\n    @Input() scrollContainerElement: Element;\n    /** Class name, index number of scrollable element. This element is searched in the DOM `ngAfterViewInit`. */\n    @Input() scrollContainerClassName: { name: string; index: number };\n    /** Id of the scrollable element. This element is searched in the DOM `ngAfterViewInit`.  */\n    @Input() scrollContainerId: string;\n    /** Distance in pixels to scroll before collapsing toolbar. */\n    @Input() scrollThreshold;\n    /** Behavior of the App Bar\n     *\n     *  `collapsed` - Height set to `collapsedHeight` and does not respond to scroll distance\n     *\n     *  `expanded` -  Height set to `expandedHeight` and does not respond to scroll distance\n     *\n     *  `snap` - Variant that responds to scroll distance and switches between the `collapsed` and `expanded` variant.\n     *\n     *  @default collapsed\n     *\n     * */\n    @Input() variant: 'collapsed' | 'expanded' | 'snap' = 'collapsed';\n\n    /** Event emitter for when the appbar opens or closes.  Emits a boolean that indicates whether the AppBar is expanded. */\n    @Output() collapsedChange: EventEmitter<boolean> = new EventEmitter();\n\n    scrollEl;\n\n    isCollapsed = false;\n    isWindow = false;\n    useDefaultCollapsedHeight = true;\n    isAnimating: boolean;\n    viewInit = false;\n\n    scrollListener: Subscription;\n    resizeListener: Subscription;\n\n    contentSize = 0;\n\n    constructor(private readonly _ref: ChangeDetectorRef) {}\n\n    ngOnInit(): void {\n        if (!this.scrollThreshold) {\n            this.scrollThreshold = this.expandedHeight - (this.collapsedHeight || 64);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.variant) {\n            this._resizeOnModeChange();\n        }\n        this.useDefaultCollapsedHeight = isNaN(this.collapsedHeight) || this.collapsedHeight === 0;\n        this.expandedHeight = Number(this.expandedHeight);\n        this.collapsedHeight = Number(this.collapsedHeight);\n        this._ref.detectChanges();\n    }\n\n    ngAfterViewInit(): void {\n        this._setScrollEl();\n        this._resizeOnModeChange();\n        this.viewInit = true;\n\n        if (this.scrollEl) {\n            this.scrollListener = fromEvent(this.scrollEl, 'scroll')\n                .pipe(throttle(() => interval(10)))\n                .subscribe(() => {\n                    this._resizeEl();\n                });\n\n            this.resizeListener = fromEvent(window, 'resize')\n                .pipe(throttle(() => interval(10)))\n                .subscribe(() => {\n                    this._resizeEl();\n                });\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.scrollListener) {\n            this.scrollListener.unsubscribe();\n        }\n        if (this.resizeListener) {\n            this.resizeListener.unsubscribe();\n        }\n    }\n\n    calcCurrentToolbarHeight(): string {\n        if (!this.isCollapsed) {\n            return `${this.expandedHeight}px`;\n        } else if (!this.useDefaultCollapsedHeight) {\n            return `${this.collapsedHeight}px`;\n        }\n        return `${this._calcDefaultCollapsedHeight()}rem`;\n    }\n\n    private _resizeOnModeChange(): void {\n        if (this.variant !== 'snap') {\n            return this._handleLockedModes();\n        } else if (this.scrollEl) {\n            this._resizeEl();\n        }\n    }\n\n    private _handleLockedModes(): void {\n        if (this.variant === 'collapsed') {\n            this._setCollapsed(true);\n            this._ref.detectChanges();\n            return;\n        }\n        if (this.variant === 'expanded') {\n            this._setCollapsed(false);\n            this._ref.detectChanges();\n            return;\n        }\n    }\n\n    private _setCollapsed(collapsed: boolean): void {\n        this.isCollapsed = collapsed;\n        this.collapsedChange.emit(collapsed);\n    }\n\n    private _resizeEl(): void {\n        if (this.isAnimating) {\n            return;\n        }\n        if (this.variant !== 'snap') {\n            return this._handleLockedModes();\n        }\n\n        const scrollDistance = this.isWindow ? document.scrollingElement.scrollTop : this.scrollEl.scrollTop;\n        if (this.isCollapsed && scrollDistance <= 0) {\n            this._setCollapsed(false);\n            this._ref.detectChanges();\n        } else if (scrollDistance > this.scrollThreshold && !this.isCollapsed) {\n            this._setCollapsed(true);\n            this.isAnimating = true;\n            this._ref.detectChanges();\n            setTimeout(() => {\n                const currScrollDistance = this.isWindow\n                    ? document.scrollingElement.scrollTop\n                    : this.scrollEl.scrollTop;\n                if (currScrollDistance <= 0) {\n                    if (this.isWindow) {\n                        window.scrollBy(0, 1);\n                    } else {\n                        this.scrollEl.scrollTop = 1;\n                    }\n                }\n                this.isAnimating = false;\n            }, 300);\n        }\n    }\n\n    private _setScrollEl(): void {\n        if (this.scrollContainerElement) {\n            this.scrollEl = this.scrollContainerElement;\n        } else if (this.scrollContainerId) {\n            this.scrollEl = document.getElementById(this.scrollContainerId);\n        } else if (this.scrollContainerClassName) {\n            this.scrollEl = document.getElementsByClassName(this.scrollContainerClassName.name)[\n                this.scrollContainerClassName.index\n            ];\n        } else {\n            this.scrollEl = window;\n            this.isWindow = true;\n        }\n    }\n\n    private _calcDefaultCollapsedHeight(): number {\n        return document.documentElement.clientWidth <= 600 ? 3.5 : 4;\n    }\n}\n","import { Component, HostBinding, Input, NgModule, OnChanges, OnInit } from '@angular/core';\n\n/**\n * [Spacer Component](https://pxblue-components.github.io/angular/?path=/info/components-spacer--readme)\n *\n * An invisible utility component that acts as a spacer element in various layouts.\n * It works with flexbox sizing or fixed sizing.\n */\n@Component({\n    selector: 'pxb-spacer',\n    template: ` <ng-content></ng-content> `,\n})\nexport class SpacerComponent implements OnChanges, OnInit {\n    /** Flex grow/shrink value for use in flex layouts\n     *\n     * @default 1\n     * */\n    @Input() flex = 1;\n    /** Height (in px) for static layouts */\n    @HostBinding('style.height.px') @Input() height: number;\n    /** Width (in px) for static layouts */\n    @HostBinding('style.width.px') @Input() width: number;\n    @HostBinding('style.flex') grow: string;\n    @HostBinding('style.display') display = 'flex';\n\n    ngOnInit(): void {\n        this.calcGrow();\n    }\n\n    ngOnChanges(): void {\n        this.calcGrow();\n    }\n\n    calcGrow(): void {\n        this.grow = undefined;\n        if (!this.height && !this.width) {\n            this.grow = `${this.flex} ${this.flex} ${this.flex === 0 ? 'auto' : '0px'}`;\n        }\n    }\n}\n\n@NgModule({\n    declarations: [SpacerComponent],\n    exports: [SpacerComponent],\n})\nexport class SpacerModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AppBarComponent } from './app-bar.component';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { SpacerModule } from '../utility/spacer.module';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n    declarations: [AppBarComponent],\n    imports: [CommonModule, MatToolbarModule, SpacerModule, MatIconModule],\n    exports: [AppBarComponent],\n})\nexport class AppBarModule {}\n","import { ElementRef } from '@angular/core';\n\nexport type ContentPair = {\n    selector: string;\n    ref: ElementRef;\n};\n\nexport function requireInput<T>(inputs: Array<keyof T>, component: any): void {\n    inputs.forEach((input: any) => {\n        if (component[input] === undefined || component[input] === null || component[input] === '') {\n            const name: string = component.constructor.name;\n            // eslint-disable-next-line no-console\n            console.warn(`PXBlue ${name} error: Property \"${input}\" is required.`);\n        }\n    });\n}\n\nexport function requireContent(contentPairs: ContentPair[], component: any): void {\n    contentPairs.forEach((contentPair) => {\n        if (!contentPair.ref.nativeElement.children || contentPair.ref.nativeElement.children.length === 0) {\n            const name: string = component.constructor.name;\n            // eslint-disable-next-line no-console\n            console.warn(`PXBlue ${name} error: Selector \"${contentPair.selector}\" is required.`);\n        }\n    });\n}\n\nfunction hasChildren(el: ElementRef): boolean {\n    return el.nativeElement.children && el.nativeElement.children.length > 0;\n}\n\nexport function isEmptyView(el: ElementRef): boolean {\n    if (!el || !el.nativeElement) {\n        return true;\n    }\n    return !hasChildren(el);\n}\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { requireInput } from '../../utils/utils';\n\nexport type UnitSpaceType = 'show' | 'hide' | 'auto';\n/** [ChannelValue Component](https://pxblue-components.github.io/angular/?path=/info/components-channel-value--readme)\n *\n * Displays a value/unit combination.\n * These are used as part of the HeroComponent but can also be used inline.\n * */\n@Component({\n    selector: 'pxb-channel-value',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <span class=\"pxb-channel-value-content\" [style.color]=\"color\">\n            <span class=\"pxb-channel-value-icon-wrapper\">\n                <ng-content></ng-content>\n            </span>\n            <div\n                *ngIf=\"units && prefix\"\n                class=\"pxb-channel-value-units\"\n                [class.pxb-channel-value-units-prefix]=\"!isWhiteListedUnit || unitSpace === 'show'\"\n            >\n                {{ units }}\n            </div>\n            <div\n                *ngIf=\"value\"\n                class=\"pxb-channel-value-value\"\n                [class.pxb-channel-value-remove-space]=\"unitSpace === 'hide'\"\n            >\n                {{ value }}\n            </div>\n            <div\n                *ngIf=\"units && !prefix\"\n                class=\"pxb-channel-value-units\"\n                [class.pxb-channel-value-units-suffix]=\"!isWhiteListedUnit || unitSpace === 'show'\"\n            >\n                {{ units }}\n            </div>\n        </span>\n    `,\n    styleUrls: ['./channel-value.component.scss'],\n    host: {\n        class: 'pxb-channel-value',\n    },\n})\nexport class ChannelValueComponent implements OnChanges {\n    /** If true, shows units before the value\n     *\n     * @default false\n     * */\n    @Input() prefix = false;\n    /** The text to display for the units (light text) */\n    @Input() units: string;\n    /** The text to display for the value (bold text)*/\n    @Input() value: string | number;\n    /** Text color */\n    @Input() color: string;\n    /** Show a space between the value and units. Can be `show` | `hide` | `auto`\n     *\n     * `show` - Show a space between the value and units.\n     *\n     * `hide` - Hide a space between the value and units.\n     *\n     * `auto` - Shows space except for white list items.\n     *\n     * prefixUnitWhitelist: ['$']\n     *\n     * suffixUnitWhitelist: ['%', '℉','°F','℃','°C','°']\n     *\n     * @default auto;\n     * */\n    @Input() unitSpace: UnitSpaceType = 'auto';\n\n    prefixUnitWhitelist = ['$'];\n    suffixUnitWhitelist = ['%', '℉', '°F', '℃', '°C', '°'];\n    isWhiteListedUnit = false;\n    ngOnChanges(): void {\n        requireInput<ChannelValueComponent>(['value'], this);\n        this.isWhiteListedUnit = this.prefix\n            ? this.prefixUnitWhitelist.includes(this.units)\n            : this.suffixUnitWhitelist.includes(this.units);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { ChannelValueComponent } from './channel-value.component';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n    declarations: [ChannelValueComponent],\n    imports: [CommonModule],\n    exports: [ChannelValueComponent],\n})\nexport class ChannelValueModule {}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { DrawerLayoutVariantType } from '../..';\n\n/** This service is used to manage the state of a Drawer component, responds to user behavior and input settings. */\n@Injectable({\n    providedIn: 'root',\n})\nexport class DrawerService {\n    private drawerOpen: boolean;\n    private disableActiveItemParentStyles: boolean;\n    private variant: DrawerLayoutVariantType;\n    private navItemCount = 0;\n    private tempOpen = false;\n    private isCondensed: boolean;\n    private sideBorder: boolean;\n    private disableRailTooltip: boolean;\n    private openOnHover: boolean;\n\n    drawerOpenObs = new Subject<boolean>();\n    drawerSelectObs = new Subject<boolean>();\n    drawerActiveItemChangeObs = new Subject<boolean>();\n\n    hasSideBorder(): boolean {\n        return this.sideBorder;\n    }\n\n    setSideBorder(sideBorder: boolean): void {\n        this.sideBorder = sideBorder;\n    }\n\n    isOpenOnHover(): boolean {\n        return this.openOnHover;\n    }\n\n    setOpenOnHover(openOnHover: boolean): void {\n        this.openOnHover = openOnHover;\n    }\n\n    setDisableActiveItemParentStyles(disableActiveItemParentStyles: boolean): void {\n        this.disableActiveItemParentStyles = disableActiveItemParentStyles;\n    }\n\n    hasDisableActiveItemParentStyles(): boolean {\n        return this.disableActiveItemParentStyles;\n    }\n\n    setDrawerTempOpen(open: boolean): void {\n        this.tempOpen = open;\n        this.drawerOpenObs.next(this.isDrawerOpen());\n    }\n\n    setIsCondensed(condensed: boolean): void {\n        this.isCondensed = condensed;\n    }\n\n    setDrawerOpen(drawerOpen: boolean): void {\n        this.drawerOpen = drawerOpen;\n        this.drawerOpenObs.next(this.isDrawerOpen());\n    }\n\n    setDisableRailTooltip(disableRailTooltip: boolean): void {\n        this.disableRailTooltip = disableRailTooltip;\n    }\n\n    isDisableRailTooltip(): boolean {\n        return this.disableRailTooltip;\n    }\n\n    setDrawerVariant(variant: DrawerLayoutVariantType): void {\n        this.variant = variant;\n        this.drawerOpenObs.next(this.isDrawerOpen());\n    }\n\n    getDrawerVariant(): DrawerLayoutVariantType {\n        return this.variant;\n    }\n\n    isDrawerOpen(): boolean {\n        return (\n            this.drawerOpen ||\n            this.getDrawerVariant() === 'permanent' ||\n            this.tempOpen ||\n            this.getDrawerVariant() === 'rail'\n        );\n    }\n\n    isTempOpen(): boolean {\n        return this.tempOpen;\n    }\n\n    isRailCondensed(): boolean {\n        return this.isCondensed;\n    }\n\n    drawerOpenChanges(): Observable<boolean> {\n        return this.drawerOpenObs;\n    }\n\n    select(hasChildren: boolean): void {\n        this.drawerSelectObs.next(hasChildren);\n    }\n\n    drawerSelectionChanges(): Observable<boolean> {\n        return this.drawerSelectObs;\n    }\n\n    emitChangeActiveItemEvent(): void {\n        this.drawerActiveItemChangeObs.next();\n    }\n\n    drawerActiveItemChanges(): Observable<boolean> {\n        return this.drawerActiveItemChangeObs;\n    }\n\n    /** Each nav item has a unique id which is used to determine which item is selected. */\n    createNavItemID(): number {\n        return ++this.navItemCount;\n    }\n}\n","import { ChangeDetectorRef, OnDestroy, OnInit, Directive } from '@angular/core';\nimport { DrawerService } from './service/drawer.service';\nimport { Subscription } from 'rxjs';\n\n@Directive()\nexport class StateListener implements OnInit, OnDestroy {\n    drawerOpenListener: Subscription;\n\n    constructor(protected drawerService: DrawerService, protected changeDetector: ChangeDetectorRef) {}\n\n    public ngOnInit(): void {\n        this.listenForDrawerChanges();\n    }\n\n    public ngOnDestroy(): void {\n        this.unsubscribeListeners();\n    }\n\n    public isOpen(): boolean {\n        return this.drawerService.isDrawerOpen();\n    }\n\n    public isOpenOnHover(): boolean {\n        return this.drawerService.isOpenOnHover();\n    }\n\n    public unsubscribeListeners(): void {\n        if (this.drawerOpenListener) {\n            this.drawerOpenListener.unsubscribe();\n        }\n    }\n\n    listenForDrawerChanges(): void {\n        this.drawerOpenListener = this.drawerService.drawerOpenChanges().subscribe(() => {\n            this.changeDetector.detectChanges();\n        });\n    }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation } from '@angular/core';\nimport { StateListener } from '../state-listener.component';\nimport { DrawerService } from '../service/drawer.service';\n\n/**\n * The `<pxb-drawer-body>` is a wrapper for the main content of the Drawer.\n * The typical use case is to display `<pxb-drawer-nav-group>` elements, but custom elements (e.g., for spacing) are accepted as well.\n */\n@Component({\n    selector: 'pxb-drawer-body',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div class=\"pxb-drawer-body-content\" [class.pxb-drawer-body-closed]=\"!isOpen()\">\n            <ng-content></ng-content>\n        </div>\n    `,\n    styles: [\n        `\n            .pxb-drawer-body-content {\n                height: 100%;\n                display: flex;\n                flex-direction: column;\n            }\n            .pxb-drawer-body-closed {\n                overflow: hidden;\n            }\n        `,\n    ],\n    host: {\n        class: 'pxb-drawer-body',\n    },\n})\nexport class DrawerBodyComponent extends StateListener {\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n    }\n}\n","import {\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    Input,\n    Output,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { DrawerService } from '../../service/drawer.service';\nimport { StateListener } from '../../state-listener.component';\nimport { isEmptyView } from '../../../../utils/utils';\n\nexport type DrawerNavItem = {\n    statusColor?: string;\n    title: string;\n    subtitle?: string;\n    chevron?: boolean;\n    divider?: boolean;\n    items?: Array<Omit<DrawerNavItem, 'icon'>>;\n    onSelect?: any;\n    icon?: string;\n    hasChildren?: boolean;\n    ripple?: boolean;\n    expanded?: boolean;\n    hidePadding?: boolean;\n    hidden?: boolean;\n};\n\nexport type ActiveItemBackgroundShape = 'round' | 'square';\n\n/**\n * [DrawerNavItem Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * The `<pxb-drawer-nav-item>` is a wrapper to the `<pxb-info-list-item>` that is meant to be used within a `<pxb-nav-group>`.\n */\n@Component({\n    selector: 'pxb-drawer-nav-item',\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./drawer-nav-item.component.scss'],\n    template: `\n        <ng-container *ngIf=\"!hidden\">\n            <ng-template #navIcon><ng-content select=\"[pxb-icon]\"></ng-content></ng-template>\n            <div\n                class=\"pxb-drawer-nav-item-content\"\n                #navItem\n                matRipple\n                [class.pxb-drawer-nav-item-active]=\"selected\"\n                [class.pxb-drawer-nav-item-compact]=\"false\"\n            >\n                <div\n                    [class.pxb-drawer-nav-item-active-highlight]=\"selected\"\n                    [class.pxb-drawer-nav-item-active-round]=\"\n                        activeItemBackgroundShape === 'round' && isOpen() && !isRail()\n                    \"\n                    [class.pxb-drawer-nav-item-active-square]=\"\n                        activeItemBackgroundShape === 'square' || !isOpen() || isRail()\n                    \"\n                ></div>\n                <pxb-info-list-item\n                    *ngIf=\"!isRail()\"\n                    (click)=\"selectItem()\"\n                    [dense]=\"true\"\n                    [statusColor]=\"statusColor\"\n                    [chevron]=\"chevron && isOpen()\"\n                    [hidePadding]=\"hidePadding\"\n                    [divider]=\"divider ? 'full' : undefined\"\n                    [class.pxb-drawer-nav-item-no-icon-closed]=\"isEmpty(iconEl) && !isOpen()\"\n                    [matTooltip]=\"title\"\n                    [matTooltipDisabled]=\"isOpen() || isOpenOnHover() || !showTooltipOnRailHover()\"\n                    matTooltipPosition=\"right\"\n                >\n                    <ng-container pxb-icon #icon>\n                        <ng-container *ngTemplateOutlet=\"navIcon\"></ng-container>\n                    </ng-container>\n                    <div\n                        pxb-title\n                        [class.pxb-drawer-nav-item-depth-1]=\"depth === 1\"\n                        [class.pxb-drawer-nav-item-depth-2]=\"depth === 2\"\n                        [class.pxb-drawer-nav-item-depth-3]=\"depth === 3\"\n                    >\n                        {{ title }}\n                    </div>\n                    <div pxb-subtitle>{{ subtitle }}</div>\n                    <div pxb-right-content *ngIf=\"hasChildren && isOpen()\">\n                        <div #expandIcon *ngIf=\"!expanded\">\n                            <ng-content select=\"[pxb-expand-icon]\"></ng-content>\n                        </div>\n                        <div #collapseIcon *ngIf=\"expanded\">\n                            <ng-content select=\"[pxb-collapse-icon]\"></ng-content>\n                        </div>\n                        <mat-icon\n                            *ngIf=\"isEmpty(collapseIconEl) && isEmpty(expandIconEl)\"\n                            class=\"pxb-drawer-nav-item-expand-icon\"\n                            [class.pxb-drawer-nav-item-expanded]=\"expanded\"\n                            >{{ depth > 1 ? 'arrow_drop_down' : 'expand_more' }}</mat-icon\n                        >\n                    </div>\n                </pxb-info-list-item>\n                <div class=\"pxb-drawer-nav-item-rail-container\" *ngIf=\"isRail()\">\n                    <div\n                        (click)=\"selectItem()\"\n                        class=\"pxb-drawer-nav-item-rail\"\n                        [matTooltip]=\"showTooltipOnRailHover() ? title : ''\"\n                        [matTooltipDisabled]=\"!isRailCondensed()\"\n                        matTooltipPosition=\"right\"\n                    >\n                        <ng-container *ngTemplateOutlet=\"navIcon\"></ng-container>\n                        <div class=\"pxb-drawer-nav-item-rail-text\">{{ title }}</div>\n                    </div>\n                    <mat-divider *ngIf=\"divider\"></mat-divider>\n                </div>\n            </div>\n            <!-- Nested Nav Items -->\n            <mat-accordion displayMode=\"flat\" class=\"pxb-drawer-nested-nav-item\" *ngIf=\"!isRail()\">\n                <mat-expansion-panel [expanded]=\"expanded && isOpen()\">\n                    <ng-content select=\"pxb-drawer-nav-item\"></ng-content>\n                </mat-expansion-panel>\n            </mat-accordion>\n        </ng-container>\n    `,\n    host: {\n        class: 'pxb-drawer-nav-item',\n    },\n})\nexport class DrawerNavItemComponent extends StateListener implements Omit<DrawerNavItem, 'items'> {\n    /** Sets the active item background shape\n     *\n     * `square` - Background shape takes the entire height of width of the NavItem.\n     * `round` - Background shape has a rounded corner towards the end of the NavItem.\n     *\n     * @default square\n     * */\n    @Input() activeItemBackgroundShape: ActiveItemBackgroundShape = 'square';\n    /** Sets whether to show a chevron icon on the left side of a `NavItem`\n     *\n     * @default false\n     * */\n    @Input() chevron = false;\n    /** Whether to show a dividing line below each NavItem\n     *\n     * @default false\n     * */\n    @Input() divider = false;\n    /** Sets whether to show nested nav items\n     *\n     * @default false\n     * */\n    @Input() expanded = false;\n    /** Sets whether to show/hide padding whenever a NavItem does not have an icon */\n    @Input() hidePadding: boolean;\n    /** Sets whether to hide the nav item\n     *\n     * @default false\n     * */\n    @Input() hidden = false;\n    /** Sets whether to show/hide Angular ripple animation effect onClick\n     *\n     * @default true\n     * */\n    @Input() ripple = true;\n    /** Sets whether an item is selected.  A selected item will have the `activeBackgroundShape` applied to it and appear different from all other NavItems.*/\n    @Input() selected: boolean;\n    /** Left border color */\n    @Input() statusColor: string;\n    /** Text to display as a subtitle */\n    @Input() subtitle: string;\n    /** Text to display as a title */\n    @Input() title: string;\n\n    /** Event triggered on nav item select */\n    @Output() select: EventEmitter<string> = new EventEmitter<string>();\n\n    @ContentChildren(DrawerNavItemComponent, { descendants: false }) nestedNavItems;\n    @ViewChild('expandIcon') expandIconEl: ElementRef;\n    @ViewChild('icon') iconEl: ElementRef;\n    @ViewChild('collapseIcon') collapseIconEl: ElementRef;\n    @ViewChild('navItem') navItemEl: ElementRef;\n\n    isEmpty = (el: ElementRef): boolean => isEmptyView(el);\n    isNestedItem: boolean;\n    hasChildren = false;\n    depth: number;\n    id: number;\n\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n        this.id = drawerService.createNavItemID();\n        this.drawerService.drawerActiveItemChanges().subscribe(() => {\n            if (this.navItemEl) {\n                this.manageActiveItemTreeHighlight();\n            }\n        });\n    }\n\n    ngAfterContentInit(): void {\n        if (!this.nestedNavItems) {\n            return;\n        }\n\n        // If ContentChildren is self-inclusive (ng version < 9), filter self out using service-generated NavItem ID.\n        this.nestedNavItems = this.nestedNavItems.filter((item: DrawerNavItemComponent) => item.id !== this.id);\n        if (!this.nestedNavItems) {\n            return;\n        }\n\n        this.hasChildren = this.nestedNavItems.length >= 1;\n        for (const nestedItem of this.nestedNavItems) {\n            nestedItem.setNestedDrawerDefaults();\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.selected) {\n            this.drawerService.emitChangeActiveItemEvent();\n        }\n    }\n\n    isRail(): boolean {\n        return this.drawerService.getDrawerVariant() === 'rail';\n    }\n\n    isRailCondensed(): boolean {\n        return this.drawerService.isRailCondensed();\n    }\n\n    showTooltipOnRailHover(): boolean {\n        return !this.drawerService.isDisableRailTooltip();\n    }\n\n    /** Whenever the selected item in the drawer state changes, we need to check to see we should apply a hierarchical highlight. */\n    manageActiveItemTreeHighlight(): void {\n        if (!this.navItemEl) {\n            return;\n        }\n\n        this.navItemEl.nativeElement.classList.remove('pxb-drawer-nav-item-active-tree');\n\n        if (this.drawerService.hasDisableActiveItemParentStyles()) {\n            return;\n        }\n\n        // Add tree highlighting for selected items\n        if (this.selected && this.depth > 1) {\n            let parent = this.navItemEl.nativeElement.parentNode;\n            while (parent.parentNode) {\n                parent = parent.parentNode;\n                const navItem = parent.firstElementChild;\n                if (navItem.classList.contains('pxb-drawer-nav-item-content')) {\n                    navItem.classList.add('pxb-drawer-nav-item-active-tree');\n                }\n            }\n        }\n    }\n\n    listenForDrawerChanges(): void {\n        this.drawerOpenListener = this.drawerService.drawerOpenChanges().subscribe(() => {\n            // Two detections are required to get the custom icons to work.\n            // First tick causes the icons to container to reappear.\n            // Second tick handles isEmpty function calls.\n            this.changeDetector.detectChanges();\n            this.changeDetector.detectChanges();\n        });\n    }\n\n    incrementDepth(parentDepth: number): void {\n        this.depth = parentDepth + 1;\n        this.changeDetector.detectChanges();\n        if (this.nestedNavItems) {\n            for (const nestedItem of this.nestedNavItems) {\n                nestedItem.incrementDepth(this.depth);\n            }\n        }\n    }\n\n    /** Sets default state values for non-nested nav items. */\n    setNavItemDefaults(): void {\n        if (this.divider === undefined) this.divider = true;\n        if (this.hidePadding === undefined) this.hidePadding = true;\n        this.incrementDepth(0);\n    }\n\n    /** Sets default state values for nested nav items. */\n    setNestedDrawerDefaults(): void {\n        this.isNestedItem = true;\n        if (this.divider === undefined) this.divider = false;\n        if (this.hidePadding === undefined) this.hidePadding = false;\n    }\n\n    selectItem(): void {\n        this.drawerService.select(this.hasChildren);\n        this.select.emit();\n        if (this.hasChildren) {\n            this.toggleNestedNavItems();\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    toggleNestedNavItems(): void {\n        this.expanded = !this.expanded;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    Input,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { DrawerNavItem, DrawerNavItemComponent } from '../nav-item/drawer-nav-item.component';\nimport { DrawerService } from '../../service/drawer.service';\nimport { StateListener } from '../../state-listener.component';\n\nexport type DrawerNavGroup = {\n    divider?: boolean;\n    title?: string;\n    items: DrawerNavItem[];\n};\n\n/**\n * [DrawerNavGroup Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * A `<pxb-drawer-nav-group>` is used inside of the `<pxb-drawer-body>` to organize links and content.\n * Each group consists of an (optional) group title and a series of NavItems.\n */\n@Component({\n    selector: 'pxb-drawer-nav-group',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styles: [\n        `\n            .pxb-drawer-nav-group-content .mat-list-base {\n                font-weight: 600;\n                padding-top: 0;\n            }\n            .pxb-drawer-nav-group-content .pxb-drawer-nav-group-title {\n                font-weight: 600;\n                height: 3rem;\n                line-height: 3rem;\n                padding: 0 16px;\n                overflow: hidden;\n                white-space: nowrap;\n                text-overflow: ellipsis;\n                display: block;\n            }\n            .pxb-drawer-nav-group-content .pxb-drawer-nav-group-title-closed {\n                visibility: hidden;\n            }\n        `,\n    ],\n    template: `\n        <div class=\"pxb-drawer-nav-group-content\">\n            <div\n                *ngIf=\"title\"\n                class=\"pxb-drawer-nav-group-title mat-overline\"\n                [class.pxb-drawer-nav-group-title-closed]=\"!isOpen()\"\n            >\n                {{ title }}\n            </div>\n            <ng-content select=\"pxb-title-content\"></ng-content>\n            <mat-divider *ngIf=\"divider\"></mat-divider>\n            <mat-nav-list>\n                <ng-content select=\"pxb-drawer-nav-item\"></ng-content>\n            </mat-nav-list>\n        </div>\n    `,\n    host: {\n        class: 'pxb-drawer-nav-group',\n    },\n})\nexport class DrawerNavGroupComponent extends StateListener implements Omit<DrawerNavGroup, 'items'> {\n    /** Whether to show a dividing line below the title */\n    @Input() divider = false;\n    /** Component to render a group title */\n    @Input() title: string;\n    @ContentChildren(DrawerNavItemComponent) navItems;\n\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n    }\n\n    ngAfterContentInit(): void {\n        for (const navItem of this.navItems) {\n            navItem.setNavItemDefaults();\n        }\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    Input,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { isEmptyView, requireContent } from '../../utils/utils';\n\ntype IconAlignType = 'left' | 'center' | 'right' | undefined;\ntype DividerType = 'full' | 'partial' | undefined;\n\n/**\n * [InfoListItem Component](https://pxblue-components.github.io/angular/?path=/info/components-info-list-item--readme)\n *\n * The `<pxb-info-list-item>` is intended to be used in List views.\n * It positions a title as well as optional subtitle(s), icon, and status stripe.\n */\n@Component({\n    selector: 'pxb-info-list-item',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <mat-list-item\n            class=\"pxb-info-list-item-content\"\n            [class.pxb-info-list-item-wrap]=\"wrapSubtitle || wrapTitle || wrapInfo\"\n            [class.pxb-info-list-item-dense]=\"dense\"\n            [class.pxb-info-list-item-status]=\"statusColor\"\n            [style.border-left-color]=\"statusColor\"\n            [style.border-right-color]=\"statusColor\"\n            [disabled]=\"disabled\"\n        >\n            <div\n                mat-list-icon\n                class=\"pxb-info-list-item-icon-wrapper\"\n                [class.pxb-info-list-item-hide-padding]=\"hidePadding\"\n                [class.pxb-info-list-item-avatar]=\"avatar\"\n                [style.justify-content]=\"\n                    iconAlign === 'right' ? 'flex-end' : iconAlign === 'center' ? 'center' : 'flex-start'\n                \"\n            >\n                <ng-content select=\"[pxb-icon]\"></ng-content>\n            </div>\n            <div class=\"pxb-info-list-item-left-content-wrapper\">\n                <ng-content select=\"[pxb-left-content]\"></ng-content>\n            </div>\n            <div\n                class=\"mat-body-1 pxb-info-list-item-title-wrapper\"\n                matLine\n                [class.pxb-info-list-item-wrap]=\"wrapTitle\"\n                #title\n            >\n                <ng-content select=\"[pxb-title]\"></ng-content>\n            </div>\n            <div\n                class=\"mat-body-2 pxb-info-list-item-subtitle-wrapper\"\n                matLine\n                [class.pxb-info-list-item-wrap]=\"wrapSubtitle\"\n            >\n                <ng-content select=\"[pxb-subtitle]\"></ng-content>\n            </div>\n            <div class=\"mat-body-2 pxb-info-list-item-info-wrapper\" matLine [class.pxb-info-list-item-wrap]=\"wrapInfo\">\n                <ng-content select=\"[pxb-info]\"></ng-content>\n            </div>\n            <pxb-spacer class=\"pxb-info-list-item-spacer\"></pxb-spacer>\n            <div class=\"pxb-info-list-item-right-content\">\n                <div #right class=\"pxb-info-list-item-right-content-wrapper\">\n                    <ng-content select=\"[pxb-right-content]\"></ng-content>\n                </div>\n                <mat-icon *ngIf=\"chevron && isEmpty(rightEl)\" class=\"pxb-chevron\">chevron_right</mat-icon>\n            </div>\n        </mat-list-item>\n        <mat-divider\n            *ngIf=\"divider\"\n            class=\"pxb-info-list-item-divider\"\n            [class.pxb-info-list-item-partial-divider]=\"divider === 'partial'\"\n        >\n        </mat-divider>\n    `,\n    styleUrls: ['./info-list-item.component.scss'],\n    host: {\n        class: 'pxb-info-list-item',\n    },\n})\nexport class InfoListItemComponent implements AfterViewInit {\n    /** Show a colored background for the icon\n     *\n     * @default false\n     * */\n    @Input() avatar = false;\n    /** Add a chevron icon on the right\n     *\n     * @default false\n     * */\n    @Input() chevron = false;\n    /** Smaller height row with less padding\n     *\n     * @default false\n     * */\n    @Input() dense = false;\n    /** Show a row separator below the row.  Can be `partial` | `full`\n     *\n     * `partial` - Divider does not expand full width of the ListItem\n     *\n     * `full`- Divider spans full width of the ListItem\n     * */\n    @Input() divider: DividerType;\n    /** Disable the list item\n     *\n     * @default false\n     * */\n    @Input() disabled = false;\n    /** Remove left padding if no icon is used */\n    @Input() hidePadding = false;\n    /** Icon alignment when avatar is set to false. Can be `left` | `right` | `center`\n     *\n     * `left` - Icon appears at the `flex-start` of the icon container.\n     *\n     * `right` - Icon appears at the `flex-end` of the icon container.\n     *\n     * `center` - Icon appears at the center of the icon container.\n     *\n     * @default left\n     * */\n    @Input() iconAlign: IconAlignType = 'left';\n    /** Left border color */\n    @Input() statusColor: string;\n    /** When true, 3rd-line text overflow breaks onto the next line instead of using an ellipsis\n     *\n     * @default false\n     * */\n    @Input() wrapInfo = false;\n    /** When true, 2nd-line text overflow breaks onto the next line instead of using an ellipsis\n     *\n     * @default false\n     * */\n    @Input() wrapSubtitle = false;\n    /** When true, 1st-line text overflow breaks onto the next line instead of using an ellipsis\n     *\n     * @default false\n     * */\n    @Input() wrapTitle = false;\n\n    @ViewChild('title') titleEl: ElementRef;\n    @ViewChild('right') rightEl: ElementRef;\n\n    isEmpty = (el: ElementRef): boolean => isEmptyView(el);\n\n    ngAfterViewInit(): void {\n        const required = { selector: 'title', ref: this.titleEl };\n        requireContent([required], this);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { InfoListItemComponent } from './info-list-item.component';\nimport { SpacerModule } from '../utility/spacer.module';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n    declarations: [InfoListItemComponent],\n    imports: [SpacerModule, MatIconModule, CommonModule, MatListModule, MatDividerModule],\n    exports: [InfoListItemComponent, MatIconModule, MatListModule, SpacerModule, MatDividerModule],\n})\nexport class InfoListItemModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DrawerNavGroupComponent } from './drawer-nav-group.component';\nimport { MatListModule } from '@angular/material/list';\n\n@NgModule({\n    declarations: [DrawerNavGroupComponent],\n    imports: [CommonModule, MatDividerModule, MatListModule],\n    exports: [DrawerNavGroupComponent],\n})\nexport class DrawerNavGroupModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerNavItemComponent } from './drawer-nav-item.component';\nimport { InfoListItemModule } from '../../../info-list-item/public-api';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n    declarations: [DrawerNavItemComponent],\n    imports: [\n        MatTooltipModule,\n        CommonModule,\n        InfoListItemModule,\n        MatIconModule,\n        MatDividerModule,\n        MatRippleModule,\n        MatExpansionModule,\n    ],\n    exports: [DrawerNavItemComponent],\n})\nexport class DrawerNavItemModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerBodyComponent } from './drawer-body.component';\nimport { DrawerNavGroupComponent } from './nav-group/drawer-nav-group.component';\nimport { InfoListItemModule } from '../../info-list-item/public-api';\nimport { DrawerNavGroupModule } from './nav-group/drawer-nav-group.module';\nimport { DrawerNavItemModule } from './nav-item/drawer-nav-item.module';\n\n@NgModule({\n    declarations: [DrawerBodyComponent],\n    imports: [CommonModule, InfoListItemModule, DrawerNavGroupModule, DrawerNavItemModule],\n    exports: [\n        DrawerBodyComponent,\n        DrawerNavGroupComponent,\n        InfoListItemModule,\n        DrawerNavGroupModule,\n        DrawerNavItemModule,\n    ],\n})\nexport class DrawerBodyModule {}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DrawerService } from '../service/drawer.service';\nimport { StateListener } from '../state-listener.component';\n\n/**\n * [DrawerFooter Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * The `<pxb-drawer-footer>` is an optional section that renders at the bottom of the `<pxb-drawer>`.\n * It can be used to add any custom content (as children).\n */\n@Component({\n    selector: 'pxb-drawer-footer',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div\n            class=\"pxb-drawer-footer-content\"\n            [style.visibility]=\"hideContentOnCollapse ? (isOpen() ? 'visible' : 'hidden') : 'visible'\"\n        >\n            <mat-divider *ngIf=\"divider\"></mat-divider>\n            <ng-content></ng-content>\n        </div>\n    `,\n    styleUrls: ['./drawer-footer.component.scss'],\n    host: {\n        class: 'pxb-drawer-footer',\n    },\n})\nexport class DrawerFooterComponent extends StateListener {\n    /** Whether to show a dividing line above the Footer\n     *\n     * @default true\n     * */\n    @Input() divider = true;\n    /** Hide footer content when closed\n     *\n     * @default true\n     * */\n    @Input() hideContentOnCollapse = true;\n\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerFooterComponent } from './drawer-footer.component';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n    declarations: [DrawerFooterComponent],\n    imports: [CommonModule, MatDividerModule],\n    exports: [DrawerFooterComponent],\n})\nexport class DrawerFooterModule {}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Input,\n    ViewEncapsulation,\n    ChangeDetectorRef,\n    ViewChild,\n    ElementRef,\n} from '@angular/core';\nimport { DrawerService } from '../service/drawer.service';\nimport { StateListener } from '../state-listener.component';\nimport { isEmptyView } from '../../../utils/utils';\n\n/**\n * [DrawerHeader Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * The `<pxb-drawer-header>` contains the content found at the top of the `<pxb-drawer>`.\n */\n@Component({\n    selector: 'pxb-drawer-header',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <mat-toolbar\n            class=\"pxb-drawer-header-content\"\n            [class.rail]=\"isRail()\"\n            [color]=\"color\"\n            [class.pxb-drawer-header-no-icon]=\"isEmpty(iconEl)\"\n        >\n            <div class=\"pxb-drawer-header-background\"></div>\n            <div class=\"pxb-drawer-header-text\">\n                <div #icon class=\"pxb-drawer-header-icon-wrapper\">\n                    <ng-content select=\"[pxb-icon]\"></ng-content>\n                </div>\n                <div *ngIf=\"title\" class=\"pxb-drawer-header-title-wrapper\">\n                    <div class=\"pxb-drawer-header-title\">{{ title }}</div>\n                    <div *ngIf=\"subtitle\" class=\"pxb-drawer-header-subtitle mat-subheading-2\">{{ subtitle }}</div>\n                </div>\n                <ng-content select=\"[pxb-title-content]\"></ng-content>\n            </div>\n        </mat-toolbar>\n        <mat-divider *ngIf=\"divider\"></mat-divider>\n    `,\n    styleUrls: ['./drawer-header.component.scss'],\n    host: {\n        class: 'pxb-drawer-header',\n    },\n})\nexport class DrawerHeaderComponent extends StateListener {\n    /** Mat toolbar color variant\n     *\n     * @default primary\n     * */\n    @Input() color: 'primary' | 'accent' | 'warn' | undefined = 'primary';\n    /** Show a divider below footer\n     *\n     * @default false\n     * */\n    @Input() divider = false;\n    /** The text to show on the second line */\n    @Input() subtitle: string;\n    /** The text to show on the first line */\n    @Input() title: string;\n    @ViewChild('icon', { static: true }) iconEl: ElementRef;\n\n    isEmpty = (el: ElementRef): boolean => isEmptyView(el);\n\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n    }\n\n    isRail(): boolean {\n        return this.drawerService.getDrawerVariant() === 'rail';\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerHeaderComponent } from './drawer-header.component';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatDividerModule } from '@angular/material/divider';\n@NgModule({\n    declarations: [DrawerHeaderComponent],\n    imports: [CommonModule, MatToolbarModule, MatDividerModule],\n    exports: [DrawerHeaderComponent],\n})\nexport class DrawerHeaderModule {}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { DrawerService } from '../service/drawer.service';\nimport { StateListener } from '../state-listener.component';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { Subscription } from 'rxjs';\n\nexport type DrawerLayoutVariantType = 'permanent' | 'persistent' | 'temporary' | 'rail';\n\n/**\n * [DrawerLayout Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * The `<pxb-drawer-layout>` component is a wrapper around the [Angular Material Sidenav](https://material.angular.io/components/sidenav/overview) that adds specific PX Blue functionality and styling.\n * The `<pxb-drawer-layout>` component is used to provide the appropriate resizing behavior for your main application content when used in conjunction with a PX Blue `<pxb-drawer>`.\n * It accepts a drawer and content as child elements;\n */\n@Component({\n    selector: 'pxb-drawer-layout',\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./drawer-layout.component.scss'],\n    template: `\n        <mat-sidenav-container class=\"pxb-drawer-layout-content\" (backdropClick)=\"closeDrawer()\" autosize=\"false\">\n            <mat-sidenav\n                class=\"pxb-drawer-layout-sidenav\"\n                [fixedInViewport]=\"false\"\n                [class.pxb-drawer-layout-smooth]=\"variant !== 'temporary'\"\n                [class.mat-elevation-z6]=\"!hasSideBorder()\"\n                [style.width.rem]=\"isCollapsed() ? getCollapsedWidth() : toRem(width)\"\n                [mode]=\"getMode()\"\n                [opened]=\"isDrawerVisible()\"\n            >\n                <ng-content select=\"[pxb-drawer]\"></ng-content>\n            </mat-sidenav>\n            <div\n                class=\"pxb-drawer-layout-nav-content\"\n                [class.pxb-drawer-layout-smooth]=\"variant !== 'temporary'\"\n                [style.marginRight.rem]=\"isRtl ? getContentMargin() : 0\"\n                [style.marginLeft.rem]=\"isRtl ? 0 : getContentMargin()\"\n            >\n                <ng-content select=\"[pxb-content]\"></ng-content>\n            </div>\n            <div style=\"display:none; font-size: 1rem\" #remElement></div>\n        </mat-sidenav-container>\n    `,\n    host: {\n        class: 'pxb-drawer-layout',\n    },\n})\nexport class DrawerLayoutComponent extends StateListener implements AfterViewInit, OnChanges {\n    /** Controls how the Drawer behaves and appears on the screen.  Can be `permanent` | `peristent` | `temporary` | `rail`.\n     *\n     * `permanent` - `Drawer` appears on the side of the screen and cannot be dismissed.\n     *\n     * `persistent` - `Drawer` appears on the side of the screen and responds to the `open` @Input. When closed, only shows each `NavItem` icon.\n     *\n     * `temporary` - `Drawer` slides in from the side of the screen and appears as an overlay.\n     *\n     * `rail` - `Drawer` appears on the side of the screen as a slim element, supporting icons and text.\n     *\n     * @default temporary\n     * */\n    @Input() variant: DrawerLayoutVariantType = 'temporary';\n    /** Drawer pixel width\n     *\n     * @default 350\n     * */\n    @Input() width = 350;\n    /** Event triggered on 'temporary' variant backdrop click */\n    @Output() backdropClick: EventEmitter<void> = new EventEmitter();\n    @ViewChild('remElement') remElement: ElementRef;\n\n    isRtl = false;\n    remSizePx: number;\n    dirChangeSubscription = Subscription.EMPTY;\n\n    content: HTMLElement;\n\n    constructor(\n        drawerService: DrawerService,\n        changeDetectorRef: ChangeDetectorRef,\n        private readonly _dir: Directionality\n    ) {\n        super(drawerService, changeDetectorRef);\n        this.dirChangeSubscription = _dir.change.subscribe((direction: Direction) => {\n            this.isRtl = direction === 'rtl';\n            changeDetectorRef.detectChanges();\n        });\n    }\n\n    ngAfterViewInit(): void {\n        this.isRtl = this._dir.value === 'rtl';\n    }\n\n    ngOnChanges(): void {\n        this.drawerService.setDrawerVariant(this.variant);\n        this.changeDetector.detectChanges();\n    }\n\n    ngOnDestroy(): void {\n        this.unsubscribeListeners();\n        this.dirChangeSubscription.unsubscribe();\n    }\n\n    getMode(): string {\n        return this.variant === 'temporary' ? 'over' : 'side';\n    }\n\n    toRem(px: number): number {\n        if (this.remElement && this.remElement.nativeElement) {\n            const style = getComputedStyle(this.remElement.nativeElement);\n            this.remSizePx = Number(style.fontSize.split('px')[0]);\n        }\n        return px / (this.remSizePx || 16);\n    }\n\n    hasSideBorder(): boolean {\n        return this.drawerService.hasSideBorder();\n    }\n\n    closeDrawer(): void {\n        this.drawerService.setDrawerOpen(false);\n        this.backdropClick.emit();\n    }\n\n    // Is the drawer seen on the screen and expanded.\n    isDrawerVisible(): boolean {\n        if (this.variant === 'temporary') return this.isOpen();\n        return true;\n    }\n\n    getContentMargin(): number {\n        if (this.variant === 'temporary') {\n            return 0;\n        }\n        return this.isCollapsed() ? this.getCollapsedWidth() : this.toRem(this.width);\n    }\n\n    getCollapsedWidth(): number {\n        return this.variant === 'rail' && !this.drawerService.isRailCondensed()\n            ? 3.5 + this.toRem(16) // Rail (default)\n            : 1.5 + this.toRem(32); //  Rail (condensed) || closed persistent\n    }\n\n    // Is the drawer condensed.\n    isCollapsed(): boolean {\n        if (this.variant === 'rail') return true; // Rail is always collapsed.\n        if (this.variant === 'persistent') return !this.isOpen();\n        return false;\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerLayoutComponent } from './drawer-layout.component';\nimport { MatSidenavModule } from '@angular/material/sidenav';\n\n@NgModule({\n    declarations: [DrawerLayoutComponent],\n    imports: [CommonModule, MatSidenavModule],\n    exports: [DrawerLayoutComponent],\n})\nexport class DrawerLayoutModule {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, ChangeDetectorRef, Input } from '@angular/core';\nimport { DrawerService } from '../service/drawer.service';\nimport { StateListener } from '../state-listener.component';\n\n/**\n * [DrawerSubheader Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * The `<pxb-drawer-subheader>` is an optional section that renders below the header and above the body of the `<pxb-drawer>`.\n * It can be used to support custom content (passed as children), such as filtering options or to display additional information.\n */\n@Component({\n    selector: 'pxb-drawer-subheader',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div\n            class=\"pxb-drawer-subheader-content\"\n            [style.visibility]=\"hideContentOnCollapse ? (isOpen() ? 'visible' : 'hidden') : 'visible'\"\n        >\n            <ng-content></ng-content>\n        </div>\n        <mat-divider *ngIf=\"divider\"></mat-divider>\n    `,\n    styleUrls: ['./drawer-subheader.component.scss'],\n    host: {\n        class: 'pxb-drawer-subheader',\n    },\n})\nexport class DrawerSubheaderComponent extends StateListener {\n    /** Whether to show a dividing line below the SubHeader\n     *\n     * @default true\n     * */\n    @Input() divider = true;\n    /** Hide subheader content when drawer is collapsed\n     *\n     * @default true\n     * */\n    @Input() hideContentOnCollapse = true;\n\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerSubheaderComponent } from './drawer-subheader.component';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n    declarations: [DrawerSubheaderComponent],\n    imports: [CommonModule, MatDividerModule],\n    exports: [DrawerSubheaderComponent],\n})\nexport class DrawerSubheaderModule {}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnChanges,\n    OnInit,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { DrawerService } from './service/drawer.service';\nimport { StateListener } from './state-listener.component';\nimport { Subscription } from 'rxjs';\n\n/**\n * [Drawer Component](https://pxblue-components.github.io/angular/?path=/info/components-drawer--readme)\n *\n * The `<pxb-drawer>` is used to organize content (typically navigation links) within a `<pxb-drawer-layout>`.\n * The `<pxb-drawer>` includes helper components for `<pxb-drawer-header>`, `<pxb-drawer-subheader>`, `<pxb-drawer-body>`, `<pxb-drawer-nav-group>`, `<pxb-drawer-footer>`, and `<pxb-drawer-layout>` to help organize the content.\n */\n@Component({\n    selector: 'pxb-drawer',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div\n            class=\"pxb-drawer-content\"\n            [class.pxb-drawer-side-border]=\"sideBorder\"\n            [class.mat-elevation-z6]=\"!sideBorder\"\n            [class.pxb-drawer-condensed-rail]=\"condensed\"\n            [class.pxb-drawer-collapse]=\"!isOpen()\"\n            [class.pxb-drawer-temp-variant]=\"isTemporaryVariant()\"\n        >\n            <!-- Drawer is responsible for managing the styles between the 4 subsections -->\n            <ng-content select=\"pxb-drawer-header\"></ng-content>\n            <div class=\"pxb-drawer-hover-area\" (mouseenter)=\"hoverDrawer()\" (mouseleave)=\"unhoverDrawer()\">\n                <ng-content select=\"pxb-drawer-subheader\"></ng-content>\n                <ng-content select=\"pxb-drawer-body\"></ng-content>\n                <ng-content select=\"pxb-drawer-footer\"></ng-content>\n            </div>\n        </div>\n    `,\n    styleUrls: ['./drawer.component.scss'],\n    host: {\n        class: 'pxb-drawer',\n    },\n})\nexport class DrawerComponent extends StateListener implements OnInit, OnChanges {\n    /** Enables a condensed view for the `rail` variant which removes NavItem labels and shows tooltips instead\n     *\n     * @default false\n     * */\n    @Input() condensed = false;\n    /** Hides tooltips on hover for the `rail` variant\n     *\n     * @default false\n     * */\n    @Input() disableRailTooltip = false;\n    /** If true, NavItems will not have a bold title when a child NavItem is selected\n     *\n     * @default false\n     * */\n    @Input() disableActiveItemParentStyles = false;\n    /** State for the drawer */\n    @Input() open: boolean;\n    /** Automatically open the drawer on hover when closed (persistent variant only) */\n    @Input() openOnHover = true;\n    /** Delay in milliseconds before a hover event opens the drawer (persistent variant only)\n     *\n     * @default 500\n     * */\n    @Input() openOnHoverDelay = 500;\n    /** Toggle a side border instead of shadow\n     *\n     * @default false\n     * */\n    @Input() sideBorder = false;\n\n    hoverDelayTimeout: any;\n    drawerSelectionListener: Subscription;\n\n    constructor(drawerService: DrawerService, changeDetectorRef: ChangeDetectorRef) {\n        super(drawerService, changeDetectorRef);\n    }\n\n    ngOnInit(): void {\n        this.drawerService.setDrawerOpen(this.open);\n        this.listenForDrawerChanges();\n        this.listenForDrawerSelection();\n    }\n\n    // This broadcasts changes to all of the drawer state listeners.\n    ngOnChanges(): void {\n        this.drawerService.setSideBorder(this.sideBorder);\n        this.drawerService.setDrawerOpen(this.open);\n        this.drawerService.setIsCondensed(this.condensed);\n        this.drawerService.setDisableRailTooltip(this.disableRailTooltip);\n        this.drawerService.setDisableActiveItemParentStyles(this.disableActiveItemParentStyles);\n        this.drawerService.setOpenOnHover(this.openOnHover);\n    }\n\n    hoverDrawer(): void {\n        if (!this.open && this.openOnHover) {\n            this.hoverDelayTimeout = setTimeout(() => {\n                this.drawerService.setDrawerTempOpen(true);\n                this.changeDetector.detectChanges();\n            }, this.openOnHoverDelay);\n        }\n    }\n\n    unhoverDrawer(): void {\n        if (this.openOnHover) {\n            clearTimeout(this.hoverDelayTimeout);\n            if (this.drawerService.isTempOpen()) {\n                this.drawerService.setDrawerTempOpen(false);\n                this.changeDetector.detectChanges();\n            }\n        }\n    }\n\n    // Close drawer on selection if drawer is only temporarily opened.\n    // Expanding nested navitems when temporarily opened will not close the drawer.\n    listenForDrawerSelection(): void {\n        this.drawerSelectionListener = this.drawerService.drawerSelectionChanges().subscribe((hasChildren) => {\n            if (this.drawerService.isTempOpen() && !hasChildren) {\n                this.drawerService.setDrawerTempOpen(false);\n                this.changeDetector.detectChanges();\n            }\n        });\n    }\n\n    isTemporaryVariant(): boolean {\n        return this.drawerService.getDrawerVariant() === 'temporary';\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DrawerComponent } from './drawer.component';\nimport { DrawerBodyModule } from './drawer-body/drawer-body.module';\nimport { DrawerHeaderModule } from './drawer-header/drawer-header.module';\nimport { DrawerSubheaderModule } from './drawer-subheader/drawer-subheader.module';\nimport { DrawerFooterModule } from './drawer-footer/drawer-footer.module';\nimport { DrawerLayoutModule } from './drawer-layout/drawer-layout.module';\n\n@NgModule({\n    declarations: [DrawerComponent],\n    imports: [\n        CommonModule,\n        DrawerHeaderModule,\n        DrawerSubheaderModule,\n        DrawerBodyModule,\n        DrawerFooterModule,\n        DrawerLayoutModule,\n    ],\n    exports: [\n        DrawerComponent,\n        DrawerHeaderModule,\n        DrawerSubheaderModule,\n        DrawerBodyModule,\n        DrawerFooterModule,\n        DrawerLayoutModule,\n    ],\n})\nexport class DrawerModule {}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    Input,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { requireContent } from '../../utils/utils';\n\n/**\n * [EmptyState Component](https://pxblue-components.github.io/angular/?path=/info/components-empty-state--readme)\n *\n * The `<pxb-empty-state>` component can display a particular icon, text, and actions.\n * Icon components are passed as a child element with the `emptyIcon` attribute - these will typically be a Material icon, PX Blue icon, or Progress Icon.\n */\n@Component({\n    selector: 'pxb-empty-state',\n    templateUrl: './empty-state.component.html',\n    styleUrls: ['./empty-state.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'pxb-empty-state',\n    },\n})\nexport class EmptyStateComponent implements AfterViewInit {\n    /** The secondary text to display (second line) */\n    @Input() description: string;\n    /** The primary text to display (first line) */\n    @Input() title: string;\n\n    /** Used to check if an icon has been provided ngAfterViewInit */\n    @ViewChild('emptyIcon') emptyIcon: ElementRef;\n\n    ngAfterViewInit(): void {\n        const required = { selector: 'emptyIcon', ref: this.emptyIcon };\n        requireContent([required], this);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EmptyStateComponent } from './empty-state.component';\n\n@NgModule({\n    declarations: [EmptyStateComponent],\n    imports: [CommonModule],\n    exports: [EmptyStateComponent],\n})\nexport class EmptyStateModule {}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * [HeroBanner Component](https://pxblue-components.github.io/angular/?path=/info/components-hero--readme)\n *\n * The `<pxb-hero-banner>` component is a simple wrapper component that is used to contain `<pxb-hero>`s.\n */\n@Component({\n    selector: 'pxb-hero-banner',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div class=\"pxb-hero-banner-content\">\n            <ng-content select=\"pxb-hero\"></ng-content>\n        </div>\n        <mat-divider class=\"pxb-hero-banner-divider\" *ngIf=\"divider\"></mat-divider>\n    `,\n    styleUrls: ['./hero-banner.component.scss'],\n    host: {\n        class: 'pxb-hero-banner',\n    },\n})\nexport class HeroBannerComponent {\n    /** Whether to show the line separator\n     *\n     * @default false\n     * */\n    @Input() divider = false;\n}\n","import {\n    AfterContentChecked,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Input,\n    OnChanges,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { requireInput } from '../../utils/utils';\nimport { UnitSpaceType } from '../channel-value/channel-value.component';\n/**\n * [Hero Component](https://pxblue-components.github.io/angular/?path=/info/components-hero--readme)\n *\n * The `<pxb-hero>` components are used to call attention to particular values that are of the most importance to the user.\n * These are typically displayed in a banner.\n */\n@Component({\n    selector: 'pxb-hero',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./hero.component.scss'],\n    template: `\n        <div class=\"pxb-hero-content\">\n            <div\n                class=\"pxb-hero-primary-wrapper\"\n                #primaryContainer\n                [style.backgroundColor]=\"iconBackgroundColor\"\n                [style.lineHeight.px]=\"iSize\"\n                [style.fontSize.px]=\"iSize\"\n                [style.width.px]=\"iSize\"\n                [style.height.px]=\"iSize\"\n                [class.pxb-hero-svgIcon]=\"hasMatSvgIcon\"\n            >\n                <ng-content select=\"[pxb-primary]\"></ng-content>\n            </div>\n            <span class=\"pxb-hero-channel-value-wrapper\">\n                <ng-content select=\"pxb-channel-value\" *ngIf=\"value === undefined\"></ng-content>\n                <pxb-channel-value *ngIf=\"value !== undefined\" [value]=\"value\" [units]=\"units\" [unitSpace]=\"unitSpace\">\n                    <ng-content select=\"[pxb-secondary]\"></ng-content>\n                </pxb-channel-value>\n            </span>\n            <h5 class=\"pxb-hero-label\">{{ label }}</h5>\n        </div>\n    `,\n    host: {\n        class: 'pxb-hero',\n    },\n})\nexport class HeroComponent implements OnChanges, AfterViewInit, AfterContentChecked {\n    /** Color of the hero icon */\n    @Input() color: string;\n    /** Color of the hero background */\n    @Input() iconBackgroundColor: string;\n    /** The size of the primary icon (10-48) */\n    @Input() iconSize = 36;\n    /** The text shown below the Channel Value */\n    @Input() label: string;\n    /** Transforms an SVG icon based on the provided `iconSize` */\n    @Input() scaleSvgIcon = true;\n    /** Text to show after the value */\n    @Input() units: string;\n    /** The value for the channel */\n    @Input() value: string;\n    /** Show a space between the value and units for the channel, default is `auto` */\n    @Input() unitSpace: UnitSpaceType = 'auto';\n\n    @ViewChild('primaryContainer') primaryContainer: ElementRef;\n\n    iSize: number;\n    iconString: string;\n    hasMatSvgIcon: boolean;\n\n    constructor(private readonly _ref: ChangeDetectorRef) {}\n\n    ngOnChanges(): void {\n        requireInput<HeroComponent>(['label'], this);\n        this.iSize = this.iconSize;\n    }\n\n    ngAfterViewInit(): void {\n        this.hasMatSvgIcon = Boolean(this.getMatSvgIcon());\n        this._ref.detectChanges();\n    }\n\n    ngAfterContentChecked(): void {\n        this.scaleSvgIconOnChanges();\n    }\n\n    // Used to listen for changes in the primary icon content.\n    // SVG icon content might be loaded post-render (fetching icon via http)\n    scaleSvgIconOnChanges(): void {\n        if (!this.hasMatSvgIcon || !this.primaryContainer || !this.scaleSvgIcon) {\n            return;\n        }\n\n        // If the primary ng-content did not change, no action required.\n        const iconHtml = this.primaryContainer.nativeElement.innerHTML;\n        if (iconHtml === this.iconString) {\n            return;\n        }\n        // Update icon data.\n        this.iconString = iconHtml;\n        const matIcon = this.getMatSvgIcon();\n        if (matIcon) {\n            this.hasMatSvgIcon = true;\n            const svg = matIcon.querySelector('svg');\n            if (svg) {\n                svg.style.setProperty('transform', `scale(${this.iSize / 24})`);\n            }\n        }\n    }\n\n    // Returns projected <mat-icon> with attribute [svgIcon] if it exists\n    getMatSvgIcon(): HTMLElement {\n        return this.primaryContainer.nativeElement.querySelector('div mat-icon[svgicon]');\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { ChannelValueModule } from '../channel-value/public-api';\nimport { HeroBannerComponent } from './hero-banner.component';\nimport { HeroComponent } from './hero.component';\nimport { CommonModule } from '@angular/common';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n    declarations: [HeroComponent, HeroBannerComponent],\n    imports: [MatDividerModule, ChannelValueModule, CommonModule],\n    exports: [HeroComponent, HeroBannerComponent],\n})\nexport class HeroModule {}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { requireInput } from '../../utils/utils';\n\n/**\n * [ScoreCard Component](https://pxblue-components.github.io/angular/?path=/info/components-score-card--readme)\n *\n `<pxb-score-card>` is a card component that calls attention to particular values.\n */\n@Component({\n    selector: 'pxb-score-card',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <mat-card class=\"pxb-score-card-content\">\n            <div class=\"pxb-score-card-header\">\n                <div class=\"pxb-score-card-header-background\"></div>\n                <div class=\"pxb-score-card-header-wrapper\">\n                    <div class=\"pxb-score-card-header-text\">\n                        <mat-card-title class=\"pxb-score-card-title\">{{ headerTitle }}</mat-card-title>\n                        <mat-card-subtitle class=\"pxb-score-card-subtitle\">{{ headerSubtitle }}</mat-card-subtitle>\n                        <mat-card-subtitle class=\"pxb-score-card-info\">{{ headerInfo }}</mat-card-subtitle>\n                    </div>\n                    <div class=\"pxb-score-card-action-items-wrapper\">\n                        <ng-content select=\"[pxb-action-items]\"></ng-content>\n                    </div>\n                </div>\n            </div>\n            <mat-card-content>\n                <div class=\"pxb-score-card-body\">\n                    <ng-content select=\"[pxb-body]\"></ng-content>\n                    <div class=\"pxb-score-card-badge-wrapper\" [style.marginTop.px]=\"badgeOffset || 'inherit'\">\n                        <ng-content select=\"[pxb-badge]\"></ng-content>\n                    </div>\n                </div>\n                <mat-divider *ngIf=\"actionRow.childNodes.length !== 0\"></mat-divider>\n                <div class=\"pxb-score-card-action-row-wrapper\" #actionRow>\n                    <ng-content select=\"[pxb-action-row]\"></ng-content>\n                </div>\n            </mat-card-content>\n        </mat-card>\n    `,\n    styleUrls: ['./score-card.component.scss'],\n    host: {\n        class: 'pxb-score-card',\n    },\n})\nexport class ScoreCardComponent {\n    /** Vertical offset for the badge content\n     *\n     * @default 0\n     * */\n    @Input() badgeOffset = 0;\n\n    /** The third line of text in the header */\n    @Input() headerInfo: string;\n\n    /** The second line of text in the header */\n    @Input() headerSubtitle: string;\n\n    /** The first line of text in the header */\n    @Input() headerTitle: string;\n\n    ngOnChanges(): void {\n        requireInput<ScoreCardComponent>(['headerTitle'], this);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ScoreCardComponent } from './score-card.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n    declarations: [ScoreCardComponent],\n    imports: [CommonModule, MatCardModule, MatDividerModule],\n    exports: [ScoreCardComponent],\n})\nexport class ScoreCardModule {}\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { requireInput } from '../../utils/utils';\n\n/**\n * [ListItemTag Component](https://pxblue-components.github.io/angular/?path=/info/components-list-item-tag--readme)\n *\n * The `<pxb-list-item-tag>` is a text item with a colored background and rounded corners that is used to tag lists.\n */\n@Component({\n    selector: 'pxb-list-item-tag',\n    templateUrl: './list-item-tag.component.html',\n    styleUrls: ['./list-item-tag.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'pxb-list-item-tag',\n    },\n})\nexport class ListItemTagComponent implements OnChanges {\n    /** Color of the label background */\n    @Input() backgroundColor: string;\n    /** Color of the label text */\n    @Input() fontColor: string;\n    /** The label text */\n    @Input() label: string;\n\n    ngOnChanges(): void {\n        requireInput<ListItemTagComponent>(['label'], this);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { ListItemTagComponent } from './list-item-tag.component';\n\n@NgModule({\n    declarations: [ListItemTagComponent],\n    exports: [ListItemTagComponent],\n})\nexport class ListItemTagModule {}\n","import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\n\n/**\n * [DropdownToolbar Component](https://pxblue-components.github.io/angular/?path=/info/components-dropdown-toolbar--readme)\n *\n * The `<pxb-dropdown-toolbar>` component is used to display a toolbar with a dropdown.\n */\n@Component({\n    selector: 'pxb-dropdown-toolbar',\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <mat-toolbar fxLayout=\"row\" class=\"pxb-dropdown-toolbar-content\" [color]=\"color\">\n            <div class=\"pxb-dropdown-toolbar-icon-wrapper\">\n                <ng-content select=\"[pxb-nav-icon]\"></ng-content>\n            </div>\n            <div *ngIf=\"title\" class=\"pxb-dropdown-toolbar-text-content-container\">\n                <div class=\"pxb-dropdown-toolbar-title mat-title\">{{ title }}</div>\n                <div\n                    *ngIf=\"subtitle\"\n                    class=\"pxb-dropdown-toolbar-subtitle-container mat-subheading-2\"\n                    [matMenuTriggerFor]=\"dropdownToolbarMenu\"\n                    #menuTrigger=\"matMenuTrigger\"\n                >\n                    <span class=\"pxb-dropdown-toolbar-subtitle mat-subheading-2\">{{ subtitle }}</span>\n                    <mat-icon\n                        class=\"pxb-dropdown-toolbar-subtitle-icon\"\n                        [class.rotated-dropdown-arrow]=\"menuTrigger.menuOpen\"\n                        >arrow_drop_down</mat-icon\n                    >\n                </div>\n            </div>\n            <ng-content></ng-content>\n            <mat-menu #dropdownToolbarMenu=\"matMenu\" [overlapTrigger]=\"false\" class=\"pxb-dropdown-toolbar-menu-wrapper\">\n                <ng-content select=\"[pxb-toolbar-menu]\"></ng-content>\n            </mat-menu>\n        </mat-toolbar>\n    `,\n    styleUrls: ['./dropdown-toolbar.component.scss'],\n    host: {\n        class: 'pxb-dropdown-toolbar',\n    },\n})\nexport class DropdownToolbarComponent {\n    /** The text to display for title */\n    @Input() title: string;\n    /** The text to display subtitle */\n    @Input() subtitle: string;\n    /** Mat toolbar color variant */\n    @Input() color: 'primary' | 'accent' | 'warn' | undefined = 'primary';\n    @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DropdownToolbarComponent } from './dropdown-toolbar.component';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SpacerModule } from '../utility/public-api';\n\n@NgModule({\n    declarations: [DropdownToolbarComponent],\n    imports: [\n        CommonModule,\n        MatToolbarModule,\n        MatSelectModule,\n        MatFormFieldModule,\n        MatIconModule,\n        MatMenuModule,\n        SpacerModule,\n    ],\n    exports: [DropdownToolbarComponent],\n})\nexport class DropdownToolbarModule {}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Input,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { isEmptyView } from '../../utils/utils';\n\n/**\n * [ThreeLiner Component](https://pxblue-components.github.io/angular/?path=/info/components-three-liner--readme)\n *\n * The `<pxb-three-liner>` can display up to three lines of stylized text or other ng-content.\n * It is most commonly used within the context of a `<pxb-app-bar>` component where the text can grow / shrink as the App Bar is expanded and collapsed.\n */\n@Component({\n    selector: 'pxb-three-liner',\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['three-liner.component.scss'],\n    template: `\n        <div class=\"pxb-three-liner-content\">\n            <div class=\"pxb-three-liner-title\">\n                <div #titleVc>\n                    <ng-content select=\"[pxb-title]\"></ng-content>\n                </div>\n                <ng-container *ngIf=\"isEmpty(titleEl)\">\n                    {{ title }}\n                </ng-container>\n            </div>\n\n            <div class=\"pxb-three-liner-subtitle\">\n                <div #subtitleVc>\n                    <ng-content select=\"[pxb-subtitle]\"></ng-content>\n                </div>\n                <ng-container *ngIf=\"isEmpty(subtitleEl)\">\n                    {{ subtitle }}\n                </ng-container>\n            </div>\n\n            <div class=\"pxb-three-liner-info\">\n                <div #infoVc>\n                    <ng-content select=\"[pxb-info]\"></ng-content>\n                </div>\n                <ng-container *ngIf=\"isEmpty(infoEl)\">\n                    {{ info }}\n                </ng-container>\n            </div>\n        </div>\n    `,\n    host: {\n        class: 'pxb-three-liner',\n    },\n})\nexport class ThreeLinerComponent implements AfterViewInit {\n    /** First line content */\n    @Input() title;\n    /** Second line content */\n    @Input() subtitle;\n    /** Third line content */\n    @Input() info;\n\n    @ViewChild('titleVc') titleEl: ElementRef;\n    @ViewChild('subtitleVc') subtitleEl: ElementRef;\n    @ViewChild('infoVc') infoEl: ElementRef;\n    isEmpty = (el: ElementRef): boolean => isEmptyView(el);\n\n    constructor(private readonly _ref: ChangeDetectorRef) {}\n\n    ngAfterViewInit(): void {\n        this._ref.detectChanges();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThreeLinerComponent } from './three-liner.component';\n\n@NgModule({\n    declarations: [ThreeLinerComponent],\n    imports: [CommonModule],\n    exports: [ThreeLinerComponent],\n})\nexport class ThreeLinerModule {}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { MatBottomSheet } from '@angular/material/bottom-sheet';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { requireInput } from '../../utils/utils';\n\n/**\n * [UserMenu Component](https://pxblue-components.github.io/angular/?path=/info/components-user-menu--readme)\n *\n * The `<pxb-user-menu>` is an Avatar that opens a Menu when clicked.\n * It is typically used in the top-right corner of an application and indicates who is logged in.\n */\n@Component({\n    selector: 'pxb-user-menu',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./user-menu.component.scss'],\n    animations: [\n        trigger('fade-in-out', [\n            state('*', style({ opacity: 1, transform: 'scaleY(1)', 'transform-origin': 'top' })),\n            // Create\n            transition('void => *', [\n                style({ opacity: 0, transform: 'scaleY(0.9)', 'transform-origin': 'top' }),\n                animate('120ms cubic-bezier(0, 0, 0.2, 1)'),\n            ]),\n            // Destroy\n            transition('* => void', animate('100ms 25ms linear', style({ opacity: 0 }))),\n        ]),\n    ],\n    template: `\n        <!-- This button triggers the overlay and is it's origin -->\n        <pxb-user-menu-avatar\n            cdkOverlayOrigin\n            [avatarValue]=\"avatarValue\"\n            [avatarImage]=\"avatarImage\"\n            (click)=\"openOverlay()\"\n            #trigger=\"cdkOverlayOrigin\"\n        >\n            <ng-content select=\"[pxb-avatar]\"></ng-content>\n        </pxb-user-menu-avatar>\n\n        <ng-template #menu>\n            <pxb-user-menu-header\n                *ngIf=\"menuTitle\"\n                class=\"pxb-user-menu-header\"\n                [title]=\"menuTitle\"\n                [subtitle]=\"menuSubtitle\"\n                [divider]=\"true\"\n            >\n                <pxb-user-menu-avatar\n                    pxb-icon\n                    [avatarValue]=\"avatarValue\"\n                    [avatarImage]=\"avatarImage\"\n                    class=\"pxb-user-menu-header-avatar\"\n                >\n                    <ng-content select=\"[pxb-menu-avatar]\"></ng-content>\n                </pxb-user-menu-avatar>\n            </pxb-user-menu-header>\n            <ng-content select=\"[pxb-menu-header]\"></ng-content>\n            <ng-content select=\"[pxb-menu-body]\"></ng-content>\n        </ng-template>\n\n        <ng-template\n            cdkConnectedOverlay\n            (backdropClick)=\"onClickMenuBackdrop()\"\n            [cdkConnectedOverlayPush]=\"true\"\n            [cdkConnectedOverlayHasBackdrop]=\"true\"\n            [cdkConnectedOverlayOrigin]=\"trigger\"\n            [cdkConnectedOverlayOpen]=\"isMenuOpen\"\n            [cdkConnectedOverlayPositions]=\"positions\"\n            [cdkConnectedOverlayViewportMargin]=\"16\"\n            [cdkConnectedOverlayBackdropClass]=\"'pxb-user-menu-overlay-backdrop'\"\n        >\n            <mat-card class=\"pxb-user-menu-overlay mat-elevation-z8\" [@fade-in-out]>\n                <ng-template [ngTemplateOutlet]=\"menu\"></ng-template>\n            </mat-card>\n        </ng-template>\n    `,\n    host: {\n        class: 'pxb-user-menu',\n    },\n})\nexport class UserMenuComponent implements OnInit, OnChanges, OnDestroy {\n    /** Image source for avatar */\n    @Input() avatarImage: string;\n\n    /** Text value for avatar */\n    @Input() avatarValue: string;\n\n    /** Subtitle shown when menu is open */\n    @Input() menuSubtitle: string;\n\n    /** Title shown when menu is open */\n    @Input() menuTitle: string;\n\n    /** Where to render the menu relative to the avatar */\n    @Input() positions = [\n        new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'top' }),\n    ];\n\n    /** Whether the menu overlay appears on screen. */\n    @Input() open;\n\n    /** Window pixel width at which the responsive bottom sheet menu is triggered (set to 0 to disable responsive behavior)\n     *\n     * @default 600\n     * */\n    @Input() useBottomSheetAt = 600;\n\n    /** Emits event when backdrop is clicked */\n    @Output() backdropClick: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Emits an event when the open prop changes */\n    @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    @ViewChild(TemplateRef) menu: TemplateRef<any>;\n\n    constructor(private readonly _bottomSheet: MatBottomSheet, private readonly _ref: ChangeDetectorRef) {}\n\n    screenSizeChangeListener: Subscription;\n    useBottomSheet: boolean;\n    isMenuOpen: boolean;\n\n    checkScreenSize = (): boolean => document.body.offsetWidth < this.useBottomSheetAt;\n\n    ngOnInit(): void {\n        requireInput<UserMenuComponent>(['open'], this);\n\n        // Subscribe to resize events and transition from menu to bottomsheet (or vise versa) when open & resizing\n        this.screenSizeChangeListener = fromEvent(window, 'resize')\n            .pipe(map(this.checkScreenSize))\n            .pipe(startWith(this.checkScreenSize()))\n            .subscribe((isMobile: boolean) => {\n                // Transition from Desktop to Mobile\n                if (this.open && isMobile && !this.useBottomSheet) {\n                    this.isMenuOpen = false;\n                    this.openBottomSheet();\n                    this._ref.detectChanges();\n                }\n                // Transition from Mobile to Desktop\n                else if (this.open && !isMobile && this.useBottomSheet) {\n                    this._bottomSheet.dismiss(true);\n                }\n                this.useBottomSheet = isMobile;\n            });\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        // Set state and dismiss bottom sheet when open() changes.\n        if (changes.open) {\n            // State changes from closed to open.\n            const openState = changes.open;\n            if (openState.currentValue === true && (openState.previousValue === false || openState.isFirstChange())) {\n                if (this.useBottomSheet) {\n                    this.openBottomSheet();\n                } else {\n                    this.isMenuOpen = true;\n                }\n            }\n            // State changes from open to closed.\n            if (openState.currentValue === false && (openState.previousValue === true || openState.isFirstChange())) {\n                this.isMenuOpen = false;\n                this._bottomSheet.dismiss(false);\n            }\n        }\n\n        if (changes.useBottomSheetAt) {\n            this.useBottomSheet = this.checkScreenSize();\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.screenSizeChangeListener) {\n            this.screenSizeChangeListener.unsubscribe();\n        }\n    }\n\n    onClickMenuBackdrop(): void {\n        this.openChange.emit(false);\n        this.backdropClick.emit();\n    }\n\n    openOverlay(): void {\n        this.openChange.emit(true);\n    }\n\n    openBottomSheet(): void {\n        // Do not invoke the bottom sheet until `menu` has been rendered.\n        this._ref.detectChanges();\n\n        const bottomSheetRef = this._bottomSheet.open(this.menu, {\n            backdropClass: 'pxb-user-menu-bottomsheet-backdrop',\n            panelClass: 'pxb-user-menu-bottomsheet',\n            hasBackdrop: true,\n        });\n\n        bottomSheetRef.afterDismissed().subscribe((openMenu: true) => {\n            this.isMenuOpen = openMenu;\n            this._ref.detectChanges();\n        });\n\n        bottomSheetRef.backdropClick().subscribe(() => {\n            this.openChange.emit(false);\n            this.backdropClick.emit();\n        });\n    }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n    selector: 'pxb-user-menu-avatar',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <div class=\"pxb-user-menu-avatar-content\">\n            <div *ngIf=\"avatarValue\" class=\"mat-h2 pxb-user-menu-text-avatar\">{{ avatarValue }}</div>\n            <img *ngIf=\"avatarImage\" [src]=\"avatarImage\" alt=\"User Menu Avatar\" />\n            <ng-content></ng-content>\n        </div>\n    `,\n    host: {\n        class: 'pxb-user-menu-avatar',\n    },\n})\nexport class UserMenuAvatarComponent {\n    @Input() avatarValue: string;\n    @Input() avatarImage: string;\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, ViewChild, ElementRef } from '@angular/core';\nimport { isEmptyView } from '../../../utils/utils';\n\n/**\n * [UserMenuHeaderComponent Component](https://pxblue-components.github.io/angular/?path=/info/components-user-menu--readme)\n *\n * The `<pxb-user-menu-header>` is the menu header of the `<pxb-user-menu>`.\n */\n@Component({\n    selector: 'pxb-user-menu-header',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    template: `\n        <mat-toolbar\n            class=\"pxb-user-menu-header-content\"\n            [color]=\"color\"\n            [class.pxb-user-menu-header-no-icon]=\"isEmpty(iconEl)\"\n        >\n            <div class=\"pxb-user-menu-header-text\">\n                <div #icon class=\"pxb-user-menu-header-icon-wrapper\">\n                    <ng-content select=\"[pxb-icon]\"></ng-content>\n                </div>\n                <div *ngIf=\"title\" class=\"pxb-user-menu-header-title-wrapper\">\n                    <div class=\"pxb-user-menu-header-title\">{{ title }}</div>\n                    <div *ngIf=\"subtitle\" class=\"pxb-user-menu-header-subtitle mat-subheading-2\">{{ subtitle }}</div>\n                </div>\n                <ng-content select=\"[pxb-title-content]\"></ng-content>\n            </div>\n        </mat-toolbar>\n        <mat-divider *ngIf=\"divider\"></mat-divider>\n    `,\n    styleUrls: ['./user-menu-header.component.scss'],\n    host: {\n        class: 'pxb-user-menu-header',\n    },\n})\nexport class UserMenuHeaderComponent {\n    /** Mat toolbar color variant\n     *\n     * @default primary\n     * */\n    @Input() color: 'primary' | 'accent' | 'warn' | undefined = 'primary';\n    /** Show a divider below footer\n     *\n     * @default false\n     * */\n    @Input() divider = false;\n    /** The text to show on the second line */\n    @Input() subtitle: string;\n    /** The text to show on the first line */\n    @Input() title: string;\n\n    @ViewChild('icon', { static: true }) iconEl: ElementRef;\n\n    isEmpty = (el: ElementRef): boolean => isEmptyView(el);\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UserMenuComponent } from './user-menu.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { InfoListItemModule } from '../info-list-item/info-list-item.module';\nimport { UserMenuAvatarComponent } from './user-menu-avatar.component';\nimport { DrawerHeaderModule } from '../drawer/drawer-header/drawer-header.module';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\nimport { UserMenuHeaderComponent } from './user-menu-header/user-menu-header.component';\nimport { MatToolbarModule } from '@angular/material/toolbar';\n\n@NgModule({\n    declarations: [UserMenuComponent, UserMenuAvatarComponent, UserMenuHeaderComponent],\n    imports: [\n        CommonModule,\n        DrawerHeaderModule,\n        InfoListItemModule,\n        OverlayModule,\n        MatBottomSheetModule,\n        MatCardModule,\n        MatToolbarModule,\n    ],\n    exports: [UserMenuComponent, UserMenuAvatarComponent, UserMenuHeaderComponent],\n})\nexport class UserMenuModule {}\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { requireInput } from '../../utils/utils';\n\nexport type MobileStepperVariant = 'dots' | 'text' | 'progress';\n\n/**\n * [MobileStepper Component](https://pxblue-components.github.io/angular/?path=/info/components-mobile-stepper--readme)\n *\n * The <MobileStepper> is used to minimally display progress when completing a workflow that requires multiple steps.\n *  There are three types of progress indicators supported, dots (default), text, and progress.\n */\n@Component({\n    selector: 'pxb-mobile-stepper',\n    templateUrl: './mobile-stepper.component.html',\n    styleUrls: ['./mobile-stepper.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'pxb-mobile-stepper',\n    },\n})\nexport class MobileStepperComponent implements OnChanges {\n    /** The index of the active step */\n    @Input() activeStep: number;\n\n    /** Total number of steps to display */\n    @Input() steps: number;\n\n    /** Which type of indicator to use. Can be 'dots' | 'text' | 'progress'.\n     *\n     * `dots` - Each step appears as a dot. Visited steps will appear as a different color.\n     *\n     * `text` -  Text indicator which shows current step and total steps.  Example: \"Step 1/5\"\n     *\n     * `progress` - Appears as a progress bar that fills the further along as user is in the workflow.\n     *\n     * @default dots\n     * */\n    @Input() variant: MobileStepperVariant = 'dots';\n\n    stepsArray: number[] = [];\n\n    ngOnChanges(): void {\n        requireInput<MobileStepperComponent>(['steps', 'activeStep'], this);\n        this.stepsArray = Array(this.steps)\n            .fill(0)\n            .map((i) => i);\n    }\n\n    /** This is only used for progress variant. */\n    getProgressFill(): number {\n        return this.activeStep === 0 ? 0 : (this.activeStep / (this.stepsArray.length - 1)) * 100;\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MobileStepperComponent } from './mobile-stepper.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n@NgModule({\n    declarations: [MobileStepperComponent],\n    imports: [CommonModule, MatButtonModule, MatProgressBarModule],\n    exports: [MobileStepperComponent],\n})\nexport class MobileStepperModule {}\n"]}