UNPKG

primeng

Version:

[![npm version](https://badge.fury.io/js/primeng.svg)](https://badge.fury.io/js/primeng) [![npm downloads](https://img.shields.io/npm/dm/primeng.svg)](https://www.npmjs.com/package/primeng) [![Actions CI](https://github.com/primefaces/primeng/workflows/No

758 lines (755 loc) 92.8 kB
import { NgModule, Component, Input, Output, ContentChildren, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, Inject, PLATFORM_ID } from '@angular/core'; import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common'; import { ButtonModule } from 'primeng/button'; import { SharedModule, PrimeTemplate } from 'primeng/api'; import { DomHandler } from 'primeng/dom'; import { ObjectUtils, UniqueComponentId } from 'primeng/utils'; import { RippleModule } from 'primeng/ripple'; import { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop'; import { AngleDoubleDownIcon } from 'primeng/icons/angledoubledown'; import { AngleDoubleUpIcon } from 'primeng/icons/angledoubleup'; import { AngleUpIcon } from 'primeng/icons/angleup'; import { AngleDownIcon } from 'primeng/icons/angledown'; import { SearchIcon } from 'primeng/icons/search'; import * as i0 from "@angular/core"; import * as i1 from "primeng/api"; import * as i2 from "@angular/common"; import * as i3 from "primeng/button"; import * as i4 from "primeng/ripple"; import * as i5 from "@angular/cdk/drag-drop"; /** * OrderList is used to managed the order of a collection. * @group Components */ class OrderList { document; platformId; renderer; el; cd; filterService; /** * Text for the caption. * @group Props */ header; /** * Inline style of the component. * @group Props */ style; /** * Style class of the component. * @group Props */ styleClass; /** * Inline style of the list element. * @group Props */ listStyle; /** * A boolean value that indicates whether the component should be responsive. * @group Props */ responsive; /** * When specified displays an input field to filter the items on keyup and decides which fields to search against. * @group Props */ filterBy; /** * Placeholder of the filter input. * @group Props */ filterPlaceholder; /** * Locale to use in filtering. The default locale is the host environment's current locale. * @group Props */ filterLocale; /** * When true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically. * @group Props */ metaKeySelection = true; /** * Whether to enable dragdrop based reordering. * @group Props */ dragdrop = false; /** * Defines the location of the buttons with respect to the list. * @group Props */ controlsPosition = 'left'; /** * Defines a string that labels the filter input. * @group Props */ ariaFilterLabel; /** * Defines how the items are filtered. * @group Props */ filterMatchMode = 'contains'; /** * Indicates the width of the screen at which the component should change its behavior. * @group Props */ breakpoint = '960px'; /** * Whether to displays rows with alternating colors. * @group Props */ stripedRows; /** * When present, it specifies that the component should be disabled. * @group Props */ disabled = false; /** * Function to optimize the dom operations by delegating to ngForTrackBy, default algorithm checks for object identity. * @group Props */ trackBy = (index, item) => item; /** * A list of values that are currently selected. * @group Props */ set selection(val) { this._selection = val; } get selection() { return this._selection; } /** * Array of values to be displayed in the component. * It represents the data source for the list of items. * @group Props */ set value(val) { this._value = val; if (this.filterValue) { this.filter(); } } get value() { return this._value; } /** * Callback to invoke on selection change. * @param {*} any - selection instance. * @group Emits */ selectionChange = new EventEmitter(); /** * Callback to invoke when list is reordered. * @param {*} any - list instance. * @group Emits */ onReorder = new EventEmitter(); /** * Callback to invoke when selection changes. * @param {OrderListSelectionChangeEvent} event - Custom change event. * @group Emits */ onSelectionChange = new EventEmitter(); /** * Callback to invoke when filtering occurs. * @param {OrderListFilterEvent} event - Custom filter event. * @group Emits */ onFilterEvent = new EventEmitter(); listViewChild; filterViewChild; templates; itemTemplate; headerTemplate; emptyMessageTemplate; emptyFilterMessageTemplate; filterTemplate; moveUpIconTemplate; moveTopIconTemplate; moveDownIconTemplate; moveBottomIconTemplate; filterIconTemplate; filterOptions; _selection = []; movedUp; movedDown; itemTouched; styleElement; id = UniqueComponentId(); filterValue; visibleOptions; _value; constructor(document, platformId, renderer, el, cd, filterService) { this.document = document; this.platformId = platformId; this.renderer = renderer; this.el = el; this.cd = cd; this.filterService = filterService; } ngOnInit() { if (this.responsive) { this.createStyle(); } if (this.filterBy) { this.filterOptions = { filter: (value) => this.onFilterKeyup(value), reset: () => this.resetFilter() }; } } ngAfterContentInit() { this.templates.forEach((item) => { switch (item.getType()) { case 'item': this.itemTemplate = item.template; break; case 'empty': this.emptyMessageTemplate = item.template; break; case 'emptyfilter': this.emptyFilterMessageTemplate = item.template; break; case 'filter': this.filterTemplate = item.template; break; case 'header': this.headerTemplate = item.template; break; case 'moveupicon': this.moveUpIconTemplate = item.template; break; case 'movetopicon': this.moveTopIconTemplate = item.template; break; case 'movedownicon': this.moveDownIconTemplate = item.template; break; case 'movebottomicon': this.moveBottomIconTemplate = item.template; break; case 'filtericon': this.filterIconTemplate = item.template; break; default: this.itemTemplate = item.template; break; } }); } ngAfterViewChecked() { if (this.movedUp || this.movedDown) { let listItems = DomHandler.find(this.listViewChild?.nativeElement, 'li.p-highlight'); let listItem; if (listItems.length > 0) { if (this.movedUp) listItem = listItems[0]; else listItem = listItems[listItems.length - 1]; DomHandler.scrollInView(this.listViewChild?.nativeElement, listItem); } this.movedUp = false; this.movedDown = false; } } onItemClick(event, item, index) { this.itemTouched = false; let selectedIndex = ObjectUtils.findIndexInList(item, this.selection); let selected = selectedIndex !== -1; let metaSelection = this.itemTouched ? false : this.metaKeySelection; if (metaSelection && event instanceof MouseEvent) { let metaKey = event.metaKey || event.ctrlKey || event.shiftKey; if (selected && metaKey) { this._selection = this._selection.filter((val) => val !== item); } else { this._selection = metaKey ? [...this._selection, item] : [item]; } } else { this._selection = [item]; } //binding this.selectionChange.emit(this._selection); //event this.onSelectionChange.emit({ originalEvent: event, value: this._selection }); } onFilterKeyup(event) { this.filterValue = event.target.value.trim().toLocaleLowerCase(this.filterLocale); this.filter(); this.onFilterEvent.emit({ originalEvent: event, value: this.visibleOptions }); } filter() { let searchFields = this.filterBy.split(','); this.visibleOptions = this.filterService.filter(this.value, searchFields, this.filterValue, this.filterMatchMode, this.filterLocale); } /** * Callback to invoke on filter reset. * @group Method */ resetFilter() { this.filterValue = null; this.filterViewChild && (this.filterViewChild.nativeElement.value = ''); } isItemVisible(item) { if (this.filterValue && this.filterValue.trim().length) { for (let i = 0; i < this.visibleOptions.length; i++) { if (item == this.visibleOptions[i]) { return true; } } } else { return true; } } onItemTouchEnd() { this.itemTouched = true; } isSelected(item) { return ObjectUtils.findIndexInList(item, this.selection) !== -1; } isEmpty() { return this.filterValue ? !this.visibleOptions || this.visibleOptions.length === 0 : !this.value || this.value.length === 0; } moveUp() { if (this.selection) { for (let i = 0; i < this.selection.length; i++) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (selectedItemIndex != 0 && this.value instanceof Array) { let movedItem = this.value[selectedItemIndex]; let temp = this.value[selectedItemIndex - 1]; this.value[selectedItemIndex - 1] = movedItem; this.value[selectedItemIndex] = temp; } else { break; } } if (this.dragdrop && this.filterValue) this.filter(); this.movedUp = true; this.onReorder.emit(this.selection); } } moveTop() { if (this.selection) { for (let i = this.selection.length - 1; i >= 0; i--) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (selectedItemIndex != 0 && this.value instanceof Array) { let movedItem = this.value.splice(selectedItemIndex, 1)[0]; this.value.unshift(movedItem); } else { break; } } if (this.dragdrop && this.filterValue) this.filter(); this.onReorder.emit(this.selection); this.listViewChild.nativeElement.scrollTop = 0; } } moveDown() { if (this.selection) { for (let i = this.selection.length - 1; i >= 0; i--) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (this.value instanceof Array && selectedItemIndex != this.value.length - 1) { let movedItem = this.value[selectedItemIndex]; let temp = this.value[selectedItemIndex + 1]; this.value[selectedItemIndex + 1] = movedItem; this.value[selectedItemIndex] = temp; } else { break; } } if (this.dragdrop && this.filterValue) this.filter(); this.movedDown = true; this.onReorder.emit(this.selection); } } moveBottom() { if (this.selection) { for (let i = 0; i < this.selection.length; i++) { let selectedItem = this.selection[i]; let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value); if (this.value instanceof Array && selectedItemIndex != this.value.length - 1) { let movedItem = this.value.splice(selectedItemIndex, 1)[0]; this.value.push(movedItem); } else { break; } } if (this.dragdrop && this.filterValue) this.filter(); this.onReorder.emit(this.selection); this.listViewChild.nativeElement.scrollTop = this.listViewChild?.nativeElement.scrollHeight; } } onDrop(event) { let previousIndex = event.previousIndex; let currentIndex = event.currentIndex; if (previousIndex !== currentIndex) { if (this.visibleOptions) { if (this.filterValue) { previousIndex = ObjectUtils.findIndexInList(event.item.data, this.value); currentIndex = ObjectUtils.findIndexInList(this.visibleOptions[currentIndex], this.value); } moveItemInArray(this.visibleOptions, event.previousIndex, event.currentIndex); } moveItemInArray(this.value, previousIndex, currentIndex); this.onReorder.emit([event.item.data]); } } onItemKeydown(event, item, index) { let listItem = event.currentTarget; switch (event.which) { //down case 40: var nextItem = this.findNextItem(listItem); if (nextItem) { nextItem.focus(); } event.preventDefault(); break; //up case 38: var prevItem = this.findPrevItem(listItem); if (prevItem) { prevItem.focus(); } event.preventDefault(); break; //enter case 13: this.onItemClick(event, item, index); event.preventDefault(); break; } } findNextItem(item) { let nextItem = item.nextElementSibling; if (nextItem) return !DomHandler.hasClass(nextItem, 'p-orderlist-item') || DomHandler.isHidden(nextItem) ? this.findNextItem(nextItem) : nextItem; else return null; } findPrevItem(item) { let prevItem = item.previousElementSibling; if (prevItem) return !DomHandler.hasClass(prevItem, 'p-orderlist-item') || DomHandler.isHidden(prevItem) ? this.findPrevItem(prevItem) : prevItem; else return null; } moveDisabled() { if (this.disabled || !this.selection.length) { return true; } } createStyle() { if (isPlatformBrowser(this.platformId)) { if (!this.styleElement) { this.renderer.setAttribute(this.el.nativeElement.children[0], this.id, ''); this.styleElement = this.renderer.createElement('style'); this.renderer.setAttribute(this.styleElement, 'type', 'text/css'); this.renderer.appendChild(this.document.head, this.styleElement); let innerHTML = ` @media screen and (max-width: ${this.breakpoint}) { .p-orderlist[${this.id}] { flex-direction: column; } .p-orderlist[${this.id}] .p-orderlist-controls { padding: var(--content-padding); flex-direction: row; } .p-orderlist[${this.id}] .p-orderlist-controls .p-button { margin-right: var(--inline-spacing); margin-bottom: 0; } .p-orderlist[${this.id}] .p-orderlist-controls .p-button:last-child { margin-right: 0; } } `; this.renderer.setProperty(this.styleElement, 'innerHTML', innerHTML); } } } destroyStyle() { if (isPlatformBrowser(this.platformId)) { if (this.styleElement) { this.renderer.removeChild(this.document, this.styleElement); this.styleElement = null; ``; } } } ngOnDestroy() { this.destroyStyle(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: OrderList, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FilterService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: OrderList, selector: "p-orderList", inputs: { header: "header", style: "style", styleClass: "styleClass", listStyle: "listStyle", responsive: "responsive", filterBy: "filterBy", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", metaKeySelection: "metaKeySelection", dragdrop: "dragdrop", controlsPosition: "controlsPosition", ariaFilterLabel: "ariaFilterLabel", filterMatchMode: "filterMatchMode", breakpoint: "breakpoint", stripedRows: "stripedRows", disabled: "disabled", trackBy: "trackBy", selection: "selection", value: "value" }, outputs: { selectionChange: "selectionChange", onReorder: "onReorder", onSelectionChange: "onSelectionChange", onFilterEvent: "onFilterEvent" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "listViewChild", first: true, predicate: ["listelement"], descendants: true }, { propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }], ngImport: i0, template: ` <div [ngClass]="{ 'p-orderlist p-component': true, 'p-orderlist-striped': stripedRows, 'p-orderlist-controls-left': controlsPosition === 'left', 'p-orderlist-controls-right': controlsPosition === 'right' }" [ngStyle]="style" [class]="styleClass" > <div class="p-orderlist-controls"> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveUp()"> <AngleUpIcon *ngIf="!moveUpIconTemplate" /> <ng-template *ngTemplateOutlet="moveUpIconTemplate"></ng-template> </button> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveTop()"> <AngleDoubleUpIcon *ngIf="!moveTopIconTemplate" /> <ng-template *ngTemplateOutlet="moveTopIconTemplate"></ng-template> </button> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveDown()"> <AngleDownIcon *ngIf="!moveDownIconTemplate" /> <ng-template *ngTemplateOutlet="moveDownIconTemplate"></ng-template> </button> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveBottom()"> <AngleDoubleDownIcon *ngIf="!moveBottomIconTemplate" /> <ng-template *ngTemplateOutlet="moveBottomIconTemplate"></ng-template> </button> </div> <div class="p-orderlist-list-container"> <div class="p-orderlist-header" *ngIf="header || headerTemplate"> <div class="p-orderlist-title" *ngIf="!headerTemplate">{{ header }}</div> <ng-container *ngTemplateOutlet="headerTemplate"></ng-container> </div> <div class="p-orderlist-filter-container" *ngIf="filterBy"> <ng-container *ngIf="filterTemplate; else builtInFilterElement"> <ng-container *ngTemplateOutlet="filterTemplate; context: { options: filterOptions }"></ng-container> </ng-container> <ng-template #builtInFilterElement> <div class="p-orderlist-filter"> <input #filter type="text" role="textbox" (keyup)="onFilterKeyup($event)" [disabled]="disabled" class="p-orderlist-filter-input p-inputtext p-component" [attr.placeholder]="filterPlaceholder" [attr.aria-label]="ariaFilterLabel" /> <SearchIcon *ngIf="!filterIconTemplate" [styleClass]="'p-orderlist-filter-icon'" /> <span class="p-orderlist-filter-icon" *ngIf="filterIconTemplate"> <ng-template *ngTemplateOutlet="filterIconTemplate"></ng-template> </span> </div> </ng-template> </div> <ul #listelement cdkDropList (cdkDropListDropped)="onDrop($event)" class="p-orderlist-list" [ngStyle]="listStyle"> <ng-template ngFor [ngForTrackBy]="trackBy" let-item [ngForOf]="value" let-i="index" let-l="last"> <li class="p-orderlist-item" tabindex="0" [ngClass]="{ 'p-highlight': isSelected(item), 'p-disabled': disabled }" cdkDrag pRipple [cdkDragData]="item" [cdkDragDisabled]="!dragdrop" (click)="onItemClick($event, item, i)" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event, item, i)" *ngIf="isItemVisible(item)" role="option" [attr.aria-selected]="isSelected(item)" > <ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item, index: i }"></ng-container> </li> </ng-template> <ng-container *ngIf="isEmpty() && (emptyMessageTemplate || emptyFilterMessageTemplate)"> <li *ngIf="!filterValue || !emptyFilterMessageTemplate" class="p-orderlist-empty-message"> <ng-container *ngTemplateOutlet="emptyMessageTemplate"></ng-container> </li> <li *ngIf="filterValue" class="p-orderlist-empty-message"> <ng-container *ngTemplateOutlet="emptyFilterMessageTemplate"></ng-container> </li> </ng-container> </ul> </div> </div> `, isInline: true, styles: ["@layer primeng{.p-orderlist{display:flex}.p-orderlist-controls{display:flex;flex-direction:column;justify-content:center}.p-orderlist-list-container{flex:1 1 auto}.p-orderlist-list{list-style-type:none;margin:0;padding:0;overflow:auto;min-height:12rem}.p-orderlist-item{display:block;cursor:pointer;overflow:hidden;position:relative}.p-orderlist-item:not(.cdk-drag-disabled){cursor:move}.p-orderlist-item.cdk-drag-placeholder{opacity:0}.p-orderlist-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.p-orderlist.p-state-disabled .p-orderlist-item,.p-orderlist.p-state-disabled .p-button{cursor:default}.p-orderlist.p-state-disabled .p-orderlist-list{overflow:hidden}.p-orderlist-filter{position:relative}.p-orderlist-filter-icon{position:absolute;top:50%;margin-top:-.5rem;cursor:pointer}.p-orderlist-filter-input{width:100%}.p-orderlist-controls-right .p-orderlist-controls{order:2}.p-orderlist-controls-right .p-orderlist-list-container{order:1}.p-orderlist-list.cdk-drop-list-dragging .p-orderlist-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i3.ButtonDirective; }), selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.Ripple; }), selector: "[pRipple]" }, { kind: "directive", type: i0.forwardRef(function () { return i5.CdkDropList; }), selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i0.forwardRef(function () { return i5.CdkDrag; }), selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i0.forwardRef(function () { return AngleDoubleDownIcon; }), selector: "AngleDoubleDownIcon" }, { kind: "component", type: i0.forwardRef(function () { return AngleDoubleUpIcon; }), selector: "AngleDoubleUpIcon" }, { kind: "component", type: i0.forwardRef(function () { return AngleUpIcon; }), selector: "AngleUpIcon" }, { kind: "component", type: i0.forwardRef(function () { return AngleDownIcon; }), selector: "AngleDownIcon" }, { kind: "component", type: i0.forwardRef(function () { return SearchIcon; }), selector: "SearchIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } export { OrderList }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: OrderList, decorators: [{ type: Component, args: [{ selector: 'p-orderList', template: ` <div [ngClass]="{ 'p-orderlist p-component': true, 'p-orderlist-striped': stripedRows, 'p-orderlist-controls-left': controlsPosition === 'left', 'p-orderlist-controls-right': controlsPosition === 'right' }" [ngStyle]="style" [class]="styleClass" > <div class="p-orderlist-controls"> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveUp()"> <AngleUpIcon *ngIf="!moveUpIconTemplate" /> <ng-template *ngTemplateOutlet="moveUpIconTemplate"></ng-template> </button> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveTop()"> <AngleDoubleUpIcon *ngIf="!moveTopIconTemplate" /> <ng-template *ngTemplateOutlet="moveTopIconTemplate"></ng-template> </button> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveDown()"> <AngleDownIcon *ngIf="!moveDownIconTemplate" /> <ng-template *ngTemplateOutlet="moveDownIconTemplate"></ng-template> </button> <button type="button" [disabled]="moveDisabled()" pButton pRipple class="p-button-icon-only" (click)="moveBottom()"> <AngleDoubleDownIcon *ngIf="!moveBottomIconTemplate" /> <ng-template *ngTemplateOutlet="moveBottomIconTemplate"></ng-template> </button> </div> <div class="p-orderlist-list-container"> <div class="p-orderlist-header" *ngIf="header || headerTemplate"> <div class="p-orderlist-title" *ngIf="!headerTemplate">{{ header }}</div> <ng-container *ngTemplateOutlet="headerTemplate"></ng-container> </div> <div class="p-orderlist-filter-container" *ngIf="filterBy"> <ng-container *ngIf="filterTemplate; else builtInFilterElement"> <ng-container *ngTemplateOutlet="filterTemplate; context: { options: filterOptions }"></ng-container> </ng-container> <ng-template #builtInFilterElement> <div class="p-orderlist-filter"> <input #filter type="text" role="textbox" (keyup)="onFilterKeyup($event)" [disabled]="disabled" class="p-orderlist-filter-input p-inputtext p-component" [attr.placeholder]="filterPlaceholder" [attr.aria-label]="ariaFilterLabel" /> <SearchIcon *ngIf="!filterIconTemplate" [styleClass]="'p-orderlist-filter-icon'" /> <span class="p-orderlist-filter-icon" *ngIf="filterIconTemplate"> <ng-template *ngTemplateOutlet="filterIconTemplate"></ng-template> </span> </div> </ng-template> </div> <ul #listelement cdkDropList (cdkDropListDropped)="onDrop($event)" class="p-orderlist-list" [ngStyle]="listStyle"> <ng-template ngFor [ngForTrackBy]="trackBy" let-item [ngForOf]="value" let-i="index" let-l="last"> <li class="p-orderlist-item" tabindex="0" [ngClass]="{ 'p-highlight': isSelected(item), 'p-disabled': disabled }" cdkDrag pRipple [cdkDragData]="item" [cdkDragDisabled]="!dragdrop" (click)="onItemClick($event, item, i)" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event, item, i)" *ngIf="isItemVisible(item)" role="option" [attr.aria-selected]="isSelected(item)" > <ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item, index: i }"></ng-container> </li> </ng-template> <ng-container *ngIf="isEmpty() && (emptyMessageTemplate || emptyFilterMessageTemplate)"> <li *ngIf="!filterValue || !emptyFilterMessageTemplate" class="p-orderlist-empty-message"> <ng-container *ngTemplateOutlet="emptyMessageTemplate"></ng-container> </li> <li *ngIf="filterValue" class="p-orderlist-empty-message"> <ng-container *ngTemplateOutlet="emptyFilterMessageTemplate"></ng-container> </li> </ng-container> </ul> </div> </div> `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'p-element' }, styles: ["@layer primeng{.p-orderlist{display:flex}.p-orderlist-controls{display:flex;flex-direction:column;justify-content:center}.p-orderlist-list-container{flex:1 1 auto}.p-orderlist-list{list-style-type:none;margin:0;padding:0;overflow:auto;min-height:12rem}.p-orderlist-item{display:block;cursor:pointer;overflow:hidden;position:relative}.p-orderlist-item:not(.cdk-drag-disabled){cursor:move}.p-orderlist-item.cdk-drag-placeholder{opacity:0}.p-orderlist-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.p-orderlist.p-state-disabled .p-orderlist-item,.p-orderlist.p-state-disabled .p-button{cursor:default}.p-orderlist.p-state-disabled .p-orderlist-list{overflow:hidden}.p-orderlist-filter{position:relative}.p-orderlist-filter-icon{position:absolute;top:50%;margin-top:-.5rem;cursor:pointer}.p-orderlist-filter-input{width:100%}.p-orderlist-controls-right .p-orderlist-controls{order:2}.p-orderlist-controls-right .p-orderlist-list-container{order:1}.p-orderlist-list.cdk-drop-list-dragging .p-orderlist-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}}\n"] }] }], ctorParameters: function () { return [{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FilterService }]; }, propDecorators: { header: [{ type: Input }], style: [{ type: Input }], styleClass: [{ type: Input }], listStyle: [{ type: Input }], responsive: [{ type: Input }], filterBy: [{ type: Input }], filterPlaceholder: [{ type: Input }], filterLocale: [{ type: Input }], metaKeySelection: [{ type: Input }], dragdrop: [{ type: Input }], controlsPosition: [{ type: Input }], ariaFilterLabel: [{ type: Input }], filterMatchMode: [{ type: Input }], breakpoint: [{ type: Input }], stripedRows: [{ type: Input }], disabled: [{ type: Input }], trackBy: [{ type: Input }], selection: [{ type: Input }], value: [{ type: Input }], selectionChange: [{ type: Output }], onReorder: [{ type: Output }], onSelectionChange: [{ type: Output }], onFilterEvent: [{ type: Output }], listViewChild: [{ type: ViewChild, args: ['listelement'] }], filterViewChild: [{ type: ViewChild, args: ['filter'] }], templates: [{ type: ContentChildren, args: [PrimeTemplate] }] } }); class OrderListModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: OrderListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: OrderListModule, declarations: [OrderList], imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule, AngleDoubleDownIcon, AngleDoubleUpIcon, AngleUpIcon, AngleDownIcon, SearchIcon], exports: [OrderList, SharedModule, DragDropModule] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: OrderListModule, imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule, AngleDoubleDownIcon, AngleDoubleUpIcon, AngleUpIcon, AngleDownIcon, SearchIcon, SharedModule, DragDropModule] }); } export { OrderListModule }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: OrderListModule, decorators: [{ type: NgModule, args: [{ imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule, AngleDoubleDownIcon, AngleDoubleUpIcon, AngleUpIcon, AngleDownIcon, SearchIcon], exports: [OrderList, SharedModule, DragDropModule], declarations: [OrderList] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJsaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL29yZGVybGlzdC9vcmRlcmxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFFBQVEsRUFDUixTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBR2YsWUFBWSxFQUNaLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBRWpCLE1BQU0sRUFFTixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQWlCLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFlLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUdsRDs7O0dBR0c7QUFDSCxNQTZGYSxTQUFTO0lBcUxvQjtJQUFp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