@bootkit/ng0 0.0.0-alpha.26 → 0.0.0-alpha.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-components-list.mjs","sources":["../../../projects/ng0/components/list/list-item.component.ts","../../../projects/ng0/components/list/list-item.component.html","../../../projects/ng0/components/list/list.component.ts","../../../projects/ng0/components/list/list.component.html","../../../projects/ng0/components/list/list.module.ts","../../../projects/ng0/components/list/public-api.ts","../../../projects/ng0/components/list/bootkit-ng0-components-list.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, ViewEncapsulation, inject, input, booleanAttribute, ElementRef, signal, OnInit } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * ListItemComponent represents an individual item within a ListComponent.\r\n */\r\n@Component({\r\n selector: 'ng0-list-item',\r\n exportAs: 'ng0ListItem',\r\n templateUrl: './list-item.component.html',\r\n styleUrls: ['./list-item.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n ],\r\n host: {\r\n '[class.active]': 'isActive()',\r\n '[class.selected]': 'isSelected()',\r\n '[attr.id]': 'id()',\r\n '[attr.tabIndex]': '_getTabIndex()'\r\n }\r\n})\r\nexport class ListItemComponent {\r\n /**\r\n * The value associated with the item. This can be of any type.\r\n */\r\n public readonly value = input<any>();\r\n\r\n /**\r\n * The id of the item.\r\n */\r\n public readonly id = input<any>();\r\n\r\n /**\r\n * Reference to the parent list component\r\n */\r\n public readonly list = inject(ListComponent);\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Indicates whether the item is active.\r\n * @returns True if the item is active, false otherwise.\r\n */\r\n public isActive() {\r\n return this.list.isActive(this);\r\n }\r\n\r\n /**\r\n * Indicates whether the item is selected.\r\n * @returns True if the item is selected, false otherwise.\r\n */\r\n public isSelected() {\r\n return this.list.isSelected(this.value());\r\n }\r\n\r\n /**\r\n * Selects the item.\r\n * @returns \r\n */\r\n public select() {\r\n return this.list.select(this.value());\r\n }\r\n\r\n /**\r\n * Deselects the item.\r\n * @returns \r\n */\r\n public deselect() {\r\n this.list.deselect(this);\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the item.\r\n * @returns void\r\n */\r\n public toggle() {\r\n this.list.toggle(this.value());\r\n }\r\n\r\n // /**\r\n // * Indicates whether the item is disabled. Default is false.\r\n // */\r\n // public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Scrolls the item into view within its parent container.\r\n * @param position The vertical alignment of the item after scrolling.\r\n * Can be 'start', 'center', 'end', or 'nearest'.\r\n * Default is 'nearest'.\r\n * @param behavior The scrolling behavior.\r\n */\r\n public scrollIntoView(position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n this.elementRef.nativeElement.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Sets focus on the item.\r\n */\r\n public focus() {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n\r\n private _getTabIndex() {\r\n let focus = this.list.focus();\r\n // if (this.list.isDisabled()) {\r\n // return undefined;\r\n // }\r\n\r\n if (focus == 'none' || focus == 'activeDescendant') {\r\n return undefined;\r\n } else {\r\n // focus: roving\r\n return this.isActive() ? 0 : -1\r\n }\r\n }\r\n}\r\n","@let formatter = list.formatBy();\r\n\r\n@if(list.itemTemplate) {\r\n<ng-container *ngTemplateOutlet=\"list.itemTemplate; context: { $implicit: {ref: this, value: value()}}\" />\r\n} @else {\r\n@if(list.showSelectionIndicator()) {\r\n<input class=\"form-check-input ng0-list-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected()\"\r\n [attr.type]=\"list.multiple() ? 'checkbox' : 'radio'\">\r\n}\r\n\r\n{{formatter(value())}}\r\n}","import { Component, ElementRef, input, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, EventEmitter, Output, computed, ViewChildren, QueryList, ViewEncapsulation, ViewContainerRef, HostBinding, OnInit, AfterViewInit, untracked } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike } from '@bootkit/ng0/data';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { objectFormatterAttribute, defaultObjectFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItemComponent } from \"./list-item.component\";\r\nimport {\r\n CssClassAttribute, defaultEqualityComparer, equalityComparerAttribute, valueWriterAttribute,\r\n defaultValueWriter, filterPredicateAttribute, noopFilter, IdGeneratorAttribute, TrackByAttribute, trackByIndex, IfDirective\r\n} from '@bootkit/ng0/common';\r\n\r\nlet uuid = 0;\r\n/** \r\n * ListComponent is a versatile component that displays a list of items with support for single or multiple selection,\r\n * custom item templates, filtering, and keyboard navigation.\r\n */\r\n@Component({\r\n selector: 'ng0-list',\r\n exportAs: 'ng0List',\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n IfDirective,\r\n ListItemComponent\r\n ],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ListComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-list-loading]': 'source().isLoading()',\r\n '[attr.aria-activedescendant]': '_hostAriaActiveDescendant()',\r\n '[attr.disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.aria-disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.tabindex]': '_hostTabIndex()',\r\n }\r\n})\r\nexport class ListComponent implements ControlValueAccessor {\r\n private _localizationService = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n private _value = signal<any>(undefined);\r\n private _changeCallback?: (value: any) => void;\r\n private _touchCallback?: () => void;\r\n protected readonly _sourceItems = signal<any[]>([]);\r\n private readonly _selectedValues = new Set<any>();\r\n protected readonly _activeItem = signal<ListItemComponent | undefined>(undefined);\r\n @ViewChildren(ListItemComponent) private readonly _visibleItems!: QueryList<ListItemComponent>;\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showSelectionIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * A custom comparer function or the name of a field for comparing two objects.\r\n */\r\n public readonly compareBy = input(defaultEqualityComparer, {\r\n transform: equalityComparerAttribute\r\n });\r\n\r\n /**\r\n * Custom format function to convert an item to a string for display.\r\n * Default converts the item to a string using its toString method.\r\n */\r\n public readonly formatBy = input(defaultObjectFormatter, {\r\n transform: objectFormatterAttribute(this._localizationService.get())\r\n });\r\n\r\n /**\r\n * Custom value extractor function to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueWriter, {\r\n transform: valueWriterAttribute\r\n });\r\n\r\n /**\r\n * A custom filter predicate function to filter items based on a search string.\r\n * Default checks if the item's string representation contains the filter string (case-insensitive).\r\n * The filter predicate can be a function or a string representing the property name to filter.\r\n */\r\n public readonly filterBy = input(noopFilter, {\r\n transform: filterPredicateAttribute\r\n });\r\n\r\n /**\r\n * A function that uniquely identifies each item in the list.\r\n * If set to a function, it will be called with the index and item as arguments to generate the unique id.\r\n * If set to a string, it will be used as the property name to extract the unique id from each item.\r\n * Two predifined trackBy options are available:\r\n * - '@index': uses the index of the item as its unique id.\r\n * - '@item': uses the item itself as its unique id.\r\n * @example\r\n * trackBy=\"@index\"\r\n * trackBy=\"@item\"\r\n * trackBy=\"objectFieldName\"\r\n * [trackBy]=\"customTrackByFunction\"\r\n * @default trackByIndex\r\n */\r\n public readonly trackBy = input(trackByIndex, {\r\n transform: TrackByAttribute\r\n });\r\n\r\n /**\r\n * CSS class or classes to apply to the list container.\r\n * Default is undefined.\r\n */\r\n public readonly itemClass = input((item) => ['ng0-list-item'], {\r\n transform: CssClassAttribute\r\n });\r\n\r\n /**\r\n * Defines the focus behavior of the list component.\r\n * - 'none': No keyboard interaction is possible. The list cannot be focused.\r\n * - 'roving': Roving tabindex is enabled. The list can be focused and the active item is tabbable.\r\n * - 'activeDescendant': The list can be focused, but no item is tabbable. The active item is indicated using aria-activedescendant.\r\n * @default 'activeDescendant'.\r\n */\r\n public readonly focus = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n /**\r\n * A function that generates unique ids for each item in the list.\r\n * If set to a function, it will be called with the item as an argument to generate the id.\r\n * If set to undefined, no ids will be generated for the items.\r\n * @default undefined\r\n */\r\n public readonly idGenerator = input(undefined, {\r\n transform: IdGeneratorAttribute\r\n });\r\n\r\n /**\r\n * Event emitted when the selection state of an item changes by user interaction.\r\n */\r\n @Output() public readonly selectionChange = new EventEmitter<ListSelectionChangeEvent>();\r\n\r\n _uuid: number;\r\n\r\n constructor() {\r\n this._uuid = ++uuid;\r\n\r\n effect(() => {\r\n let source = this.source();\r\n source.load(new DataRequest()).subscribe(res => {\r\n untracked(() => {\r\n this._activeItem.set(undefined);\r\n this._sourceItems.set(res.data);\r\n this._findAndSelectItems();\r\n })\r\n });\r\n })\r\n }\r\n\r\n /**\r\n * Indicates whether an item is active.\r\n * @param item \r\n * @returns \r\n */\r\n public isActive(item: ListItemComponent): boolean {\r\n return item === this._activeItem();\r\n }\r\n\r\n /**\r\n * Indicates whether the given value is selected.\r\n * @param item \r\n * @returns \r\n */\r\n public isSelected(value: any): boolean {\r\n return this._selectedValues.has(value);\r\n }\r\n\r\n /**\r\n * Selects the given value.\r\n * @param item \r\n */\r\n public select(value: any): void {\r\n if (!this._selectedValues.has(value())) {\r\n this._selectedValues.add(value());\r\n this._changeCallback?.(this._value());\r\n }\r\n }\r\n\r\n /**\r\n * Deselects the given value.\r\n * @param item \r\n */\r\n public deselect(value: any): void {\r\n this._selectedValues.delete(value);\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the given value.\r\n * @param item\r\n */\r\n public toggle(value: any): void {\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n }\r\n }\r\n\r\n /**\r\n * Deselects all items in the list.\r\n */\r\n public deselectAll(): void {\r\n this._selectedValues.clear();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Selects all items in the list. Only applicable in multiple selection mode.\r\n */\r\n public selectAll(): void {\r\n if (this.multiple()) {\r\n this._selectedValues.clear();\r\n this._sourceItems().forEach(i => this._selectedValues.add(i));\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n throw new Error('selectAll is only available in multiple selection mode.');\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.multiple()) {\r\n if (value === null || value === undefined) {\r\n value = [];\r\n } else if (!Array.isArray(value)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n this._findAndSelectItems();\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._changeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._touchCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n protected _handleUserSelection(item: ListItemComponent) {\r\n let value = item.value();\r\n this._activeItem.set(item);\r\n\r\n if (this.multiple()) {\r\n if (this.isSelected(value)) {\r\n this._selectedValues.delete(value);\r\n } else {\r\n this._selectedValues.add(value);\r\n }\r\n } else {\r\n this._selectedValues.clear();\r\n this._selectedValues.add(value);\r\n }\r\n\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n this.selectionChange.emit({\r\n item: item,\r\n list: this,\r\n });\r\n\r\n this._changeDetector.detectChanges();\r\n }\r\n\r\n protected _showLoadingSppiner = computed(() => {\r\n let source = this.source();\r\n return source.isLoading() && source.type == 'remote';\r\n });\r\n\r\n private _findAndSelectItems(): void {\r\n let value = this._value();\r\n let compareBy = this.compareBy();\r\n let findAndSelect = (v: any) => {\r\n let index = this._sourceItems().findIndex(i => compareBy(i, v));\r\n if (index > -1) {\r\n let item = this._sourceItems().at(index)!;\r\n this._selectedValues.add(item);\r\n }\r\n };\r\n\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(v => findAndSelect(v));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n private _updateValue(): void {\r\n if (this.multiple()) {\r\n let values: any[] = [];\r\n this._selectedValues.forEach(v => {\r\n values.push(this.writeBy()(v));\r\n });\r\n this._value.set(values);\r\n } else {\r\n if (this._selectedValues.size > 0) {\r\n let first = this._selectedValues.values().next().value;\r\n this._value.set(this.writeBy()(first));\r\n } else {\r\n this._value.set(undefined);\r\n }\r\n }\r\n }\r\n\r\n private _hostAriaActiveDescendant = computed(() => {\r\n if (this._activeItem() && !this._isDisabled() && this.focus() == 'activeDescendant') {\r\n return this._activeItem()!.id();\r\n }\r\n\r\n return undefined;\r\n });\r\n\r\n private _hostTabIndex = computed(() => {\r\n let isDisabled = this._isDisabled(); // track _isDisabled\r\n let activeItem = this._activeItem(); // track _activeItem\r\n\r\n if (isDisabled) {\r\n return undefined;\r\n }\r\n\r\n switch (this.focus()) {\r\n case 'none':\r\n return undefined;\r\n case 'activeDescendant':\r\n return 0;\r\n case 'roving':\r\n return activeItem ? undefined : 0;\r\n }\r\n });\r\n\r\n @HostListener('click')\r\n private _onHostClick() {\r\n // if (this.focus() != 'none') {\r\n // this.elementRef.nativeElement.focus();\r\n // }\r\n }\r\n\r\n @HostListener('blur')\r\n private _onHostBlur() {\r\n this._touchCallback?.();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private _onKeydown(e: KeyboardEvent) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let visibleItemsCount = this._visibleItems.length;\r\n if (visibleItemsCount == 0) {\r\n return;\r\n }\r\n\r\n let activeItemindex = this._visibleItems.toArray().findIndex(i => i === this._activeItem());\r\n console.log(this._activeItem(), activeItemindex)\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (activeItemindex == -1) {\r\n const first = this._visibleItems.get(0);\r\n this._activeItem.set(first);\r\n } else if (activeItemindex < visibleItemsCount - 1) {\r\n const next = this._visibleItems.get(activeItemindex + 1);\r\n this._activeItem.set(next);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (activeItemindex == -1) {\r\n const last = this._visibleItems.get(visibleItemsCount - 1);\r\n this._activeItem.set(last);\r\n } else if (activeItemindex > 0) {\r\n const previous = this._visibleItems.get(activeItemindex - 1);\r\n this._activeItem.set(previous);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Enter':\r\n if (activeItemindex > -1) {\r\n this._handleUserSelection(this._visibleItems.get(activeItemindex)!);\r\n }\r\n break;\r\n case 'Home':\r\n const first = this._visibleItems.get(0);\r\n this._activeItem.set(first);\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n const last = this._visibleItems.get(visibleItemsCount - 1);\r\n this._activeItem.set(last);\r\n e.preventDefault();\r\n break;\r\n }\r\n\r\n if (this.focus() === 'roving') {\r\n this._activeItem()?.focus();\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Event emitted when the selection state of the list changes by user interaction.\r\n */\r\nexport interface ListSelectionChangeEvent {\r\n /**\r\n * The item that was selected or deselected.\r\n */\r\n readonly item: ListItemComponent;\r\n\r\n /**\r\n * The list component that emitted the event.\r\n */\r\n readonly list: ListComponent\r\n}\r\n","@let filter = filterBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n<ng0-list-item *ng0If=\"filter(item)\"\r\n #listItem=\"ng0ListItem\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [value]=\"item\"\r\n [ngClass]=\"itemClass()(item)\"\r\n (click)=\"_handleUserSelection(listItem);\">\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\nconst Items = [ListComponent]\r\n\r\n/**\r\n * List module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class ListModule { }\r\n","// export * from './types';\r\nexport * from './list.component';\r\nexport * from './list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootkit-ng0-components-list.mjs","sources":["../../../projects/ng0/components/list/list-item.ts","../../../projects/ng0/components/list/list.component.ts","../../../projects/ng0/components/list/list.component.html","../../../projects/ng0/components/list/list.module.ts","../../../projects/ng0/components/list/public-api.ts","../../../projects/ng0/components/list/bootkit-ng0-components-list.ts"],"sourcesContent":["import { inject, input, ElementRef, Directive } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\n/**\r\n * ListItem represents an individual item within a ListComponent.\r\n */\r\n@Directive({\r\n selector: 'ng0-list-item',\r\n exportAs: 'ng0ListItem',\r\n standalone: true,\r\n host: {\r\n '[attr.id]': 'id()',\r\n '[attr.tabIndex]': '_getTabIndex()'\r\n }\r\n})\r\nexport class ListItem {\r\n /**\r\n * The value associated with the item. This can be of any type.\r\n */\r\n public readonly value = input<any>();\r\n\r\n /**\r\n * The id of the item.\r\n */\r\n public readonly id = input<any>();\r\n\r\n /**\r\n * Reference to the parent list component\r\n */\r\n public readonly list = inject(ListComponent);\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Indicates whether the item is active.\r\n * @returns True if the item is active, false otherwise.\r\n */\r\n public isActive() {\r\n return this.list.isActive(this);\r\n }\r\n\r\n /**\r\n * Indicates whether the item is selected.\r\n * @returns True if the item is selected, false otherwise.\r\n */\r\n public isSelected() {\r\n return this.list.isSelected(this.value());\r\n }\r\n\r\n /**\r\n * Selects the item.\r\n * @returns \r\n */\r\n public select() {\r\n return this.list.select(this.value());\r\n }\r\n\r\n /**\r\n * Deselects the item.\r\n * @returns \r\n */\r\n public deselect() {\r\n this.list.deselect(this);\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the item.\r\n * @returns void\r\n */\r\n public toggle() {\r\n this.list.toggle(this.value());\r\n }\r\n\r\n // /**\r\n // * Indicates whether the item is disabled. Default is false.\r\n // */\r\n // public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Scrolls the item into view within its parent container.\r\n * @param position The vertical alignment of the item after scrolling.\r\n * Can be 'start', 'center', 'end', or 'nearest'.\r\n * Default is 'nearest'.\r\n * @param behavior The scrolling behavior.\r\n */\r\n public scrollIntoView(position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n this.elementRef.nativeElement.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Sets focus on the item.\r\n */\r\n public focus() {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n\r\n private _getTabIndex() {\r\n let focus = this.list.focusMode();\r\n // if (this.list.isDisabled()) {\r\n // return undefined;\r\n // }\r\n\r\n if (focus == 'none' || focus == 'activeDescendant') {\r\n return undefined;\r\n } else {\r\n // focus: roving\r\n return this.isActive() ? 0 : -1\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, input, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, EventEmitter, Output, computed, ViewChildren, QueryList, ViewEncapsulation, ViewContainerRef, HostBinding, OnInit, AfterViewInit, untracked, model, Renderer2 } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike } from '@bootkit/ng0/data';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { objectFormatterAttribute, defaultFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItem } from \"./list-item\";\r\nimport {\r\n CssClassAttribute, defaultEqualityComparer, equalityComparerAttribute, valueWriterAttribute,\r\n defaultValueWriter, filterPredicateAttribute, noopFilter, IdGeneratorAttribute, TrackByAttribute, trackByIndex, IfDirective\r\n} from '@bootkit/ng0/common';\r\n\r\n/** \r\n * ListComponent is a versatile component that displays a list of items with support for single or multiple selection,\r\n * custom item templates, filtering, and keyboard navigation.\r\n */\r\n@Component({\r\n selector: 'ng0-list, ng0-select-list',\r\n exportAs: 'ng0List',\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n IfDirective,\r\n ListItem\r\n ],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ListComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-list-loading]': 'source().isLoading()',\r\n '[attr.aria-activedescendant]': '_hostAriaActiveDescendant()',\r\n '[attr.disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.aria-disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.tabindex]': '_hostTabIndex()',\r\n }\r\n})\r\nexport class ListComponent implements ControlValueAccessor {\r\n private _localizationService = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n private _changeCallback?: (value: any) => void;\r\n private _touchCallback?: () => void;\r\n private readonly _selectedItems = new Set<any>();\r\n\r\n protected readonly _sourceItems = signal<any[]>([]);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\r\n protected readonly _activeItem = signal<ListItem | undefined>(undefined);\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n private readonly _value = signal<any>(undefined);\r\n private _renderer = inject(Renderer2);\r\n\r\n /**\r\n * A list of all visible list items.\r\n */\r\n @ViewChildren(ListItem) public readonly listItems?: QueryList<ListItem>;\r\n\r\n /**\r\n * Reference to the host element\r\n */\r\n public elementRef = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showSelectionIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * A comparer to compare items for selection.\r\n * Default uses strict equality (===).\r\n */\r\n public readonly compareBy = input(defaultEqualityComparer, {\r\n transform: equalityComparerAttribute\r\n });\r\n\r\n /**\r\n * A fromatter to convert each item to a string for display.\r\n * Default converts the item to a string using its toString method.\r\n */\r\n public readonly formatBy = input(defaultFormatter, {\r\n transform: objectFormatterAttribute(this._localizationService.get())\r\n });\r\n\r\n /**\r\n * Custom value writer to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueWriter, {\r\n transform: valueWriterAttribute\r\n });\r\n\r\n /**\r\n * Custom filter function to filter items.\r\n * Default is a noop filter that does not filter any items.\r\n */\r\n public readonly filterBy = input(noopFilter, {\r\n transform: filterPredicateAttribute\r\n });\r\n\r\n /**\r\n * A function that uniquely identifies each item in the list.\r\n * If set to a function, it will be called with the index and item as arguments to generate the unique id.\r\n * If set to a string, it will be used as the property name to extract the unique id from each item.\r\n * Two predifined trackBy options are available:\r\n * - '@index': uses the index of the item as its unique id.\r\n * - '@item': uses the item itself as its unique id.\r\n * @example\r\n * trackBy=\"@index\"\r\n * trackBy=\"@item\"\r\n * trackBy=\"objectFieldName\"\r\n * [trackBy]=\"customTrackByFunction\"\r\n * @default trackByIndex\r\n */\r\n public readonly trackBy = input(trackByIndex, {\r\n transform: TrackByAttribute\r\n });\r\n\r\n /**\r\n * CSS class or classes to apply to the list container.\r\n * Default is undefined.\r\n */\r\n public readonly itemClass = input(undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n /**\r\n * Defines the focus behavior of the list component.\r\n * - 'none': No keyboard interaction is possible. The list cannot be focused.\r\n * - 'roving': Roving tabindex is enabled. The list can be focused and the active item is tabbable.\r\n * - 'activeDescendant': The list can be focused, but no item is tabbable. The active item is indicated using aria-activedescendant.\r\n * @default 'activeDescendant'.\r\n */\r\n public readonly focusMode = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n /**\r\n * A function that generates unique ids for each item in the list.\r\n * If set to a function, it will be called with the item as an argument to generate the id.\r\n * If set to undefined, no ids will be generated for the items.\r\n * @default undefined\r\n */\r\n public readonly idGenerator = input(undefined, {\r\n transform: IdGeneratorAttribute\r\n });\r\n\r\n /**\r\n * Event emitted when the selection state of an item changes by user interaction.\r\n */\r\n @Output() public readonly itemSelect = new EventEmitter<ListItemSelectEvent>();\r\n\r\n /**\r\n * The template to use for each item in the list.\r\n */\r\n public readonly itemTemplate = input<TemplateRef<any> | undefined>(undefined);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.source().load(new DataRequest()).subscribe(res => {\r\n untracked(() => {\r\n this._activeItem.set(undefined);\r\n this._sourceItems.set(res.data);\r\n this._updateSelectedItems();\r\n this._activateFirstSelectedItem();\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Indicates whether an item is active.\r\n * @param item \r\n * @returns \r\n */\r\n public isActive(item: ListItem): boolean {\r\n return item === this._activeItem();\r\n }\r\n\r\n /**\r\n * Indicates whether the given value is selected.\r\n * @param item \r\n * @returns \r\n */\r\n public isSelected(value: any): boolean {\r\n return this._selectedItems.has(value);\r\n }\r\n\r\n /**\r\n * Selects the given value.\r\n * @param item \r\n */\r\n public select(value: any): void {\r\n if (this.multiple()) {\r\n if (!this._selectedItems.has(value)) {\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value())\r\n }\r\n } else {\r\n this._selectedItems.clear();\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value())\r\n }\r\n }\r\n\r\n /**\r\n * Deselects the given value.\r\n * @param item \r\n */\r\n public deselect(value: any): void {\r\n this._selectedItems.delete(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the given value.\r\n * @param item\r\n */\r\n public toggle(value: any): void {\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n }\r\n }\r\n\r\n /**\r\n * Deselects all items in the list.\r\n */\r\n public deselectAll(): void {\r\n this._selectedItems.clear();\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Selects all items in the list. Only applicable in multiple selection mode.\r\n */\r\n public selectAll(): void {\r\n if (this.multiple()) {\r\n this._selectedItems.clear();\r\n this._sourceItems().forEach(i => this._selectedItems.add(i));\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n } else {\r\n throw new Error('selectAll is only available in multiple selection mode.');\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value(s) of the list.\r\n */\r\n public get value(): ReadonlyArray<any | any[]> {\r\n return this._value();\r\n }\r\n\r\n /**\r\n * Gets the current items in the list.\r\n */\r\n public get items(): ReadonlyArray<any[]> {\r\n return this._sourceItems();\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.multiple()) {\r\n if (value === null || value === undefined) {\r\n value = [];\r\n } else if (!Array.isArray(value)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n this._updateSelectedItems();\r\n this._activateFirstSelectedItem();\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._changeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._touchCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n protected _handleUserSelection(item: ListItem, index: number) {\r\n let value = item.value();\r\n\r\n if (this.multiple()) {\r\n this.toggle(value);\r\n } else {\r\n this.select(value);\r\n }\r\n\r\n this._activeItem.set(item);\r\n this.itemSelect.emit({ value: item.value(), item: item, list: this });\r\n this._changeDetector.detectChanges();\r\n }\r\n\r\n protected _showLoadingSppiner = computed(() => {\r\n let source = this.source();\r\n return source.isLoading() && source.type == 'remote';\r\n });\r\n\r\n private _updateSelectedItems(): void {\r\n let value = this._value();\r\n let compareBy = this.compareBy();\r\n let findAndSelect = (v: any) => {\r\n let index = this._sourceItems().findIndex(i => compareBy(i, v));\r\n if (index > -1) {\r\n let item = this._sourceItems().at(index)!;\r\n this._selectedItems.add(item);\r\n }\r\n\r\n return index;\r\n };\r\n\r\n this._selectedItems.clear();\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(v => findAndSelect(v));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n }\r\n\r\n private _activateFirstSelectedItem(): void {\r\n if (this._selectedItems.size > 0) {\r\n let value = this._selectedItems.values().next().value;\r\n let item = this.listItems?.find(i => i.value() === value);\r\n if (item) {\r\n this._activeItem.set(item);\r\n }\r\n }\r\n }\r\n\r\n private _updateValue(): void {\r\n let value: any;\r\n\r\n if (this.multiple()) {\r\n let values: any[] = [];\r\n this._selectedItems.forEach(v => {\r\n values.push(this.writeBy()(v));\r\n });\r\n value = values;\r\n } else {\r\n if (this._selectedItems.size > 0) {\r\n let first = this._selectedItems.values().next().value;\r\n value = this.writeBy()(first);\r\n } else {\r\n value = undefined;\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n }\r\n\r\n private _hostAriaActiveDescendant = computed(() => {\r\n if (this._activeItem() && !this._isDisabled() && this.focusMode() == 'activeDescendant') {\r\n return this._activeItem()!.id();\r\n }\r\n\r\n return undefined;\r\n });\r\n\r\n private _hostTabIndex = computed(() => {\r\n let isDisabled = this._isDisabled(); // track the value\r\n let activeItem = this._activeItem(); // track the value\r\n\r\n if (isDisabled) {\r\n return undefined;\r\n }\r\n\r\n switch (this.focusMode()) {\r\n case 'none':\r\n return undefined;\r\n case 'activeDescendant':\r\n return 0;\r\n case 'roving':\r\n\r\n return activeItem ? undefined : 0;\r\n }\r\n });\r\n\r\n @HostListener('blur')\r\n private _onHostBlur() {\r\n this._touchCallback?.();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private _onKeydown(e: KeyboardEvent) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let listLength = this.listItems!.length;\r\n if (listLength == 0) {\r\n return;\r\n }\r\n\r\n let activeItem = this._activeItem();\r\n let activeItemindex = activeItem ? this.listItems!.toArray().findIndex(i => i === activeItem) : -1;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (activeItemindex < listLength - 1) {\r\n const next = this.listItems!.get(activeItemindex + 1);\r\n this._activeItem.set(next);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (activeItemindex == -1) {\r\n const last = this.listItems!.get(listLength - 1);\r\n this._activeItem.set(last);\r\n } else if (activeItemindex > 0) {\r\n const previous = this.listItems!.get(activeItemindex - 1);\r\n this._activeItem.set(previous);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Enter':\r\n if (activeItem) {\r\n this._handleUserSelection(activeItem, activeItemindex);\r\n }\r\n break;\r\n case 'Home':\r\n const first = this.listItems!.get(0);\r\n this._activeItem.set(first);\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n const last = this.listItems!.get(listLength - 1);\r\n this._activeItem.set(last);\r\n e.preventDefault();\r\n break;\r\n }\r\n\r\n this._activeItem()?.scrollIntoView('nearest', listLength > 100 ? 'instant' : 'smooth');\r\n if (this.focusMode() === 'roving') {\r\n this._activeItem()?.focus();\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Event emitted when the selection state of the list changes by user interaction.\r\n */\r\nexport interface ListItemSelectEvent {\r\n /**\r\n * The value of the item that was selected or deselected.\r\n */\r\n value: any;\r\n\r\n /**\r\n * The item that was selected or deselected.\r\n */\r\n readonly item: ListItem;\r\n\r\n /**\r\n * The list component that emitted the event.\r\n */\r\n readonly list: ListComponent\r\n}\r\n","@let filter = filterBy();\r\n@let formatter = formatBy();\r\n\r\n@for (item of _sourceItems(); track trackBy()($index, item)) {\r\n\r\n<ng0-list-item #listItem=\"ng0ListItem\"\r\n *ng0If=\"!filter || filter(item)\"\r\n [value]=\"item\"\r\n [id]=\"idGenerator()?.(item)\"\r\n [class.active]=\"isActive(listItem)\"\r\n [class.selected]=\"isSelected(item)\"\r\n [ngClass]=\"itemClass()?.(item)\"\r\n (click)=\"_handleUserSelection(listItem, $index);\">\r\n\r\n @if(itemTemplate() || _itemTemplate) {\r\n @let template = itemTemplate() || _itemTemplate;\r\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: {item: listItem, value: item}}\" />\r\n } @else {\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"isSelected(item)\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\">\r\n }\r\n\r\n {{formatter(item)}}\r\n }\r\n</ng0-list-item>\r\n}\r\n\r\n@if(_showLoadingSppiner()) {\r\n@if(_sourceItems().length == 0) {\r\n<div style=\"text-align: center; padding: 0.5rem 0;\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}@else {\r\n<div class=\"ng0-list-loading-cover\">\r\n <ng-container *ngTemplateOutlet=\"spinner\"></ng-container>\r\n</div>\r\n}\r\n}\r\n\r\n<ng-template #spinner>\r\n <div class=\"spinner-border spinner-sm text-primary ng0-list-loading-indicator\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\nconst Items = [ListComponent]\r\n\r\n/**\r\n * List module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class ListModule { }\r\n","// export * from './types';\r\nexport * from './list.component';\r\nexport * from './list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}