primeng
Version:
[](https://badge.fury.io/js/primeng) [](https://www.npmjs.com/package/primeng) [ • 38.6 kB
JavaScript
import * as i0 from '@angular/core';
import { EventEmitter, PLATFORM_ID, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
import * as i2 from '@angular/common';
import { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';
import * as i3 from 'primeng/button';
import { ButtonModule } from 'primeng/button';
import * as i1 from 'primeng/api';
import { PrimeTemplate, SharedModule } from 'primeng/api';
import { DomHandler } from 'primeng/dom';
import { UniqueComponentId, ObjectUtils } from 'primeng/utils';
import * as i4 from 'primeng/ripple';
import { RippleModule } from 'primeng/ripple';
import * as i5 from '@angular/cdk/drag-drop';
import { moveItemInArray, DragDropModule } 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';
/**
* 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 = `
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.0.2", 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.0.2", 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 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", 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.0.2", ngImport: i0, type: OrderListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.2", 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.0.2", ngImport: i0, type: OrderListModule, imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule, AngleDoubleDownIcon, AngleDoubleUpIcon, AngleUpIcon, AngleDownIcon, SearchIcon, SharedModule, DragDropModule] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", 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]
}]
}] });
/**
* Generated bundle index. Do not edit.
*/
export { OrderList, OrderListModule };
//# sourceMappingURL=primeng-orderlist.mjs.map