{"version":3,"file":"primeng-listbox.mjs","sources":["../../src/app/components/listbox/listbox.ts","../../src/app/components/listbox/primeng-listbox.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, Input, Output, EventEmitter, AfterContentInit, ContentChildren, ContentChild, QueryList, TemplateRef,forwardRef, ChangeDetectorRef, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, PrimeTemplate, Footer, Header, FilterService, TranslationKeys, PrimeNGConfig } from 'primeng/api';\nimport { DomHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { RippleModule } from 'primeng/ripple';\nimport { Subscription } from 'rxjs';\n\nexport const LISTBOX_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Listbox),\n    multi: true\n};\n\n@Component({\n    selector: 'p-listbox',\n    template: `\n    <div [ngClass]=\"{'p-listbox p-component': true, 'p-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n      <div class=\"p-listbox-header\" *ngIf=\"headerFacet || headerTemplate\">\n        <ng-content select=\"p-header\"></ng-content>\n        <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n      </div>\n      <div class=\"p-listbox-header\" *ngIf=\"(checkbox && multiple && showToggleAll) || filter\">\n        <div class=\"p-checkbox p-component\" *ngIf=\"checkbox && multiple && showToggleAll\" [ngClass]=\"{'p-checkbox-disabled': disabled || toggleAllDisabled}\">\n          <div class=\"p-hidden-accessible\">\n            <input type=\"checkbox\" readonly=\"readonly\" [checked]=\"allChecked\" (focus)=\"onHeaderCheckboxFocus()\" (blur)=\"onHeaderCheckboxBlur()\" (keydown.space)=\"toggleAll($event)\" [disabled]=\"disabled || toggleAllDisabled\">\n          </div>\n          <div #headerchkbox class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight': allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}\" (click)=\"toggleAll($event)\">\n            <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':allChecked}\"></span>\n          </div>\n        </div>\n        <div class=\"p-listbox-filter-container\" *ngIf=\"filter\">\n          <input type=\"text\" [value]=\"filterValue||''\" (input)=\"onFilter($event)\" class=\"p-listbox-filter p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"filterPlaceHolder\" [attr.aria-label]=\"ariaFilterLabel\">\n          <span class=\"p-listbox-filter-icon pi pi-search\"></span>\n        </div>\n      </div>\n      <div [ngClass]=\"'p-listbox-list-wrapper'\" [ngStyle]=\"listStyle\" [class]=\"listStyleClass\">\n        <ul class=\"p-listbox-list\" role=\"listbox\" aria-multiselectable=\"multiple\">\n            <ng-container *ngIf=\"group\">\n                <ng-template ngFor let-optgroup [ngForOf]=\"optionsToRender\">\n                    <li class=\"p-listbox-item-group\">\n                        <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n                        <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n                    </li>\n                    <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}\"></ng-container>\n                </ng-template>\n            </ng-container>\n            <ng-container *ngIf=\"!group\">\n                    <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: optionsToRender}\"></ng-container>\n            </ng-container>\n            <ng-template #itemslist let-optionsToDisplay>\n                <li *ngFor=\"let option of optionsToDisplay; let i = index;\" [attr.tabindex]=\"disabled || isOptionDisabled(option) ? null : '0'\" pRipple\n                    [ngClass]=\"{'p-listbox-item':true,'p-highlight':isSelected(option), 'p-disabled': this.isOptionDisabled(option)}\" role=\"option\" [attr.aria-label]=\"getOptionLabel(option)\"\n                    [attr.aria-selected]=\"isSelected(option)\" (click)=\"onOptionClick($event,option)\" (dblclick)=\"onOptionDoubleClick($event,option)\" (touchend)=\"onOptionTouchEnd(option)\" (keydown)=\"onOptionKeyDown($event,option)\">\n                    <div class=\"p-checkbox p-component\" *ngIf=\"checkbox && multiple\" [ngClass]=\"{'p-checkbox-disabled': disabled || isOptionDisabled(option)}\">\n                        <div class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight':isSelected(option)}\">\n                            <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':isSelected(option)}\"></span>\n                        </div>\n                    </div>\n                    <span *ngIf=\"!itemTemplate\">{{getOptionLabel(option)}}</span>\n                    <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: i}\"></ng-container>\n                </li>\n                <li *ngIf=\"hasFilter() && isEmpty(optionsToDisplay)\" class=\"p-listbox-empty-message\">\n                    <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\">\n                        {{emptyFilterMessageLabel}}\n                    </ng-container>\n                    <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\n                </li>\n                <li *ngIf=\"!hasFilter() && isEmpty(optionsToDisplay)\" class=\"p-listbox-empty-message\">\n                    <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                        {{emptyMessageLabel}}\n                    </ng-container>\n                    <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n                </li>\n            </ng-template>\n        </ul>\n      </div>\n      <div class=\"p-listbox-footer\" *ngIf=\"footerFacet || footerTemplate\">\n        <ng-content select=\"p-footer\"></ng-content>\n        <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n      </div>\n    </div>\n  `,\n    providers: [LISTBOX_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./listbox.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Listbox implements AfterContentInit, OnInit, ControlValueAccessor, OnDestroy {\n\n    @Input() multiple: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() listStyle: any;\n\n    @Input() listStyleClass: string;\n\n    @Input() readonly: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() checkbox: boolean = false;\n\n    @Input() filter: boolean = false;\n\n    @Input() filterMatchMode: string = 'contains';\n\n    @Input() filterLocale: string;\n\n    @Input() metaKeySelection: boolean = true;\n\n    @Input() dataKey: string;\n\n    @Input() showToggleAll: boolean = true;\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionGroupChildren: string = \"items\";\n\n    @Input() optionGroupLabel: string;\n\n    @Input() optionDisabled: string;\n\n    @Input() ariaFilterLabel: string;\n\n    @Input() filterPlaceHolder: string;\n\n    @Input() emptyFilterMessage: string;\n\n    @Input() emptyMessage: string;\n\n    @Input() group: boolean;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDblClick: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('headerchkbox') headerCheckboxViewChild: ElementRef;\n\n    @ContentChild(Header) headerFacet;\n\n    @ContentChild(Footer) footerFacet;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public _options: any[];\n\n    public itemTemplate: TemplateRef<any>;\n\n    public groupTemplate: TemplateRef<any>;\n\n    public headerTemplate: TemplateRef<any>;\n\n    public footerTemplate: TemplateRef<any>;\n\n    public emptyFilterTemplate: TemplateRef<any>;\n\n    public emptyTemplate: TemplateRef<any>;\n\n    public _filterValue: string;\n\n    public _filteredOptions: any[];\n\n    public filtered: boolean;\n\n    public value: any;\n\n    public onModelChange: Function = () => { };\n\n    public onModelTouched: Function = () => { };\n\n    public optionTouched: boolean;\n\n    public focus: boolean;\n\n    public headerCheckboxFocus: boolean;\n\n    translationSubscription: Subscription;\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef, public filterService: FilterService, public config: PrimeNGConfig) { }\n\n    @Input() get options(): any[] {\n        return this._options;\n    }\n\n    set options(val: any[]) {\n        this._options = val;\n\n        if (this.hasFilter())\n            this.activateFilter();\n    }\n\n    @Input() get filterValue(): string {\n        return this._filterValue;\n    }\n\n    set filterValue(val: string) {\n        this._filterValue = val;\n        this.activateFilter();\n    }\n\n    ngOnInit() {\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.cd.markForCheck();\n        });\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'group':\n                    this.groupTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'emptyfilter':\n                    this.emptyFilterTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    getOptionLabel(option: any) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n    }\n\n    getOptionGroupChildren(optionGroup: any) {\n        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n    }\n\n    getOptionGroupLabel(optionGroup: any) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n    }\n\n    getOptionValue(option: any) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);\n    }\n\n    isOptionDisabled(option: any) {\n        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n    }\n\n    writeValue(value: any): void {\n        this.value = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onOptionClick(event: Event, option: any) {\n        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {\n            return;\n        }\n\n        if (this.multiple) {\n            if (this.checkbox)\n                this.onOptionClickCheckbox(event, option);\n            else\n                this.onOptionClickMultiple(event, option);\n        }\n        else {\n            this.onOptionClickSingle(event, option);\n        }\n        this.onClick.emit({\n            originalEvent: event,\n            option: option,\n            value: this.value\n        });\n        this.optionTouched = false;\n    }\n\n    onOptionTouchEnd(option: any) {\n        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {\n            return;\n        }\n\n        this.optionTouched = true;\n    }\n\n    onOptionDoubleClick(event: Event, option: any): any {\n        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {\n            return;\n        }\n\n        this.onDblClick.emit({\n            originalEvent: event,\n            option: option,\n            value: this.value\n        })\n    }\n\n    onOptionClickSingle(event, option) {\n        let selected = this.isSelected(option);\n        let valueChanged = false;\n        let metaSelection = this.optionTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n            let metaKey = (event.metaKey || event.ctrlKey);\n\n            if (selected) {\n                if (metaKey) {\n                    this.value = null;\n                    valueChanged = true;\n                }\n            }\n            else {\n                this.value = this.getOptionValue(option);\n                valueChanged = true;\n            }\n        }\n        else {\n            this.value = selected ? null : this.getOptionValue(option);\n            valueChanged = true;\n        }\n\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    }\n\n    onOptionClickMultiple(event, option) {\n        let selected = this.isSelected(option);\n        let valueChanged = false;\n        let metaSelection = this.optionTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n            let metaKey = (event.metaKey || event.ctrlKey);\n\n            if (selected) {\n                if (metaKey) {\n                    this.removeOption(option);\n                }\n                else {\n                    this.value = [this.getOptionValue(option)];\n                }\n                valueChanged = true;\n            }\n            else {\n                this.value = (metaKey) ? this.value || [] : [];\n                this.value = [...this.value, this.getOptionValue(option)];\n                valueChanged = true;\n            }\n        }\n        else {\n            if (selected) {\n                this.removeOption(option);\n            }\n            else {\n                this.value = [...this.value || [], this.getOptionValue(option)];\n            }\n\n            valueChanged = true;\n        }\n\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    }\n\n    onOptionClickCheckbox(event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n\n        let selected = this.isSelected(option);\n\n        if (selected) {\n            this.removeOption(option);\n        }\n        else {\n            this.value = this.value ? this.value : [];\n            this.value = [...this.value, this.getOptionValue(option)];\n        }\n\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    }\n\n    removeOption(option: any): void {\n        this.value = this.value.filter(val => !ObjectUtils.equals(val, this.getOptionValue(option), this.dataKey));\n    }\n\n    isSelected(option: any) {\n        let selected = false;\n        let optionValue = this.getOptionValue(option);\n\n        if (this.multiple) {\n            if (this.value) {\n                for (let val of this.value) {\n                    if (ObjectUtils.equals(val, optionValue, this.dataKey)) {\n                        selected = true;\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            selected = ObjectUtils.equals(this.value, optionValue, this.dataKey);\n        }\n\n        return selected;\n    }\n\n    get allChecked(): boolean {\n        let optionsToRender = this.optionsToRender;\n        if (!optionsToRender || optionsToRender.length === 0) {\n            return false;\n        }\n        else {\n            let selectedDisabledItemsLength = 0;\n            let unselectedDisabledItemsLength = 0;\n            let selectedEnabledItemsLength = 0;\n            let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;\n\n            for (let option of optionsToRender) {\n                if (!this.group) {\n                    let disabled = this.isOptionDisabled(option);\n                    let selected = this.isSelected(option);\n\n                    if (disabled) {\n                        if (selected)\n                            selectedDisabledItemsLength++;\n                        else\n                            unselectedDisabledItemsLength++;\n                    }\n                    else {\n                        if (selected)\n                            selectedEnabledItemsLength++;\n                        else\n                            return false;\n                    }\n                }\n                else {\n                    for (let opt of this.getOptionGroupChildren(option)) {\n                        let disabled = this.isOptionDisabled(opt);\n                        let selected = this.isSelected(opt);\n\n                        if (disabled) {\n                            if (selected)\n                                selectedDisabledItemsLength++;\n                            else\n                                unselectedDisabledItemsLength++;\n                        }\n                        else {\n                            if (selected)\n                                selectedEnabledItemsLength++;\n                            else {\n                                return false;\n                            }\n                        }\n\n                        visibleOptionsLength++;\n                    }\n                }\n            }\n\n            return (visibleOptionsLength === selectedDisabledItemsLength\n                    || visibleOptionsLength === selectedEnabledItemsLength\n                    || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));\n        }\n    }\n\n    get optionsToRender(): any[] {\n        return this._filteredOptions || this.options;\n    }\n\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    get emptyFilterMessageLabel(): string {\n        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);\n    }\n\n    hasFilter() {\n        return this._filterValue && this._filterValue.trim().length > 0;\n    }\n\n    isEmpty(optionsToDisplay) {\n        return !optionsToDisplay || (optionsToDisplay && optionsToDisplay.length === 0);\n    }\n\n    onFilter(event: KeyboardEvent) {\n        this._filterValue = (<HTMLInputElement> event.target).value;\n        this.activateFilter();\n    }\n\n    activateFilter() {\n        if (this.hasFilter() && this._options) {\n            if (this.group) {\n                let searchFields: string[] = (this.optionLabel || 'label').split(',');\n\n                let filteredGroups = [];\n                for (let optgroup of this.options) {\n                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n                    if (filteredSubOptions && filteredSubOptions.length) {\n                        filteredGroups.push({...optgroup, ...{[this.optionGroupChildren]: filteredSubOptions}});\n                    }\n                }\n\n                this._filteredOptions = filteredGroups;\n            }\n            else {\n                this._filteredOptions = this._options.filter(option => this.filterService.filters[this.filterMatchMode](this.getOptionLabel(option), this._filterValue, this.filterLocale));\n            }\n        }\n        else {\n            this._filteredOptions = null;\n        }\n    }\n\n    get toggleAllDisabled(): boolean {\n        let optionsToRender = this.optionsToRender;\n        if (!optionsToRender || optionsToRender.length === 0) {\n            return true;\n        }\n        else {\n            for (let option of optionsToRender) {\n                if (!this.isOptionDisabled(option))\n                    return false;\n            }\n\n            return true;\n        }\n    }\n\n    toggleAll(event) {\n        if (this.disabled || this.toggleAllDisabled || this.readonly) {\n            return;\n        }\n\n        let allChecked = this.allChecked;\n\n        if (allChecked)\n            this.uncheckAll();\n        else\n            this.checkAll();\n\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n        event.preventDefault();\n    }\n\n    checkAll() {\n        let optionsToRender = this.optionsToRender;\n        let val: any[] = [];\n\n        optionsToRender.forEach(opt => {\n            if (!this.group) {\n                let optionDisabled = this.isOptionDisabled(opt);\n                if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {\n                    val.push(this.getOptionValue(opt));\n                }\n            }\n            else {\n                let subOptions = this.getOptionGroupChildren(opt);\n\n                if (subOptions) {\n                    subOptions.forEach(option => {\n                        let optionDisabled = this.isOptionDisabled(option);\n                        if (!optionDisabled || (optionDisabled && this.isSelected(option))) {\n                            val.push(this.getOptionValue(option));\n                        }\n                    });\n                }\n            }\n        });\n\n        this.value = val;\n    }\n\n    uncheckAll() {\n        let optionsToRender = this.optionsToRender;\n        let val: any[] = [];\n\n        optionsToRender.forEach(opt => {\n            if (!this.group) {\n                let optionDisabled = this.isOptionDisabled(opt);\n                if (optionDisabled && this.isSelected(opt)) {\n                    val.push(this.getOptionValue(opt));\n                }\n            }\n            else {\n                if (opt.items) {\n                    opt.items.forEach(option => {\n                        let optionDisabled = this.isOptionDisabled(option);\n                        if (optionDisabled && this.isSelected(option)) {\n                            val.push(this.getOptionValue(option));\n                        }\n                    });\n                }\n            }\n        });\n\n        this.value = val;\n    }\n\n    onOptionKeyDown(event:KeyboardEvent, option) {\n        if (this.readonly) {\n            return;\n        }\n\n        let item = <HTMLLIElement> event.currentTarget;\n\n        switch(event.which) {\n            //down\n            case 40:\n                var nextItem = this.findNextItem(item);\n                if (nextItem) {\n                    nextItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //up\n            case 38:\n                var prevItem = this.findPrevItem(item);\n                if (prevItem) {\n                    prevItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //enter\n            case 13:\n                this.onOptionClick(event, option);\n                event.preventDefault();\n            break;\n        }\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return DomHandler.hasClass(nextItem, 'p-disabled') || DomHandler.isHidden(nextItem) || DomHandler.hasClass(nextItem, 'p-listbox-item-group') ? this.findNextItem(nextItem) : nextItem;\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return DomHandler.hasClass(prevItem, 'p-disabled') || DomHandler.isHidden(prevItem) || DomHandler.hasClass(prevItem, 'p-listbox-item-group') ? this.findPrevItem(prevItem) : prevItem;\n        else\n            return null;\n    }\n\n    onHeaderCheckboxFocus() {\n        this.headerCheckboxFocus = true;\n    }\n\n    onHeaderCheckboxBlur() {\n        this.headerCheckboxFocus = false;\n    }\n\n    ngOnDestroy() {\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, SharedModule, RippleModule],\n    exports: [Listbox, SharedModule],\n    declarations: [Listbox]\n})\nexport class ListboxModule { }\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}