UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

1 lines • 57 kB
{"version":3,"file":"igniteui-angular-list.mjs","sources":["../../../projects/igniteui-angular/list/src/list/list.common.ts","../../../projects/igniteui-angular/list/src/list/list-item.component.ts","../../../projects/igniteui-angular/list/src/list/list-item.component.html","../../../projects/igniteui-angular/list/src/list/list.component.ts","../../../projects/igniteui-angular/list/src/list/list.component.html","../../../projects/igniteui-angular/list/src/list/public_api.ts","../../../projects/igniteui-angular/list/src/list/list.module.ts","../../../projects/igniteui-angular/list/src/igniteui-angular-list.ts"],"sourcesContent":["import { Directive, TemplateRef, EventEmitter, QueryList, ElementRef, inject } from '@angular/core';\n\nexport interface IListChild {\n index: number;\n}\n\n/** @hidden */\n@Directive({\n selector: '[igxListBase]',\n standalone: true\n})\nexport class IgxListBaseDirective {\n protected el = inject(ElementRef, { optional: true });\n\n public itemClicked: EventEmitter<any>;\n public allowLeftPanning: boolean;\n public allowRightPanning: boolean;\n public panEndTriggeringThreshold: number;\n public leftPan: EventEmitter<any>;\n public rightPan: EventEmitter<any>;\n public startPan: EventEmitter<any>;\n public endPan: EventEmitter<any>;\n public resetPan: EventEmitter<any>;\n public panStateChange: EventEmitter<any>;\n public children: QueryList<any>;\n public listItemLeftPanningTemplate: IgxListItemLeftPanningTemplateDirective;\n public listItemRightPanningTemplate: IgxListItemRightPanningTemplateDirective;\n}\n\nexport enum IgxListPanState { NONE, LEFT, RIGHT }\n\n@Directive({\n selector: '[igxEmptyList]',\n standalone: true\n})\nexport class IgxEmptyListTemplateDirective {\n public template = inject<TemplateRef<any>>(TemplateRef);\n}\n\n@Directive({\n selector: '[igxDataLoading]',\n standalone: true\n})\nexport class IgxDataLoadingTemplateDirective {\n public template = inject<TemplateRef<any>>(TemplateRef);\n}\n\n@Directive({\n selector: '[igxListItemLeftPanning]',\n standalone: true\n})\nexport class IgxListItemLeftPanningTemplateDirective {\n public template = inject<TemplateRef<any>>(TemplateRef);\n}\n\n@Directive({\n selector: '[igxListItemRightPanning]',\n standalone: true\n})\nexport class IgxListItemRightPanningTemplateDirective {\n public template = inject<TemplateRef<any>>(TemplateRef);\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, HostListener, Input, Renderer2, ViewChild, booleanAttribute, inject } from '@angular/core';\n\nimport {\n IgxListPanState,\n IListChild,\n IgxListBaseDirective\n} from './list.common';\n\nimport { HammerGesturesManager } from 'igniteui-angular/core';\nimport { rem } from 'igniteui-angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * The Ignite UI List Item component is a container intended for row items in the Ignite UI for Angular List component.\n *\n * Example:\n * ```html\n * <igx-list>\n * <igx-list-item isHeader=\"true\">Contacts</igx-list-item>\n * <igx-list-item *ngFor=\"let contact of contacts\">\n * <span class=\"name\">{{ contact.name }}</span>\n * <span class=\"phone\">{{ contact.phone }}</span>\n * </igx-list-item>\n * </igx-list>\n * ```\n */\n@Component({\n providers: [HammerGesturesManager],\n selector: 'igx-list-item',\n templateUrl: 'list-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet]\n})\nexport class IgxListItemComponent implements IListChild {\n public list = inject(IgxListBaseDirective);\n private elementRef = inject(ElementRef);\n private _renderer = inject(Renderer2);\n\n /**\n * Provides a reference to the template's base element shown when left panning a list item.\n * ```typescript\n * const leftPanTmpl = this.listItem.leftPanningTemplateElement;\n * ```\n */\n @ViewChild('leftPanningTmpl')\n public leftPanningTemplateElement;\n\n /**\n * Provides a reference to the template's base element shown when right panning a list item.\n * ```typescript\n * const rightPanTmpl = this.listItem.rightPanningTemplateElement;\n * ```\n */\n @ViewChild('rightPanningTmpl')\n public rightPanningTemplateElement;\n\n /**\n * Sets/gets whether the `list item` is a header.\n * ```html\n * <igx-list-item [isHeader] = \"true\">Header</igx-list-item>\n * ```\n * ```typescript\n * let isHeader = this.listItem.isHeader;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @Input({ transform: booleanAttribute })\n public isHeader: boolean;\n\n /**\n * Sets/gets whether the `list item` is hidden.\n * By default the `hidden` value is `false`.\n * ```html\n * <igx-list-item [hidden] = \"true\">Hidden Item</igx-list-item>\n * ```\n * ```typescript\n * let isHidden = this.listItem.hidden;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @Input({ transform: booleanAttribute })\n public hidden = false;\n\n /**\n * Sets/gets the `aria-label` attribute of the `list item`.\n * ```typescript\n * this.listItem.ariaLabel = \"Item1\";\n * ```\n * ```typescript\n * let itemAriaLabel = this.listItem.ariaLabel;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @HostBinding('attr.aria-label')\n public ariaLabel: string;\n\n /**\n * Gets the `touch-action` style of the `list item`.\n * ```typescript\n * let touchAction = this.listItem.touchAction;\n * ```\n */\n @HostBinding('style.touch-action')\n public touchAction = 'pan-y';\n\n /**\n * @hidden\n */\n private _panState: IgxListPanState = IgxListPanState.NONE;\n\n /**\n * @hidden\n */\n private panOffset = 0;\n\n /**\n * @hidden\n */\n private _index: number = null;\n\n /**\n * @hidden\n */\n private lastPanDir = IgxListPanState.NONE;\n\n private _role: string = '';\n private _selected = false;;\n\n /**\n * Gets the `panState` of a `list item`.\n * ```typescript\n * let itemPanState = this.listItem.panState;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public get panState(): IgxListPanState {\n return this._panState;\n }\n\n /**\n * Gets the `index` of a `list item`.\n * ```typescript\n * let itemIndex = this.listItem.index;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @Input()\n public get index(): number {\n return this._index !== null ? this._index : this.list.children.toArray().indexOf(this);\n }\n\n /**\n * Sets the `index` of the `list item`.\n * ```typescript\n * this.listItem.index = index;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public set index(value: number) {\n this._index = value;\n }\n\n /**\n * Returns an element reference to the list item.\n * ```typescript\n * let listItemElement = this.listItem.element.\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public get element() {\n return this.elementRef.nativeElement;\n }\n\n /**\n * Returns a reference container which contains the list item's content.\n * ```typescript\n * let listItemContainer = this.listItem.contentElement.\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public get contentElement() {\n const candidates = this.element.getElementsByClassName('igx-list__item-content');\n return (candidates && candidates.length > 0) ? candidates[0] : null;\n }\n\n /**\n * Returns the `context` object which represents the `template context` binding into the `list item container`\n * by providing the `$implicit` declaration which is the `IgxListItemComponent` itself.\n * ```typescript\n * let listItemComponent = this.listItem.context;\n * ```\n */\n public get context(): any {\n return {\n $implicit: this\n };\n }\n\n /**\n * Gets the width of a `list item`.\n * ```typescript\n * let itemWidth = this.listItem.width;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public get width() {\n if (this.element) {\n return this.element.offsetWidth;\n }\n }\n\n /**\n * Gets the maximum left position of the `list item`.\n * ```typescript\n * let maxLeft = this.listItem.maxLeft;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public get maxLeft() {\n return -this.width;\n }\n\n /**\n * Gets the maximum right position of the `list item`.\n * ```typescript\n * let maxRight = this.listItem.maxRight;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n public get maxRight() {\n return this.width;\n }\n\n /** @hidden @internal */\n public get offsetWidthInRem() {\n return rem(this.element.offsetWidth);\n }\n\n /** @hidden @internal */\n public get offsetHeightInRem() {\n return rem(this.element.offsetHeight);\n }\n\n /**\n * Gets/Sets the `role` attribute of the `list item`.\n * ```typescript\n * let itemRole = this.listItem.role;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @HostBinding('attr.role')\n @Input()\n public get role() {\n return this._role ? this._role : this.isHeader ? 'separator' : 'listitem';\n }\n\n public set role(val: string) {\n this._role = val;\n }\n\n /**\n * Sets/gets whether the `list item` is selected.\n * Selection is only applied to non-header items.\n * When selected, the CSS class 'igx-list__item-base--selected' is added to the item.\n * ```html\n * <igx-list-item [selected]=\"true\">Selected Item</igx-list-item>\n * ```\n * ```typescript\n * let isSelected = this.listItem.selected;\n * this.listItem.selected = true;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @HostBinding('class.igx-list__item-base--selected')\n @Input({ transform: booleanAttribute })\n public get selected() {\n return this._selected && !this.isHeader;\n }\n\n public set selected(value: boolean) {\n this._selected = value;\n }\n\n /**\n * Indicates whether `list item` should have header style.\n * ```typescript\n * let headerStyle = this.listItem.headerStyle;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @HostBinding('class.igx-list__header')\n public get headerStyle(): boolean {\n return this.isHeader;\n }\n\n /**\n * Applies the inner style of the `list item` if the item is not counted as header.\n * ```typescript\n * let innerStyle = this.listItem.innerStyle;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @HostBinding('class.igx-list__item-base')\n public get innerStyle(): boolean {\n return !this.isHeader;\n }\n\n /**\n * Returns string value which describes the display mode of the `list item`.\n * ```typescript\n * let isHidden = this.listItem.display;\n * ```\n *\n * @memberof IgxListItemComponent\n */\n @HostBinding('style.display')\n public get display(): string {\n return this.hidden ? 'none' : '';\n }\n\n /**\n * @hidden\n */\n @HostListener('click', ['$event'])\n public clicked(evt) {\n this.list.itemClicked.emit({ item: this, event: evt, direction: this.lastPanDir });\n this.lastPanDir = IgxListPanState.NONE;\n }\n\n /**\n * @hidden\n */\n @HostListener('panstart')\n public panStart() {\n if (this.isTrue(this.isHeader)) {\n return;\n }\n if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n return;\n }\n\n this.list.startPan.emit({ item: this, direction: this.lastPanDir, keepitem: false });\n }\n\n /**\n * @hidden\n */\n @HostListener('pancancel')\n public panCancel() {\n this.resetPanPosition();\n this.list.endPan.emit({ item: this, direction: this.lastPanDir, keepItem: false });\n }\n\n /**\n * @hidden\n */\n @HostListener('panmove', ['$event'])\n public panMove(ev) {\n if (this.isTrue(this.isHeader)) {\n return;\n }\n if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n return;\n }\n const isPanningToLeft = ev.deltaX < 0;\n if (isPanningToLeft && this.isTrue(this.list.allowLeftPanning)) {\n this.showLeftPanTemplate();\n this.setContentElementLeft(Math.max(this.maxLeft, ev.deltaX));\n } else if (!isPanningToLeft && this.isTrue(this.list.allowRightPanning)) {\n this.showRightPanTemplate();\n this.setContentElementLeft(Math.min(this.maxRight, ev.deltaX));\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('panend')\n public panEnd() {\n if (this.isTrue(this.isHeader)) {\n return;\n }\n if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n return;\n }\n\n // the translation offset of the current list item content\n const relativeOffset = this.panOffset;\n const widthTriggeringGrip = this.width * this.list.panEndTriggeringThreshold;\n\n if (relativeOffset === 0) {\n return; // no panning has occured\n }\n\n const dir = relativeOffset > 0 ? IgxListPanState.RIGHT : IgxListPanState.LEFT;\n this.lastPanDir = dir;\n\n const args = { item: this, direction: dir, keepItem: false };\n this.list.endPan.emit(args);\n\n const oldPanState = this._panState;\n if (Math.abs(relativeOffset) < widthTriggeringGrip) {\n this.resetPanPosition();\n this.list.resetPan.emit(this);\n return;\n }\n\n if (dir === IgxListPanState.LEFT) {\n this.list.leftPan.emit(args);\n } else {\n this.list.rightPan.emit(args);\n }\n\n if (args.keepItem === true) {\n this.setContentElementLeft(0);\n this._panState = IgxListPanState.NONE;\n } else {\n if (dir === IgxListPanState.LEFT) {\n this.setContentElementLeft(this.maxLeft);\n this._panState = IgxListPanState.LEFT;\n } else {\n this.setContentElementLeft(this.maxRight);\n this._panState = IgxListPanState.RIGHT;\n }\n }\n\n if (oldPanState !== this._panState) {\n const args2 = { oldState: oldPanState, newState: this._panState, item: this };\n this.list.panStateChange.emit(args2);\n }\n this.hideLeftAndRightPanTemplates();\n }\n\n /**\n * @hidden\n */\n private showLeftPanTemplate() {\n this.setLeftAndRightTemplatesVisibility('visible', 'hidden');\n }\n\n /**\n * @hidden\n */\n private showRightPanTemplate() {\n this.setLeftAndRightTemplatesVisibility('hidden', 'visible');\n }\n\n /**\n * @hidden\n */\n private hideLeftAndRightPanTemplates() {\n setTimeout(() => {\n this.setLeftAndRightTemplatesVisibility('hidden', 'hidden');\n }, 500);\n }\n\n /**\n * @hidden\n */\n private setLeftAndRightTemplatesVisibility(leftVisibility, rightVisibility) {\n if (this.leftPanningTemplateElement && this.leftPanningTemplateElement.nativeElement) {\n this.leftPanningTemplateElement.nativeElement.style.visibility = leftVisibility;\n }\n if (this.rightPanningTemplateElement && this.rightPanningTemplateElement.nativeElement) {\n this.rightPanningTemplateElement.nativeElement.style.visibility = rightVisibility;\n }\n }\n\n /**\n * @hidden\n */\n private setContentElementLeft(value: number) {\n this.panOffset = value;\n this.contentElement.style.transform = 'translateX(' + value + 'px)';\n }\n\n /**\n * @hidden\n */\n private isTrue(value: boolean): boolean {\n if (typeof (value) === 'boolean') {\n return value;\n } else {\n return value === 'true';\n }\n }\n\n /**\n * @hidden\n */\n private resetPanPosition() {\n this.setContentElementLeft(0);\n this._panState = IgxListPanState.NONE;\n this.hideLeftAndRightPanTemplates();\n }\n}\n","\n@if (!isHeader && list.listItemLeftPanningTemplate) {\n <div #leftPanningTmpl class=\"igx-list__item-right\"\n [style.width.rem]=\"offsetWidthInRem\" [style.height.rem]=\"offsetHeightInRem\">\n <ng-container *ngTemplateOutlet=\"list.listItemLeftPanningTemplate.template; context: context\">\n </ng-container>\n </div>\n}\n\n@if (!isHeader && list.listItemRightPanningTemplate) {\n <div #rightPanningTmpl class=\"igx-list__item-left\"\n [style.width.rem]=\"offsetWidthInRem\" [style.height.rem]=\"offsetHeightInRem\">\n <ng-container *ngTemplateOutlet=\"list.listItemRightPanningTemplate.template; context: context\">\n </ng-container>\n </div>\n}\n\n<ng-template #itemsContent>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #itemThumbnails>\n <div class=\"igx-list__item-thumbnail\">\n <ng-content select=\"[igxListThumbnail], igx-list__item-thumbnail, igx-avatar\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #itemLines>\n <div class=\"igx-list__item-lines\">\n <ng-content select=\"[igxListLine], .igx-list__item-lines, [igxListLineTitle], [igxListLineSubTitle], .igx-list__item-line-title, .igx-list__item-line-subtitle\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #itemActions>\n <div class=\"igx-list__item-actions\">\n <ng-content select=\"[igxListAction], .igx-list__item-actions\"></ng-content>\n </div>\n</ng-template>\n\n@if (isHeader) {\n <ng-container *ngTemplateOutlet=\"itemsContent\"></ng-container>\n}\n\n@if (!isHeader) {\n <div class=\"igx-list__item-content\">\n <ng-container *ngTemplateOutlet=\"itemThumbnails\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemLines\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemActions\"></ng-container>\n <ng-container *ngTemplateOutlet=\"itemsContent\"></ng-container>\n </div>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, QueryList, TemplateRef, ViewChild, Directive, booleanAttribute, inject } from '@angular/core';\n\n\n\nimport { IgxListItemComponent } from './list-item.component';\nimport {\n IgxListBaseDirective,\n IgxDataLoadingTemplateDirective,\n IgxEmptyListTemplateDirective,\n IgxListPanState,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective\n} from './list.common';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\nimport { IListResourceStrings, ListResourceStringsEN } from 'igniteui-angular/core';\nimport { getCurrentResourceStrings } from 'igniteui-angular/core';\n\nlet NEXT_ID = 0;\n\n/**\n * Interface for the panStateChange igxList event arguments\n */\nexport interface IPanStateChangeEventArgs extends IBaseEventArgs {\n oldState: IgxListPanState;\n newState: IgxListPanState;\n item: IgxListItemComponent;\n}\n\n/**\n * Interface for the listItemClick igxList event arguments\n */\nexport interface IListItemClickEventArgs extends IBaseEventArgs {\n item: IgxListItemComponent;\n event: Event;\n direction: IgxListPanState;\n}\n\n/**\n * Interface for the listItemPanning igxList event arguments\n */\nexport interface IListItemPanningEventArgs extends IBaseEventArgs {\n item: IgxListItemComponent;\n direction: IgxListPanState;\n keepItem: boolean;\n}\n\n/**\n * igxListThumbnail is container for the List media\n * Use it to wrap anything you want to be used as a thumbnail.\n */\n@Directive({\n selector: '[igxListThumbnail]',\n standalone: true\n})\nexport class IgxListThumbnailDirective { }\n\n/**\n * igxListAction is container for the List action\n * Use it to wrap anything you want to be used as a list action: icon, checkbox...\n */\n@Directive({\n selector: '[igxListAction]',\n standalone: true\n})\nexport class IgxListActionDirective { }\n\n/**\n * igxListLine is container for the List text content\n * Use it to wrap anything you want to be used as a plane text.\n */\n@Directive({\n selector: '[igxListLine]',\n standalone: true\n})\nexport class IgxListLineDirective { }\n\n/**\n * igxListLineTitle is a directive that add class to the target element\n * Use it to make anything to look like list Title.\n */\n@Directive({\n selector: '[igxListLineTitle]',\n standalone: true\n})\nexport class IgxListLineTitleDirective {\n @HostBinding('class.igx-list__item-line-title')\n public cssClass = 'igx-list__item-line-title';\n}\n\n/**\n * igxListLineSubTitle is a directive that add class to the target element\n * Use it to make anything to look like list Subtitle.\n */\n@Directive({\n selector: '[igxListLineSubTitle]',\n standalone: true\n})\nexport class IgxListLineSubTitleDirective {\n @HostBinding('class.igx-list__item-line-subtitle')\n public cssClass = 'igx-list__item-line-subtitle';\n}\n\n/**\n * Displays a collection of data items in a templatable list format\n *\n * @igxModule IgxListModule\n *\n * @igxTheme igx-list-theme\n *\n * @igxKeywords list, data\n *\n * @igxGroup Grids & Lists\n *\n * @remarks\n * The Ignite UI List displays rows of items and supports one or more header items as well as search and filtering\n * of list items. Each list item is completely templatable and will support any valid HTML or Angular component.\n *\n * @example\n * ```html\n * <igx-list>\n * <igx-list-item isHeader=\"true\">Contacts</igx-list-item>\n * <igx-list-item *ngFor=\"let contact of contacts\">\n * <span class=\"name\">{{ contact.name }}</span>\n * <span class=\"phone\">{{ contact.phone }}</span>\n * </igx-list-item>\n * </igx-list>\n * ```\n */\n@Component({\n selector: 'igx-list',\n templateUrl: 'list.component.html',\n providers: [{ provide: IgxListBaseDirective, useExisting: IgxListComponent }],\n imports: [NgTemplateOutlet]\n})\nexport class IgxListComponent extends IgxListBaseDirective {\n public element = inject(ElementRef);\n\n /**\n * Returns a collection of all items and headers in the list.\n *\n * @example\n * ```typescript\n * let listChildren: QueryList = this.list.children;\n * ```\n */\n @ContentChildren(forwardRef(() => IgxListItemComponent), { descendants: true })\n public override children: QueryList<IgxListItemComponent>;\n\n /**\n * Sets/gets the empty list template.\n *\n * @remarks\n * This template is used by IgxList in case there are no list items\n * defined and `isLoading` is set to `false`.\n *\n * @example\n * ```html\n * <igx-list>\n * <ng-template igxEmptyList>\n * <p class=\"empty\">No contacts! :(</p>\n * </ng-template>\n * </igx-list>\n * ```\n * ```typescript\n * let emptyTemplate = this.list.emptyListTemplate;\n * ```\n */\n @ContentChild(IgxEmptyListTemplateDirective, { read: IgxEmptyListTemplateDirective })\n public emptyListTemplate: IgxEmptyListTemplateDirective;\n\n /**\n * Sets/gets the list loading template.\n *\n * @remarks\n * This template is used by IgxList in case there are no list items defined and `isLoading` is set to `true`.\n *\n * @example\n * ```html\n * <igx-list>\n * <ng-template igxDataLoading>\n * <p>Patience, we are currently loading your data...</p>\n * </ng-template>\n * </igx-list>\n * ```\n * ```typescript\n * let loadingTemplate = this.list.dataLoadingTemplate;\n * ```\n */\n @ContentChild(IgxDataLoadingTemplateDirective, { read: IgxDataLoadingTemplateDirective })\n public dataLoadingTemplate: IgxDataLoadingTemplateDirective;\n\n /**\n * Sets/gets the template for left panning a list item.\n *\n * @remarks\n * Default value is `null`.\n *\n * @example\n * ```html\n * <igx-list [allowLeftPanning]=\"true\">\n * <ng-template igxListItemLeftPanning>\n * <igx-icon>delete</igx-icon>Delete\n * </ng-template>\n * </igx-list>\n * ```\n * ```typescript\n * let itemLeftPanTmpl = this.list.listItemLeftPanningTemplate;\n * ```\n */\n @ContentChild(IgxListItemLeftPanningTemplateDirective, { read: IgxListItemLeftPanningTemplateDirective })\n public override listItemLeftPanningTemplate: IgxListItemLeftPanningTemplateDirective;\n\n /**\n * Sets/gets the template for right panning a list item.\n *\n * @remarks\n * Default value is `null`.\n *\n * @example\n * ```html\n * <igx-list [allowRightPanning] = \"true\">\n * <ng-template igxListItemRightPanning>\n * <igx-icon>call</igx-icon>Dial\n * </ng-template>\n * </igx-list>\n * ```\n * ```typescript\n * let itemRightPanTmpl = this.list.listItemRightPanningTemplate;\n * ```\n */\n @ContentChild(IgxListItemRightPanningTemplateDirective, { read: IgxListItemRightPanningTemplateDirective })\n public override listItemRightPanningTemplate: IgxListItemRightPanningTemplateDirective;\n\n /**\n * Provides a threshold after which the item's panning will be completed automatically.\n *\n * @remarks\n * By default this property is set to 0.5 which is 50% of the list item's width.\n *\n * @example\n * ```html\n * <igx-list [panEndTriggeringThreshold]=\"0.8\"></igx-list>\n * ```\n */\n @Input()\n public override panEndTriggeringThreshold = 0.5;\n\n /**\n * Sets/gets the `id` of the list.\n *\n * @remarks\n * If not set, the `id` of the first list component will be `\"igx-list-0\"`.\n *\n * @example\n * ```html\n * <igx-list id=\"my-first-list\"></igx-list>\n * ```\n * ```typescript\n * let listId = this.list.id;\n * ```\n */\n @HostBinding('attr.id')\n @Input()\n public id = `igx-list-${NEXT_ID++}`;\n\n /**\n * Sets/gets whether the left panning of an item is allowed.\n *\n * @remarks\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-list [allowLeftPanning]=\"true\"></igx-list>\n * ```\n * ```typescript\n * let isLeftPanningAllowed = this.list.allowLeftPanning;\n * ```\n */\n @Input({ transform: booleanAttribute })\n public override allowLeftPanning = false;\n\n /**\n * Sets/gets whether the right panning of an item is allowed.\n *\n * @remarks\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-list [allowRightPanning]=\"true\"></igx-list>\n * ```\n * ```typescript\n * let isRightPanningAllowed = this.list.allowRightPanning;\n * ```\n */\n @Input({ transform: booleanAttribute })\n public override allowRightPanning = false;\n\n /**\n * Sets/gets whether the list is currently loading data.\n *\n * @remarks\n * Set it to display the dataLoadingTemplate while data is being retrieved.\n * Default value is `false`.\n *\n * @example\n * ```html\n * <igx-list [isLoading]=\"true\"></igx-list>\n * ```\n * ```typescript\n * let isLoading = this.list.isLoading;\n * ```\n */\n @Input({ transform: booleanAttribute })\n public isLoading = false;\n\n /**\n * Event emitted when a left pan gesture is executed on a list item.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * <igx-list [allowLeftPanning]=\"true\" (leftPan)=\"leftPan($event)\"></igx-list>\n * ```\n */\n @Output()\n public override leftPan = new EventEmitter<IListItemPanningEventArgs>();\n\n /**\n * Event emitted when a right pan gesture is executed on a list item.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * <igx-list [allowRightPanning]=\"true\" (rightPan)=\"rightPan($event)\"></igx-list>\n * ```\n */\n @Output()\n public override rightPan = new EventEmitter<IListItemPanningEventArgs>();\n\n /**\n * Event emitted when a pan gesture is started.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * <igx-list (startPan)=\"startPan($event)\"></igx-list>\n * ```\n */\n @Output()\n public override startPan = new EventEmitter<IListItemPanningEventArgs>();\n\n /**\n * Event emitted when a pan gesture is completed or canceled.\n *\n * @remarks\n * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n *\n * @example\n * ```html\n * <igx-list (endPan)=\"endPan($event)\"></igx-list>\n * ```\n */\n @Output()\n public override endPan = new EventEmitter<IListItemPanningEventArgs>();\n\n /**\n * Event emitted when a pan item is returned to its original position.\n *\n * @remarks\n * Provides a reference to an object of type `IgxListComponent` as an event argument.\n *\n * @example\n * ```html\n * <igx-list (resetPan)=\"resetPan($event)\"></igx-list>\n * ```\n */\n @Output()\n public override resetPan = new EventEmitter<IgxListComponent>();\n\n /**\n *\n * Event emitted when a pan gesture is executed on a list item.\n *\n * @remarks\n * Provides references to the `IgxListItemComponent` and `IgxListPanState` as event arguments.\n *\n * @example\n * ```html\n * <igx-list (panStateChange)=\"panStateChange($event)\"></igx-list>\n * ```\n */\n @Output()\n public override panStateChange = new EventEmitter<IPanStateChangeEventArgs>();\n\n /**\n * Event emitted when a list item is clicked.\n *\n * @remarks\n * Provides references to the `IgxListItemComponent` and `Event` as event arguments.\n *\n * @example\n * ```html\n * <igx-list (itemClicked)=\"onItemClicked($event)\"></igx-list>\n * ```\n */\n @Output()\n public override itemClicked = new EventEmitter<IListItemClickEventArgs>();\n\n /**\n * @hidden\n * @internal\n */\n @ViewChild('defaultEmptyList', { read: TemplateRef, static: true })\n protected defaultEmptyListTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * @internal\n */\n @ViewChild('defaultDataLoading', { read: TemplateRef, static: true })\n protected defaultDataLoadingTemplate: TemplateRef<any>;\n\n private _resourceStrings = getCurrentResourceStrings(ListResourceStringsEN);\n\n /**\n * Sets the resource strings.\n * By default it uses EN resources.\n */\n @Input()\n public set resourceStrings(value: IListResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Returns the resource strings.\n */\n public get resourceStrings(): IListResourceStrings {\n return this._resourceStrings;\n }\n\n /**\n * @hidden\n * @internal\n */\n protected get sortedChildren(): IgxListItemComponent[] {\n if (this.children !== undefined) {\n return this.children.toArray()\n .sort((a: IgxListItemComponent, b: IgxListItemComponent) => a.index - b.index);\n }\n return null;\n }\n\n private _role = 'list';\n\n /**\n * Gets/Sets the `role` attribute value.\n *\n * @example\n * ```typescript\n * let listRole = this.list.role;\n * ```\n */\n @HostBinding('attr.role')\n @Input()\n public get role() {\n return this._role;\n }\n\n public set role(val: string) {\n this._role = val;\n }\n\n /**\n * Gets a boolean indicating if the list is empty.\n *\n * @example\n * ```typescript\n * let isEmpty = this.list.isListEmpty;\n * ```\n */\n @HostBinding('class.igx-list--empty')\n public get isListEmpty(): boolean {\n return !this.children || this.children.length === 0;\n }\n\n /**\n * @hidden\n * @internal\n */\n @HostBinding('class.igx-list')\n public get cssClass(): boolean {\n return !this.isListEmpty;\n }\n\n /**\n * Gets the list `items` excluding the header ones.\n *\n * @example\n * ```typescript\n * let listItems: IgxListItemComponent[] = this.list.items;\n * ```\n */\n public get items(): IgxListItemComponent[] {\n const items: IgxListItemComponent[] = [];\n if (this.children !== undefined) {\n for (const child of this.sortedChildren) {\n if (!child.isHeader) {\n items.push(child);\n }\n }\n }\n return items;\n }\n\n /**\n * Gets the header list `items`.\n *\n * @example\n * ```typescript\n * let listHeaders: IgxListItemComponent[] = this.list.headers;\n * ```\n */\n public get headers(): IgxListItemComponent[] {\n const headers: IgxListItemComponent[] = [];\n if (this.children !== undefined) {\n for (const child of this.children.toArray()) {\n if (child.isHeader) {\n headers.push(child);\n }\n }\n }\n return headers;\n }\n\n /**\n * Gets the `context` object of the template binding.\n *\n * @remarks\n * Gets the `context` object which represents the `template context` binding into the `list container`\n * by providing the `$implicit` declaration which is the `IgxListComponent` itself.\n *\n * @example\n * ```typescript\n * let listComponent = this.list.context;\n * ```\n */\n public get context(): any {\n return {\n $implicit: this\n };\n }\n\n /**\n * Gets a `TemplateRef` to the currently used template.\n *\n * @example\n * ```typescript\n * let listTemplate = this.list.template;\n * ```\n */\n public get template(): TemplateRef<any> {\n if (this.isLoading) {\n return this.dataLoadingTemplate ? this.dataLoadingTemplate.template : this.defaultDataLoadingTemplate;\n } else {\n return this.emptyListTemplate ? this.emptyListTemplate.template : this.defaultEmptyListTemplate;\n }\n }\n}\n\n/**\n * @hidden\n */\n\n","<ng-content></ng-content>\n\n<ng-template #defaultEmptyList>\n <article class=\"igx-list__message\">\n {{resourceStrings.igx_list_no_items}}\n </article>\n</ng-template>\n\n<ng-template #defaultDataLoading>\n <article class=\"igx-list__message\">\n {{resourceStrings.igx_list_loading}}\n </article>\n</ng-template>\n\n@if (!children || children.length === 0 || isLoading) {\n <ng-container *ngTemplateOutlet=\"template; context: context\">\n </ng-container>\n}\n","import { IgxListItemComponent } from './list-item.component';\nimport { IgxDataLoadingTemplateDirective, IgxEmptyListTemplateDirective, IgxListItemLeftPanningTemplateDirective, IgxListItemRightPanningTemplateDirective } from './list.common';\nimport { IgxListActionDirective, IgxListComponent, IgxListLineDirective, IgxListLineSubTitleDirective, IgxListLineTitleDirective, IgxListThumbnailDirective } from './list.component';\n\nexport * from './list.component';\nexport {\n IgxListBaseDirective,\n IgxListPanState,\n IgxEmptyListTemplateDirective,\n IgxDataLoadingTemplateDirective,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective\n} from './list.common';\nexport * from './list-item.component';\n\n/* NOTE: List directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_LIST_DIRECTIVES = [\n IgxListComponent,\n IgxListItemComponent,\n IgxListThumbnailDirective,\n IgxListActionDirective,\n IgxListLineDirective,\n IgxListLineTitleDirective,\n IgxListLineSubTitleDirective,\n IgxDataLoadingTemplateDirective,\n IgxEmptyListTemplateDirective,\n IgxListItemLeftPanningTemplateDirective,\n IgxListItemRightPanningTemplateDirective\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_LIST_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n ...IGX_LIST_DIRECTIVES\n ],\n exports: [\n ...IGX_LIST_DIRECTIVES\n ]\n})\n\nexport class IgxListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxListComponent","i2.IgxListItemComponent","i1.IgxListThumbnailDirective","i1.IgxListActionDirective","i1.IgxListLineDirective","i1.IgxListLineTitleDirective","i1.IgxListLineSubTitleDirective","i3.IgxDataLoadingTemplateDirective","i3.IgxEmptyListTemplateDirective","i3.IgxListItemLeftPanningTemplateDirective","i3.IgxListItemRightPanningTemplateDirective"],"mappings":"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