@bootkit/ng0 0.0.0-alpha.21 → 0.0.0-alpha.23

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.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, ElementRef, Renderer2, input, OnInit, DestroyRef, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, DOCUMENT, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike, ValueExtractorAttribute, defaultValueExtractor, stringFilter, FilterPredicate, FilterPredicateAttribute, BooleanValueComparerAttribute } from '@bootkit/ng0/data';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { _IdGenerator, CssClassLike, CssClassAttribute, IdGenerator, sequentialIdGenerator, } from '@bootkit/ng0/common';\r\nimport { ValueFormatterAttribute, defaultValueFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItem } from './types';\r\nimport { } from '@bootkit/ng0/data';\r\nimport { defaultBooleanValueComparer } from '@bootkit/ng0/data';\r\n\r\n/**\r\n * Select component that allows users to choose an option from a dropdown list.\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 imports: [\r\n CommonModule,\r\n OverlayModule,\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]': '_activeOptionIndex() > -1 ? (_items()[_activeOptionIndex()].id) : undefined',\r\n '[attr.disabled]': '_isDisabled()',\r\n '[attr.tabindex]': '_isDisabled() || focus() === \"none\" ? \"-1\" : \"0\"',\r\n '[attr.aria-disabled]': '_isDisabled()'\r\n }\r\n})\r\nexport class ListComponent implements OnInit, ControlValueAccessor {\r\n private _document = inject(DOCUMENT);\r\n private _ls = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n protected _value = signal<any>(undefined);\r\n private _onChangeCallback!: (value: any) => void;\r\n private _onTouchedCallback!: (value: any) => void;\r\n\r\n protected readonly _items = signal<ListItem[]>([]);\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n protected readonly _activeOptionIndex = signal<number>(-1);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\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 showIndicator = 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(defaultBooleanValueComparer, {\r\n transform: BooleanValueComparerAttribute\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(defaultValueFormatter, {\r\n transform: ValueFormatterAttribute(this._ls.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(defaultValueExtractor, {\r\n transform: ValueExtractorAttribute\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(stringFilter, {\r\n transform: FilterPredicateAttribute\r\n });\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) => undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n public readonly focus = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n public readonly idGenerator = input<IdGenerator | undefined>(sequentialIdGenerator('ng0-list-item-'));\r\n\r\n constructor(protected _el: ElementRef<HTMLDivElement>, private _renderer: Renderer2, private _destroyRef: DestroyRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this._loadItems();\r\n this._listenToDataSourceChanges();\r\n }\r\n\r\n /**\r\n * Sets an option as active\r\n */\r\n public active(index: number): void {\r\n if (index < 0) {\r\n throw Error();\r\n }\r\n\r\n this._activeOptionIndex.set(index);\r\n // this.scrollItemIntoView(this._activeOptionIndex(), 'nearest');\r\n }\r\n\r\n /**\r\n * Filters the list items based on the provided criteria.\r\n * @param params The filter parameters to apply.\r\n * @returns void\r\n */\r\n public filter(...params: any[]): void {\r\n let filterBy = this.filterBy();\r\n this._items().forEach(x => x.filtered = !filterBy(x.value, ...params));\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Clears any applied filters and shows all items in the list.\r\n * @returns void\r\n */\r\n public clearFilter(): void {\r\n this._items().forEach(x => x.filtered = false);\r\n }\r\n\r\n /**\r\n * Scrolls the item at the specified index into view within the dropdown list.\r\n * @param index The index of the item to scroll into view.\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 scrollItemIntoView(index: number, position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n let item = this._items()[index];\r\n let elm = this._document.getElementById(item.id) as HTMLUListElement;\r\n elm!.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Toggles the selection of an option by index\r\n */\r\n public toggleSelection(index: number) {\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0 || index < 0 || index > optionsCount - 1) {\r\n throw new Error('Index out of range');\r\n }\r\n\r\n let item = this._items()[index];\r\n let writeValueBy = this.writeBy();\r\n\r\n if (this.multiple()) {\r\n item.selected = !item.selected;\r\n let selectedValues = this._items().filter(x => x.selected).map(x => (x.value));\r\n this._value.set(selectedValues);\r\n } else {\r\n if (item.selected) {\r\n return;\r\n }\r\n let itemValue = writeValueBy(item.value);\r\n this._items().forEach(x => x.selected = false);\r\n item.selected = true;\r\n this._value.set(itemValue);\r\n }\r\n\r\n this._onChangeCallback(this._value());\r\n }\r\n\r\n writeValue(v: any): void {\r\n let value;\r\n\r\n if (this.multiple()) {\r\n if (Array.isArray(v)) {\r\n value = v;\r\n } else if (v === null || v === undefined) {\r\n value = [];\r\n } else {\r\n throw Error('Provide an array or null as the value ng0-list component');\r\n }\r\n } else {\r\n value = v;\r\n }\r\n\r\n this._value.set(value);\r\n\r\n // Update selection state of items\r\n let compareBy = this.compareBy();\r\n if (this.multiple()) {\r\n this._items().forEach(x => x.selected = (value as any[]).some(y => compareBy(x.value, y)));\r\n } else {\r\n this._items().forEach(x => x.selected = compareBy(x.value, value));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n protected _onKeydown(e: KeyboardEvent, firedByFilter: boolean = false) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0) {\r\n return;\r\n }\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (this._activeOptionIndex() < optionsCount - 1) {\r\n this.active(this._activeOptionIndex() + 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n if (this._activeOptionIndex() > 0) {\r\n this.active(this._activeOptionIndex()! - 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n\r\n case 'Enter':\r\n this.toggleSelection(this._activeOptionIndex());\r\n e.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n this.active(0);\r\n e.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n this.active(optionsCount - 1);\r\n e.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n private _loadItems() {\r\n var r = new DataRequest();\r\n this.source().load(r).pipe(takeUntilDestroyed(this._destroyRef)).subscribe(res => {\r\n this._insertItems(0, ...res.data);\r\n });\r\n }\r\n\r\n private _listenToDataSourceChanges() {\r\n this.source().change.subscribe(e => {\r\n let options = this._items();\r\n e.changes.forEach(change => {\r\n switch (change.type) {\r\n case 'insert':\r\n this._insertItems(change.index!, ...change.items);\r\n break;\r\n case 'replace':\r\n options[change.index].value = change.value;\r\n break;\r\n case 'remove':\r\n options.splice(change.index, change.count);\r\n }\r\n });\r\n\r\n // this._changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n private _insertItems(index?: number, ...items: any[]) {\r\n // let filter = this.filterBy()()\r\n let idGenerator = this.idGenerator()\r\n let compareBy = this.compareBy();\r\n let value = this._value();\r\n let isItemSelected = this.multiple() && Array.isArray(value) ?\r\n (item: any) => (value as any[]).some(x => compareBy(x.value, item)) :\r\n (item: any) => compareBy(value, item);\r\n\r\n var options = items.map(x => ({\r\n id: idGenerator ? idGenerator(x) : undefined,\r\n value: x,\r\n selected: isItemSelected(x),\r\n filtered: false,\r\n }) as ListItem)\r\n\r\n if (Number.isInteger(index)) {\r\n this._items().splice(index!, 0, ...options);\r\n } else {\r\n this._items().push(...options);\r\n }\r\n\r\n this._changeDetector.markForCheck();\r\n }\r\n}\r\n","@for (i of _items(); track $index) {\r\n@if(!i.filtered) {\r\n<div class=\"ng0-list-item\"\r\n [ngClass]=\"itemClass()(i)\"\r\n [attr.id]=\"i.id\"\r\n [class.ng0-list-item-active]=\"$index == _activeOptionIndex()\"\r\n [class.ng0-list-item-selected]=\"i.selected\"\r\n (click)=\"toggleSelection($index);\">\r\n\r\n @if(_itemTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_itemTemplate; context: { $implicit: i}\" />\r\n } @else {\r\n\r\n @if(showIndicator()) {\r\n <input class=\"form-check-input ng0-list-item-indicator\"\r\n [checked]=\"i.selected\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\"\r\n [attr.name]=\"i.id\"\r\n [attr.id]=\"i.id\">\r\n }\r\n\r\n {{formatBy()(i.value)}}\r\n\r\n }\r\n</div>\r\n}\r\n}","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.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, ElementRef, Renderer2, input, OnInit, DestroyRef, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, DOCUMENT, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, EventEmitter, Output, ViewEncapsulation, model, output, computed } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike } from '@bootkit/ng0/data';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport {\r\n CssClassAttribute, IdGenerator, sequentialIdGenerator, defaultEqualityComparer, equalityComparerAttribute, valueWriterAttribute,\r\n defaultValueWriter, FilterPredicate, filterPredicateAttribute,\r\n noopFilter\r\n} from '@bootkit/ng0/common';\r\nimport { objectFormatterAttribute, defaultObjectFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\n\r\n/**\r\n * Select component that allows users to choose an option from a dropdown list.\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 ],\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]': '_ariaActiveDescendant()',\r\n '[attr.disabled]': '_isDisabled()',\r\n '[attr.tabindex]': '_isDisabled() || focus() === \"none\" ? undefined : \"0\"',\r\n '[attr.aria-disabled]': '_isDisabled()'\r\n }\r\n})\r\nexport class ListComponent implements ControlValueAccessor {\r\n private _document = inject(DOCUMENT);\r\n private _ls = inject(LocalizationService);\r\n private _renderer = inject(Renderer2);\r\n private _destroyRef = inject(DestroyRef);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n private _value: any = undefined;\r\n private _changeCallback?: (value: any) => void;\r\n private _touchCallback?: (value: any) => void;\r\n private _selectedIndices = new Set<number>();\r\n\r\n protected readonly _items = signal<ListItem[]>([]);\r\n\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n protected readonly _activeOptionIndex = signal<number>(-1);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\r\n\r\n private _ariaActiveDescendant = computed(() => {\r\n if (this.focus() == 'activeDescendant' && this._activeOptionIndex() > -1 && this._items().length) {\r\n return this._items()[this._activeOptionIndex()].id;\r\n }\r\n return undefined;\r\n });\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._ls.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 * 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 * Custom id generator function to generate unique ids for each item.\r\n * Default generates sequential ids with the prefix 'ng0-list-item-'.\r\n * If set to undefined, no ids will be generated.\r\n * @default sequentialIdGenerator('ng0-list-item-')\r\n */\r\n public readonly idGenerator = input<IdGenerator>(sequentialIdGenerator('ng0-list-item-'));\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 constructor() {\r\n effect(() => {\r\n let source = this.source(); // track source\r\n this._activeOptionIndex.set(-1);\r\n this._selectedIndices.clear();\r\n this._loadItems();\r\n });\r\n }\r\n\r\n /**\r\n * Gets the items of the list component.\r\n * @returns A readonly array of the items in the list.\r\n */\r\n public items(): ReadonlyArray<ListItem> {\r\n return [...this._items()];\r\n }\r\n\r\n /**\r\n * Sets an option as active\r\n * @param index The index of the option to set as active.\r\n * @param scrollIntoView Whether to scroll the active option into view. Default is true.\r\n * @returns void\r\n */\r\n public active(index: number, scrollIntoView = true): void {\r\n if (index < 0 || index >= this._items().length) {\r\n throw Error('Index out of range');\r\n }\r\n\r\n this._activeOptionIndex.set(index);\r\n if (scrollIntoView) {\r\n this.scrollIntoView(this._activeOptionIndex(), 'nearest');\r\n }\r\n }\r\n\r\n /**\r\n * Selects an option by index\r\n * @param index The index of the option to select.\r\n * @returns void\r\n */\r\n public select(index: number) {\r\n this._verifyIndexRange(index);\r\n\r\n if (this._selectedIndices.has(index)) {\r\n return;\r\n } else {\r\n if (!this.multiple()) {\r\n this._selectedIndices.clear();\r\n }\r\n\r\n this._selectedIndices.add(index);\r\n }\r\n\r\n if (this.multiple()) {\r\n this._value = [];\r\n for (const idx of this._selectedIndices) {\r\n this._value.push(this.writeBy()(this._items()[idx].value));\r\n }\r\n } else {\r\n this._value = this.writeBy()(this._items()[index].value);\r\n }\r\n\r\n this._changeCallback?.(this._value);\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Deselects an option by index\r\n * @param index The index of the option to deselect.\r\n * @returns void\r\n */\r\n public deselect(index: number) {\r\n this._verifyIndexRange(index);\r\n\r\n if (this._selectedIndices.has(index)) {\r\n this._selectedIndices.delete(index);\r\n } else {\r\n return;\r\n }\r\n\r\n if (this.multiple()) {\r\n this._value = [];\r\n for (const idx of this._selectedIndices) {\r\n this._value.push(this.writeBy()(this._items()[idx].value));\r\n }\r\n } else {\r\n this._value = undefined;\r\n }\r\n\r\n this._changeCallback?.(this._value);\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Toggles the selection state of an option by index\r\n * @param index The index of the option to toggle.\r\n * @returns void\r\n */\r\n public toggle(index: number) {\r\n if (this.isSelected(index)) {\r\n this.deselect(index);\r\n } else {\r\n this.select(index);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if an option is selected.\r\n * @param index The index of the option to check.\r\n * @returns True if the option is selected, false otherwise.\r\n */\r\n public isSelected(index: number) {\r\n return this._selectedIndices.has(index);\r\n }\r\n\r\n /**\r\n * Checks if an option is active.\r\n * @param index The index of the option to check.\r\n * @returns True if the option is active, false otherwise.\r\n */\r\n public isActive(index: number) {\r\n return this._activeOptionIndex() === index;\r\n }\r\n\r\n /**\r\n * Sets the value of the list component.\r\n * @param value The value to set. Can be a single value or an array of values in multiple selection mode.\r\n */\r\n public set(value: any): void {\r\n this._setValue(value, true);\r\n }\r\n\r\n /**\r\n * Gets the currently selected indices.\r\n * @returns An array of the currently selected indices.\r\n * @description \r\n * - In single selection mode, the array will contain at most one item.\r\n * - In multiple selection mode, the array can contain multiple items.\r\n * - Changing the selection should be done using select(), deselect(), or toggle() methods to ensure proper event emission and state management.\r\n * - Direct manipulation of the returned array will not affect the component's state.\r\n */\r\n public selectedIndices(): ReadonlyArray<number> {\r\n return Array.from(this._selectedIndices);\r\n }\r\n\r\n /**\r\n * Scrolls the item at the specified index into view within the dropdown list.\r\n * @param index The index of the item to scroll into view.\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(index: number, position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n let item = this._items()[index];\r\n let elm = this._document.getElementById(item.id) as HTMLElement;\r\n elm!.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n writeValue(value: any): void {\r\n this._setValue(value, false);\r\n }\r\n\r\n private _setValue(value: any, fireCallback: boolean) {\r\n if (this.multiple() && value !== null && value !== undefined && !Array.isArray(value)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n\r\n let compareBy = this.compareBy();\r\n let findAndSelect = (v: any) => {\r\n let index = this._items().findIndex(i => compareBy(i.value, v));\r\n if (index > -1) {\r\n this._selectedIndices.add(index);\r\n }\r\n };\r\n\r\n this._selectedIndices.clear();\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(i => findAndSelect(i));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n\r\n this._value = value;\r\n this._changeDetector.markForCheck();\r\n if (fireCallback) {\r\n this._changeCallback?.(value);\r\n }\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 _getItemTabIndex(index: number) {\r\n let focus = this.focus();\r\n if (this._isDisabled() || focus == 'none' || focus == 'activeDescendant') {\r\n return undefined;\r\n } else {\r\n // roving\r\n return this._activeOptionIndex() === index ? 0 : -1\r\n }\r\n }\r\n\r\n protected _handleUserSelection(index: number, item: ListItem) {\r\n let selected: boolean;\r\n\r\n this.active(index)\r\n\r\n if (this.multiple() && this.isSelected(index)) {\r\n this.deselect(index);\r\n selected = false;\r\n } else {\r\n this.select(index);\r\n selected = true;\r\n }\r\n\r\n this.selectionChange.emit({\r\n value: item.value,\r\n index: index,\r\n selected: selected,\r\n selectedIndices: this.selectedIndices(),\r\n list: this,\r\n });\r\n }\r\n\r\n private _loadItems() {\r\n var r = new DataRequest();\r\n this.source().load(r).pipe(takeUntilDestroyed(this._destroyRef)).subscribe(res => {\r\n let items = this._createItems(res.data);\r\n this._items().push(...items);\r\n });\r\n\r\n // listen to changes\r\n this.source().change.subscribe(e => {\r\n let items = this._items();\r\n e.changes.forEach(change => {\r\n switch (change.type) {\r\n case 'push':\r\n this._items().push(...this._createItems(change.items));\r\n break;\r\n // case 'replace':\r\n // change.replacements.forEach(({ index, value }) => {\r\n // items[index] = { id: this.idGenerator()(value), value };\r\n // });\r\n // break;\r\n // case 'remove':\r\n // this._activeOptionIndex.set(-1);\r\n // change.indices.forEach(i => {\r\n // this.deselect(i);\r\n // items.splice(i, 1)\r\n // });\r\n // break;\r\n }\r\n\r\n this._changeDetector.markForCheck();\r\n });\r\n });\r\n }\r\n\r\n private _createItems(items: any[]) {\r\n let idGenerator = this.idGenerator()\r\n\r\n return items.map(x => ({\r\n id: idGenerator(x),\r\n value: x,\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('keydown', ['$event'])\r\n private _onKeydown(e: KeyboardEvent, firedByFilter: boolean = false) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0) {\r\n return;\r\n }\r\n\r\n let index = this._activeOptionIndex();\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (index < optionsCount - 1) {\r\n this.active(index + 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (index > 0) {\r\n this.active(index - 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Tab': // Go to next item if roving focus is enabled\r\n // if (this.focus() === 'roving' && index < optionsCount - 1) {\r\n // this.active(index + 1);\r\n // e.preventDefault();\r\n // }\r\n break;\r\n case 'Enter':\r\n if (index > -1) {\r\n this._handleUserSelection(index, this._items()[index]);\r\n }\r\n // e.preventDefault();\r\n break;\r\n case 'Home':\r\n this.active(0);\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n this.active(optionsCount - 1);\r\n e.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n private _verifyIndexRange(index: number) {\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0 || index < 0 || index > optionsCount - 1) {\r\n throw new Error('Index out of range');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Represents an item in the list.\r\n */\r\nexport interface ListItem {\r\n /**\r\n * Id of the item (if idGenerator is provided, otherwise undefined).\r\n */\r\n id: string,\r\n\r\n /**\r\n * Value of the item.\r\n */\r\n value: any,\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 * Index of the item that was selected or deselected.\r\n */\r\n readonly index: number;\r\n\r\n /**\r\n * The value of the item that was selected or deselected.\r\n */\r\n readonly value: any;\r\n\r\n /**\r\n * Indicates whether the item was selected (true) or deselected (false).\r\n */\r\n readonly selected: boolean;\r\n\r\n /**\r\n * The indices of all currently selected items.\r\n */\r\n readonly selectedIndices: ReadonlyArray<number>;\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 formatter = formatBy();\r\n@let filter = filterBy();\r\n\r\n\r\n@for (item of _items(); track item.id) {\r\n@let selected= isSelected($index);\r\n@let active= isActive($index);\r\n\r\n@if(filter(item)) {\r\n<div\r\n [ngClass]=\"itemClass()(item)\"\r\n [attr.id]=\"item.id\"\r\n [class.active]=\"active\"\r\n [class.selected]=\"selected\"\r\n [attr.tabIndex]=\"_getItemTabIndex($index)\"\r\n (click)=\"_handleUserSelection($index, item)\">\r\n\r\n @if(_itemTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_itemTemplate; context: { $implicit: {\r\n id: item.id,\r\n value: item.value,\r\n selected: selected, \r\n active: active,\r\n }}\" />\r\n } @else {\r\n\r\n @if(showSelectionIndicator()) {\r\n <input class=\"form-check-input ng0-list-selection-indicator\"\r\n tabindex=\"-1\"\r\n [checked]=\"selected\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\"\r\n [attr.name]=\"item.id\"\r\n [attr.id]=\"item.id\">\r\n }\r\n\r\n {{formatter(item.value)}}\r\n\r\n }\r\n</div>\r\n}\r\n}","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":";;;;;;;;;;AAYA;;AAEG;MAyBU,aAAa,CAAA;AACd,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC3C,MAAM,GAAQ,SAAS;AACvB,IAAA,eAAe;AACf,IAAA,cAAc;AACd,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAU;AAEzB,IAAA,MAAM,GAAG,MAAM,CAAa,EAAE,kDAAC;AAE/B,IAAA,WAAW,GAAG,MAAM,CAAU,KAAK,uDAAC;AACpC,IAAA,kBAAkB,GAAG,MAAM,CAAS,CAAC,CAAC,8DAAC;AACrB,IAAA,aAAa;AAE1C,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;QAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;AAC9F,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE;QACtD;AACA,QAAA,OAAO,SAAS;AACpB,IAAA,CAAC,iEAAC;AAEF;;AAEG;AACI,IAAA,UAAU,GAAG,MAAM,EAA0B,UAAuB,EAAC;AAE5E;;;;AAIG;AACa,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,yCACnC,SAAS,EAAE,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAA,CAAA,GAAA,CADoC;YAC1E,SAAS,EAAE,CAAC,IAAI,mBAAmB,CAAC,CAAC;AACxC,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;IACa,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAClC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADS;AACpC,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;IACa,sBAAsB,GAAG,KAAK,CAAC,KAAK,0DAChD,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADuB;AAClD,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEE;IACc,SAAS,GAAG,KAAK,CAAC,uBAAuB,6CACrD,SAAS,EAAE,yBAAyB,EAAA,CAAA,GAAA,CADmB;AACvD,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,sBAAsB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACnD,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAA,CAAA,GAAA,CADE;YACrD,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACrD,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;IACa,OAAO,GAAG,KAAK,CAAC,kBAAkB,2CAC9C,SAAS,EAAE,oBAAoB,EAAA,CAAA,GAAA,CADiB;AAChD,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;IACa,QAAQ,GAAG,KAAK,CAAC,UAAU,4CACvC,SAAS,EAAE,wBAAwB,EAAA,CAAA,GAAA,CADM;AACzC,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACa,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EACzD,SAAS,EAAE,iBAAiB,EAAA,CAAA,GAAA,CAD+B;AAC3D,YAAA,SAAS,EAAE;AACd,SAAA,CAAA,CAAA,CAAC;AAEF;;;;;;AAMG;AACa,IAAA,KAAK,GAAG,KAAK,CAAyC,kBAAkB,iDAAC;AAEzF;;;;;AAKG;IACa,WAAW,GAAG,KAAK,CAAc,qBAAqB,CAAC,gBAAgB,CAAC,uDAAC;AAEzF;;AAEG;AACuB,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AAExF,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;YACR,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,UAAU,EAAE;AACrB,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;IACI,KAAK,GAAA;AACR,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B;AAEA;;;;;AAKG;AACI,IAAA,MAAM,CAAC,KAAa,EAAE,cAAc,GAAG,IAAI,EAAA;AAC9C,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;AAC5C,YAAA,MAAM,KAAK,CAAC,oBAAoB,CAAC;QACrC;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC;QAC7D;IACJ;AAEA;;;;AAIG;AACI,IAAA,MAAM,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAE7B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAClC;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;YACjC;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;QAC5D;QAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACvC;AAEA;;;;AAIG;AACI,IAAA,QAAQ,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAE7B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC;aAAO;YACH;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS;QAC3B;QAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACvC;AAIA;;;;AAIG;AACI,IAAA,MAAM,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxB;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACtB;IACJ;AAEA;;;;AAIG;AACI,IAAA,UAAU,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3C;AAEA;;;;AAIG;AACI,IAAA,QAAQ,CAAC,KAAa,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK;IAC9C;AAEA;;;AAGG;AACI,IAAA,GAAG,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;IAC/B;AAEA;;;;;;;;AAQG;IACI,eAAe,GAAA;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC5C;AAEA;;;;;;;AAOG;AACI,IAAA,cAAc,CAAC,KAAa,EAAE,QAAgC,EAAE,QAAyB,EAAA;QAC5F,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAgB;AAC/D,QAAA,GAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChE;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IAChC;IAEQ,SAAS,CAAC,KAAU,EAAE,YAAqB,EAAA;QAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACnF,YAAA,MAAM,KAAK,CAAC,8DAA8D,CAAC;QAC/E;AAEA,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAChC,QAAA,IAAI,aAAa,GAAG,CAAC,CAAM,KAAI;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,KAAe,CAAC,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;YACnD;QACJ;aAAO;YACH,aAAa,CAAC,KAAK,CAAC;QACxB;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QACnC,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QACjC;IACJ;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC7B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;AAEU,IAAA,gBAAgB,CAAC,KAAa,EAAA;AACpC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,kBAAkB,EAAE;AACtE,YAAA,OAAO,SAAS;QACpB;aAAO;;AAEH,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACvD;IACJ;IAEU,oBAAoB,CAAC,KAAa,EAAE,IAAc,EAAA;AACxD,QAAA,IAAI,QAAiB;AAErB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAElB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpB,QAAQ,GAAG,KAAK;QACpB;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAClB,QAAQ,GAAG,IAAI;QACnB;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;IACN;IAEQ,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,IAAI,WAAW,EAAE;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAG;YAC7E,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAChC,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;AAC/B,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AACvB,gBAAA,QAAQ,MAAM,CAAC,IAAI;AACf,oBAAA,KAAK,MAAM;AACP,wBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACtD;;;;;;;;;;;;;;AAeR,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QAEpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;AACnB,YAAA,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;AAClB,YAAA,KAAK,EAAE,CAAC;AACX,SAAA,CAAC,CAAC;IACP;IAGQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QACzC;IACJ;AAGQ,IAAA,UAAU,CAAC,CAAgB,EAAE,aAAA,GAAyB,KAAK,EAAA;QAC/D,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB;QAEJ,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM;AACvC,QAAA,IAAI,YAAY,IAAI,CAAC,EAAE;YACnB;QACJ;AAEA,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAErC,QAAA,QAAQ,CAAC,CAAC,GAAG;AACT,YAAA,KAAK,WAAW;AACZ,gBAAA,IAAI,KAAK,GAAG,YAAY,GAAG,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC1B;gBACA,CAAC,CAAC,cAAc,EAAE;gBAClB;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC1B;gBACA,CAAC,CAAC,cAAc,EAAE;gBAClB;YACJ,KAAK,KAAK;;;;;gBAKN;AACJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACZ,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1D;;gBAEA;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACd,CAAC,CAAC,cAAc,EAAE;gBAClB;AACJ,YAAA,KAAK,KAAK;AACN,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;gBAC7B,CAAC,CAAC,cAAc,EAAE;gBAClB;;IAEZ;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;QACnC,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM;AACvC,QAAA,IAAI,YAAY,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,YAAY,GAAG,CAAC,EAAE;AAC5D,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;QACzC;IACJ;uGAtcS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,2wDAbX,CAAC;AACR,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwBY,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtD7B,4qCAwCC,2qBDhBO,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAeP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAxBzB,SAAS;+BACI,UAAU,EAAA,QAAA,EACV,SAAS,EAAA,UAAA,EAGP,IAAI,mBACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EAEtC;wBACL,YAAY;AACf,qBAAA,EAAA,SAAA,EACU,CAAC;AACR,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE;AACV,yBAAA,CAAC,EAAA,IAAA,EACI;AACF,wBAAA,0BAA0B,EAAE,sBAAsB;AAClD,wBAAA,8BAA8B,EAAE,yBAAyB;AACzD,wBAAA,iBAAiB,EAAE,eAAe;AAClC,wBAAA,iBAAiB,EAAE,uDAAuD;AAC1E,wBAAA,sBAAsB,EAAE;AAC3B,qBAAA,EAAA,QAAA,EAAA,4qCAAA,EAAA,MAAA,EAAA,CAAA,onBAAA,CAAA,EAAA;wDAiBoC,aAAa,EAAA,CAAA;sBAAjD,YAAY;uBAAC,WAAW;gBAiGC,eAAe,EAAA,CAAA;sBAAxC;gBA2RO,YAAY,EAAA,CAAA;sBADnB,YAAY;uBAAC,OAAO;gBAQb,UAAU,EAAA,CAAA;sBADjB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AErbvC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC;AAE7B;;AAEG;MAKU,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAV,UAAU,EAAA,OAAA,EAAA,CATR,aAAa,CAAA,EAAA,OAAA,EAAA,CAAb,aAAa,CAAA,EAAA,CAAA;AASf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAHV,KAAK,CAAA,EAAA,CAAA;;2FAGL,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE;AACZ,iBAAA;;;ACXD;;ACAA;;AAEG;;;;"}